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 |  161 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 149 insertions(+), 12 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 cf248f7..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
@@ -119,7 +119,14 @@
         WorkOrderServiceImpl self = applicationContext.getBean(WorkOrderServiceImpl.class);
         return self.batchAddWorkOrder(workOrderList);
     }
-
+    private boolean isSameDay(Date date1, Date date2) {
+        if (date1 == null || date2 == null) {
+            return false;
+        }
+        LocalDate localDate1 = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        LocalDate localDate2 = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        return localDate1.isEqual(localDate2);
+    }
     @Transactional(rollbackFor = Exception.class)
     public Boolean batchAddWorkOrder(List<WorkOrder> workOrderList) {
         int total = workOrderList.size();
@@ -143,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;
@@ -162,8 +231,17 @@
         // 鍗冲皢瑕佹坊鍔犵殑閿欒绫诲瀷
         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)) {
+                    // 鑻ヤ负鍓嶄竴澶╃殑宸ュ崟锛屼笉鏇存柊锛岀洿鎺ュ綋浣滄柊宸ュ崟鏂板
+                    workOrder.setCreateTime(now);
+                    workOrder.setUpdateTime(now);
+                    waitAddList.add(workOrder);
+                    continue; // 璺宠繃鍚庣画鐨勬洿鏂伴�昏緫
+                }
+
                 List<String> errorNameList = databaseWorkOrder.getErrorTypeList();
                 List<String> errorTypes = workOrder.getErrorTypeList();
                 if (errorNameList.containsAll(errorTypes)) {
@@ -858,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());
     }
 
@@ -1072,8 +1187,10 @@
 
     @Override
     public WorkOrderTotalVO workOrderTotal(DashboardQuery dashboardQuery) {
+        //todo澶у睆宸ュ崟鏈鐞嗗伐鍗曟暟閲忔湁鐐归棶棰�
         return baseMapper.workOrderTotal(dashboardQuery);
     }
+
 
     @Override
     public List<WorkOrderRegionVO> workOrderRegion(DashboardQuery dashboardQuery) {
@@ -1287,10 +1404,30 @@
         }
 
         // 鏄惁鎶ュ
-        boolean hasReport = new LambdaQueryChainWrapper<>(reportMapper)
-                .eq(Report::getSerialNumber, workOrder.getSerialNumber())
-                .exists();
-        workOrder.setHasReport(hasReport);
+
+        List<Report> reports = new LambdaQueryChainWrapper<>(reportMapper)
+                .eq(Report::getSerialNumber,workOrder.getSerialNumber())
+                .eq(Report::getStatus,1)
+                .orderByDesc(Report::getCreateTime)
+                .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; // 鎵惧埌涓�涓嵆閫�鍑哄惊鐜�
+            }
+        }
         // 鏁呴殰绫诲瀷
         List<SysDictData> errorList = workOrderErrorTypeService.getBaseMapper().getErrorList(workOrder.getWorkOrderNo());
         List<String> errList = errorList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList());

--
Gitblit v1.8.0