From de8ed61b527f4353b98a9b64d5f556cea6f670e7 Mon Sep 17 00:00:00 2001
From: huangjiayang <5265313@qq.com>
Date: 星期三, 30 四月 2025 10:44:11 +0800
Subject: [PATCH] 【UPDATE】合并定时任务,步零件、钣金、气柜管路的工单数据到业务表中、同步工序数据到工艺路线表中

---
 aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobServiceImpl.java |  294 +++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 229 insertions(+), 65 deletions(-)

diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobServiceImpl.java b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobServiceImpl.java
index ca8dfd4..fc2078b 100644
--- a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobServiceImpl.java
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderJobServiceImpl.java
@@ -1,26 +1,32 @@
 package com.aps.job.service.impl;
 
-import java.util.ArrayList;
-import java.util.List;
-
+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.job.domain.ApsWorkOrderJob;
 import com.aps.job.domain.ApsWorkOrderJobLog;
 import com.aps.job.mapper.ApsWorkOrderJobLogMapper;
+import com.aps.job.mapper.ApsWorkOrderJobMapper;
 import com.aps.job.param.ApsWorkOrderJobParam;
-import org.springframework.beans.factory.annotation.Value;
+import com.aps.job.service.IApsWorkOrderJobService;
+import lombok.extern.slf4j.Slf4j;
 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 com.aps.job.mapper.ApsWorkOrderJobMapper;
-import com.aps.job.domain.ApsWorkOrderJob;
-import com.aps.job.service.IApsWorkOrderJobService;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.client.RestTemplate;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * 宸ュ崟鍚屾Service涓氬姟灞傚鐞�
@@ -28,6 +34,7 @@
  * @author zhl
  * @date 2025-04-17
  */
+@Slf4j
 @Service
 public class ApsWorkOrderJobServiceImpl implements IApsWorkOrderJobService 
 {
@@ -121,77 +128,234 @@
     }
 
 
