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