From 4f2c9b54c8d0f358f3b7c6821f091a493b24e006 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期二, 02 十二月 2025 11:16:53 +0800
Subject: [PATCH] 配置新增以及bug修改
---
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 148 ++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 128 insertions(+), 20 deletions(-)
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
index 99411d5..67a7431 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -150,14 +150,76 @@
List<String> serialNumberList = workOrderList.stream().map(WorkOrder::getSerialNumber).collect(Collectors.toList());
// 鏌ュ嚭鏁版嵁搴撲腑鍥芥爣鐮佸搴旂殑鏈畬鎴愮殑宸ュ崟
List<WorkOrder> inDatabaseWorkOrderList = baseMapper.getNotFinishedWorkOrders(serialNumberList);
- inDatabaseWorkOrderList.stream().forEach(item -> {
- if (StringUtils.hasText(item.getErrorType())) {
- item.setErrorTypeList(List.of(item.getErrorType().split(",")));
+ log.info("鎵撳嵃鍑篿nDatabaseWorkOrderList:{}",inDatabaseWorkOrderList);
+
+ // 2. 鎸� serialNumber 鍒嗙粍锛屽悎骞堕敊璇被鍨�
+ Map<String, WorkOrder> mergedWorkOrders = new LinkedHashMap<>();
+
+ for (WorkOrder order : inDatabaseWorkOrderList) {
+ String serialNumber = order.getSerialNumber();
+
+ if (mergedWorkOrders.containsKey(serialNumber)) {
+ // 濡傛灉搴忓垪鍙峰凡瀛樺湪锛屽悎骞堕敊璇被鍨�
+ WorkOrder existingOrder = mergedWorkOrders.get(serialNumber);
+ //鍒ゆ柇鏃堕棿鍏堝悗
+ boolean isExistingNewer = existingOrder.getCreateTime() != null &&
+ order.getCreateTime() != null &&
+ existingOrder.getCreateTime().after(order.getCreateTime());
+
+ WorkOrder latestOrder = isExistingNewer ? existingOrder : order;
+ WorkOrder olderOrder = isExistingNewer ? order : existingOrder;
+
+ List<String> latestErrorTypes = latestOrder.getErrorTypeList() != null
+ ? new ArrayList<>(latestOrder.getErrorTypeList())
+ : new ArrayList<>();
+
+ if (StringUtils.hasText(olderOrder.getErrorType())) {
+ List<String> olderErrorTypes = Arrays.asList(olderOrder.getErrorType().split(","));
+ latestErrorTypes.addAll(olderErrorTypes);
+ }
+
+ // 鍘婚噸骞舵洿鏂伴敊璇被鍨�
+ List<String> uniqueErrorTypes = latestErrorTypes.stream()
+ .distinct()
+ .collect(Collectors.toList());
+
+ latestOrder.setErrorTypeList(uniqueErrorTypes);
+ latestOrder.setErrorType(String.join(",", uniqueErrorTypes));
+
+ // 鏇存柊Map涓殑宸ュ崟涓烘渶鏂扮殑宸ュ崟
+ mergedWorkOrders.put(serialNumber, latestOrder);
+
+
+
} else {
- item.setErrorTypeList(new ArrayList<>(1));
+ // 濡傛灉搴忓垪鍙蜂笉瀛樺湪锛屽垵濮嬪寲閿欒绫诲瀷鍒楄〃骞舵坊鍔犲埌Map
+ if (StringUtils.hasText(order.getErrorType())) {
+ order.setErrorTypeList(Arrays.asList(order.getErrorType().split(",")));
+ } else {
+ order.setErrorTypeList(new ArrayList<>(1));
+ }
+ mergedWorkOrders.put(serialNumber, order);
}
- });
- Map<String, WorkOrder> mapping = inDatabaseWorkOrderList.stream().collect((Collectors.toMap(WorkOrder::getSerialNumber, workOrder -> workOrder)));
+ }
+ log.info("鎵撳嵃鍑簃ergedWorkOrders鍚堝苟鍚�:{}",inDatabaseWorkOrderList);
+// 3. 鑾峰彇鍚堝苟鍚庣殑宸ュ崟鍒楄〃锛堜繚鎸侀『搴忥級
+// List<WorkOrder> finalWorkOrderList = new ArrayList<>(mergedWorkOrders.values());
+
+
+// Map<String, WorkOrder> mapping = null;
+// try {
+// mapping = finalWorkOrderList.stream()
+// .collect(Collectors.toMap(WorkOrder::getSerialNumber, workOrder -> workOrder));
+// } catch (IllegalStateException e) {
+// // 鎹曡幏閿噸澶嶅紓甯�
+// System.err.println("閿欒锛氬彂鐜伴噸澶嶇殑搴忓垪鍙凤紝鏃犳硶鍒涘缓鏄犲皠");
+// System.err.println("寮傚父璇︽儏锛�" + e.getMessage());
+//
+// // 鍙�夛細浣犲彲浠ュ湪杩欓噷澶勭悊寮傚父锛屾瘮濡傝繑鍥炰竴涓┖Map鎴栬�呬娇鐢ㄥ鐢ㄧ瓥鐣�
+// // 鏂规1锛氳繑鍥炵┖Map
+// mapping = new HashMap<>(); // Java 9+
+//
+// }
List<WorkOrder> waitAddList = new ArrayList<>(48);
List<WorkOrderErrorType> waitAddErrorTypeList = new ArrayList<>(48);
Integer updateNum = 0;
@@ -169,7 +231,7 @@
// 鍗冲皢瑕佹坊鍔犵殑閿欒绫诲瀷
List<WorkOrderErrorType> willAddErrorType = new ArrayList<>(96);
for (WorkOrder workOrder : workOrderList) {
- WorkOrder databaseWorkOrder = mapping.get(workOrder.getSerialNumber());
+ WorkOrder databaseWorkOrder = mergedWorkOrders.get(workOrder.getSerialNumber());
if (Objects.nonNull(databaseWorkOrder)) {
//鍒ゆ柇鏄惁鏄粖澶╃殑宸ュ崟
if (!isSameDay(databaseWorkOrder.getCreateTime(), now)) {
@@ -874,6 +936,43 @@
}
});
}
+ //鍔犱笂鎶ュ淇℃伅
+ if (!CollectionUtils.isEmpty(page.getRecords())) {
+ List<String> serialNumberList = page.getRecords().stream()
+ .map(WorkOrderVO::getSerialNumber).collect(Collectors.toList());
+ List<Report> reports = new LambdaQueryChainWrapper<>(reportMapper)
+ .in(Report::getSerialNumber, serialNumberList)
+ .eq(Report::getStatus,1)
+ .eq(Report::getDeleted,Boolean.FALSE).list();
+ Map<String, List<Report>> reportMap = reports.stream()
+ .collect(Collectors.groupingBy(Report::getSerialNumber));
+
+ for (WorkOrderVO workOrder : page.getRecords()) {
+ workOrder.setHasReport(false);
+ List<Report> reportsByWorkOrder = reportMap.get(workOrder.getSerialNumber());
+ if (CollectionUtils.isEmpty(reportsByWorkOrder)) {
+ continue; // 鏃犳姤鍛婏紝鐩存帴璺宠繃
+ }
+ Date distributeTime = workOrder.getDistributeTime();
+ for (Report report : reportsByWorkOrder) {
+ Date beginTime = report.getBeginCreateTime();
+ Date endTime = report.getEndCreateTime();
+ // 绌烘寚閽堥槻鎶�
+ if (distributeTime == null || beginTime == null || endTime == null) {
+ continue;
+ }
+ // 鏃堕棿鍖洪棿鍒ゆ柇锛歞istributeTime 鍦� [beginTime, endTime] 鍐�
+ boolean isInRange = distributeTime.compareTo(beginTime) >= 0
+ && distributeTime.compareTo(endTime) <= 0;
+ if (isInRange) {
+ workOrder.setHasReport(true);
+ break; // 鎵惧埌涓�涓嵆閫�鍑哄惊鐜�
+ }
+ }
+ }
+ }
+
+
return Result.ok().data(page.getRecords()).total(page.getTotal());
}
@@ -1088,8 +1187,10 @@
@Override
public WorkOrderTotalVO workOrderTotal(DashboardQuery dashboardQuery) {
+ //todo澶у睆宸ュ崟鏈鐞嗗伐鍗曟暟閲忔湁鐐归棶棰�
return baseMapper.workOrderTotal(dashboardQuery);
}
+
@Override
public List<WorkOrderRegionVO> workOrderRegion(DashboardQuery dashboardQuery) {
@@ -1303,23 +1404,30 @@
}
// 鏄惁鎶ュ
- Date target = workOrder.getCreateTime();
- Report reports = new LambdaQueryChainWrapper<>(reportMapper)
- .eq(Report::getSerialNumber,workOrder.getWorkOrderNo())
+ List<Report> reports = new LambdaQueryChainWrapper<>(reportMapper)
+ .eq(Report::getSerialNumber,workOrder.getSerialNumber())
.eq(Report::getStatus,1)
.orderByDesc(Report::getCreateTime)
- .last("LIMIT 1")
- .one();
- boolean isInRange = false;
- if (reports != null){
- Date start = reports.getBeginCreateTime();
- Date end = reports.getEndCreateTime();
- isInRange = target.after(start) || target.equals(start) // target >= start
- && target.before(end) || target.equals(end);
+ .list();
+ log.info("鎶ュ璁板綍:{}",reports);
+ Date distributeTime = workOrder.getDistributeTime();
+ workOrder.setHasReport(false);
+ for (Report report : reports) {
+ Date beginTime = report.getBeginCreateTime();
+ Date endTime = report.getEndCreateTime();
+ // 绌烘寚閽堥槻鎶�
+ if (distributeTime == null || beginTime == null || endTime == null) {
+ continue;
+ }
+ // 鏃堕棿鍖洪棿鍒ゆ柇锛歞istributeTime 鍦� [beginTime, endTime] 鍐�
+ boolean isInRange = distributeTime.compareTo(beginTime) >= 0
+ && distributeTime.compareTo(endTime) <= 0;
+ if (isInRange) {
+ workOrder.setHasReport(true);
+ break; // 鎵惧埌涓�涓嵆閫�鍑哄惊鐜�
+ }
}
-
- workOrder.setHasReport(isInRange);
// 鏁呴殰绫诲瀷
List<SysDictData> errorList = workOrderErrorTypeService.getBaseMapper().getErrorList(workOrder.getWorkOrderNo());
List<String> errList = errorList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList());
--
Gitblit v1.8.0