From a3ad909e75ddb7a6271d95704dc002cc70337fd5 Mon Sep 17 00:00:00 2001
From: 廖井涛 <2265517004@qq.com>
Date: 星期一, 27 十月 2025 11:07:45 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10105/r/ERP_override

---
 north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java |  292 +++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 207 insertions(+), 85 deletions(-)

diff --git a/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java b/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java
index cf45286..e02228a 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java
@@ -4,6 +4,7 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.TypeReference;
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.example.erp.common.AsyncQueryExecutor;
 import com.example.erp.tools.AreaComputed.*;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -21,6 +22,8 @@
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import javax.annotation.PreDestroy;
+import javax.annotation.Resource;
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.sql.Date;
@@ -51,23 +54,9 @@
     FlowCardMapper flowCardMapper;
     private ReportingWorkMapper reportingWorkMapper;
 
-    private static final ExecutorService EXECUTOR = new ThreadPoolExecutor(
-            4, 8, 60L, TimeUnit.SECONDS,
-            new LinkedBlockingQueue<>(100),
-            new ThreadFactory() {
-                private final ThreadFactory defaultFactory = Executors.defaultThreadFactory();
-                private int counter = 1;
+    @Resource
+    private AsyncQueryExecutor asyncExecutor;
 
-                @Override
-                public Thread newThread(Runnable r) {
-                    Thread thread = defaultFactory.newThread(r);
-                    thread.setName("damage-report-query-" + counter++);
-                    thread.setDaemon(true);
-                    return thread;
-                }
-            },
-            new ThreadPoolExecutor.CallerRunsPolicy()
-    );
 
     //涓婂伐搴忔姤宸ョ彮缁�
     private void mergeTeamsGroupsName( List<WorkInProgressDTO> dataList1,List<WorkInProgressDTO> dataList2) {
@@ -321,10 +310,37 @@
         return map;
     }
 
