From 2a64b537e8e3bce9ce030585a3da17d48379c0ad Mon Sep 17 00:00:00 2001
From: sfd <sun.sunshine@163.com>
Date: 星期一, 26 五月 2025 15:04:45 +0800
Subject: [PATCH] 修改json类型转换错误

---
 aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderProcessServiceImpl.java |  251 ++++++++++++++++++++++++++++----------------------
 1 files changed, 141 insertions(+), 110 deletions(-)

diff --git a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderProcessServiceImpl.java b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderProcessServiceImpl.java
index d8b8a7a..1a13dac 100644
--- a/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderProcessServiceImpl.java
+++ b/aps-modules/aps-job/src/main/java/com/aps/job/service/impl/ApsWorkOrderProcessServiceImpl.java
@@ -23,6 +23,7 @@
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.client.RestTemplate;
 
 import java.util.ArrayList;
@@ -131,129 +132,147 @@
         return apsWorkOrderProcessMapper.deleteApsWorkOrderProcessById(id);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void getWorkOrderProcessFromU9(List<String> docNos) throws Exception {
+        List<String> noProcessDocNos = new ArrayList<>(docNos);
+        List<String> haveProcessDocNos = new ArrayList<>();
+        ApsWorkOrderJobLog apsWorkOrderJobLog = new ApsWorkOrderJobLog();
         // 璁剧疆璇锋眰澶�
         HttpHeaders headers = new HttpHeaders();
         headers.setContentType(MediaType.APPLICATION_JSON);
         // 璁剧疆璇锋眰浣�
-        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);
-        // 鍙戦�丳OST璇锋眰
-        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);
+        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);
+            // 鍙戦�丳OST璇锋眰
+            ResponseEntity<String> response = restTemplate.postForEntity(u9WorkOrderProcessUrl, request, String.class);
+            String responseBody = response.getBody();
+            JSONObject responseBodyJson = JSONObject.parseObject(responseBody);
+            apsWorkOrderJobLog.setRequestData(requestBody.toJSONString());
+            apsWorkOrderJobLog.setCreateTime(DateUtils.getNowDate());
+            apsWorkOrderJobLog.setBizType("work_order_process");
+            apsWorkOrderJobLog.setResult("SUCCESS");
+            apsWorkOrderJobLogService.insertApsWorkOrderJobLog(apsWorkOrderJobLog);
+            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 (int i = 0,size=jsonArray.size();i<size;i++) {
+                                JSONObject process = jsonArray.getJSONObject(i);
+                                if (nowDocNo == null) {
+                                    nowDocNo = process.getString("DocNo");
+                                    noProcessDocNos.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")) || i==size-1){
+                                    //鏇存柊宸ュ崟鍚屾宸ュ簭鐘舵��
+                                    noProcessDocNos.remove(nowDocNo);
+                                    haveProcessDocNos.add(nowDocNo);
+                                    nowDocNo = process.getString("DocNo");
+                                }
                             }
-                            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(!updateList.isEmpty()){
+                                apsWorkOrderProcessMapper.updateApsWorkOrderProcessBatch(updateList);
+                                apsWorkOrderJobLog.setResult("ok update "+updateList.size());
+                                apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate());
+                                apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
+                                logger.info("銆怳PDATE銆戣幏鍙栧苟鏇存柊U9宸ュ簭鎴愬姛锛併�愬伐鍗曞彿锛歿}銆�", docNos);
                             }
-                            if(!nowDocNo.equals(process.getString("DocNo"))){
-                                //鏇存柊宸ュ崟鍚屾宸ュ簭鐘舵��
-                                docNos.remove(nowDocNo);
-                                haveProcessDocNos.add(nowDocNo);
-                                nowDocNo = process.getString("DocNo");
+                            if(!addList.isEmpty()){
+                                apsWorkOrderProcessMapper.insertApsWorkOrderProcessBatch(addList);
+                                apsWorkOrderJobLog.setResult("ok insert "+addList.size());
+                                apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate());
+                                apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
+                                logger.info("銆怚NSERT銆戣幏鍙栧苟鎻掑叆U9宸ュ簭鎴愬姛锛併�愬伐鍗曞彿锛歿}銆�", docNos);
                             }
                         }
