package com.aps.job.service.impl;
|
|
import cn.hutool.core.util.IdUtil;
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.aps.common.core.utils.DateUtils;
|
import com.aps.common.core.utils.StringUtils;
|
import com.aps.job.domain.ApsWorkOrderJob;
|
import com.aps.job.domain.ApsWorkOrderJobLog;
|
import com.aps.job.domain.ApsWorkOrderProcess;
|
import com.aps.job.mapper.ApsWorkOrderJobLogMapper;
|
import com.aps.job.mapper.ApsWorkOrderJobMapper;
|
import com.aps.job.mapper.ApsWorkOrderProcessMapper;
|
import com.aps.job.service.IApsWorkOrderJobLogService;
|
import com.aps.job.service.IApsWorkOrderProcessService;
|
import com.github.pagehelper.PageHelper;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.http.HttpEntity;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.MediaType;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.client.RestTemplate;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* 工单工序Service业务层处理
|
*
|
* @author hjy
|
* @date 2025-04-17
|
*/
|
@Service
|
public class ApsWorkOrderProcessServiceImpl implements IApsWorkOrderProcessService
|
{
|
@Value("${u9.workOrderProcessUrl}")
|
private String u9WorkOrderProcessUrl;
|
|
private final Logger logger = LoggerFactory.getLogger(ApsWorkOrderProcessServiceImpl.class);
|
|
@Autowired
|
private RestTemplate restTemplate;
|
|
@Autowired
|
private ApsWorkOrderProcessMapper apsWorkOrderProcessMapper;
|
|
@Autowired
|
private ApsWorkOrderJobMapper apsWorkOrderJobMapper;
|
|
@Autowired
|
private IApsWorkOrderJobLogService apsWorkOrderJobLogService;
|
|
@Autowired
|
private ApsWorkOrderJobLogMapper apsWorkOrderJobLogMapper;
|
|
/**
|
* 查询工单工序
|
*
|
* @param id 工单工序主键
|
* @return 工单工序
|
*/
|
@Override
|
public ApsWorkOrderProcess selectApsWorkOrderProcessById(Long id)
|
{
|
return apsWorkOrderProcessMapper.selectApsWorkOrderProcessById(id);
|
}
|
|
/**
|
* 查询工单工序列表
|
*
|
* @param apsWorkOrderProcess 工单工序
|
* @return 工单工序
|
*/
|
@Override
|
public List<ApsWorkOrderProcess> selectApsWorkOrderProcessList(ApsWorkOrderProcess apsWorkOrderProcess)
|
{
|
return apsWorkOrderProcessMapper.selectApsWorkOrderProcessList(apsWorkOrderProcess);
|
}
|
|
/**
|
* 新增工单工序
|
*
|
* @param apsWorkOrderProcess 工单工序
|
* @return 结果
|
*/
|
@Override
|
public int insertApsWorkOrderProcess(ApsWorkOrderProcess apsWorkOrderProcess)
|
{
|
return apsWorkOrderProcessMapper.insertApsWorkOrderProcess(apsWorkOrderProcess);
|
}
|
|
/**
|
* 修改工单工序
|
*
|
* @param apsWorkOrderProcess 工单工序
|
* @return 结果
|
*/
|
@Override
|
public int updateApsWorkOrderProcess(ApsWorkOrderProcess apsWorkOrderProcess)
|
{
|
return apsWorkOrderProcessMapper.updateApsWorkOrderProcess(apsWorkOrderProcess);
|
}
|
|
/**
|
* 批量删除工单工序
|
*
|
* @param ids 需要删除的工单工序主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteApsWorkOrderProcessByIds(Long[] ids)
|
{
|
return apsWorkOrderProcessMapper.deleteApsWorkOrderProcessByIds(ids);
|
}
|
|
/**
|
* 删除工单工序信息
|
*
|
* @param id 工单工序主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteApsWorkOrderProcessById(Long id)
|
{
|
return apsWorkOrderProcessMapper.deleteApsWorkOrderProcessById(id);
|
}
|
|
@Override
|
public void getWorkOrderProcessFromU9(List<String> docNos) throws Exception {
|
// 设置请求头
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
// 设置请求体
|
int pageSize = 1000;
|
int pageIndex = 1;
|
while (true){
|
JSONObject requestBody = new JSONObject();
|
requestBody.put("DocList", docNos);
|
requestBody.put("PageIndex", pageIndex);
|
requestBody.put("PageSize", pageSize);
|
// 创建HttpEntity对象
|
HttpEntity<String> request = new HttpEntity<>(requestBody.toJSONString(), headers);
|
// 发送POST请求
|
ResponseEntity<String> response = restTemplate.postForEntity(u9WorkOrderProcessUrl, request, String.class);
|
String responseBody = response.getBody();
|
JSONObject responseBodyJson = JSONObject.parseObject(responseBody);
|
ApsWorkOrderJobLog apsWorkOrderJobLog = new ApsWorkOrderJobLog();
|
apsWorkOrderJobLog.setRequestData(requestBody.toJSONString());
|
apsWorkOrderJobLog.setCreateTime(DateUtils.getNowDate());
|
apsWorkOrderJobLog.setBizType("work_order_process");
|
apsWorkOrderJobLog.setResult("SUCCESS");
|
apsWorkOrderJobLogService.insertApsWorkOrderJobLog(apsWorkOrderJobLog);
|
List<String> haveProcessDocNos = new ArrayList<>();
|
if (response.getStatusCode().is2xxSuccessful()) {
|
if(!StringUtils.isEmpty(responseBody)){
|
if("200".equals(responseBodyJson.getString("status"))){
|
JSONArray jsonArray = responseBodyJson.getJSONArray("data");
|
if (!jsonArray.isEmpty()) {
|
List<ApsWorkOrderProcess> addList = new ArrayList<>();
|
List<ApsWorkOrderProcess> updateList = new ArrayList<>();
|
String nowDocNo = null;
|
for (Object o : jsonArray) {
|
JSONObject process = (JSONObject) o;
|
if (nowDocNo == null) {
|
nowDocNo = process.getString("DocNo");
|
docNos.remove(nowDocNo);
|
haveProcessDocNos.add(nowDocNo);
|
}
|
Map<String, Object> params = new HashMap<>();
|
params.put("docNo", process.getString("DocNo"));
|
params.put("opNum", process.getString("OpNum"));
|
params.put("opId", process.getString("OpID"));
|
Long existsId = apsWorkOrderProcessMapper.existsByDocNoOpNumOpId(params);
|
ApsWorkOrderProcess apsWorkOrderProcess = new ApsWorkOrderProcess();
|
apsWorkOrderProcess.setItemCode(process.getString("ItemCode"));
|
apsWorkOrderProcess.setDocNo(process.getString("DocNo"));
|
apsWorkOrderProcess.setOpNum(process.getString("OpNum"));
|
apsWorkOrderProcess.setOpId(process.getString("OpID"));
|
apsWorkOrderProcess.setProcessName(process.getString("StdOp"));
|
apsWorkOrderProcess.setStandardTime(process.getBigDecimal("StandardTime"));
|
apsWorkOrderProcess.setPalnStartDate(process.getDate("PlanStartDate"));
|
apsWorkOrderProcess.setPlanCompleteDate(process.getDate("PlanCompleteDate"));
|
apsWorkOrderProcess.setProcessQty(process.getBigDecimal("ProcessQty"));
|
apsWorkOrderProcess.setScrapQty(process.getBigDecimal("ScrapQty"));
|
apsWorkOrderProcess.setOpStatus(process.getString("OpStatus"));
|
apsWorkOrderProcess.setOrg(process.getString("Org"));
|
apsWorkOrderProcess.setOrgCode(process.getString("OrgCode"));
|
apsWorkOrderProcess.setWorkCenter(process.getString("WorkCenter"));
|
if (existsId != null) {
|
apsWorkOrderProcess.setId(existsId);
|
apsWorkOrderProcess.setUpdateBy("task");
|
apsWorkOrderProcess.setUpdateTime(DateUtils.getNowDate());
|
updateList.add(apsWorkOrderProcess);
|
} else {
|
apsWorkOrderProcess.setId(IdUtil.getSnowflakeNextId());
|
apsWorkOrderProcess.setCreateBy("task");
|
apsWorkOrderProcess.setCreateTime(DateUtils.getNowDate());
|
addList.add(apsWorkOrderProcess);
|
}
|
if(!nowDocNo.equals(process.getString("DocNo"))){
|
//更新工单同步工序状态
|
docNos.remove(nowDocNo);
|
haveProcessDocNos.add(nowDocNo);
|
nowDocNo = process.getString("DocNo");
|
}
|
}
|
if(!updateList.isEmpty()){
|
apsWorkOrderProcessMapper.updateApsWorkOrderProcessBatch(updateList);
|
apsWorkOrderJobLog.setResult("ok update "+updateList.size());
|
apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate());
|
apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
|
logger.info("【UPDATE】获取并更新U9工序成功!【工单号:{}】", docNos);
|
}
|
if(!addList.isEmpty()){
|
apsWorkOrderProcessMapper.insertApsWorkOrderProcessBatch(addList);
|
apsWorkOrderJobLog.setResult("ok insert "+updateList.size());
|
apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate());
|
apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
|
logger.info("【INSERT】获取并插入U9工序成功!【工单号:{}】", docNos);
|
}
|
Map<String, Object> param = new HashMap<>();
|
param.put("status", "1");
|
param.put("docNos", haveProcessDocNos);
|
apsWorkOrderJobMapper.updateApsWorkOrderJobPrccessStatus(param);
|
}else{
|
if(!docNos.isEmpty()){
|
Map<String, Object> param = new HashMap<>();
|
param.put("status", "2");
|
param.put("docNos", docNos);
|
apsWorkOrderJobMapper.updateApsWorkOrderJobPrccessStatus(param);
|
apsWorkOrderJobLog.setRequestData(requestBody.toJSONString());
|
apsWorkOrderJobLog.setResponseData(response.getBody());
|
apsWorkOrderJobLog.setResult("empty");
|
apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate());
|
apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
|
}
|
break;
|
}
|
if(jsonArray.size()<1000){
|
break;
|
}
|
pageIndex++;
|
}else{
|
apsWorkOrderJobLog.setResponseData(response.getBody());
|
apsWorkOrderJobLog.setResult("fail");
|
apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate());
|
apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
|
logger.error("【ERROR】查询U9工序失败!【工单号:{}, 错误码:{},错误信息:{}】", docNos, responseBodyJson.getString("status"), responseBodyJson.getString("message"));
|
}
|
}else{
|
logger.warn("【WARNING】未查询到U9工序!【工单号:{}】", docNos);
|
}
|
} else {
|
apsWorkOrderJobLog.setResponseData(response.getBody());
|
apsWorkOrderJobLog.setResult("fail");
|
apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate());
|
apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
|
throw new Exception("【ERROR】查询U9工序失败!【工单号:{"+ docNos +"}, 错误码:{"+ responseBodyJson.getString("status") +"},错误信息:{"+ responseBodyJson.getString("message") +"}】");
|
}
|
}
|
}
|
|
@Override
|
public void syncWorkOrderProcessData(String status, Integer pageSize) {
|
try{
|
//分页查询工单
|
ApsWorkOrderJob apsWorkOrderJob = new ApsWorkOrderJob();
|
if("".equals(status)){
|
status = "0";
|
}
|
apsWorkOrderJob.setProcessStatus(status);
|
// 补查之前没有查到工序的工单
|
if("2".equals(status)){
|
String lastDocNos = "";
|
while (true){
|
PageHelper.startPage(1, pageSize);
|
List<ApsWorkOrderJob> pageList = apsWorkOrderJobMapper.selectApsWorkOrderJobList(apsWorkOrderJob);
|
if(!pageList.isEmpty()){
|
long startTime = System.currentTimeMillis();
|
List<String> docNos = new ArrayList<>();
|
for (ApsWorkOrderJob apsWorkOrderJob1 : pageList){
|
docNos.add(apsWorkOrderJob1.getDocNo());
|
}
|
getWorkOrderProcessFromU9(docNos);
|
if(String.join(",", docNos).equals(lastDocNos)){
|
break;
|
}
|
lastDocNos = String.join(",", docNos);
|
long endTime = System.currentTimeMillis(); // 记录结束时间
|
long duration = endTime - startTime; // 计算运行时间
|
System.out.println("运行时间:"+ duration +"毫秒");
|
}
|
}
|
}else{
|
while (true){
|
PageHelper.startPage(1, pageSize);
|
List<ApsWorkOrderJob> pageList = apsWorkOrderJobMapper.selectApsWorkOrderJobList(apsWorkOrderJob);
|
if(!pageList.isEmpty()){
|
long startTime = System.currentTimeMillis();
|
List<String> docNos = new ArrayList<>();
|
for (ApsWorkOrderJob apsWorkOrderJob1 : pageList){
|
if(apsWorkOrderJob1.getDocNo()!=null){
|
docNos.add(apsWorkOrderJob1.getDocNo());
|
}
|
}
|
if(!docNos.isEmpty()){
|
getWorkOrderProcessFromU9(docNos);
|
long endTime = System.currentTimeMillis(); // 记录结束时间
|
long duration = endTime - startTime; // 计算运行时间
|
System.out.println("运行时间:"+ duration +"毫秒");
|
}else{
|
break;
|
}
|
}else{
|
break;
|
}
|
}
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
logger.error(e.getMessage());
|
}
|
}
|
|
@Override
|
public void insertIntoApsProcessRoute() {
|
apsWorkOrderProcessMapper.insertIntoApsProcessRoute();
|
}
|
|
@Override
|
public void deleteApsProcessRoute() {
|
apsWorkOrderProcessMapper.deleteApsProcessRoute();
|
}
|
|
@Override
|
public boolean retryRequestWorkOrderProcessByLogId(Long id) {
|
try {
|
ApsWorkOrderJobLog apsWorkOrderJobLog = apsWorkOrderJobLogMapper.selectApsWorkOrderJobLogById(id);
|
JSONObject requestBodyJson = JSONObject.parseObject(apsWorkOrderJobLog.getRequestData());
|
JSONArray docListArray = requestBodyJson.getJSONArray("DocList");
|
List<String> docNos = new ArrayList<>();
|
for (int i = 0; i < docListArray.size(); i++) {
|
if(docListArray.getString(i)!=null){
|
docNos.add(docListArray.getString(i));
|
}
|
}
|
if(!docNos.isEmpty()){
|
getWorkOrderProcessFromU9(docNos);
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
return false;
|
}
|
return true;
|
}
|
|
@Override
|
public void syncProcessRouteData() {
|
apsWorkOrderProcessMapper.deleteApsProcessRoute();
|
apsWorkOrderProcessMapper.insertIntoApsProcessRoute();
|
}
|
}
|