-    public Map<String, Object> crossProcessBreakingSv(Integer pageNum, Integer pageSize, List<String> selectDate, CrossProcessBreakingDTO crossProcessBreakingDTO) {
+//    public Map<String, Object> crossProcessBreakingSv(Integer pageNum, Integer pageSize, List<String> selectDate, CrossProcessBreakingDTO crossProcessBreakingDTO) {
+//        Integer offset = (pageNum - 1) * pageSize;
+//        String endDate = LocalDate.now().toString();
+//        String startDate = LocalDate.now().minusDays(15).toString();
+//        if (selectDate != null && selectDate.size() == 2) {
+//            if (!selectDate.get(0).isEmpty()) {
+//                startDate = selectDate.get(0);
+//            }
+//            if (!selectDate.get(1).isEmpty()) {
+//                endDate = selectDate.get(1);
+//            }
+//        }
+//        Map<String, Object> map = new HashMap<>();
+//        map.put("data", reportMapper.getProcessBreaking(offset, pageSize, startDate, endDate, crossProcessBreakingDTO));
+//        map.put("total", reportMapper.getProcessBreakingTotal(offset, pageSize, startDate, endDate, crossProcessBreakingDTO));
+//        List<String> list = new ArrayList<>();
+//        list.add(startDate);
+//        list.add(endDate);
+//        map.put("selectDate", list);
+//        return map;
+//    }
+
+    public Map<String, Object> crossProcessBreakingSv(Integer pageNum, Integer pageSize,
+                                                      List<String> selectDate,
+                                                      CrossProcessBreakingDTO crossProcessBreakingDTO) {
         Integer offset = (pageNum - 1) * pageSize;
+
+        // 榛樿鏃堕棿鑼冨洿锛氳繃鍘� 15 澶�
         String endDate = LocalDate.now().toString();
         String startDate = LocalDate.now().minusDays(15).toString();
+
         if (selectDate != null && selectDate.size() == 2) {
             if (!selectDate.get(0).isEmpty()) {
                 startDate = selectDate.get(0);
@@ -333,65 +349,171 @@
                 endDate = selectDate.get(1);
             }
         }
-        Map<String, Object> map = new HashMap<>();
-        map.put("data", reportMapper.getProcessBreaking(offset, pageSize, startDate, endDate, crossProcessBreakingDTO));
-        map.put("total", reportMapper.getProcessBreakingTotal(offset, pageSize, startDate, endDate, crossProcessBreakingDTO));
+
+        Map<String, Object> result = new HashMap<>();
+
+        // 浣跨敤寮傛绾跨▼姹�
+        String finalEndDate = endDate;
+        String finalStartDate = startDate;
+        CompletableFuture<List<CrossProcessBreakingDTO>> dataFuture = asyncExecutor.runAsync(() ->
+                reportMapper.getProcessBreaking(offset, pageSize, finalStartDate, finalEndDate, crossProcessBreakingDTO));
+
+        CompletableFuture<Map<String, Integer>> totalFuture = asyncExecutor.runAsync(() ->
+                reportMapper.getProcessBreakingTotal(offset, pageSize, finalStartDate, finalEndDate, crossProcessBreakingDTO));
+
+        // 绛夊緟涓や釜浠诲姟鎵ц瀹屾瘯
+        CompletableFuture.allOf(dataFuture, totalFuture).join();
+
+        try {
+            result.put("data", dataFuture.get());
+            result.put("total", totalFuture.get());
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("骞惰鏌ヨ寮傚父锛�" + e.getMessage(), e);
+        }
+
         List<String> list = new ArrayList<>();
         list.add(startDate);
         list.add(endDate);
-        map.put("selectDate", list);
-        return map;
+        result.put("selectDate", list);
+
+        return result;
     }
 
-    public Map<String, Object> workInProgressSv(Integer pageNum, Integer pageSize, String orderId, String inputProject, String selectProcesses, String optionVal, WorkInProgressDTO workInProgressDTO) {
+//    public Map<String, Object> workInProgressSv(Integer pageNum, Integer pageSize, String orderId, String inputProject, String selectProcesses, String optionVal, WorkInProgressDTO workInProgressDTO) {
+//        Integer offset = (pageNum - 1) * pageSize;
+//        if ("null".equals(orderId)) {
+//            orderId = "";
+//        }
+//        if ("null".equals(inputProject)) {
+//            inputProject = "";
+//        }
+//        if ("null".equals(optionVal)) {
+//            optionVal = ("");
+//        }
+//        if (selectProcesses.equals("all")){
+//            selectProcesses="";
+//        }
+//        String laminating = reportMapper.getLaminating(selectProcesses);
+//        Map<String, Object> map = new HashMap<>();
+//        List<WorkInProgressDTO> dataList2  =reportMapper.workInProgressMpdataList2(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO);
+//        if (optionVal.equals("1")){
+//            /* 鏍规嵁閿�鍞崟鍙锋眹鎬�*/
+//            List<WorkInProgressDTO> dataList1  =reportMapper.workInProgressOrderMpList1(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO);
+//            mergeTeamsGroupsName(dataList1, dataList2);
+//            map.put("data",dataList1);
+//            map.put("total" ,reportMapper.workInProgressOrderFootSum(offset, pageSize,orderId, inputProject, selectProcesses, workInProgressDTO));
+//        }else if(optionVal.equals("2")){
+//            /* 鏍规嵁娴佺▼鍗″彿姹囨��*/
+//            List<WorkInProgressDTO> dataList1  =reportMapper.workInProgressProcessMpList1(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO);
+//            mergeTeamsGroupsName(dataList1, dataList2);
+//            map.put("data",dataList1);
+//            map.put("total" ,reportMapper.workInProgressOrderFootSum(offset, pageSize,orderId, inputProject, selectProcesses, workInProgressDTO));
+//
+//        } else if (optionVal.equals("3")) {
+//
+//        } else {
+//            //娌℃湁閫夋嫨鍒嗙粍
+//            List<WorkInProgressDTO> dataList1  =reportMapper.workInProgressMpdataList1(offset, pageSize, orderId, inputProject, selectProcesses,laminating, workInProgressDTO);
+//            mergeTeamsGroupsName(dataList1, dataList2);
+//            map.put("data",dataList1);
+//            map.put("total" ,reportMapper.workInProgressOrderFootSum(offset, pageSize,orderId, inputProject, selectProcesses, workInProgressDTO));
+//
+//        }
+//        map.put("process", productionSchedulingMapper.selectProcess());
+//        return map;
+//    }
+
+    public Map<String, Object> workInProgressSv(
+            Integer pageNum, Integer pageSize,
+            String orderId, String inputProject, String selectProcesses,
+            String optionVal, WorkInProgressDTO workInProgressDTO) {
+
         Integer offset = (pageNum - 1) * pageSize;
-        if ("null".equals(orderId)) {
-            orderId = "";
-        }
-        if ("null".equals(inputProject)) {
-            inputProject = "";
-        }
-        if ("null".equals(optionVal)) {
-            optionVal = ("");
-        }
-        if (selectProcesses.equals("all")){
-            selectProcesses="";
-        }
+
+        if ("null".equals(orderId)) orderId = "";
+        if ("null".equals(inputProject)) inputProject = "";
+        if ("null".equals(optionVal)) optionVal = "";
+        if ("all".equals(selectProcesses)) selectProcesses = "";
+
         String laminating = reportMapper.getLaminating(selectProcesses);
-        Map<String, Object> map = new HashMap<>();
-        List<WorkInProgressDTO> dataList2  =reportMapper.workInProgressMpdataList2(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO);
-        if (optionVal.equals("1")){
-            /* 鏍规嵁閿�鍞崟鍙锋眹鎬�*/
-            //map.put("data", reportMapper.workInProgressOrderMp(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO));
-            List<WorkInProgressDTO> dataList1  =reportMapper.workInProgressOrderMpList1(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO);
-            mergeTeamsGroupsName(dataList1, dataList2);
-            map.put("data",dataList1);
-            // map.put("total", reportMapper.workInProgressOrderTotal(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO));
-            map.put("total" ,reportMapper.workInProgressOrderFootSum(offset, pageSize,orderId, inputProject, selectProcesses, workInProgressDTO));
-        }else if(optionVal.equals("2")){
-            /* 鏍规嵁娴佺▼鍗″彿姹囨��*/
-            //map.put("data", reportMapper.workInProgressProcessMp(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO));
-            List<WorkInProgressDTO> dataList1  =reportMapper.workInProgressProcessMpList1(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO);
-            mergeTeamsGroupsName(dataList1, dataList2);
-            map.put("data",dataList1);
-            // map.put("total", reportMapper.workInProgressProcessTotal(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO));
-            map.put("total" ,reportMapper.workInProgressOrderFootSum(offset, pageSize,orderId, inputProject, selectProcesses, workInProgressDTO));
+        Map<String, Object> result = new HashMap<>();
 
-        } else if (optionVal.equals("3")) {
+        try {
+            // dataList2 鏄墍鏈夊垎缁勪笅鐨勫熀纭�鏁版嵁锛岀嫭绔嬫墽琛�
+            String finalOrderId = orderId;
+            String finalInputProject = inputProject;
+            String finalSelectProcesses = selectProcesses;
+            CompletableFuture<List<WorkInProgressDTO>> dataList2Future =
+                    asyncExecutor.runAsync(() ->
+                            reportMapper.workInProgressMpdataList2(
+                                    offset, pageSize, finalOrderId, finalInputProject, finalSelectProcesses, workInProgressDTO));
 
-        } else {
-            //娌℃湁閫夋嫨鍒嗙粍
-            //map.put("data", reportMapper.workInProgressMp(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO));
-            List<WorkInProgressDTO> dataList1  =reportMapper.workInProgressMpdataList1(offset, pageSize, orderId, inputProject, selectProcesses,laminating, workInProgressDTO);
+            CompletableFuture<List<WorkInProgressDTO>> dataList1Future;
+            CompletableFuture<Map<String, Float>> totalFuture;
+
+            // 鏍规嵁 optionVal 鍐冲畾鏌ヨ绫诲瀷
+            if ("1".equals(optionVal)) {
+                // 閿�鍞崟鍙锋眹鎬�
+                dataList1Future = asyncExecutor.runAsync(() ->
+                        reportMapper.workInProgressOrderMpList1(
+                                offset, pageSize, finalOrderId, finalInputProject, finalSelectProcesses, workInProgressDTO));
+
+                totalFuture = asyncExecutor.runAsync(() ->
+                        reportMapper.workInProgressOrderFootSum(
+                                offset, pageSize, finalOrderId, finalInputProject, finalSelectProcesses, workInProgressDTO));
+
+            } else if ("2".equals(optionVal)) {
+                // 娴佺▼鍗″彿姹囨��
+                dataList1Future = asyncExecutor.runAsync(() ->
+                        reportMapper.workInProgressProcessMpList1(
+                                offset, pageSize, finalOrderId, finalInputProject, finalSelectProcesses, workInProgressDTO));
+
+                totalFuture = asyncExecutor.runAsync(() ->
+                        reportMapper.workInProgressOrderFootSum(
+                                offset, pageSize, finalOrderId, finalInputProject, finalSelectProcesses, workInProgressDTO));
+
+            } else if ("3".equals(optionVal)) {
+                dataList1Future = asyncExecutor.runAsync(() ->
+                        reportMapper.workInProgressMpdataList1(
+                                offset, pageSize, finalOrderId, finalInputProject, finalSelectProcesses, laminating, workInProgressDTO));
+                totalFuture = asyncExecutor.runAsync(() ->
+                        reportMapper.workInProgressOrderFootSum(
+                                offset, pageSize, finalOrderId, finalInputProject, finalSelectProcesses, workInProgressDTO));
+
+            } else {
+                // 涓嶅垎缁�
+                dataList1Future = asyncExecutor.runAsync(() ->
+                        reportMapper.workInProgressMpdataList1(
+                                offset, pageSize, finalOrderId, finalInputProject, finalSelectProcesses, laminating, workInProgressDTO));
+
+                totalFuture = asyncExecutor.runAsync(() ->
+                        reportMapper.workInProgressOrderFootSum(
+                                offset, pageSize, finalOrderId, finalInputProject, finalSelectProcesses, workInProgressDTO));
+            }
+
+            // 绛夊緟鍏ㄩ儴浠诲姟瀹屾垚
+            CompletableFuture.allOf(dataList1Future, dataList2Future, totalFuture).join();
+
+            List<WorkInProgressDTO> dataList1 = dataList1Future.get();
+            List<WorkInProgressDTO> dataList2 = dataList2Future.get();
             mergeTeamsGroupsName(dataList1, dataList2);
-            map.put("data",dataList1);
-            //map.put("total", reportMapper.workInProgressTotal(offset, pageSize, orderId, inputProject, selectProcesses, workInProgressDTO));
-            map.put("total" ,reportMapper.workInProgressOrderFootSum(offset, pageSize,orderId, inputProject, selectProcesses, workInProgressDTO));
 
+            result.put("data", dataList1);
+            result.put("total", totalFuture.get());
+
+            // 骞惰鏌ヨ宸ュ簭淇℃伅
+            List<Map<String, String>> process = productionSchedulingMapper.selectProcess();
+            result.put("process", process);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("骞惰鏌ヨ鍦ㄥ埗鍝佷俊鎭紓甯革細" + e.getMessage(), e);
         }
-        map.put("process", productionSchedulingMapper.selectProcess());
-        return map;
+
+        return result;
     }
+
 
     public Map<String, Object> selectProcessToBeCompletedSv(Date selectTime1, Date selectTime2, String orderId, String inputProject, String selectProcesses, Report report) {
         if ("null".equals(orderId)) {
@@ -424,19 +546,20 @@
         Map<String, Object> result = new HashMap<>();
 
         // 寮傛浠诲姟瀹氫箟
-        CompletableFuture<List<DamageReportDTO>> dataFuture = CompletableFuture.supplyAsync(() ->
-                reportMapper.selectDamageReportMp(offset, pageSize, selectTime1, selectTime2, damageReportDTO), EXECUTOR);
 
-        CompletableFuture<Map<String, Integer>> totalFuture = CompletableFuture.supplyAsync(() ->
-                reportMapper.getDamageReportPageTotal(offset, pageSize, selectTime1, selectTime2, damageReportDTO), EXECUTOR);
+        CompletableFuture<List<DamageReportDTO>> dataFuture = asyncExecutor.runAsync(() ->
+                reportMapper.selectDamageReportMp(offset, pageSize, selectTime1, selectTime2, damageReportDTO));
 
-        CompletableFuture<Map<String, Float>> footSumFuture = CompletableFuture.supplyAsync(() ->
-                reportMapper.damageReportFootSum(selectTime1, selectTime2, damageReportDTO), EXECUTOR);
+        CompletableFuture<Map<String, Integer>> totalFuture = asyncExecutor.runAsync(() ->
+                reportMapper.getDamageReportPageTotal(offset, pageSize, selectTime1, selectTime2, damageReportDTO));
+
+        CompletableFuture<Map<String, Float>> footSumFuture = asyncExecutor.runAsync(() ->
+                reportMapper.damageReportFootSum(selectTime1, selectTime2, damageReportDTO));
+
+        //绛夊緟鍏ㄩ儴浠诲姟瀹屾垚
+        CompletableFuture.allOf(dataFuture, totalFuture, footSumFuture).join();
 
         try {
-            //绛夊緟鍏ㄩ儴浠诲姟瀹屾垚
-            CompletableFuture.allOf(dataFuture, totalFuture, footSumFuture).join();
-
             result.put("data", dataFuture.get());
             result.put("total", totalFuture.get());
             result.put("footSum", footSumFuture.get());
@@ -730,29 +853,28 @@
 
         String laminating = reportMapper.getLaminating(selectProcesses);
 
-        // 骞惰鎵ц鍥涗釜鏌ヨ浠诲姟
         String finalSelectProcesses = selectProcesses;
-        CompletableFuture<List<TeamOutputDTO>> dataFuture = CompletableFuture.supplyAsync(() ->
-                reportMapper.teamOutputMp(offset, pageSize, selectTime1, selectTime2, finalSelectProcesses, laminating, teamOutputDTO), EXECUTOR);
+        CompletableFuture<List<TeamOutputDTO>> dataFuture = asyncExecutor.runAsync(() ->
+                reportMapper.teamOutputMp(offset, pageSize, selectTime1, selectTime2, finalSelectProcesses, laminating, teamOutputDTO));
 
-        CompletableFuture<List<Map<String, String>>> processFuture = CompletableFuture.supplyAsync(() ->
-                productionSchedulingMapper.selectProcess(), EXECUTOR);
+        CompletableFuture<List<Map<String, String>>> processFuture = asyncExecutor.runAsync(() ->
+                productionSchedulingMapper.selectProcess());
 
-        CompletableFuture<Map<String, Integer>> totalFuture = CompletableFuture.supplyAsync(() ->
-                reportMapper.teamOutputPageTotal(offset, pageSize, selectTime1, selectTime2, finalSelectProcesses, laminating, teamOutputDTO), EXECUTOR);
+        CompletableFuture<Map<String, Integer>> totalFuture = asyncExecutor.runAsync(() ->
+                reportMapper.teamOutputPageTotal(offset, pageSize, selectTime1, selectTime2, finalSelectProcesses, laminating, teamOutputDTO));
 
-        CompletableFuture<Map<String, Float>> footSumFuture = CompletableFuture.supplyAsync(() ->
-                reportMapper.teamOutputFootSum(selectTime1, selectTime2, finalSelectProcesses, laminating, teamOutputDTO), EXECUTOR);
+
+        CompletableFuture<Map<String, Float>> footSumFuture = asyncExecutor.runAsync(() ->
+                reportMapper.teamOutputFootSum(selectTime1, selectTime2, finalSelectProcesses, laminating, teamOutputDTO));
+
+        // 绛夊緟鎵�鏈変换鍔″畬鎴�
+        CompletableFuture.allOf(dataFuture, processFuture, totalFuture, footSumFuture).join();
 
         try {
-            // 绛夊緟鍏ㄩ儴浠诲姟鎵ц瀹屾瘯
-            CompletableFuture.allOf(dataFuture, processFuture, totalFuture, footSumFuture).join();
-
             result.put("data", dataFuture.get());
             result.put("process", processFuture.get());
             result.put("total", totalFuture.get());
             result.put("footSum", footSumFuture.get());
-
         } catch (Exception e) {
             e.printStackTrace();
             throw new RuntimeException("骞惰鏌ヨ寮傚父锛�" + e.getMessage(), e);

--
Gitblit v1.8.0