-                        if(!updateList.isEmpty()){
-                            apsWorkOrderProcessMapper.updateApsWorkOrderProcessBatch(updateList);
-                            apsWorkOrderJobLog.setResult("ok update "+updateList.size());
-                            apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate());
-                            apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
-                            logger.info("銆怳PDATE銆戣幏鍙栧苟鏇存柊U9宸ュ簭鎴愬姛锛併�愬伐鍗曞彿锛歿}銆�", docNos);
+                        if(jsonArray.size()<1000){
+                            break;
                         }
-                        if(!addList.isEmpty()){
-                            apsWorkOrderProcessMapper.insertApsWorkOrderProcessBatch(addList);
-                            apsWorkOrderJobLog.setResult("ok insert "+updateList.size());
-                            apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate());
-                            apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
-                            logger.info("銆怚NSERT銆戣幏鍙栧苟鎻掑叆U9宸ュ簭鎴愬姛锛併�愬伐鍗曞彿锛歿}銆�", docNos);
-                        }
-                        Map<String, Object> param = new HashMap<>();
-                        param.put("status", "1");
-                        param.put("docNos", haveProcessDocNos);
-                        apsWorkOrderJobMapper.updateApsWorkOrderJobPrccessStatus(param);
-                    }
-                    if(!docNos.isEmpty()){
-                        Map<String, Object> param = new HashMap<>();
-                        param.put("status", "2");
-                        param.put("docNos", docNos);
-                        apsWorkOrderJobMapper.updateApsWorkOrderJobPrccessStatus(param);
+                        pageIndex++;
+                    }else{
+                        apsWorkOrderJobLog.setResponseData(response.getBody());
+                        apsWorkOrderJobLog.setResult("fail");
+                        apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate());
+                        apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
+                        logger.error("銆怑RROR銆戞煡璇9宸ュ簭澶辫触锛併�愬伐鍗曞彿锛歿}, 閿欒鐮侊細{}锛岄敊璇俊鎭細{}銆�", docNos, responseBodyJson.getString("status"), responseBodyJson.getString("message"));
                     }
                 }else{
-                    apsWorkOrderJobLog.setResponseData(response.getBody());
-                    apsWorkOrderJobLog.setResult("fail");
-                    apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate());
-                    apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
-                    logger.error("銆怑RROR銆戞煡璇9宸ュ簭澶辫触锛併�愬伐鍗曞彿锛歿}, 閿欒鐮侊細{}锛岄敊璇俊鎭細{}銆�", docNos, responseBodyJson.getString("status"), responseBodyJson.getString("message"));
+                    logger.warn("銆怶ARNING銆戞湭鏌ヨ鍒癠9宸ュ簭锛併�愬伐鍗曞彿锛歿}銆�", docNos);
                 }
-            }else{
-                logger.warn("銆怶ARNING銆戞湭鏌ヨ鍒癠9宸ュ簭锛併�愬伐鍗曞彿锛歿}銆�", docNos);
+            } else {
+                apsWorkOrderJobLog.setResponseData(response.getBody());
+                apsWorkOrderJobLog.setResult("fail");
+                apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate());
+                apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
+                throw new Exception("銆怑RROR銆戞煡璇9宸ュ簭澶辫触锛併�愬伐鍗曞彿锛歿"+ docNos +"}, 閿欒鐮侊細{"+ responseBodyJson.getString("status") +"}锛岄敊璇俊鎭細{"+ responseBodyJson.getString("message") +"}銆�");
             }
