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/resources/mapper/core/ApsPartRouteStatMapper.xml                           |   54 ++++++++-----
 aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPartRouteStatServiceImpl.java            |   87 +++++++++++++--------
 aps-modules/aps-core/src/main/java/com/aps/core/controller/ApsPartRouteStatController.java               |   21 ++++
 aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsResourceGroupTempController.java |    2 
 aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsResourceDateStat.java                          |   52 ++++++++++++
 aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPartRouteStatService.java                    |    2 
 6 files changed, 160 insertions(+), 58 deletions(-)

diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/ApsPartRouteStatController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/ApsPartRouteStatController.java
index 72bfa43..88847a3 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/ApsPartRouteStatController.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/ApsPartRouteStatController.java
@@ -100,10 +100,25 @@
     {
         return toAjax(apsPartRouteStatService.deleteApsPartRouteStatByIds(ids));
     }
-    @GetMapping("/query")
-    public AjaxResult queryStat()
+
+    /**
+     * 1.鏍规嵁鐜版湁闆朵欢璁″垝 鍜屽伐鑹鸿矾绾裤�佽祫婧愭睜淇℃伅 鏇存柊缁熻琛�
+     * */
+    @PostMapping("/updateStat")
+    public AjaxResult updateStat()
     {
-        return apsPartRouteStatService.selectResourceDateStat();
+        apsPartRouteStatService.updatePartRoutPlanDate();
+        return success();
     }
 
+    /***
+    * 2. 鏍规嵁鏃ユ湡銆佸伐鑹鸿矾绾裤�佽祫婧愭睜淇℃伅 鏌ヨ缁熻琛�
+    * */
+    @GetMapping("/query")
+    public AjaxResult query()
+    {
+      return   apsPartRouteStatService.selectResourceDateStat();
+    }
+
+
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsResourceGroupTempController.java b/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsResourceGroupTempController.java
index 6fbfd15..58f2b2d 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsResourceGroupTempController.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/controller/basicData/ApsResourceGroupTempController.java
@@ -34,7 +34,7 @@
     @GetMapping("/list")
     public TableDataInfo list(ApsResourceGroupTemp apsResourceGroupTemp)
     {
-        startPage();
+        //startPage();
         List<ApsResourceGroupTemp> list = apsResourceGroupTempService.selectApsResourceGroupTempList(apsResourceGroupTemp);
         return getDataTable(list);
     }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsResourceDateStat.java b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsResourceDateStat.java
index 4546c8c..5ea6181 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsResourceDateStat.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsResourceDateStat.java
@@ -1,6 +1,5 @@
 package com.aps.core.domain;
 
-import lombok.Data;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
@@ -8,11 +7,60 @@
 /*
 * 鐢ㄤ簬缁熻璧勬簮缁勬棩璁″垝鏁版嵁
 * */
-@Data
+
 public class ApsResourceDateStat {
+    public LocalDate getPlanDay() {
+        return planDay;
+    }
+
+    public void setPlanDay(LocalDate planDay) {
+        this.planDay = planDay;
+    }
+
+    public Integer getDesignTimes() {
+        return designTimes;
+    }
+
+    public void setDesignTimes(Integer designTimes) {
+        this.designTimes = designTimes;
+    }
+
+    public String getResourceName() {
+        return resourceName;
+    }
+
+    public void setResourceName(String resourceName) {
+        this.resourceName = resourceName;
+    }
+
+    public Integer getRequireTimes() {
+        return requireTimes;
+    }
+
+    public void setRequireTimes(Integer requireTimes) {
+        this.requireTimes = requireTimes;
+    }
+
+    public BigDecimal getCapacityLoad() {
+        return capacityLoad;
+    }
+
+    public void setCapacityLoad(BigDecimal capacityLoad) {
+        this.capacityLoad = capacityLoad;
+    }
+
+    public String getResourceGroupName() {
+        return resourceGroupName;
+    }
+
+    public void setResourceGroupName(String resourceGroupName) {
+        this.resourceGroupName = resourceGroupName;
+    }
+
     private LocalDate planDay;
     private String resourceName;
     private Integer requireTimes;
     private Integer designTimes;
     private BigDecimal capacityLoad;
+    private String resourceGroupName;
 }
diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPartRouteStatService.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPartRouteStatService.java
index 22e1d8b..8500f2b 100644
--- a/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPartRouteStatService.java
+++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/IApsPartRouteStatService.java
@@ -61,5 +61,7 @@
      */
     public int deleteApsPartRouteStatById(String id);
 
+    void updatePartRoutPlanDate();
+
     AjaxResult selectResourceDateStat();
 }
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;
     }
 
