From a40d3116690c0584e933b2f76ea2951e528c297d Mon Sep 17 00:00:00 2001 From: bluejay <253316343@qq.com> Date: 星期六, 12 四月 2025 11:20:30 +0800 Subject: [PATCH] 零件统计数据查询 --- aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPartRouteStatServiceImpl.java | 87 +++++++++++++++++++++++++++---------------- 1 files changed, 55 insertions(+), 32 deletions(-) diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPartRouteStatServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPartRouteStatServiceImpl.java index cada14b..db51a02 100644 --- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPartRouteStatServiceImpl.java +++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPartRouteStatServiceImpl.java @@ -1,10 +1,12 @@ package com.aps.core.service.impl; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.*; +import java.util.stream.Collectors; import com.aps.common.core.utils.uuid.IdUtils; import com.aps.common.core.web.domain.AjaxResult; @@ -29,6 +31,7 @@ { @Autowired private ApsPartRouteStatMapper apsPartRouteStatMapper; + @Autowired private ApsResourceGroupMapper resourceGroupMapper; /** @@ -109,13 +112,13 @@ /** * 鏌ヨ闆朵欢宸ュ簭骞舵洿鏂拌鍒掑紑宸ユ棩鏈� * */ + @Override public void updatePartRoutPlanDate() { List<ApsPartRouteStat> tempList = apsPartRouteStatMapper.selectPartRoutStat(); /*瀵箃empList 鎸夌収 workOrderNo 杩涜鍒嗙粍*/ Map<String, List<ApsPartRouteStat>> groupByWorkOrderNo = tempList.stream().collect(groupingBy(ApsPartRouteStat::getWorkOrderNo)); /*鏈璁$畻鎵规鍙�*/ String batchNum = IdUtils.fastSimpleUUID(); - apsPartRouteStatMapper.deleteLastBatch(batchNum); for (Map.Entry<String, List<ApsPartRouteStat>> entry : groupByWorkOrderNo.entrySet()) { /*鍙栧嚭姣忎釜闆朵欢宸ュ崟鐨勫伐鑹鸿矾绾夸俊鎭�*/ List<ApsPartRouteStat> apsPartRouteStatList = entry.getValue(); @@ -124,7 +127,7 @@ /*涓存椂淇濆瓨 涓婁竴閬撳伐搴忕殑宸ュ簭鎬诲伐鏃�*/ ApsPartRouteStat last=null; for (int i = 0; i <apsPartRouteStatList.size(); i++) { - ApsPartRouteStat stat = apsPartRouteStatList.get(0); + ApsPartRouteStat stat = apsPartRouteStatList.get(i); /*鍒ゆ柇褰撳墠宸ュ簭 褰撳墠宸ュ簭鍙湁涓�鏉�*/ if (stat.getCurrentProcessNumber().equals(stat.getRoadProcessNumber())) { /* 瀵� stat.getProcessPlanStartDay() 鍜屽綋鍓嶆棩鏈� 杩涜瀵规瘮锛屽彧瀵规瘮鍒版棩锛屼笉鐢ㄧ鍗佸垎绉�*/ @@ -133,7 +136,7 @@ } } /*鏈紑宸ュ伐搴忕殑璁″垝寮�宸ユ棩=涓婁竴閬撳伐搴忕殑璁″垝寮�宸ユ棩+涓婁竴閬撳伐搴忕殑宸ュ簭鎬诲伐鏃躲��*/ - if (stat.getCurrentProcessNumber().compareTo(stat.getRoadProcessNumber()) > 0) { + if (stat.getCurrentProcessNumber().compareTo(stat.getRoadProcessNumber()) < 0) { if (last != null) { stat.setProcessPlanStartDay(last.getProcessPlanStartDay().plusHours(last.getProcessTotalTime())); } @@ -152,38 +155,58 @@ @Override public AjaxResult selectResourceDateStat() { /*鏌ュ嚭鎵�鏈夌粺璁$殑鏁版嵁*/ + AjaxResult result = new AjaxResult(200, "鐢熸垚鎴愬姛"); List<ApsResourceDateStat> list = apsPartRouteStatMapper.selectResourceDateStat(); - /*姹傚嚭璁″垝鐨勬渶澶ф椂闂达紝娌℃湁 璁剧疆涓哄綋鍓嶆椂闂�+15澶�*/ - ApsResourceDateStat apsResourceDateStat = list.stream().max(Comparator.comparing(ApsResourceDateStat::getPlanDay)).orElse(null); - LocalDate maxPlanDay = LocalDate.now().plus(15, ChronoUnit.DAYS); - if(apsResourceDateStat!=null){ - maxPlanDay=apsResourceDateStat.getPlanDay(); - } - /*缁勭粐鍑烘棩鏈熻〃澶�*/ - List<String> planDays = new ArrayList<>(); - LocalDate startDay = LocalDate.now(); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - while (startDay .isBefore( maxPlanDay)){ - planDays.add(startDay.format(formatter)); - startDay=startDay.plus(1,ChronoUnit.DAYS); - } - /*鏍规嵁鏃ユ湡琛ㄥご鐨勯『搴忥紝缁勭粐鍑烘瘡涓棩鏈熶笅鐨勭粺璁¢」鐩�*/ - List<ApsResourceDateStat> targetList = new ArrayList<>(); - for (String planDay : planDays) { - ApsResourceDateStat apsResourceDateStat1 = list.stream() - .filter(item -> item.getPlanDay().equals(LocalDate.parse(planDay, formatter))) - .findFirst().orElse(null); - if(apsResourceDateStat1!=null){ - targetList.add(apsResourceDateStat1); - }else{ - ApsResourceDateStat apsResourceDateStat2 = new ApsResourceDateStat(); - apsResourceDateStat2.setPlanDay( LocalDate.parse(planDay, formatter)); - targetList.add(apsResourceDateStat2); + if (!list.isEmpty()) { + /*姹傚嚭璁″垝鐨勬渶澶ф椂闂达紝娌℃湁 璁剧疆涓哄綋鍓嶆椂闂�+15澶�*/ + ApsResourceDateStat apsResourceDateStat = list.stream().max(Comparator.comparing(ApsResourceDateStat::getPlanDay)).orElse(null); + LocalDate maxPlanDay = LocalDate.now().plus(15, ChronoUnit.DAYS); + if (apsResourceDateStat != null) { + maxPlanDay = apsResourceDateStat.getPlanDay(); } + /*缁勭粐鍑烘棩鏈熻〃澶�*/ + List<String> planDays = new ArrayList<>(); + LocalDate startDay = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + while (!startDay.isAfter(maxPlanDay)) { + planDays.add(startDay.format(formatter)); + startDay = startDay.plus(1, ChronoUnit.DAYS); + } + /*缁勭粐鍑哄垪澶存暟鎹�*/ + List<String> resourceNames =list.stream().map(ApsResourceDateStat::getResourceName).distinct().toList(); + /*鍑嗗璧勬簮缁勪俊鎭�*/ + List<Map<String, List<ApsResourceDateStat>>> targetList = new ArrayList<>(); + resourceNames.forEach(resourceName -> { + /*鏍规嵁鏃ユ湡琛ㄥご鐨勯『搴忥紝缁勭粐鍑烘瘡涓棩鏈熶笅鐨勭粺璁¢」鐩�*/ + Map<String, List<ApsResourceDateStat>> maps = new HashMap<>(Map.of()); + List<ApsResourceDateStat> currentDaysResouces=new ArrayList<>(); + for (String planDay : planDays) { + /*鏌ユ壘褰撳墠璁″垝鏃ユ湡涓嬬殑鎵�鏈夎祫婧愮粍鐨勬暟鎹�*/ + Optional<ApsResourceDateStat> first = list.stream() + .filter(item -> + item.getPlanDay().equals(LocalDate.parse(planDay, formatter)) + && item.getResourceGroupName().equals(resourceName) + ).collect(Collectors.toList()).stream().findFirst(); + if(first.isPresent()){ + currentDaysResouces.add(first.get()); + } + else { + ApsResourceDateStat empty = new ApsResourceDateStat(); + empty.setPlanDay(LocalDate.parse(planDay, formatter)); + empty.setDesignTimes(0); + empty.setRequireTimes(0); + empty.setResourceName(resourceName); + empty.setResourceGroupName(resourceName); + empty.setCapacityLoad(BigDecimal.ZERO); + currentDaysResouces.add(empty); + } + }; + maps.put(resourceName, currentDaysResouces); + targetList.add(maps); + }); + result.put("planTitle", planDays); + result.put("planTable", targetList); } - AjaxResult result=new AjaxResult(200,"鐢熸垚鎴愬姛") - .put("planTitle",planDays) - .put("planTable",targetList); return result; } -- Gitblit v1.9.3