-        } else {
-            apsWorkOrderJobLog.setResponseData(response.getBody());
-            apsWorkOrderJobLog.setResult("fail");
+        }
+        if(!haveProcessDocNos.isEmpty()){
+            Map<String, Object> param = new HashMap<>();
+            param.put("status", "1");
+            param.put("docNos", haveProcessDocNos);
+            apsWorkOrderJobMapper.updateApsWorkOrderJobPrccessStatus(param);
+        }
+        if(!noProcessDocNos.isEmpty()){
+            Map<String, Object> param = new HashMap<>();
+            param.put("status", "2");
+            param.put("docNos", noProcessDocNos);
+            apsWorkOrderJobMapper.updateApsWorkOrderJobPrccessStatus(param);
+            apsWorkOrderJobLog.setRequestData(noProcessDocNos.toString());
+            apsWorkOrderJobLog.setResponseData("");
+            apsWorkOrderJobLog.setResult("empty");
             apsWorkOrderJobLog.setUpdateTime(DateUtils.getNowDate());
             apsWorkOrderJobLogService.updateApsWorkOrderJobLog(apsWorkOrderJobLog);
-            throw new Exception("銆怑RROR銆戞煡璇9宸ュ簭澶辫触锛併�愬伐鍗曞彿锛歿"+ docNos +"}, 閿欒鐮侊細{"+ responseBodyJson.getString("status") +"}锛岄敊璇俊鎭細{"+ responseBodyJson.getString("message") +"}銆�");
         }
     }
 
     @Override
     public void syncWorkOrderProcessData(String status, Integer pageSize) {
         try{
+            Integer pageNum = 1;
             //鍒嗛〉鏌ヨ宸ュ崟
             ApsWorkOrderJob apsWorkOrderJob = new ApsWorkOrderJob();
             if("".equals(status)){
@@ -262,11 +281,11 @@
             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);
+                String lastDocNos = "";
+                while (true){
+                    PageHelper.startPage(1, pageSize);
                     List<ApsWorkOrderJob> pageList = apsWorkOrderJobMapper.selectApsWorkOrderJobList(apsWorkOrderJob);
+                    PageHelper.clearPage();
                     if(!pageList.isEmpty()){
                         long startTime = System.currentTimeMillis();
                         List<String> docNos = new ArrayList<>();
@@ -274,15 +293,18 @@
                             docNos.add(apsWorkOrderJob1.getDocNo());
                         }
                         getWorkOrderProcessFromU9(docNos);
-                        long endTime = System.currentTimeMillis(); // 璁板綍缁撴潫鏃堕棿
-                        long duration = endTime - startTime; // 璁$畻杩愯鏃堕棿
-                        System.out.println("杩愯鏃堕棿锛�"+ duration +"姣");
+                        if(String.join(",", docNos).equals(lastDocNos)){
+                            break;
+                        }
+                        lastDocNos = String.join(",", docNos);
                     }
+                    pageNum++;
                 }
             }else{
                 while (true){
                     PageHelper.startPage(1, pageSize);
                     List<ApsWorkOrderJob> pageList = apsWorkOrderJobMapper.selectApsWorkOrderJobList(apsWorkOrderJob);
+                    PageHelper.clearPage();
                     if(!pageList.isEmpty()){
                         long startTime = System.currentTimeMillis();
                         List<String> docNos = new ArrayList<>();
@@ -293,15 +315,13 @@
                         }
                         if(!docNos.isEmpty()){
                             getWorkOrderProcessFromU9(docNos);
-                            long endTime = System.currentTimeMillis(); // 璁板綍缁撴潫鏃堕棿
-                            long duration = endTime - startTime; // 璁$畻杩愯鏃堕棿
-                            System.out.println("杩愯鏃堕棿锛�"+ duration +"姣");
                         }else{
                             break;
                         }
                     }else{
                         break;
                     }
+                    pageNum++;
                 }
             }
         }catch (Exception e){
@@ -341,4 +361,15 @@
         }
         return true;
     }
+
+    @Override
+    public void syncProcessRouteData() {
+        apsWorkOrderProcessMapper.deleteApsProcessRoute();
+        apsWorkOrderProcessMapper.insertIntoApsProcessRoute();
+    }
+
+    @Override
+    public void deleteApsWorkOrderProcess() {
+        apsWorkOrderProcessMapper.deleteApsWorkOrderProcess();
+    }
 }

--
Gitblit v1.9.3