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