From dbcc9f8992c97b84aa6ae0a381c807ba6239ae2c Mon Sep 17 00:00:00 2001
From: huangjiayang <5265313@qq.com>
Date: 星期四, 15 五月 2025 16:47:08 +0800
Subject: [PATCH] 【UPDATE】刷新BOM、库存、工艺路线数据缓存接口增加刷新钣金子单数据

---
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java |  605 +++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 546 insertions(+), 59 deletions(-)

diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java
index be5115c..8bbf341 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java
@@ -1,5 +1,6 @@
 package com.aps.core.service.impl;
 
+import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.aps.common.core.utils.DateUtils;
 import com.aps.common.core.utils.uuid.IdUtils;
@@ -20,18 +21,20 @@
 import org.apache.poi.xssf.streaming.SXSSFRow;
 import org.apache.poi.xssf.streaming.SXSSFSheet;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.YearMonth;
-import java.time.ZoneId;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.stream.Collectors;
+
+import static java.util.stream.Collectors.groupingBy;
 
 /**
  * 姘斾綋绠¤矾浜ц兘璐熻浇缁熻Service涓氬姟灞傚鐞�
@@ -148,6 +151,7 @@
                 apsProcessRoutes.sort((a, b)->b.getProcessNumber().compareTo(a.getProcessNumber()));
                 //鏄惁鎵惧埌褰撳墠宸ュ簭
                 boolean isCurrentProcess = false;
+                boolean lastProcessStartTimeIsBeforeNow = false;
                 ApsGasPipingRouteStat preApsProcessRoute = null;
                 for (int i=0;i<apsProcessRoutes.size();i++){
                     ApsProcessRoute apsProcessRoute = apsProcessRoutes.get(i);
@@ -163,7 +167,7 @@
                     //宸ュ簭鍚嶇О
                     apsGasPipingRouteStat.setProcessName(apsProcessRoute.getProcessName());
                     //宸ュ簭鍙�
-                    apsGasPipingRouteStat.setRoadProcessNumber(apsProcessRoute.getProcessNumber());
+                    apsGasPipingRouteStat.setRoadProcessNumber( new BigDecimal(apsProcessRoute.getProcessNumber()) );
                     //鏍囧噯宸ユ椂
                     apsGasPipingRouteStat.setStandardTime(apsProcessRoute.getStandardTime());
                     //涓撲笟
@@ -171,37 +175,34 @@
                     //宸ュ簭鎬诲伐鏃� 绛変簬 鏍囧噯宸ユ椂*鐢熶骇鏁伴噺
                     apsGasPipingRouteStat.setProcessTotalTime(apsProcessRoute.getStandardTime().multiply(apsGasPipingPlan.getProductionQuantity()));
                     //璁″垝寮�宸ユ棩 濡傛灉鏄綋鍓嶅簭
-                    if(apsGasPipingRouteStat.getCurrentProcessNumber().toString().equals(apsGasPipingRouteStat.getRoadProcessNumber())) {
-                        /* 瀵� stat.getProcessPlanStartDay() 鍜屽綋鍓嶆棩鏈� 杩涜瀵规瘮锛屽彧瀵规瘮鍒版棩锛屼笉鐢ㄧ鍗佸垎绉�*/
-                        LocalDate startLocalDate = LocalDate.ofInstant(apsProcessRoute.getProcessPlanStartDay().toInstant(), ZoneId.systemDefault());
-                        LocalDate nowLocalDate = LocalDate.now();
-                        if (startLocalDate.isBefore(nowLocalDate)) {
-                            apsGasPipingRouteStat.setProcessPlanStartDay(new Date());
-                        }else{
-                            apsGasPipingRouteStat.setProcessPlanStartDay(apsProcessRoute.getProcessPlanStartDay());
-                        }
-                        LocalDateTime planStartDay = apsGasPipingRouteStat.getProcessPlanStartDay().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
-                        long seconds = apsProcessRoute.getStandardTime().multiply(apsGasPipingPlan.getProductionQuantity()).multiply(new BigDecimal(60)).multiply(new BigDecimal(60)).longValue();
-                        apsGasPipingRouteStat.setProcessPlanEndDay(Date.from(planStartDay.plusSeconds(seconds).atZone(ZoneId.systemDefault()).toInstant()));
+                    if(apsGasPipingPlan.getProcessNumber().equals(apsProcessRoute.getProcessNumber())) {
                         isCurrentProcess = true;
-                    }else{
-                        // 涓婁竴閬撳伐搴忕殑缁撴潫鏃堕棿 = 涓婁竴閬撳伐搴忕殑寮�濮嬫椂闂� + 涓婁竴閬撳伐搴忕殑鎬诲伐鏃�
-                        if(i==0){
-                            apsGasPipingRouteStat.setProcessPlanEndDay(apsGasPipingPlan.getPlanEndDay());
-                            LocalDate endLocalDate = LocalDate.ofInstant(apsGasPipingPlan.getPlanEndDay().toInstant(), ZoneId.systemDefault());
-                            LocalDate nowLocalDate = LocalDate.now();
-                            LocalDateTime planEndDay;
-                            if(endLocalDate.isBefore(nowLocalDate)){
-                                planEndDay = LocalDateTime.now();
-                            }else{
-                                planEndDay = apsGasPipingPlan.getPlanEndDay().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
-                            }
-                            long seconds = apsProcessRoute.getStandardTime().multiply(apsGasPipingPlan.getProductionQuantity()).multiply(new BigDecimal(60)).multiply(new BigDecimal(60)).longValue();
-                            LocalDateTime planStartDay = planEndDay.plusSeconds(-seconds);
-                            apsGasPipingRouteStat.setProcessPlanStartDay(Date.from(planStartDay.atZone(ZoneId.systemDefault()).toInstant()));
+                    }
+                    // 涓婁竴閬撳伐搴忕殑缁撴潫鏃堕棿 = 涓婁竴閬撳伐搴忕殑寮�濮嬫椂闂� + 涓婁竴閬撳伐搴忕殑鎬诲伐鏃�
+                    if(i==0){
+                        LocalDate endLocalDate = LocalDate.ofInstant(apsGasPipingPlan.getPlanEndDay().toInstant(), ZoneId.systemDefault());
+                        LocalDate nowLocalDate = LocalDate.now();
+                        LocalDateTime planEndDay;
+                        if(endLocalDate.isBefore(nowLocalDate)){
+                            planEndDay = LocalDateTime.now();
                         }else{
-                            apsGasPipingRouteStat.setProcessPlanEndDay(preApsProcessRoute.getProcessPlanEndDay());
-                            LocalDateTime planEndDay = apsGasPipingPlan.getPlanEndDay().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+                            planEndDay = apsGasPipingPlan.getPlanEndDay().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+                        }
+                        apsGasPipingRouteStat.setProcessPlanEndDay(Date.from(planEndDay.atZone(ZoneId.systemDefault()).toInstant()));
+                        long seconds = apsProcessRoute.getStandardTime().multiply(apsGasPipingPlan.getProductionQuantity()).multiply(new BigDecimal(60)).multiply(new BigDecimal(60)).longValue();
+                        LocalDateTime planStartDay = planEndDay.plusSeconds(-seconds);
+                        apsGasPipingRouteStat.setProcessPlanStartDay(Date.from(planStartDay.atZone(ZoneId.systemDefault()).toInstant()));
+                        if(planStartDay.isBefore(LocalDateTime.now())){
+                            lastProcessStartTimeIsBeforeNow = true;
+                        }
+                    }else{
+                        if(lastProcessStartTimeIsBeforeNow){
+                            Date now = new Date();
+                            apsGasPipingRouteStat.setProcessPlanStartDay(now);
+                            apsGasPipingRouteStat.setProcessPlanEndDay(now);
+                        }else{
+                            apsGasPipingRouteStat.setProcessPlanEndDay(preApsProcessRoute.getProcessPlanStartDay());
+                            LocalDateTime planEndDay = preApsProcessRoute.getProcessPlanStartDay().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
                             long seconds = apsProcessRoute.getStandardTime().multiply(apsGasPipingPlan.getProductionQuantity()).multiply(new BigDecimal(60)).multiply(new BigDecimal(60)).longValue();
                             LocalDateTime planStartDay = planEndDay.plusSeconds(-seconds);
                             apsGasPipingRouteStat.setProcessPlanStartDay(Date.from(planStartDay.atZone(ZoneId.systemDefault()).toInstant()));
@@ -251,8 +252,7 @@
         return true;
     }
 
-    @Override
-    public JSONObject getCapacityPlanData(ApsGasPipingRouteStat apsGasPipingRouteStat) {
+    public JSONObject getCapacityPlanDataBackup(ApsGasPipingRouteStat apsGasPipingRouteStat) {
         JSONObject result = new JSONObject();
         YearMonth yearMonth = YearMonth.parse(apsGasPipingRouteStat.getSearchEndDate());
         int daysInMonth = yearMonth.lengthOfMonth();
@@ -303,37 +303,42 @@
                 formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                 simpleDateFormat = new SimpleDateFormat("yyyy-MM");
             }
-            apsGasPipingRouteStats = apsGasPipingRouteStatMapper.selectApsGasPipingRouteStatList(apsGasPipingRouteStat);
+            ApsGasPipingRouteStat queryStatParam = new ApsGasPipingRouteStat();
+            BeanUtils.copyProperties(apsGasPipingRouteStat,queryStatParam);
+            queryStatParam.setMajor("");
+            apsGasPipingRouteStats = apsGasPipingRouteStatMapper.selectApsGasPipingRouteStatList(queryStatParam);
             //鏍规嵁寮�宸ユ棩杩涜鍗囧簭鎺掑簭
             apsGasPipingRouteStats.sort((a, b)->a.getProcessPlanStartDay().compareTo(b.getProcessPlanStartDay()));
             //宸ュ簭寮�宸ユ棩鏈�
             String planStartDate = "";
             //缁熻鎵�鏈夊伐搴忓搴旂殑寮�宸ユ椂闂�
             for (ApsGasPipingRouteStat apsGasPipingRouteStatTemp : apsGasPipingRouteStats) {
-                planStartDate = simpleDateFormat.format(apsGasPipingRouteStatTemp.getProcessPlanStartDay());
-                if("month".equals(apsGasPipingRouteStat.getSearchType())){
-                    planStartDate = planStartDate+"-01";
-                }
-                ApsResourceDateStat apsResourceDateStat = new ApsResourceDateStat();
-                apsResourceDateStat.setPlanDay(LocalDate.parse(planStartDate, formatter));
-                apsResourceDateStat.setResourceName(apsGasPipingRouteStatTemp.getProcessName());
-                //鏌ヨ姘旀煖绠¤矾浜ц兘瑙勫垝琛�
-                apsResourceDateStat.setDesignTimes(apsGasPipingPlanMap.get(apsGasPipingRouteStatTemp.getProcessName()+"-"+planStartDate.substring(0, 7))!=null?apsGasPipingPlanMap.get(apsGasPipingRouteStatTemp.getProcessName()+"-"+planStartDate.substring(0, 7)).getDayProduceAllNum():new BigDecimal(0));
-                //鏌ヨ鏂欏彿宸ュ簭浜ц兘琛�
-                apsResourceDateStat.setRequireTimes(apsGasPipingRouteStatTemp.getProcessTotalTime());
-                if(apsResourceDateStat.getDesignTimes().compareTo(BigDecimal.ZERO)>0){
-                    apsResourceDateStat.setCapacityLoad(apsResourceDateStat.getRequireTimes()
-                            .divide(apsResourceDateStat.getDesignTimes(), 2, RoundingMode.HALF_UP)
-                            .multiply(new BigDecimal(100)));
-                }else{
-                    apsResourceDateStat.setCapacityLoad(BigDecimal.valueOf(0));
-                }
-                List<ApsResourceDateStat> apsResourceDateStatList = new ArrayList<>();
                 if(processMap.containsKey(apsGasPipingRouteStatTemp.getProcessName())){
-                    apsResourceDateStatList = processMap.get(apsGasPipingRouteStatTemp.getProcessName());
+                    planStartDate = simpleDateFormat.format(apsGasPipingRouteStatTemp.getProcessPlanStartDay());
+                    if("month".equals(apsGasPipingRouteStat.getSearchType())){
+                        planStartDate = planStartDate+"-01";
+                    }
+                    ApsResourceDateStat apsResourceDateStat = new ApsResourceDateStat();
+                    apsResourceDateStat.setPlanDay(LocalDate.parse(planStartDate, formatter));
+                    apsResourceDateStat.setResourceName(apsGasPipingRouteStatTemp.getProcessName());
+                    //鏌ヨ姘旀煖绠¤矾浜ц兘瑙勫垝琛�
+                    apsResourceDateStat.setDesignTimes(apsGasPipingPlanMap.get(apsGasPipingRouteStatTemp.getProcessName()+"-"+planStartDate.substring(0, 7))!=null?apsGasPipingPlanMap.get(apsGasPipingRouteStatTemp.getProcessName()+"-"+planStartDate.substring(0, 7)).getDayProduceAllNum():new BigDecimal(0));
+                    //鏌ヨ鏂欏彿宸ュ簭浜ц兘琛�
+                    apsResourceDateStat.setRequireTimes(apsGasPipingRouteStatTemp.getProcessTotalTime());
+                    if(apsResourceDateStat.getDesignTimes().compareTo(BigDecimal.ZERO)>0){
+                        apsResourceDateStat.setCapacityLoad(apsResourceDateStat.getRequireTimes()
+                                .divide(apsResourceDateStat.getDesignTimes(), 2, RoundingMode.HALF_UP)
+                                .multiply(new BigDecimal(100)));
+                    }else{
+                        apsResourceDateStat.setCapacityLoad(BigDecimal.valueOf(0));
+                    }
+                   // apsResourceDateStatList = new ArrayList<>();
+
+                    List<ApsResourceDateStat>   apsResourceDateStatList = processMap.get(apsGasPipingRouteStatTemp.getProcessName());
+                    apsResourceDateStatList.add(apsResourceDateStat);
+                    processMap.put(apsGasPipingRouteStatTemp.getProcessName(), apsResourceDateStatList);
                 }
-                apsResourceDateStatList.add(apsResourceDateStat);
-                processMap.put(apsGasPipingRouteStatTemp.getProcessName(), apsResourceDateStatList);
+
             }
             //鑱氬悎姣忛亾宸ュ簭鐨勫紑宸ユ椂闂村拰浜ц兘
             processMap.forEach((processName, apsResourceDateStatList) -> {
@@ -400,6 +405,291 @@
                             apsResourceDateStat.setCapacityLoad(new BigDecimal(0));
                             apsResourceDateStat.setResourceName(entry.getKey());
                             apsResourceDateStat.setResourceGroupName(entry.getKey());
+                            apsResourceDateStatList.add(apsResourceDateStat);
+                            crtList.add(apsResourceDateStat);
+                        }
+                        temp.put(entry.getKey(), crtList);
+                        processList.set(i, temp);
+                    }
+                }
+            }
+            result.put("planTable", processList);
+            result.put("planTitle", sortedStartPlanTimeList);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    @Override
+    public JSONObject getCapacityPlanData(ApsGasPipingRouteStat apsGasPipingRouteStat) {
+        JSONObject result = new JSONObject();
+        YearMonth yearMonth = YearMonth.parse(apsGasPipingRouteStat.getSearchEndDate());
+        int daysInMonth = yearMonth.lengthOfMonth();
+        LinkedHashSet<String> startPlanTimeSet = new LinkedHashSet<>();
+        //宸ュ簭鍒嗙粍缁熻
+        LinkedHashMap<String, List<ApsResourceDateStat>> processMap = new LinkedHashMap<>();
+        List<HashMap<String, List<ApsResourceDateStat>>> processList = new ArrayList<>();
+        try {
+            //鑾峰彇鏍囧噯宸ュ簭鍚嶇О
+            ApsStandardProcess apsStandardProcess = new ApsStandardProcess();
+            apsStandardProcess.setMajor(apsGasPipingRouteStat.getMajor().equals("gas")?"姘旀煖":"绠¤矾");
+            List<ApsStandardProcess> apsStandardProcessList = apsStandardProcessService.selectApsStandardProcessList(apsStandardProcess);
+            apsStandardProcessList.sort((a, b)->a.getProcessName().compareTo(b.getProcessName()));
+            for(ApsStandardProcess temp:apsStandardProcessList){
+                processMap.put(temp.getProcessName(), new ArrayList<ApsResourceDateStat>());
+            }
+            //鑾峰彇宸ュ簭璁″垝浜ц兘鏁版嵁
+            HashMap<String, ApsGasPipelineCapacityPlan> apsGasPipingPlanMap = new HashMap<>();
+            ApsGasPipelineCapacityPlan searchCapacityPlan = new ApsGasPipelineCapacityPlan();
+            searchCapacityPlan.setMajor(apsGasPipingRouteStat.getMajor().equals("gas")?"姘旀煖":"绠¤矾");
+            if("day".equals(apsGasPipingRouteStat.getSearchType())){
+                searchCapacityPlan.setYear(yearMonth.getYear()+"");
+                searchCapacityPlan.setMonth(yearMonth.getMonthValue()+"");
+                for(int i=1;i<=daysInMonth;i++){
+                    startPlanTimeSet.add(yearMonth +"-"+ (i<10?"0"+i:i));
+                }
+            }else if("month".equals(apsGasPipingRouteStat.getSearchType())){
+                searchCapacityPlan.setYear(yearMonth.getYear()+"");
+                YearMonth start = YearMonth.of(Integer.parseInt(apsGasPipingRouteStat.getSearchStartDate().split("-")[0]), Integer.parseInt(apsGasPipingRouteStat.getSearchStartDate().split("-")[1]));
+                YearMonth end = YearMonth.of(Integer.parseInt(apsGasPipingRouteStat.getSearchEndDate().split("-")[0]), Integer.parseInt(apsGasPipingRouteStat.getSearchEndDate().split("-")[1]));
+                List<String> yearMonths = getYearMonthsInRange(start, end);
+                startPlanTimeSet.addAll(yearMonths);
+            }
+            List<ApsGasPipelineCapacityPlan> apsGasPipelineCapacityPlanList = apsGasPipelineCapacityPlanMapper.selectApsGasPipelineCapacityPlanList(searchCapacityPlan);
+            apsGasPipelineCapacityPlanList.forEach(apsGasPipelineCapacityPlan -> {
+                String key = apsGasPipelineCapacityPlan.getProcessName() + "-" + apsGasPipelineCapacityPlan.getOrgCode() + "-" + apsGasPipelineCapacityPlan.getYear() + "-" + (Integer.parseInt(apsGasPipelineCapacityPlan.getMonth())<10?"0"+apsGasPipelineCapacityPlan.getMonth():apsGasPipelineCapacityPlan.getMonth());
+                apsGasPipingPlanMap.put(key, apsGasPipelineCapacityPlan);
+            });
+            //璁$畻鏃ヤ骇鑳芥暟鎹�
+            DateTimeFormatter formatter = null;
+            List<ApsGasPipingRouteStat> apsGasPipingRouteStats;
+            SimpleDateFormat simpleDateFormat = null;
+            apsGasPipingRouteStat.setSearchStartDate(apsGasPipingRouteStat.getSearchStartDate()+"-01 00:00:00");
+            apsGasPipingRouteStat.setSearchEndDate(apsGasPipingRouteStat.getSearchEndDate()+"-"+ daysInMonth +" 23:59:59");
+            if("day".equals(apsGasPipingRouteStat.getSearchType())){
+                formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+            }else if("month".equals(apsGasPipingRouteStat.getSearchType())){
+                formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                simpleDateFormat = new SimpleDateFormat("yyyy-MM");
+            }
+            ApsGasPipingRouteStat queryStatParam = new ApsGasPipingRouteStat();
+            BeanUtils.copyProperties(apsGasPipingRouteStat,queryStatParam);
+            queryStatParam.setMajor("");
+            apsGasPipingRouteStats = apsGasPipingRouteStatMapper.selectApsGasPipingRouteStatList(queryStatParam);
+            //鏍规嵁寮�宸ユ棩杩涜鍗囧簭鎺掑簭
+            apsGasPipingRouteStats.sort((a, b)->a.getProcessPlanStartDay().compareTo(b.getProcessPlanStartDay()));
+            //宸ュ簭寮�宸ユ棩鏈�
+            String planStartDate = "";
+            //缁熻鎵�鏈夊伐搴忓搴旂殑寮�宸ユ椂闂�
+            for (ApsGasPipingRouteStat apsGasPipingRouteStatTemp : apsGasPipingRouteStats) {
+                if(processMap.containsKey(apsGasPipingRouteStatTemp.getProcessName())){
+                    planStartDate = simpleDateFormat.format(apsGasPipingRouteStatTemp.getProcessPlanStartDay());
+                    if("month".equals(apsGasPipingRouteStat.getSearchType())){
+                        planStartDate = planStartDate+"-01";
+                    }
+                    ApsResourceDateStat apsResourceDateStat = new ApsResourceDateStat();
+                    apsResourceDateStat.setPlanDay(LocalDate.parse(planStartDate, formatter));
+                    apsResourceDateStat.setResourceName(apsGasPipingRouteStatTemp.getProcessName());
+                    apsResourceDateStat.setPlant(apsGasPipingRouteStatTemp.getPlant());
+                    //鏌ヨ姘旀煖绠¤矾浜ц兘瑙勫垝琛�
+                    String capacityKey = apsGasPipingRouteStatTemp.getProcessName() + "-" + apsGasPipingRouteStatTemp.getPlant() + "-" + planStartDate.substring(0, 7);
+                    apsResourceDateStat.setDesignTimes(apsGasPipingPlanMap.get(capacityKey)!=null?apsGasPipingPlanMap.get(capacityKey).getDayProduceAllNum():new BigDecimal(0));
+                    //鏌ヨ鏂欏彿宸ュ簭浜ц兘琛�
+                    apsResourceDateStat.setRequireTimes(apsGasPipingRouteStatTemp.getProcessTotalTime());
+                    if(apsResourceDateStat.getDesignTimes().compareTo(BigDecimal.ZERO)>0){
+                        apsResourceDateStat.setCapacityLoad(apsResourceDateStat.getRequireTimes()
+                                .divide(apsResourceDateStat.getDesignTimes(), 2, RoundingMode.HALF_UP)
+                                .multiply(new BigDecimal(100)));
+                    }else{
+                        apsResourceDateStat.setCapacityLoad(BigDecimal.valueOf(0));
+                    }
+
+                    List<ApsResourceDateStat> apsResourceDateStatList = processMap.get(apsGasPipingRouteStatTemp.getProcessName());
+                    apsResourceDateStatList.add(apsResourceDateStat);
+                    processMap.put(apsGasPipingRouteStatTemp.getProcessName(), apsResourceDateStatList);
+                }
+            }
+            //鑱氬悎姣忛亾宸ュ簭鐨勫紑宸ユ椂闂村拰浜ц兘
+            for (Map.Entry<String, List<ApsResourceDateStat>> entry : processMap.entrySet()) {
+                String processName = entry.getKey();
+                List<ApsResourceDateStat> apsResourceDateStatList = entry.getValue();
+
+                if("day".equals(apsGasPipingRouteStat.getSearchType())) {
+                    // 鎸夊ぉ缁熻鏃朵繚鎸佸師鏈夐�昏緫锛屼笉鎸夊伐鍘傚垎缁�
+                    LinkedHashMap<String, ApsResourceDateStat> dayMap = new LinkedHashMap<>();
+
+                    // 棣栧厛锛屼负鎵�鏈夋棩鏈熷垱寤哄垵濮嬭褰�
+                    for(String date : startPlanTimeSet) {
+                        ApsResourceDateStat initStat = new ApsResourceDateStat();
+                        initStat.setPlanDay(LocalDate.parse(date, formatter));
+                        initStat.setResourceName(processName);
+                        initStat.setResourceGroupName(processName);
+                        initStat.setRequireTimes(new BigDecimal(0));
+                        String capacityKey = processName + "-" + date.substring(0,7);
+                        initStat.setDesignTimes(apsGasPipingPlanMap.get(capacityKey)!=null?apsGasPipingPlanMap.get(capacityKey).getDayProduceAllNum():new BigDecimal(0));
+                        initStat.setCapacityLoad(new BigDecimal(0));
+                        dayMap.put(date, initStat);
+                    }
+
+                    // 鐒跺悗澶勭悊瀹為檯鏁版嵁
+                    for (ApsResourceDateStat apsResourceDateStat : apsResourceDateStatList) {
+                        String dateKey = apsResourceDateStat.getPlanDay().toString();
+                        if(dayMap.containsKey(dateKey)){
+                            ApsResourceDateStat apsResourceDateStatTemp = dayMap.get(dateKey);
+                            String capacityKey = processName + "-" + dateKey.substring(0,7);
+                            apsResourceDateStatTemp.setDesignTimes(apsGasPipingPlanMap.get(capacityKey)!=null?apsGasPipingPlanMap.get(capacityKey).getDayProduceAllNum():new BigDecimal(0));
+                            apsResourceDateStatTemp.setRequireTimes(apsResourceDateStatTemp.getRequireTimes().add(apsResourceDateStat.getRequireTimes()));
+                            if(apsResourceDateStatTemp.getDesignTimes().compareTo(BigDecimal.ZERO) > 0){
+                                apsResourceDateStatTemp.setCapacityLoad(apsResourceDateStatTemp.getRequireTimes()
+                                        .divide(apsResourceDateStatTemp.getDesignTimes(), 2, RoundingMode.HALF_UP)
+                                        .multiply(new BigDecimal(100)));
+                            }else{
+                                apsResourceDateStatTemp.setCapacityLoad(new BigDecimal(0));
+                            }
+                            apsResourceDateStatTemp.setResourceGroupName(processName);
+                            apsResourceDateStatTemp.setPlanDay(apsResourceDateStat.getPlanDay());
+                            dayMap.put(dateKey, apsResourceDateStatTemp);
+                        }
+                    }
+
+                    List<ApsResourceDateStat> tempList = new ArrayList<>(dayMap.values());
+                    HashMap<String, List<ApsResourceDateStat>> temp = new HashMap<>();
+                    temp.put(processName, tempList);
+                    processList.add(temp);
+                } else {
+                    // 鎸夋湀缁熻鏃舵墠鎸夊伐鍘傚垎缁�
+                    if (apsResourceDateStatList.isEmpty()) {
+                        // 浠庝骇鑳借鍒掓暟鎹腑鑾峰彇鎵�鏈夌殑宸ュ巶
+                        Set<String> plants = apsGasPipelineCapacityPlanList.stream()
+                                .filter(plan -> plan.getProcessName().equals(processName))
+                                .map(ApsGasPipelineCapacityPlan::getOrgCode)
+                                .filter(orgCode -> orgCode != null && !orgCode.trim().isEmpty())
+                                .collect(Collectors.toSet());
+
+                        // 濡傛灉娌℃湁鎵惧埌浠讳綍鏈夋晥宸ュ巶锛岃烦杩囪繖涓伐搴�
+                        if (plants.isEmpty()) {
+                            continue;
+                        }
+
+                        // 涓烘瘡涓伐鍘傚垱寤虹┖璁板綍
+                        for (String plant : plants) {
+                            LinkedHashMap<String, ApsResourceDateStat> dayMap = new LinkedHashMap<>();
+                            // 涓烘瘡涓湀浠藉垱寤鸿褰�
+                            for(String monthDate : startPlanTimeSet) {
+                                String tempTime = monthDate + "-01";
+                                ApsResourceDateStat apsResourceDateStat = new ApsResourceDateStat();
+                                apsResourceDateStat.setPlanDay(LocalDate.parse(tempTime, formatter));
+                                apsResourceDateStat.setResourceName(processName);
+                                apsResourceDateStat.setResourceGroupName(processName + "-" + plant);
+                                apsResourceDateStat.setPlant(plant);
+                                apsResourceDateStat.setRequireTimes(new BigDecimal(0));
+                                String capacityKey = processName + "-" + plant + "-" + monthDate;
+                                apsResourceDateStat.setDesignTimes(apsGasPipingPlanMap.get(capacityKey)!=null?apsGasPipingPlanMap.get(capacityKey).getMonthProduceAllNum():new BigDecimal(0));
+                                apsResourceDateStat.setCapacityLoad(new BigDecimal(0));
+                                dayMap.put(monthDate, apsResourceDateStat);
+                            }
+                            List<ApsResourceDateStat> tempList = new ArrayList<>(dayMap.values());
+                            HashMap<String, List<ApsResourceDateStat>> temp = new HashMap<>();
+                            temp.put(processName + "-" + plant, tempList);
+                            processList.add(temp);
+                        }
+                    } else {
+                        // 鎸夊伐鍘傚垎缁勶紝骞惰繃婊ゆ帀plant涓簄ull鎴栫┖瀛楃涓茬殑璁板綍
+                        Map<String, List<ApsResourceDateStat>> plantGroups = apsResourceDateStatList.stream()
+                                .filter(stat -> stat.getPlant() != null && !stat.getPlant().trim().isEmpty())
+                                .collect(groupingBy(ApsResourceDateStat::getPlant));
+
+                        // 濡傛灉杩囨护鍚庢病鏈夋湁鏁堢殑宸ュ巶鏁版嵁锛岃烦杩囪繖涓伐搴�
+                        if (plantGroups.isEmpty()) {
+                            continue;
+                        }
+
+                        // 瀵规瘡涓伐鍘傜殑鏁版嵁杩涜澶勭悊
+                        for (Map.Entry<String, List<ApsResourceDateStat>> plantEntry : plantGroups.entrySet()) {
+                            String plant = plantEntry.getKey();
+                            // 鍐嶆纭plant涓嶄负绌�
+                            if (plant == null || plant.trim().isEmpty()) {
+                                continue;
+                            }
+                            List<ApsResourceDateStat> plantStats = plantEntry.getValue();
+                            LinkedHashMap<String, ApsResourceDateStat> dayMap = new LinkedHashMap<>();
+
+                            // 棣栧厛涓烘墍鏈夋湀浠藉垱寤哄垵濮嬭褰�
+                            for(String monthDate : startPlanTimeSet) {
+                                String tempTime = monthDate + "-01";
+                                ApsResourceDateStat initStat = new ApsResourceDateStat();
+                                initStat.setPlanDay(LocalDate.parse(tempTime, formatter));
+                                initStat.setResourceName(processName);
+                                initStat.setResourceGroupName(processName + "-" + plant);
+                                initStat.setPlant(plant);
+                                initStat.setRequireTimes(new BigDecimal(0));
+                                String capacityKey = processName + "-" + plant + "-" + monthDate;
+                                initStat.setDesignTimes(apsGasPipingPlanMap.get(capacityKey)!=null?apsGasPipingPlanMap.get(capacityKey).getMonthProduceAllNum():new BigDecimal(0));
+                                initStat.setCapacityLoad(new BigDecimal(0));
+                                dayMap.put(monthDate, initStat);
+                            }
+
+                            // 鐒跺悗澶勭悊瀹為檯鏁版嵁
+                            for (ApsResourceDateStat stat : plantStats) {
+                                String monthKey = stat.getPlanDay().toString().substring(0, 7);
+                                if (dayMap.containsKey(monthKey)) {
+                                    ApsResourceDateStat existingStat = dayMap.get(monthKey);
+                                    String capacityKey = processName + "-" + plant + "-" + monthKey;
+                                    existingStat.setDesignTimes(apsGasPipingPlanMap.get(capacityKey)!=null?apsGasPipingPlanMap.get(capacityKey).getMonthProduceAllNum():new BigDecimal(0));
+                                    existingStat.setRequireTimes(existingStat.getRequireTimes().add(stat.getRequireTimes()));
+                                    if(existingStat.getDesignTimes().compareTo(BigDecimal.ZERO) > 0){
+                                        existingStat.setCapacityLoad(existingStat.getRequireTimes()
+                                                .divide(existingStat.getDesignTimes(), 2, RoundingMode.HALF_UP)
+                                                .multiply(new BigDecimal(100)));
+                                    }
+                                }
+                            }
+
+                            List<ApsResourceDateStat> tempList = new ArrayList<>(dayMap.values());
+                            HashMap<String, List<ApsResourceDateStat>> temp = new HashMap<>();
+                            temp.put(processName + "_" + plant, tempList);
+                            processList.add(temp);
+                        }
+                    }
+                }
+            }
+            //鎺掑簭鏃堕棿鏍囬
+            List<String> sortedStartPlanTimeList = new ArrayList<>(startPlanTimeSet);
+            Collections.sort(sortedStartPlanTimeList);
+            for (int i=0;i<processList.size();i++){
+                HashMap<String, List<ApsResourceDateStat>> temp = processList.get(i);
+                for (Map.Entry<String, List<ApsResourceDateStat>> entry : temp.entrySet()){
+                    List<ApsResourceDateStat> apsResourceDateStatList = entry.getValue();
+                    String key = entry.getKey();
+                    List<ApsResourceDateStat> crtList = new ArrayList<>();
+                    for(String tempTime:sortedStartPlanTimeList) {
+                        if("month".equals(apsGasPipingRouteStat.getSearchType())){
+                            tempTime += "-01";
+                        }
+                        LocalDate crtDate = LocalDate.parse(tempTime, formatter);
+                        Optional<ApsResourceDateStat> first = apsResourceDateStatList.stream().filter(x -> x.getPlanDay().equals(crtDate)).findFirst();
+                        if (first.isPresent()) {
+                            ApsResourceDateStat apsResourceDateStat = first.get();
+                            crtList.add(apsResourceDateStat);
+                        } else {
+                            ApsResourceDateStat apsResourceDateStat = new ApsResourceDateStat();
+                            apsResourceDateStat.setPlanDay(LocalDate.parse(tempTime, formatter));
+                            String[] keyParts = key.split("-");
+                            String processNamePart = keyParts[0];
+                            String plantPart = keyParts[1];
+                            String capacityKey = processNamePart + "-" + plantPart + "-" + tempTime.substring(0,7);
+                            if ("month".equals(apsGasPipingRouteStat.getSearchType())) {
+                                apsResourceDateStat.setDesignTimes(apsGasPipingPlanMap.get(capacityKey) != null ? apsGasPipingPlanMap.get(capacityKey).getMonthProduceAllNum() : new BigDecimal(0));
+                            } else {
+                                apsResourceDateStat.setDesignTimes(apsGasPipingPlanMap.get(capacityKey) != null ? apsGasPipingPlanMap.get(capacityKey).getDayProduceAllNum() : new BigDecimal(0));
+                            }
+                            apsResourceDateStat.setRequireTimes(new BigDecimal(0));
+                            apsResourceDateStat.setCapacityLoad(new BigDecimal(0));
+                            apsResourceDateStat.setResourceName(processNamePart);
+                            apsResourceDateStat.setResourceGroupName(key);
+                            apsResourceDateStat.setPlant(plantPart);
                             apsResourceDateStatList.add(apsResourceDateStat);
                             crtList.add(apsResourceDateStat);
                         }
@@ -521,4 +811,201 @@
 
         return yearMonths;
     }
+
+    @Override
+    public void saveGasPipingProcessStat(){
+        try {
+            String batchNum = IdUtils.fastSimpleUUID();
+            List<ApsGasPipingRouteStat> tempList = apsGasPipingRouteStatMapper.queryTempStat();
+            Map<String, List<ApsGasPipingRouteStat>> groupByOrderNo = tempList.stream().collect(groupingBy(ApsGasPipingRouteStat::getWorkOrderNo));
+            Boolean hasBefore = false;
+            LocalDateTime now = LocalDateTime.now();
+            for (Map.Entry<String, List<ApsGasPipingRouteStat>> entry : groupByOrderNo.entrySet()) {
+                List<ApsGasPipingRouteStat> statPerOrder = entry.getValue();
+                /*num 涓烘牴鎹畬宸ユ椂闂存帓搴忓嚭鐨勫簭鍙凤紝鎸夋鎺掑簭锛屽彲淇濊瘉鏄寜瀹屽伐鏃堕棿鍊掑彊鎺掑垪*/
+                statPerOrder.sort((a, b)->a.getNum().compareTo(b.getNum()));
+                ApsGasPipingRouteStat last=null;
+                for (int i = 0; i <statPerOrder.size(); i++) {
+                    ApsGasPipingRouteStat stat = statPerOrder.get(i);
+                    stat.setId(IdUtils.fastSimpleUUID());
+                    stat.setBatchNumber(batchNum);
+                    stat.setCreateBy(SecurityUtils.getUsername());
+                    stat.setWarning(false);
+                    if(i==0){
+                        Date orderPlanEndDay = stat.getOrderPlanEndDay();
+                        LocalDateTime transLocalDateTime = transLocalDateTime(orderPlanEndDay);
+                        LocalTime endOfDay = LocalTime.of(23, 59, 59);
+                        LocalDateTime orderPlanEndDayLocalDateTime =  LocalDateTime.of( transLocalDateTime.toLocalDate(), endOfDay);
+                        if(orderPlanEndDayLocalDateTime.isBefore(now)){
+                            hasBefore = true;
+                            stat.setWarning(true);
+                            stat.setProcessPlanEndDay(transDate(now));
+                            stat.setProcessPlanStartDay(transDate(now));
+                        }else {
+                            /*璁″垝瀹屽伐鏃�=閽i噾璁″垝宸ュ崟瀹屾垚鏃堕棿*/
+                            stat.setProcessPlanEndDay(transDate(orderPlanEndDayLocalDateTime));
+                            /*璁″垝寮�宸ユ棩=閽i噾璁″垝宸ュ崟瀹屾垚鏃堕棿 -  宸ュ簭鎬诲伐鏃�*/
+                            long seconds = stat.getProcessTotalTime().multiply(new BigDecimal(60)).multiply(new BigDecimal(60)).longValue();
+                            LocalDateTime lastPlanStartDt = orderPlanEndDayLocalDateTime.minusSeconds(seconds);
+                            if(lastPlanStartDt.isBefore(now)){
+                                hasBefore = true;
+                                stat.setProcessPlanStartDay(transDate(now));
+                            }else {
+                                stat.setProcessPlanStartDay(transDate(lastPlanStartDt));
+                            }
+                        }
+                    }
+                    /*褰撳伐鑹哄伐搴忓彿 >= 宸ュ崟褰撳墠宸ュ簭 浠h〃鏄湭鏉ュ伐搴忥紝鎵嶈繘琛岃鍒掑紑宸ユ棩 鍜岃鍒掑畬宸ユ棩鐨勮绠�
+                     * 褰撳伐鑹哄伐搴忓彿 < 宸ュ崟褰撳墠宸ュ簭  杩囧幓宸ュ簭锛屼笉杩涜璁$畻
+                     * */
+                    if( stat.getRouteProcessNumber().compareTo(stat.getCurrentProcessNumber())>=0){
+                        /*鍊掓帓鏃� 涓嬩竴閬撳伐搴忓瓨鍦� 姣斿綋鍓嶆椂闂村皬鐨勮鍒掓椂闂达紝鍒欏綋鍓嶈鍒掑紑濮嬪拰缁撴潫鏃堕棿閮芥槸褰撳墠鏃堕棿*/
+                        if(hasBefore){
+                            stat.setWarning(true);
+                            stat.setProcessPlanEndDay(transDate(now));
+                            stat.setProcessPlanStartDay(transDate(now));
+                        }else{
+                            /*涓嬩竴閬撳伐搴忚鍒掓椂闂撮兘姝e父鏃讹紝*/
+                            if (last != null) {
+                                /*褰撳墠宸ュ簭缁撴潫鏃堕棿=涓嬩竴閬撳伐搴忕殑寮�濮嬫椂闂�*/
+                                stat.setProcessPlanEndDay(last.getProcessPlanStartDay());
+                                /*寮�濮嬫椂闂�=缁撴潫鏃堕棿-鎬诲伐鏃�*/
+                                long seconds = stat.getProcessTotalTime().multiply(new BigDecimal(60)).multiply(new BigDecimal(60)).longValue();
+                                LocalDateTime crtStartDt = transLocalDateTime(last.getProcessPlanStartDay()).minusSeconds(seconds);
+                                /*濡傛灉寮�濮嬫椂闂村皬浜庡綋鍓嶆椂闂�*/
+                                if(crtStartDt.isBefore(now)){
+                                    hasBefore=true;
+                                    stat.setWarning(true);
+                                    stat.setProcessPlanStartDay(transDate(now));
+                                }else {
+                                    stat.setProcessPlanStartDay(transDate(crtStartDt));
+                                }
+                            }
+                        }
+                    }
+                    last = stat;
+                    apsGasPipingRouteStatMapper.insertApsGasPipingRouteStat(stat);
+                }
+                hasBefore=false;
+
+            }
+            apsGasPipingRouteStatMapper.deleteApsGasPipingRouteStatByBatchNum(batchNum);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    };
+
+    private Date transDate(LocalDateTime localDateTime){
+        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
+    }
+
+    private LocalDateTime transLocalDateTime(Date date){
+        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
+    }
+
+    /**
+     * 淇濆瓨閽i噾缁熻鏁版嵁
+     */
+    @Transactional
+    @Override
+    public void saveGasPipingRoutStateList() {
+        String batchNum = IdUtils.fastSimpleUUID();
+        List<ApsGasPipingRouteStat> tempList = apsGasPipingRouteStatMapper.queryTempStat();
+        Map<String, List<ApsGasPipingRouteStat>> groupByOrderNo = tempList.stream().collect(groupingBy(ApsGasPipingRouteStat::getWorkOrderNo));
+
+        LocalDateTime now = LocalDateTime.now();
+        /*寰呬繚瀛樼殑鏁版嵁*/
+        List<ApsGasPipingRouteStat> cptStateList = new ArrayList<>();
+        for (Map.Entry<String, List<ApsGasPipingRouteStat>> entry : groupByOrderNo.entrySet()) {
+            List<ApsGasPipingRouteStat> statPerOrder = entry.getValue();
+            /*num 涓烘牴鎹畬宸ユ椂闂存帓搴忓嚭鐨勫簭鍙凤紝鎸夋鎺掑簭锛屽彲淇濊瘉鏄寜瀹屽伐鏃堕棿鍊掑彊鎺掑垪*/
+            statPerOrder.sort((a, b)->a.getNum().compareTo(b.getNum()));
+            ApsGasPipingRouteStat last=null;
+            /*褰撳墠宸ュ簭鏄惁瀛樺湪 璁″垝寮�宸ユ椂闂� 灏忎簬 褰撳墠鐨勬椂闂达紝濡傛灉瀛樺湪鍚庣画璁剧疆涓哄綋鍓嶆椂闂�*/
+            boolean hasBefore = false;
+            for (int i = 0; i <statPerOrder.size(); i++) {
+                ApsGasPipingRouteStat stat = statPerOrder.get(i);
+                stat.setId(String.valueOf(IdUtil.getSnowflakeNextId()));
+                stat.setBatchNumber(batchNum);
+                stat.setCreateTime(DateUtils.getNowDate());
+                stat.setCreateBy(SecurityUtils.getUsername());
+                stat.setWarning(false);
+                stat.setDelFlag("0");
+                if(i==0){
+                    Date orderPlanEndDay = stat.getOrderPlanEndDay();
+                    LocalDateTime transLocalDateTime = transLocalDateTime(orderPlanEndDay);
+                    LocalTime endOfDay = LocalTime.of(23, 59, 59);
+                    LocalDateTime orderPlanEndDayLocalDateTime =  LocalDateTime.of( transLocalDateTime.toLocalDate(), endOfDay);
+                    if(orderPlanEndDayLocalDateTime.isBefore(now)){
+                        hasBefore = true;
+                        stat.setWarning(true);
+                        stat.setProcessPlanEndDay(transDate(now));
+                        stat.setProcessPlanStartDay(transDate(now));
+                    }else {
+                        /*璁″垝瀹屽伐鏃�=閽i噾璁″垝宸ュ崟瀹屾垚鏃堕棿*/
+                        stat.setProcessPlanEndDay(transDate(orderPlanEndDayLocalDateTime));
+                        /*璁″垝寮�宸ユ棩=閽i噾璁″垝宸ュ崟瀹屾垚鏃堕棿 -  宸ュ簭鎬诲伐鏃�*/
+                        long seconds = stat.getProcessTotalTime().multiply(new BigDecimal(60)).multiply(new BigDecimal(60)).longValue();
+                        LocalDateTime lastPlanStartDt = orderPlanEndDayLocalDateTime.minusSeconds(seconds);
+                        if(lastPlanStartDt.isBefore(now)){
+                            hasBefore = true;
+                            stat.setProcessPlanStartDay(transDate(now));
+                        }else {
+                            stat.setProcessPlanStartDay(transDate(lastPlanStartDt));
+                        }
+                    }
+                }
+                /*褰撳伐鑹哄伐搴忓彿 >= 宸ュ崟褰撳墠宸ュ簭 浠h〃鏄湭鏉ュ伐搴忥紝鎵嶈繘琛岃鍒掑紑宸ユ棩 鍜岃鍒掑畬宸ユ棩鐨勮绠�
+                 * 褰撳伐鑹哄伐搴忓彿 < 宸ュ崟褰撳墠宸ュ簭  杩囧幓宸ュ簭锛屼笉杩涜璁$畻
+                 * */
+                if( stat.getRoadProcessNumber().compareTo(stat.getCurrentProcessNumber())>=0){
+                    /*鍊掓帓鏃� 涓嬩竴閬撳伐搴忓瓨鍦� 姣斿綋鍓嶆椂闂村皬鐨勮鍒掓椂闂达紝鍒欏綋鍓嶈鍒掑紑濮嬪拰缁撴潫鏃堕棿閮芥槸褰撳墠鏃堕棿*/
+                    if(hasBefore){
+                        stat.setWarning(true);
+                        stat.setProcessPlanEndDay(transDate(now));
+                        stat.setProcessPlanStartDay(transDate(now));
+                    }else{
+                        /*涓嬩竴閬撳伐搴忚鍒掓椂闂撮兘姝e父鏃讹紝*/
+                        if (last != null) {
+                            /*褰撳墠宸ュ簭缁撴潫鏃堕棿=涓嬩竴閬撳伐搴忕殑寮�濮嬫椂闂�*/
+                            stat.setProcessPlanEndDay(last.getProcessPlanStartDay());
+                            /*寮�濮嬫椂闂�=缁撴潫鏃堕棿-鎬诲伐鏃�*/
+                            long seconds = stat.getProcessTotalTime().multiply(new BigDecimal(60)).multiply(new BigDecimal(60)).longValue();
+                            LocalDateTime crtStartDt = transLocalDateTime(last.getProcessPlanStartDay()).minusSeconds(seconds);
+                            /*濡傛灉寮�濮嬫椂闂村皬浜庡綋鍓嶆椂闂�*/
+                            if(crtStartDt.isBefore(now)){
+                                hasBefore=true;
+                                stat.setWarning(true);
+                                stat.setProcessPlanStartDay(transDate(now));
+                            }else {
+                                stat.setProcessPlanStartDay(transDate(crtStartDt));
+                            }
+                        }
+                    }
+                }
+               if(stat.getProcessPlanStartDay()!=null){
+                   String[] strNow = new SimpleDateFormat("yyyy-MM-dd").format(stat.getProcessPlanStartDay()).toString().split("-");
+                   stat.setPlanStartYear(strNow[0]);
+                   stat.setPlanStartMonth(strNow[1]);
+                   stat.setPlanStartDay(strNow[2]);
+               }
+                last = stat;
+                cptStateList.add(stat);
+            }
+        }
+        // 鎵归噺鎻掑叆浠ユ彁楂樻�ц兘
+        if (!cptStateList.isEmpty()) {
+            int batchSize = 1000;
+            int size = cptStateList.size();
+            for (int i = 0; i < size; i += batchSize) {
+                int end = Math.min(i + batchSize, size);
+                List<ApsGasPipingRouteStat> batch = cptStateList.subList(i, end);
+                apsGasPipingRouteStatMapper.insertApsGasPipingRouteStatBatch(batch);
+                log.info("鎵归噺鎻掑叆鏁版嵁锛屽紑濮嬩綅缃細{}锛岀粨鏉熶綅缃細{}", i, end);
+            }
+        }
+        apsGasPipingRouteStatMapper.deleteApsGasPipingRouteStatByBatchNum(batchNum);
+        log.info("鎵归噺鎻掑叆鏁版嵁瀹屾垚,batchNum:"+batchNum);
+    }
+
 }

--
Gitblit v1.9.3