huangjiayang
2025-04-21 2bdb234b82f18e09a1ab8fd9bd28b44fed9084be
aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderProcessServiceImpl.java
@@ -2,13 +2,19 @@
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.ApsWorkOrderJobMapper;
import com.aps.job.mapper.ApsWorkOrderProcessMapper;
import com.aps.job.service.IApsWorkOrderJobLogService;
import com.aps.job.service.IApsWorkOrderProcessService;
import jakarta.annotation.Resource;
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;
@@ -17,6 +23,7 @@
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;
@@ -35,11 +42,17 @@
    private final Logger logger = LoggerFactory.getLogger(ApsWorkOrderProcessServiceImpl.class);
    @Resource
    @Autowired
    private RestTemplate restTemplate;
    @Resource
    @Autowired
    private ApsWorkOrderProcessMapper apsWorkOrderProcessMapper;
    @Autowired
    private ApsWorkOrderJobMapper apsWorkOrderJobMapper;
    @Autowired
    private IApsWorkOrderJobLogService apsWorkOrderJobLogService;
    /**
     * 查询工单工序
@@ -121,19 +134,36 @@
        // 设置请求体
        JSONObject requestBody = new JSONObject();
        requestBody.put("DocList", docNos);
        requestBody.put("PageIndex", 1);
        requestBody.put("PageSize", 1000);
        // 创建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()) {
            String responseBody = response.getBody();
            if(StringUtils.isEmpty(responseBody)){
                JSONObject responseBodyJson = JSONObject.parseObject(responseBody);
                if(!"200".equals(responseBodyJson.getString("status"))){
            if(!StringUtils.isEmpty(responseBody)){
                if("200".equals(responseBodyJson.getString("status"))){
                    JSONArray jsonArray = responseBodyJson.getJSONArray("data");
                    if (jsonArray != null) {
                        jsonArray.forEach(jsonObject -> {
                            JSONObject process = (JSONObject) jsonObject;
                    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"));
@@ -153,24 +183,122 @@
                            apsWorkOrderProcess.setOpStatus(process.getString("OpStatus"));
                            apsWorkOrderProcess.setOrg(process.getString("Org"));
                            apsWorkOrderProcess.setOrgCode(process.getString("OrgCode"));
                            if(existsId!=null){
                            if (existsId != null) {
                                apsWorkOrderProcess.setId(existsId);
                                apsWorkOrderProcessMapper.updateApsWorkOrderProcess(apsWorkOrderProcess);
                                logger.info("【UPDATE】获取并更新U9工序成功!【工单号:{},工序号:{}】", docNos, apsWorkOrderProcess.getOpNum());
                            }else{
                                apsWorkOrderProcessMapper.insertApsWorkOrderProcess(apsWorkOrderProcess);
                                logger.info("【INSERT】获取并插入U9工序成功!【工单号:{}, 工序号:{}】", docNos, apsWorkOrderProcess.getOpNum());
                                apsWorkOrderProcess.setUpdateTime(DateUtils.getNowDate());
                                updateList.add(apsWorkOrderProcess);
                            } else {
                                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());
                            apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
                            logger.info("【UPDATE】获取并更新U9工序成功!【工单号:{}】", docNos);
                        }
                        if(!addList.isEmpty()){
                            apsWorkOrderProcessMapper.insertApsWorkOrderProcessBatch(addList);
                            apsWorkOrderJobLog.setResult("ok insert "+updateList.size());
                            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);
                    }
                    Map<String, Object> param = new HashMap<>();
                    param.put("status", "2");
                    param.put("docNos", docNos);
                    apsWorkOrderJobMapper.updateApsWorkOrderJobPrccessStatus(param);
                }else{
                    apsWorkOrderJobLog.setResponseData(response.getBody());
                    apsWorkOrderJobLog.setResult("fail");
                    apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
                    logger.error("【ERROR】查询U9工序失败!【工单号:{}, 错误码:{},错误信息:{}】", docNos, responseBodyJson.getString("status"), responseBodyJson.getString("message"));
                }
            }else{
                logger.warn("【WARNING】未查询到U9工序!【工单号:{}】", docNos);
            }
        } else {
            throw new Exception("【ERROR】获取U9工序失败!【工单号:"+ docNos +"】");
            apsWorkOrderJobLog.setResponseData(response.getBody());
            apsWorkOrderJobLog.setResult("fail");
            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(status==null){
                status = "0";
            }
            if(pageSize==null){
                pageSize = 100;
            }
            apsWorkOrderJob.setProcessStatus(status);
            // 补查之前没有查到工序的工单
            if("2".equals(status)){
                int total = apsWorkOrderJobMapper.selectApsWorkOrderJobList(apsWorkOrderJob).size();
                int pages = total % pageSize == 0 ? total / pageSize : total / pageSize + 1;
                for (int i = 1; i <= pages; i++){
                    PageHelper.startPage(i, 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);
                        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){
                            docNos.add(apsWorkOrderJob1.getDocNo());
                        }
                        getWorkOrderProcessFromU9(docNos);
                        long endTime = System.currentTimeMillis(); // 记录结束时间
                        long duration = endTime - startTime; // 计算运行时间
                        System.out.println("运行时间:"+ duration +"毫秒");
                    }else{
                        break;
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    }
    @Override
    public void insertIntoApsProcessRoute() {
        apsWorkOrderProcessMapper.insertIntoApsProcessRoute();
    }
    @Override
    public void deleteApsProcessRoute() {
        apsWorkOrderProcessMapper.deleteApsProcessRoute();
    }
}