From f176e23977ff478ba2306383ea38d91f3a24fffd Mon Sep 17 00:00:00 2001
From: huangjiayang <5265313@qq.com>
Date: 星期二, 29 四月 2025 08:37:46 +0800
Subject: [PATCH] 【UPDATE-BUGFIX】修改获取设计产能数BUG

---
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java |  157 ++++++++++++----------------------------------------
 1 files changed, 37 insertions(+), 120 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 72ab84e..5557bab 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
@@ -26,11 +26,12 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
-import java.time.*;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.YearMonth;
+import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
-
-import static java.util.stream.Collectors.groupingBy;
 
 /**
  * 姘斾綋绠¤矾浜ц兘璐熻浇缁熻Service涓氬姟灞傚鐞�
@@ -144,10 +145,10 @@
             apsGasPipingPlans.forEach(apsGasPipingPlan -> {
                 List<ApsProcessRoute> apsProcessRoutes = apsGasPipingPlan.getApsProcessRoutes();
                 //鎸夌収宸ュ簭搴忓彿鍗囧簭鎺掑簭
-                apsProcessRoutes.sort((a, b)->a.getProcessNumber().compareTo(b.getProcessNumber()));
+                apsProcessRoutes.sort((a, b)->b.getProcessNumber().compareTo(a.getProcessNumber()));
                 //鏄惁鎵惧埌褰撳墠宸ュ簭
-                boolean isFind = false;
-                ApsProcessRoute preApsProcessRoute = null;
+                boolean isCurrentProcess = false;
+                ApsGasPipingRouteStat preApsProcessRoute = null;
                 for (int i=0;i<apsProcessRoutes.size();i++){
                     ApsProcessRoute apsProcessRoute = apsProcessRoutes.get(i);
                     ApsGasPipingRouteStat apsGasPipingRouteStat = new ApsGasPipingRouteStat();
@@ -169,8 +170,8 @@
                     apsGasPipingRouteStat.setMajor(apsGasPipingPlan.getPlanType());
                     //宸ュ簭鎬诲伐鏃� 绛変簬 鏍囧噯宸ユ椂*鐢熶骇鏁伴噺
                     apsGasPipingRouteStat.setProcessTotalTime(apsProcessRoute.getStandardTime().multiply(apsGasPipingPlan.getProductionQuantity()));
-                    //璁″垝寮�宸ユ棩
-                    if(apsGasPipingRouteStat.getCurrentProcessNumber().equals(apsGasPipingRouteStat.getRoadProcessNumber())) {
+                    //璁″垝寮�宸ユ棩 濡傛灉鏄綋鍓嶅簭
+                    if(apsGasPipingRouteStat.getCurrentProcessNumber().toString().equals(apsGasPipingRouteStat.getRoadProcessNumber())) {
                         /* 瀵� stat.getProcessPlanStartDay() 鍜屽綋鍓嶆棩鏈� 杩涜瀵规瘮锛屽彧瀵规瘮鍒版棩锛屼笉鐢ㄧ鍗佸垎绉�*/
                         LocalDate startLocalDate = LocalDate.ofInstant(apsProcessRoute.getProcessPlanStartDay().toInstant(), ZoneId.systemDefault());
                         LocalDate nowLocalDate = LocalDate.now();
@@ -179,17 +180,23 @@
                         }else{
                             apsGasPipingRouteStat.setProcessPlanStartDay(apsProcessRoute.getProcessPlanStartDay());
                         }
-                        isFind = true;
-                    }
-                    if(!isFind){
-                        continue;
-                    }
-                    // 涓婁竴閬撳伐搴忕殑缁撴潫鏃堕棿 = 涓婁竴閬撳伐搴忕殑寮�濮嬫椂闂� + 涓婁竴閬撳伐搴忕殑鎬诲伐鏃�
-                    if(apsGasPipingRouteStat.getProcessPlanStartDay()==null){
-                        LocalDateTime previousProcessPlanStartDay = preApsProcessRoute.getProcessPlanStartDay().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
-                        long seconds = preApsProcessRoute.getStandardTime().multiply(apsGasPipingPlan.getProductionQuantity()).multiply(new BigDecimal(60)).multiply(new BigDecimal(60)).longValue();
-                        LocalDateTime currentProcessPlanStartDay = previousProcessPlanStartDay.plusSeconds(seconds);
-                        apsGasPipingRouteStat.setProcessPlanStartDay(Date.from(currentProcessPlanStartDay.atZone(ZoneId.systemDefault()).toInstant()));
+                        apsGasPipingRouteStat.setProcessPlanEndDay(apsProcessRoute.getProcessPlanEndDay());
+                        isCurrentProcess = true;
+                    }else{
+                        // 涓婁竴閬撳伐搴忕殑缁撴潫鏃堕棿 = 涓婁竴閬撳伐搴忕殑寮�濮嬫椂闂� + 涓婁竴閬撳伐搴忕殑鎬诲伐鏃�
+                        if(i==0){
+                            apsGasPipingRouteStat.setProcessPlanEndDay(apsGasPipingPlan.getPlanEndDay());
+                            LocalDateTime 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()));
+                        }else{
+                            apsGasPipingRouteStat.setProcessPlanEndDay(preApsProcessRoute.getProcessPlanEndDay());
+                            LocalDateTime 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()));
+                        }
                     }
                     //鎻掑叆 骞� 鏈� 鏃�
                     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@@ -211,7 +218,10 @@
                     apsGasPipingRouteStat.setBatchNumber(batchNum);
                     apsGasPipingRouteStat.setId(IdUtils.fastSimpleUUID());
                     apsGasPipingRouteStatList.add(apsGasPipingRouteStat);
