From edc00f6fbafa9bb74f736e47cafd000fb33ef4f1 Mon Sep 17 00:00:00 2001 From: zhanghl <253316343@qq.com> Date: 星期一, 28 四月 2025 20:39:00 +0800 Subject: [PATCH] 气体管路 --- aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipingRouteStatServiceImpl.java | 184 +++++++++++++++++++++++---------------------- 1 files changed, 93 insertions(+), 91 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..c0cbf3a 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"); @@ -200,9 +203,9 @@ // apsGasMaterialUsage.setItemNumber(apsGasPipingPlan.getItemNumber()); // apsGasMaterialUsage.setProcessName(apsProcessRoute.getProcessName()); // List<ApsGasMaterialUsage> apsGasMaterialUsageList = apsGasMaterialUsageService.selectApsGasMaterialUsageList(apsGasMaterialUsage); - apsGasPipingRouteStat.setStandardDosage(apsProcessRoute.getStandardTime().multiply(apsGasPipingPlan.getProductionQuantity())); +// apsGasPipingRouteStat.setStandardDosage(apsProcessRoute.getStandardTime().multiply(apsGasPipingPlan.getProductionQuantity())); //宸ュ簭鎬荤敤閲� = 鏍囧噯鐢ㄩ噺*鐢熶骇鏁伴噺 - apsGasPipingRouteStat.setProcessTotalDosage(apsGasPipingRouteStat.getStandardDosage().multiply(apsGasPipingPlan.getProductionQuantity())); +// apsGasPipingRouteStat.setProcessTotalDosage(apsGasPipingRouteStat.getStandardDosage().multiply(apsGasPipingPlan.getProductionQuantity())); apsGasPipingRouteStat.setCreateTime(DateUtils.getNowDate()); apsGasPipingRouteStat.setCreateBy("auto"); apsGasPipingRouteStat.setBatchNumber(batchNum); @@ -232,11 +235,31 @@ public JSONObject getCapacityPlanData(ApsGasPipingRouteStat apsGasPipingRouteStat) { JSONObject result = new JSONObject(); HashSet<String> startPlanTimeSet = new HashSet<>(); - JSONArray processData = new JSONArray(); + YearMonth yearMonth = YearMonth.parse(apsGasPipingRouteStat.getSearchEndDate()); + int daysInMonth = yearMonth.lengthOfMonth(); + //宸ュ簭鍒嗙粍缁熻 + 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()); + ApsGasPipelineCapacityPlan searchCapacityPlan = new ApsGasPipelineCapacityPlan(); + searchCapacityPlan.setMajor(apsGasPipingRouteStat.getMajor().equals("gas")?"姘旀煖":"绠¤矾"); + if("day".equals(apsGasPipingRouteStat.getSearchType())){ + searchCapacityPlan.setYear(yearMonth.getYear()+""); + searchCapacityPlan.setMonth(yearMonth.getMonthValue()+""); + }else if("month".equals(apsGasPipingRouteStat.getSearchType())){ + searchCapacityPlan.setYear(yearMonth.getYear()+""); + } + List<ApsGasPipelineCapacityPlan> apsGasPipelineCapacityPlanList = apsGasPipelineCapacityPlanMapper.selectApsGasPipelineCapacityPlanList(searchCapacityPlan); apsGasPipelineCapacityPlanList.forEach(apsGasPipelineCapacityPlan -> { apsGasPipingPlanMap.put(apsGasPipelineCapacityPlan.getProcessName(),apsGasPipelineCapacityPlan); }); @@ -244,8 +267,6 @@ DateTimeFormatter formatter = null; List<ApsGasPipingRouteStat> apsGasPipingRouteStats; SimpleDateFormat simpleDateFormat = null; - YearMonth yearMonth = YearMonth.parse(apsGasPipingRouteStat.getSearchEndDate()); - int daysInMonth = yearMonth.lengthOfMonth(); apsGasPipingRouteStat.setSearchStartDate(apsGasPipingRouteStat.getSearchStartDate()+"-01 00:00:00"); apsGasPipingRouteStat.setSearchEndDate(apsGasPipingRouteStat.getSearchEndDate()+"-"+ daysInMonth +" 23:59:59"); if("day".equals(apsGasPipingRouteStat.getSearchType())){ @@ -257,14 +278,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 +291,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 +308,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 +433,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