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 <= 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