-                    preApsProcessRoute = apsProcessRoute;
+                    preApsProcessRoute = apsGasPipingRouteStat;
+                    if(isCurrentProcess){
+                        break;
+                    }
                 }
             });
             List<ApsGasPipingRouteStat> tempInsertList = new ArrayList<>();
@@ -265,13 +275,11 @@
                 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);
-                for (String yearMonthStr : yearMonths) {
-                    startPlanTimeSet.add(yearMonthStr);
-                }
+                startPlanTimeSet.addAll(yearMonths);
             }
             List<ApsGasPipelineCapacityPlan> apsGasPipelineCapacityPlanList = apsGasPipelineCapacityPlanMapper.selectApsGasPipelineCapacityPlanList(searchCapacityPlan);
             apsGasPipelineCapacityPlanList.forEach(apsGasPipelineCapacityPlan -> {
-                apsGasPipingPlanMap.put(apsGasPipelineCapacityPlan.getProcessName(),apsGasPipelineCapacityPlan);
+                apsGasPipingPlanMap.put(apsGasPipelineCapacityPlan.getProcessName()+"-"+apsGasPipelineCapacityPlan.getYear()+"-"+(Integer.parseInt(apsGasPipelineCapacityPlan.getMonth())<10?"0"+apsGasPipelineCapacityPlan.getMonth():apsGasPipelineCapacityPlan.getMonth()),apsGasPipelineCapacityPlan);
             });
             //璁$畻鏃ヤ骇鑳芥暟鎹�
             DateTimeFormatter formatter = null;
@@ -301,7 +309,7 @@
                 apsResourceDateStat.setPlanDay(LocalDate.parse(planStartDate, formatter));
                 apsResourceDateStat.setResourceName(apsGasPipingRouteStatTemp.getProcessName());
                 //鏌ヨ姘旀煖绠¤矾浜ц兘瑙勫垝琛�
-                apsResourceDateStat.setDesignTimes(apsGasPipingPlanMap.get(apsGasPipingRouteStatTemp.getProcessName())!=null?apsGasPipingPlanMap.get(apsGasPipingRouteStatTemp.getProcessName()).getDayProduceAllNum():new BigDecimal(0));
+                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){
@@ -326,9 +334,9 @@
                     if(dayMap.containsKey(apsResourceDateStat.getPlanDay().toString())){
                         ApsResourceDateStat apsResourceDateStatTemp = dayMap.get(apsResourceDateStat.getPlanDay().toString());
                         if("month".equals(apsGasPipingRouteStat.getSearchType())){
-                            apsResourceDateStatTemp.setDesignTimes(apsGasPipingPlanMap.get(processName)!=null?apsGasPipingPlanMap.get(processName).getMonthProduceAllNum():new BigDecimal(0));
+                            apsResourceDateStatTemp.setDesignTimes(apsGasPipingPlanMap.get(processName+"-"+apsResourceDateStat.getPlanDay().toString().substring(0,7))!=null?apsGasPipingPlanMap.get(processName+"-"+apsResourceDateStat.getPlanDay().toString().substring(0,7)).getMonthProduceAllNum():new BigDecimal(0));
                         }else{
-                            apsResourceDateStatTemp.setDesignTimes(apsGasPipingPlanMap.get(processName)!=null?apsGasPipingPlanMap.get(processName).getDayProduceAllNum():new BigDecimal(0));
+                            apsResourceDateStatTemp.setDesignTimes(apsGasPipingPlanMap.get(processName+"-"+apsResourceDateStat.getPlanDay().toString().substring(0,7))!=null?apsGasPipingPlanMap.get(processName+"-"+apsResourceDateStat.getPlanDay().toString().substring(0,7)).getDayProduceAllNum():new BigDecimal(0));
                         }
                         apsResourceDateStatTemp.setRequireTimes(apsResourceDateStatTemp.getRequireTimes().add(apsResourceDateStat.getRequireTimes()));
                         if(apsResourceDateStatTemp.getDesignTimes().compareTo(BigDecimal.ZERO) > 0){
@@ -375,9 +383,9 @@
                             ApsResourceDateStat apsResourceDateStat = new ApsResourceDateStat();
                             apsResourceDateStat.setPlanDay(LocalDate.parse(tempTime, formatter));
                             if ("month".equals(apsGasPipingRouteStat.getSearchType())) {
-                                apsResourceDateStat.setDesignTimes(apsGasPipingPlanMap.get(entry.getKey()) != null ? apsGasPipingPlanMap.get(entry.getKey()).getMonthProduceAllNum() : new BigDecimal(0));
+                                apsResourceDateStat.setDesignTimes(apsGasPipingPlanMap.get(entry.getKey()+"-"+tempTime.substring(0,7)) != null ? apsGasPipingPlanMap.get(entry.getKey()+"-"+tempTime.substring(0,7)).getMonthProduceAllNum() : new BigDecimal(0));
                             } else {
-                                apsResourceDateStat.setDesignTimes(apsGasPipingPlanMap.get(entry.getKey()) != null ? apsGasPipingPlanMap.get(entry.getKey()).getDayProduceAllNum() : new BigDecimal(0));
+                                apsResourceDateStat.setDesignTimes(apsGasPipingPlanMap.get(entry.getKey()+"-"+tempTime.substring(0,7)) != null ? apsGasPipingPlanMap.get(entry.getKey()+"-"+tempTime.substring(0,7)).getDayProduceAllNum() : new BigDecimal(0));
                             }
                             apsResourceDateStat.setRequireTimes(new BigDecimal(0));
                             apsResourceDateStat.setCapacityLoad(new BigDecimal(0));
@@ -503,96 +511,5 @@
         }
 
         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());
     }
 }

--
Gitblit v1.9.3