From b7ae34cfa40d3b68980074f3528470be17ffcceb Mon Sep 17 00:00:00 2001
From: huangjiayang <5265313@qq.com>
Date: 星期一, 28 四月 2025 19:21:36 +0800
Subject: [PATCH] 【UPDATE-BUGFIX】修改气柜管路产能统计无数据工序显示数据

---
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java |  166 ++++++++++++++++++++++++++----------------------------
 1 files changed, 80 insertions(+), 86 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 0522a73..6535423 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,6 +1,5 @@
 package com.aps.core.service.impl;
 
-import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.aps.common.core.utils.DateUtils;
 import com.aps.common.core.utils.uuid.IdUtils;
@@ -11,6 +10,7 @@
 import com.aps.core.mapper.ApsGasPipingRouteStatMapper;
 import com.aps.core.service.IApsGasMaterialUsageService;
 import com.aps.core.service.IApsGasPipingRouteStatService;
+import com.aps.core.service.IApsStandardProcessService;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.usermodel.*;
@@ -24,7 +24,7 @@
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.sql.Timestamp;
+import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -54,6 +54,9 @@
 
     @Autowired
     private IApsGasMaterialUsageService apsGasMaterialUsageService;
+
+    @Autowired
+    private IApsStandardProcessService apsStandardProcessService;
 
     /**
      * 鏌ヨ姘斾綋绠¤矾浜ц兘璐熻浇缁熻
@@ -184,9 +187,9 @@
                     // 涓婁竴閬撳伐搴忕殑缁撴潫鏃堕棿 = 涓婁竴閬撳伐搴忕殑寮�濮嬫椂闂� + 涓婁竴閬撳伐搴忕殑鎬诲伐鏃�
                     if(apsGasPipingRouteStat.getProcessPlanStartDay()==null){
                         LocalDateTime previousProcessPlanStartDay = apsProcessRoutes.get(i - 1).getProcessPlanStartDay().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
-                        long previousProcessTotalTime = apsGasPipingRouteStatList.get(i - 1).getProcessTotalTime().longValue();
-                        LocalDateTime currentProcessPlanStartDay = previousProcessPlanStartDay.plusHours(previousProcessTotalTime);
-                        apsGasPipingRouteStat.setProcessPlanStartDay(Date.from(Timestamp.valueOf(currentProcessPlanStartDay.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).toInstant()));
+                        long seconds = apsGasPipingRouteStatList.get(i - 1).getProcessTotalTime().multiply(new BigDecimal(60)).multiply(new BigDecimal(60)).longValue();
+                        LocalDateTime currentProcessPlanStartDay = previousProcessPlanStartDay.plusSeconds(seconds);
+                        apsGasPipingRouteStat.setProcessPlanStartDay(Date.from(currentProcessPlanStartDay.atZone(ZoneId.systemDefault()).toInstant()));
                     }
                     //鎻掑叆 骞� 鏈� 鏃�
                     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@@ -232,8 +235,18 @@
     public JSONObject getCapacityPlanData(ApsGasPipingRouteStat apsGasPipingRouteStat) {
         JSONObject result = new JSONObject();
         HashSet<String> startPlanTimeSet = new HashSet<>();
-        JSONArray processData = new JSONArray();
+        //宸ュ簭鍒嗙粍缁熻
+        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<>();
             List<ApsGasPipelineCapacityPlan> apsGasPipelineCapacityPlanList = apsGasPipelineCapacityPlanMapper.selectApsGasPipelineCapacityPlanList(new ApsGasPipelineCapacityPlan());
@@ -257,14 +270,10 @@
             }
             apsGasPipingRouteStats = apsGasPipingRouteStatMapper.selectApsGasPipingRouteStatList(apsGasPipingRouteStat);
             //鏍规嵁寮�宸ユ棩杩涜鍗囧簭鎺掑簭
-            apsGasPipingRouteStats.sort((a, b)->a.getPlanStartDay().compareTo(b.getPlanStartDay()));
-            //宸ュ簭鍒嗙粍缁熻
-            HashMap<String, List<ApsResourceDateStat>> processMap = new HashMap<>();
-            List<HashMap<String, List<ApsResourceDateStat>>> processList = new ArrayList<>();
-            HashMap<String, List<ApsResourceDateStat>> processMapMonth = new HashMap<>();
-            List<HashMap<String, List<ApsResourceDateStat>>> processListMonth = new ArrayList<>();
+            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())){
@@ -274,11 +283,13 @@
                 apsResourceDateStat.setPlanDay(LocalDate.parse(planStartDate, formatter));
                 apsResourceDateStat.setResourceName(apsGasPipingRouteStatTemp.getProcessName());
                 //鏌ヨ姘旀煖绠¤矾浜ц兘瑙勫垝琛�
-                apsResourceDateStat.setDesignTimes(apsGasPipingPlanMap.get(apsGasPipingRouteStatTemp.getProcessName())!=null?apsGasPipingPlanMap.get(apsGasPipingRouteStatTemp.getProcessName()).getDayProduceAllNum().intValue():0);
+                apsResourceDateStat.setDesignTimes(apsGasPipingPlanMap.get(apsGasPipingRouteStatTemp.getProcessName())!=null?apsGasPipingPlanMap.get(apsGasPipingRouteStatTemp.getProcessName()).getDayProduceAllNum():new BigDecimal(0));
                 //鏌ヨ鏂欏彿宸ュ簭浜ц兘琛�
-                apsResourceDateStat.setRequireTimes(apsGasPipingRouteStatTemp.getProcessTotalTime().intValue());
-                if(apsResourceDateStat.getDesignTimes()!=0){
-                    apsResourceDateStat.setCapacityLoad(BigDecimal.valueOf(apsResourceDateStat.getRequireTimes()/apsResourceDateStat.getDesignTimes()* 100L));
+                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));
                 }
@@ -289,86 +300,69 @@
                 apsResourceDateStatList.add(apsResourceDateStat);
                 processMap.put(apsGasPipingRouteStatTemp.getProcessName(), apsResourceDateStatList);
             }
+            //鑱氬悎姣忛亾宸ュ簭鐨勫紑宸ユ椂闂村拰浜ц兘
             processMap.forEach((processName, apsResourceDateStatList) -> {
-                HashMap<String, ApsResourceDateStat> dayMap = new HashMap<>();
+                LinkedHashMap<String, ApsResourceDateStat> dayMap = new LinkedHashMap<>();
                 apsResourceDateStatList.forEach(apsResourceDateStat -> {
                     startPlanTimeSet.add(apsResourceDateStat.getPlanDay().toString());
-                    if("month".equals(apsGasPipingRouteStat.getSearchType())){
-                        if(dayMap.containsKey(apsResourceDateStat.getPlanDay().toString())){
-                            ApsResourceDateStat apsResourceDateStatTemp = dayMap.get(apsResourceDateStat.getPlanDay().toString());
-                            apsResourceDateStatTemp.setDesignTimes(apsGasPipingPlanMap.get(processName)!=null?apsGasPipingPlanMap.get(processName).getMonthProduceAllNum().intValue():0);
-                            apsResourceDateStatTemp.setRequireTimes(apsResourceDateStatTemp.getRequireTimes()+apsResourceDateStat.getRequireTimes());
-                            if(apsResourceDateStatTemp.getDesignTimes()!=0){
-                                apsResourceDateStatTemp.setCapacityLoad(BigDecimal.valueOf(apsResourceDateStatTemp.getRequireTimes()/apsResourceDateStatTemp.getDesignTimes()* 100L));
-                            }else{
-                                apsResourceDateStatTemp.setCapacityLoad(BigDecimal.valueOf(0));
-                            }
-                            apsResourceDateStatTemp.setResourceGroupName(processName);
-                            apsResourceDateStatTemp.setPlanDay(apsResourceDateStat.getPlanDay());
-                            dayMap.put(apsResourceDateStat.getPlanDay().toString(), apsResourceDateStatTemp);
+                    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));
                         }else{
-                            dayMap.put(apsResourceDateStat.getPlanDay().toString(), apsResourceDateStat);
+                            apsResourceDateStatTemp.setDesignTimes(apsGasPipingPlanMap.get(processName)!=null?apsGasPipingPlanMap.get(processName).getDayProduceAllNum():new BigDecimal(0));
                         }
+                        apsResourceDateStatTemp.setRequireTimes(apsResourceDateStatTemp.getRequireTimes().add(apsResourceDateStat.getRequireTimes()));
+                        if(apsResourceDateStatTemp.getDesignTimes().compareTo(BigDecimal.ZERO) > 0){
+                            apsResourceDateStat.setCapacityLoad(apsResourceDateStat.getRequireTimes()
+                                    .divide(apsResourceDateStat.getDesignTimes(), 2, RoundingMode.HALF_UP)
+                                    .multiply(new BigDecimal(100)));
+                        }else{
+                            apsResourceDateStatTemp.setCapacityLoad(new BigDecimal(0));
+                        }
+                        apsResourceDateStatTemp.setResourceGroupName(processName);
+                        apsResourceDateStatTemp.setPlanDay(apsResourceDateStat.getPlanDay());
+                        dayMap.put(apsResourceDateStat.getPlanDay().toString(), apsResourceDateStatTemp);
+                    }else{
+                        dayMap.put(apsResourceDateStat.getPlanDay().toString(), apsResourceDateStat);
                     }
                 });
-                if("month".equals(apsGasPipingRouteStat.getSearchType())){
-                    List<ApsResourceDateStat> tempList = new ArrayList<>();
-                    dayMap.forEach((key, value) -> {
-                        tempList.add(value);
-                    });
-                    processMapMonth.put(processName, tempList);
-                }
+                List<ApsResourceDateStat> tempList = new ArrayList<>();
+                dayMap.forEach((key, value) -> {
+                    tempList.add(value);
+                });
+                HashMap<String, List<ApsResourceDateStat>> temp = new HashMap<>();
+                temp.put(processName, tempList);
+                processList.add(temp);
             });
+            //鎺掑簭鏃堕棿鏍囬
             List<String> sortedStartPlanTimeList = new ArrayList<>(startPlanTimeSet);
             Collections.sort(sortedStartPlanTimeList);
-//            processMap.forEach((processName, apsResourceDateStatList) -> {
-//                HashMap<String, ApsResourceDateStat> dayMap = new HashMap<>();
-//                apsResourceDateStatList.forEach(apsResourceDateStat -> {
-//                    startPlanTimeSet.add(apsResourceDateStat.getPlanDay().toString());
-//                    if(dayMap.containsKey(apsResourceDateStat.getPlanDay().toString())){
-//                        ApsResourceDateStat apsResourceDateStatTemp = dayMap.get(apsResourceDateStat.getPlanDay().toString());
-//                        if("day".equals(apsGasPipingRouteStat.getSearchType())){
-//                            apsResourceDateStatTemp.setDesignTimes(apsResourceDateStatTemp.getDesignTimes()+apsResourceDateStat.getDesignTimes());
-//                        }else if("month".equals(apsGasPipingRouteStat.getSearchType())){
-//                            apsResourceDateStatTemp.setDesignTimes(apsGasPipingPlanMap.get(processName)!=null?apsGasPipingPlanMap.get(processName).getMonthProduceAllNum().intValue():0);
-//                        }
-//                        apsResourceDateStatTemp.setRequireTimes(apsResourceDateStatTemp.getRequireTimes()+apsResourceDateStat.getRequireTimes());
-//                        if(apsResourceDateStatTemp.getDesignTimes()!=0){
-//                            apsResourceDateStatTemp.setCapacityLoad(BigDecimal.valueOf(apsResourceDateStatTemp.getRequireTimes()/apsResourceDateStatTemp.getDesignTimes()* 100L));
-//                        }
-//                        apsResourceDateStatTemp.setResourceGroupName(processName);
-//                        dayMap.put(apsResourceDateStat.getPlanDay().toString(), apsResourceDateStatTemp);
-//                    }else{
-//                        dayMap.put(apsResourceDateStat.getPlanDay().toString(), apsResourceDateStat);
-//                    }
-//                });
-//                JSONArray tempList = new JSONArray();
-//                dayMap.forEach((key, value) -> {
-//                    JSONObject temp = new JSONObject();
-//                    temp.put("planDay", key);
-//                    temp.put("designTimes", value.getDesignTimes());
-//                    temp.put("requireTimes", value.getRequireTimes());
-//                    temp.put("capacityLoad", value.getCapacityLoad());
-//                    temp.put("resourceGroupName", value.getResourceGroupName());
-//                    tempList.add(temp);
-//                });
-//                processData.add(new JSONObject().put(processName, tempList));
-//            });
-            if("month".equals(apsGasPipingRouteStat.getSearchType())){
-                for (String key : processMapMonth.keySet()) {
-                    HashMap<String, List<ApsResourceDateStat>> temp = new HashMap<>();
-                    temp.put(key, processMapMonth.get(key));
-                    processListMonth.add(temp);
+            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();
+                    if(apsResourceDateStatList.size()<=0){
+                        for(String tempTime:sortedStartPlanTimeList){
+                            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));
+                            }else{
+                                apsResourceDateStat.setDesignTimes(apsGasPipingPlanMap.get(entry.getKey())!=null?apsGasPipingPlanMap.get(entry.getKey()).getDayProduceAllNum():new BigDecimal(0));
+                            }
+                            apsResourceDateStat.setRequireTimes(new BigDecimal(0));
+                            apsResourceDateStat.setCapacityLoad(new BigDecimal(0));
+                            apsResourceDateStat.setResourceName(entry.getKey());
+                            apsResourceDateStat.setResourceGroupName(entry.getKey());
+                            apsResourceDateStatList.add(apsResourceDateStat);
+                        }
+                        temp.put(entry.getKey(), apsResourceDateStatList);
+                        processList.set(i, temp);
+                    }
                 }
-                result.put("planTable", processListMonth);
-            }else{
-                for (String key : processMap.keySet()) {
-                    HashMap<String, List<ApsResourceDateStat>> temp = new HashMap<>();
-                    temp.put(key, processMap.get(key));
-                    processList.add(temp);
-                }
-                result.put("planTable", processList);
             }
+            result.put("planTable", processList);
             result.put("planTitle", sortedStartPlanTimeList);
         } catch (Exception e) {
             e.printStackTrace();
@@ -431,8 +425,8 @@
                     dataRow.createCell(0).setCellValue(resourceName);
                     for (int j = 0; j < resourceDateStats.size(); j++) {
                         ApsResourceDateStat apsResourceDateStat = resourceDateStats.get(j);
-                        dataRow.createCell(j*3+1).setCellValue(apsResourceDateStat.getDesignTimes());
-                        dataRow.createCell(j*3+2).setCellValue(apsResourceDateStat.getRequireTimes());
+                        dataRow.createCell(j*3+1).setCellValue(apsResourceDateStat.getDesignTimes().doubleValue());
+                        dataRow.createCell(j*3+2).setCellValue(apsResourceDateStat.getRequireTimes().doubleValue());
                         if(apsResourceDateStat.getCapacityLoad()!=null){
                             dataRow.createCell(j*3+3).setCellValue(apsResourceDateStat.getCapacityLoad().doubleValue()+"%");
                         }else{

--
Gitblit v1.9.3