-    @Transactional
+    /**
+     * 鏍规嵁椤电爜鍏ㄩ噺鍚屾鏁版嵁
+     * */
     @Override
     public void batchInsertApsWorkOrderJob(ApsWorkOrderJobParam param) {
-        HttpHeaders headers = new HttpHeaders();
-        headers.setContentType(MediaType.APPLICATION_JSON);
+
         /*鏍规嵁鍙傛暟涓綋鍓嶉〉闈� 鍜� 瑕佺洰鏍囬〉闈� 杩涜寰幆*/
         for (int idx=param.getPageIndex(); idx<=param.getToPageIndex(); idx++){
-            /*璁剧疆褰撳墠椤甸潰*/
             param.setPageIndex(idx);
-            ApsWorkOrderJobLog log = new ApsWorkOrderJobLog();
-            String requestString = JSONObject.toJSONString(param);
-            HttpEntity<String> request = new HttpEntity<>(requestString, headers);
-            ResponseEntity<String> response = restTemplate.postForEntity(getWorkOrderUrl, request, String.class);
-            log.setRequestData(requestString);
-            log.setPageNum(Long.valueOf(param.getPageIndex()));
-            log.setPageCount(Long.valueOf(param.getPageSize()));
-            log.setCreateTime(DateUtils.getNowDate());
-            log.setBizType("work_order");
-            jobLogMapper.insertApsWorkOrderJobLog(log);
-            if (response.getStatusCode().is2xxSuccessful()) {
-                JSONObject responseBodyJson = JSONObject.parseObject(response.getBody());
-                if ("200".equals(responseBodyJson.getString("status"))) {
-                    JSONArray result = responseBodyJson.getJSONArray("data");
-                    if (result != null&& !result.isEmpty()) {
-                       int ct= batchSave(param, result);
-                       if(ct>0){
-                           log.setResult("ok save "+ct);
-                           jobLogMapper.updateApsWorkOrderJobLog(log);
-                           return;
-                       }else{
-
-                           log.setResult("ok save 0");
-                           jobLogMapper.updateApsWorkOrderJobLog(log);
-                           return;
-                       }
-                    }else {
-                        log.setResult("ok receive 0");
-                        jobLogMapper.updateApsWorkOrderJobLog(log);
-                        return;
-                    }
-                } else {
-                    log.setResponseData(response.getBody());
-                    log.setResult("fail");
-                    jobLogMapper.updateApsWorkOrderJobLog(log);
-                    return;
-                }
-            } else {
-                log.setResponseData(response.getBody());
-                log.setResult("fail");
-                jobLogMapper.updateApsWorkOrderJobLog(log);
+            if (!batchSaveByPager(param)) {
                 return;
             }
 
         }
     }
+    /**
+     * 鏍规嵁鏃堕棿娈垫瘡鏃ユ洿鏂帮紝椤甸潰鑷姩閫掑寰幆鍚屾鏁版嵁
+     * */
+    @Override
+    public void SyncWorkOrderByTime(){
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        LocalDateTime today = LocalDateTime.now();
+        LocalDate yesterday = LocalDate.now().minusDays(1);
+        LocalDateTime yesterdayMidnight = yesterday.atStartOfDay();
+        boolean continueFlag = true;
+        Integer currentPage = 1;
+        ApsWorkOrderJobParam param=new ApsWorkOrderJobParam();
+        param.setPageIndex(currentPage);
+        param.setDocState(Arrays.asList(0,1,2,4));
+        param.setBeginDate(yesterdayMidnight.format(formatter));
+        param.setEndDate(today.format(formatter));
+        param.setPageSize(100);
+        while (continueFlag){
+            param.setPageIndex(currentPage);
+            continueFlag= batchSaveByPager(param);
+            currentPage++;
+        }
+    }
 
     @Transactional
-    public int batchSave(ApsWorkOrderJobParam param, JSONArray result) {
-        List<ApsWorkOrderJob> jobs = new ArrayList<>();
-        for (int i = 0; i < result.size(); i++) {
-            ApsWorkOrderJob order = result.getObject(i, ApsWorkOrderJob.class);
-            JSONObject jsonObject = result.getJSONObject(i);
-            order.setOrderId(jsonObject.get("ID").toString());
-            order.setCreateTime(DateUtils.getNowDate());
-            order.setPageIndex(i);
-            order.setPageNum(param.getPageIndex());
-            order.setDelFlag("0");
-            order.setProcessStatus("0");
-            jobs.add(order);
+    @Override
+    public boolean batchSaveByPager(ApsWorkOrderJobParam param) {
+
+        String requestString = JSONObject.toJSONString(param);
+        ApsWorkOrderJobLog jobLog = new ApsWorkOrderJobLog();
+        jobLog.setRequestData(requestString);
+        jobLog.setPageNum(Long.valueOf(param.getPageIndex()));
+        jobLog.setPageCount(Long.valueOf(param.getPageSize()));
+        jobLog.setCreateTime(DateUtils.getNowDate());
+        jobLog.setBizType("work_order");
+        jobLogMapper.insertApsWorkOrderJobLog(jobLog);
+        log.info("work_order_request锛歿}", JSONObject.toJSONString(jobLog));
+        return requestOnePage(jobLog);
+    }
+    /**
+     * 璇锋眰涓�椤垫暟鎹繘琛屼繚瀛�
+     * */
+    @Transactional
+    @Override
+    public boolean requestOnePage(ApsWorkOrderJobLog jobLog) {
+        // 瀹氫箟甯搁噺锛岄伩鍏嶇‖缂栫爜
+        final String STATUS_KEY = "status";
+        final String DATA_KEY = "data";
+        final String SUCCESS_STATUS = "200";
+        /*璁剧疆鏃ュ織鏇存柊鏃堕棿锛孯etry鍚庝笌鍒涘缓鏃堕棿涓嶅悓*/
+        jobLog.setUpdateTime(DateUtils.getNowDate());
+        try {
+            // 璁剧疆璇锋眰澶�
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.APPLICATION_JSON);
+            HttpEntity<String> request = new HttpEntity<>(jobLog.getRequestData(), headers);
+
+            // 鍙戣捣HTTP璇锋眰
+            ResponseEntity<String> response;
+            try {
+                response = restTemplate.postForEntity(getWorkOrderUrl, request, String.class);
+            } catch (Exception e) {
+                // 鎹曡幏缃戠粶寮傚父鎴栧叾浠栧紓甯�
+                String msg = String.format("Error occurred while making HTTP request: {}", e.getMessage());
+                log.error(msg);
+                jobLog.setResponseData(msg);
+                jobLog.setResult("fail:"+e.getMessage());
+                jobLogMapper.updateApsWorkOrderJobLog(jobLog);
+                return false;
+            }
+            // 瑙f瀽鍝嶅簲浣�
+            String responseBody = response.getBody();
+            // 妫�鏌ュ搷搴旂姸鎬佺爜
+            if (!response.getStatusCode().is2xxSuccessful()) {
+                String msg = String.format("Non-2xx response received: {}", response.getStatusCode());
+                log.warn(msg);
+                jobLog.setResponseData(responseBody);
+                jobLog.setResult("fail");
+                jobLogMapper.updateApsWorkOrderJobLog(jobLog);
+                return false;
+            }
+
+            if (responseBody == null) {
+                String responseBodyIsNull = "Response body is null";
+                log.warn(responseBodyIsNull);
+                jobLog.setResponseData(responseBodyIsNull);
+                jobLog.setResult("fail");
+                jobLogMapper.updateApsWorkOrderJobLog(jobLog);
+                return false;
+            }
+
+            JSONObject responseBodyJson = JSONObject.parseObject(responseBody);
+            String status = responseBodyJson.getString(STATUS_KEY);
+            if (!SUCCESS_STATUS.equals(status)) {
+
+                log.warn("Unexpected status in response: {}", status);
+                jobLog.setResponseData(responseBody);
+                jobLog.setResult("fail");
+                jobLogMapper.updateApsWorkOrderJobLog(jobLog);
+                return false;
+            }
+
+            // 澶勭悊鏁版嵁
+            JSONArray result = responseBodyJson.getJSONArray(DATA_KEY);
+            if (result == null || result.isEmpty()) {
+                jobLog.setResult("ok receive 0");
+                jobLogMapper.updateApsWorkOrderJobLog(jobLog);
+                return false;
+            }
+
+            int ct = batchInsertApsWorkOrderJob(jobLog.getPageNum().intValue(), result);
+            jobLog.setResult("ok save " + ct);
+            jobLogMapper.updateApsWorkOrderJobLog(jobLog);
+            return true;
+
+        } catch (Exception e) {
+            // 鎹曡幏鎵�鏈夊紓甯稿苟璁板綍鏃ュ織
+            log.error("An unexpected error occurred: {}", e.getMessage(), e);
+            jobLog.setResponseData(null);
+            jobLog.setResult("fail");
+            jobLogMapper.updateApsWorkOrderJobLog(jobLog);
+            return false;
         }
-      return   apsWorkOrderJobMapper.batchInsertApsWorkOrderJob(jobs);
+    }
+
+
+    @Transactional(rollbackFor = Exception.class)
+    public int batchInsertApsWorkOrderJob(Integer pageNum, JSONArray result) {
+        // 杈圭晫鏉′欢妫�鏌�
+        if (result == null || result.isEmpty()) {
+            log.warn("Result is empty or null, no data to process.");
+            return 0;
+        }
+        if (pageNum == null) {
+            log.warn("PageNum is null, setting default value to 1.");
+            pageNum = 1;
+        }
+
+        List<ApsWorkOrderJob> jobs = new ArrayList<>();
+        List<String> orderIds = new ArrayList<>();
+
+        for (int i = 0; i < result.size(); i++) {
+            try {
+                JSONObject jsonObject = result.getJSONObject(i);
+                // 鏍¢獙蹇呰瀛楁鏄惁瀛樺湪
+                if (!jsonObject.containsKey("ID")) {
+                    log.error("Missing 'ID' field in result at index: {}", i);
+                    continue; // 璺宠繃鏃犳晥鏁版嵁
+                }
+
+                ApsWorkOrderJob order = result.getObject(i, ApsWorkOrderJob.class);
+                order.setId(IdUtil.getSnowflakeNextId());
+                order.setOrderId(jsonObject.getString("ID"));
+                order.setCreateTime(DateUtils.getNowDate());
+                order.setPageIndex(i);
+                order.setPageNum(pageNum);
+                order.setDelFlag("0");
+                order.setProcessStatus("0");
+                order.setOpStatus(jsonObject.getString("OpStatus"));
+                order.setNextOpName(jsonObject.getString("NextOpName"));
+                jobs.add(order);
+                orderIds.add(order.getOrderId());
+            } catch (Exception e) {
+                log.error("Error processing result at index {}: {}", i, e.getMessage(), e);
+                // 缁х画澶勭悊鍏朵粬鏁版嵁
+            }
+        }
+
+        if (!orderIds.isEmpty()) {
+            // 鍒犻櫎鏃ф暟鎹�
+            apsWorkOrderJobMapper.deleteWorkOrderJobByOrderIds(orderIds);
+        }
+
+        // 鎵归噺鎻掑叆鏂版暟鎹�
+        int affectedRows = apsWorkOrderJobMapper.batchInsertApsWorkOrderJob(jobs);
+
+        if (affectedRows != jobs.size()) {
+            log.warn("Not all records were inserted successfully. Expected: {}, Actual: {}", jobs.size(), affectedRows);
+        }
+
+        return affectedRows;
+    }
+
+
+    /**
+     * 鍚屾闆朵欢宸ュ崟淇℃伅
+     * */
+    @Transactional
+    @Override
+    public void syncPartOrderData() {
+        apsWorkOrderJobMapper.deleteAllPartPlan();
+        apsWorkOrderJobMapper.batchInsertPartPlan();
+    }
+
+    /**
+     * 鍚屾閽i噾宸ュ崟淇℃伅
+     * */
+    @Transactional
+    @Override
+    public void syncPlateOrderData() {
+        apsWorkOrderJobMapper.deleteAllPlatePlan();
+        apsWorkOrderJobMapper.batchInsertPlatePlan();
+    }
+
+
+    /**
+     * 鍚屾閽i噾宸ュ崟淇℃伅
+     * */
+    @Transactional
+    @Override
+    public void syncGasPipingData() {
+        apsWorkOrderJobMapper.deleteAllGasPiping();
+        apsWorkOrderJobMapper.batchInsertGasPiping();
     }
 
 }

--
Gitblit v1.9.3