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 | 86 ++++++++++++++++++++++++++++++++++++++---- 1 files changed, 77 insertions(+), 9 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 c9c4baa..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,13 +1,18 @@ package com.aps.core.service.impl; +import java.math.BigDecimal; +import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.List; -import java.util.Map; +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.utils.uuid.UUID; +import com.aps.common.core.web.domain.AjaxResult; +import com.aps.core.domain.ApsResourceDateStat; +import com.aps.core.mapper.ApsResourceGroupMapper; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.commons.config.DefaultsBindHandlerAdvisor; import org.springframework.stereotype.Service; import com.aps.core.mapper.ApsPartRouteStatMapper; import com.aps.core.domain.ApsPartRouteStat; @@ -26,7 +31,8 @@ { @Autowired private ApsPartRouteStatMapper apsPartRouteStatMapper; - private DefaultsBindHandlerAdvisor.MappingsProvider mappingsProvider; + @Autowired + private ApsResourceGroupMapper resourceGroupMapper; /** * 鏌ヨ闆朵欢缁熻琛� @@ -103,13 +109,16 @@ + /** + * 鏌ヨ闆朵欢宸ュ簭骞舵洿鏂拌鍒掑紑宸ユ棩鏈� + * */ + @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(); @@ -118,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() 鍜屽綋鍓嶆棩鏈� 杩涜瀵规瘮锛屽彧瀵规瘮鍒版棩锛屼笉鐢ㄧ鍗佸垎绉�*/ @@ -127,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())); } @@ -140,6 +149,65 @@ } } apsPartRouteStatMapper.deleteLastBatch(batchNum); - } + /** 鏌ヨ璧勬簮鏃ュ巻琛� + */ + @Override + public AjaxResult selectResourceDateStat() { + /*鏌ュ嚭鎵�鏈夌粺璁$殑鏁版嵁*/ + AjaxResult result = new AjaxResult(200, "鐢熸垚鎴愬姛"); + List<ApsResourceDateStat> list = apsPartRouteStatMapper.selectResourceDateStat(); + 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); + } + return result; + } + } -- Gitblit v1.9.3