From 88d3e587bf15942b17aa8db451f2be249a156b43 Mon Sep 17 00:00:00 2001
From: sunjianxi <839419401@qq.com>
Date: Thu, 11 Dec 2025 10:47:32 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8E=92=E4=BA=A7=E7=9B=B8=E5=85=B3-sjx?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../scheduling/dto/WorkOrderDto.java | 2 +
.../scheduling/mapper/WorkOrderMapper.xml | 6 +-
.../service/impl/WorkOrderServiceImpl.java | 104 +++++++++++++++++-
3 files changed, 106 insertions(+), 6 deletions(-)
diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java
index 60cd56c..767bc2c 100644
--- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java
+++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/dto/WorkOrderDto.java
@@ -25,4 +25,6 @@ public class WorkOrderDto {
private String equipName;
private String equipCode;
private String type;
+ private String orderStatus;
+ private String planStatus;
}
diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml
index 135208c..72cfe08 100644
--- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml
+++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/mapper/WorkOrderMapper.xml
@@ -97,7 +97,9 @@
to_char(b.fact_end_time,'YYYY-MM-DD HH24:MI:SS') AS "factEndTime",
c.ts_name AS "teamName",
b.equip_name AS "equipName",
- b.equip_code AS "equipCode"
+ b.equip_code AS "equipCode",
+ a.status AS "orderStatus",
+ b.status AS "planStatus"
FROM
MES_WORK_ORDER a
LEFT JOIN MES_WORK_PLAN b ON a.ID = b.WO_ID
@@ -106,7 +108,6 @@
and to_char(b.start_time,'YYYY-MM-DD') = #{startTime}
- and to_char(b.end_time,'YYYY-MM-DD') = #{startTime}
and a.wo_code = #{woCode}
@@ -118,6 +119,7 @@
and b.equip_name = #{equipName}
+ order by a.WO_CODE,b.start_time
diff --git a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java
index df0fa1f..ed01e80 100644
--- a/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java
+++ b/blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java
@@ -48,6 +48,8 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.*;
@@ -151,7 +153,50 @@ public class WorkOrderServiceImpl extends BaseServiceImpl list = baseMapper.selectWorkOrderList(workOrder);
Map> resultList = new HashMap<>();
if("1".equals(workOrder.getType())){
- resultList = list.stream().collect(Collectors.groupingBy(WorkOrderDto::getWoCode));
+ Map> woCodeGroup = list.stream().collect(Collectors.groupingBy(WorkOrderDto::getWoCode));
+
+ for (Map.Entry> entry : woCodeGroup.entrySet()) {
+ String woCode = entry.getKey();
+ List woList = entry.getValue();
+
+ //按processName二次分组
+ Map> processGroup = woList.stream()
+ .collect(Collectors.groupingBy(WorkOrderDto::getProcessName));
+
+ //整合每个processName的时间
+ List mergedProcessList = new ArrayList<>();
+ for (Map.Entry> processEntry : processGroup.entrySet()) {
+ String processName = processEntry.getKey();
+ List processList = processEntry.getValue();
+
+ // 计算最早的开始时间、最晚的结束时间
+ String minStartTime = getMinTime(processList.stream().map(WorkOrderDto::getPlanStartTime).toList());
+ String maxEndTime = getMaxTime(processList.stream().map(WorkOrderDto::getPlanEndTime).toList());
+
+ // 封装整合后的DTO(复用第一个对象或新建)
+ WorkOrderDto mergedDto = new WorkOrderDto();
+ mergedDto.setWoCode(woCode);
+ mergedDto.setProcessName(processName);
+ for(WorkOrderDto dto : processList){
+ if(dto.getPlanStartTime().equals(minStartTime)){
+ mergedDto.setStartTime(dto.getStartTime());
+ }
+ if(dto.getPlanEndTime().equals(maxEndTime)){
+ mergedDto.setEndTime(dto.getEndTime());
+ mergedDto.setPlanStatus(dto.getPlanStatus());
+ }
+ }
+ if(!maxEndTime.substring(0,10).equals(minStartTime.substring(0,10))){
+ mergedDto.setEndTime("24:00");
+ }
+ mergedDto.setPlanStartTime(minStartTime);
+ mergedDto.setPlanEndTime(maxEndTime);
+ mergedProcessList.add(mergedDto);
+ }
+
+ resultList.put(woCode, mergedProcessList);
+ }
+
}else if("2".equals(workOrder.getType())){
Map>> teamWoGroupMap = list.stream()
.collect(Collectors.groupingBy(
@@ -195,14 +240,14 @@ public class WorkOrderServiceImpl extends BaseServiceImpl timeStrList) {
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ if (timeStrList == null || timeStrList.isEmpty()) {
+ return null;
+ }
+ return timeStrList.stream()
+ .filter(Objects::nonNull)
+ .map(t -> {
+ try {
+ return LocalDateTime.parse(t, dateTimeFormatter);
+ } catch (DateTimeParseException e) {
+ // 处理时间格式错误(根据业务需求:抛异常/返回null/返回默认值)
+ System.err.println("时间格式错误:" + t + ",异常:" + e.getMessage());
+ return null;
+ }
+ })
+ .filter(Objects::nonNull)
+ .min(LocalDateTime::compareTo)
+ .map(dt -> dt.format(dateTimeFormatter))
+ .orElse(null);
+ }
+
+ /**
+ * 获取时间列表中的最晚时间(字符串转LocalDateTime比较)
+ */
+ private static String getMaxTime(List timeStrList) {
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ if (timeStrList == null || timeStrList.isEmpty()) {
+ return null;
+ }
+ return timeStrList.stream()
+ .filter(Objects::nonNull)
+ .map(t -> {
+ try {
+ return LocalDateTime.parse(t, dateTimeFormatter);
+ } catch (DateTimeParseException e) {
+ System.err.println("时间格式错误:" + t + ",异常:" + e.getMessage());
+ return null;
+ }
+ })
+ .filter(Objects::nonNull)
+ .max(LocalDateTime::compareTo)
+ .map(dt -> dt.format(dateTimeFormatter))
+ .orElse(null);
+ }
}