diff --git a/aps-modules/aps-core/src/main/resources/mapper/core/ApsPartRouteStatMapper.xml b/aps-modules/aps-core/src/main/resources/mapper/core/ApsPartRouteStatMapper.xml
index 9c18f5e..250f555 100644
--- a/aps-modules/aps-core/src/main/resources/mapper/core/ApsPartRouteStatMapper.xml
+++ b/aps-modules/aps-core/src/main/resources/mapper/core/ApsPartRouteStatMapper.xml
@@ -54,11 +54,12 @@
             <if test="productionQuantity != null">production_quantity,</if>
             <if test="standardTime != null">standard_time,</if>
             <if test="processTotalTime != null">process_total_time,</if>
-            <if test="processPlanStartDay != null and processPlanStartDay != ''">process_plan_start_day,</if>
+            <if test="processPlanStartDay != null ">process_plan_start_day,</if>
             <if test="designTimes != null">design_times,</if>
             <if test="delFlag != null">del_flag,</if>
             <if test="createBy != null">create_by,</if>
             <if test="batchNumber != null">batch_number,</if>
+            <if test="resourceGroupName != null">resource_group_name,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
@@ -68,11 +69,12 @@
             <if test="productionQuantity != null">#{productionQuantity},</if>
             <if test="standardTime != null">#{standardTime},</if>
             <if test="processTotalTime != null">#{processTotalTime},</if>
-            <if test="processPlanStartDay != null and processPlanStartDay != ''">#{processPlanStartDay},</if>
+            <if test="processPlanStartDay != null">#{processPlanStartDay},</if>
             <if test="designTimes != null">#{designTimes},</if>
             <if test="delFlag != null">#{delFlag},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="batchNumber != null">#{batchNumber},</if>
+            <if test="resourceGroupName != null">#{resourceGroupName},</if>
          </trim>
     </insert>
 
@@ -110,7 +112,7 @@
     </update>
     <select id="selectPartRoutStat"  resultMap="ApsPartRouteStatResult" >
         select rt.work_order_no,
-            rt.process_name,
+            rt.process_name as resource_group_name,
             cast( rt.process_number as numeric(18,2)) as road_process_number,
             cast( pl.process_number as numeric(18,2)) as current_process_number,
             pl.production_quantity,
@@ -128,23 +130,35 @@
             and rt.process_plan_start_day  &lt;= rs.request_date
             order by rt.work_order_no,process_plan_start_day
     </select>
-    <select id="selectResourceDateStat" resultType="com.aps.core.domain.ApsResourceDateStat">
-        with pl as  (
-            select
-            DATE( st.process_plan_start_day) AS plan_day,
-                resource_group_name as resource_name,
-                sum(process_total_time) as require_times
-            from aps_part_route_stat  as st
-            where st.del_flag='0'
-            group by resource_group_name, plan_day
+
+    <resultMap type="ApsResourceDateStat" id="ApsResourceDateStatResult">
+        <result property="planDay"    column="plan_day"    />
+        <result property="resourceName"    column="resource_name"    />
+        <result property="requireTimes"    column="require_times"    />
+        <result property="designTimes"    column="design_times"    />
+        <result property="capacityLoad"    column="capacity_load"    />
+        <result property="resourceGroupName"    column="resource_name"    />
+    </resultMap>
+
+    <select id="selectResourceDateStat" resultMap="ApsResourceDateStatResult">
+
+        with pl as  (select DATE(st.process_plan_start_day) AS plan_day,
+            resource_group_name             as resource_name,
+            sum(process_total_time)         as require_times
+        from aps_part_route_stat as st
+        where st.del_flag = '0'
+        group by resource_group_name, plan_day
+        order by plan_day,resource_group_name
         )
-        select  pl.resource_name
-                ,pl.plan_day
-                ,require_times
-                ,(gp.theory_hours*gp.devices_quantity) as design_times
-                ,((gp.theory_hours*gp.devices_quantity) / require_times * 100)  as capacity_load
-        from pl left join aps_resource_group as gp on pl.resource_group_name=gp.resource_group_name
-        where gp.del_flag='0'
-        </select>
+        select
+            pl.plan_day
+             ,pl.resource_name
+             , require_times
+             , (gp.theory_hours * gp.devices_quantity)   as design_times
+             , ((gp.theory_hours * gp.devices_quantity) / require_times*100) as capacity_load
+        from pl
+                 left join aps_resource_group as gp on pl.resource_name = gp.resource_group_name
+        where gp.del_flag = '0'
+    </select>
 
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3