From f6593a5f6f1138abf09a0ee69fc5119fdce412c9 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期六, 07 十二月 2024 17:52:07 +0800
Subject: [PATCH] 标签bug

---
 ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java |  137 +++++++++++++++++++++++++++++++++------------
 1 files changed, 100 insertions(+), 37 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 b4f26fc..9fe4dc9 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
@@ -171,18 +171,18 @@
                     //閬垮厤浠d笅鍙戠殑宸ュ崟鐩存帴鍙樻垚涓嬪彂
                     if (!databaseWorkOrder.getStatus().equals(WorkOrderStatusEnum.WAIT_DISTRIBUTE)) {
                         databaseWorkOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
+                        // 鍚屾椂鏂板涓�涓繍缁村鐞嗕俊鎭紝琛ㄦ槑姝ゅ伐鍗曡璋冩暣
+                        WorkOrderYwConditionRecord ywRecord = new WorkOrderYwConditionRecord();
+                        ywRecord.setWorkOrderNo(databaseWorkOrder.getWorkOrderNo());
+                        ywRecord.setCommitUser(1);
+                        ywRecord.setYwCondition("鏁呴殰绫诲瀷鏇存柊锛屽伐鍗曠姸鎬佽皟鏁翠负寰呭鐞�");
+                        ywRecord.setCreateTime(new Date());
+                        ywRecord.setSysMsg(Boolean.TRUE);
+                        willAddMsg.add(ywRecord);
                     }
                     databaseWorkOrder.setUpdateTime(now);
                     willUpdateStatusWorkOrderList.add(databaseWorkOrder);
                     updateNum++;
-                    // 鍚屾椂鏂板涓�涓繍缁村鐞嗕俊鎭紝琛ㄦ槑姝ゅ伐鍗曡璋冩暣
-                    WorkOrderYwConditionRecord ywRecord = new WorkOrderYwConditionRecord();
-                    ywRecord.setWorkOrderNo(databaseWorkOrder.getWorkOrderNo());
-                    ywRecord.setCommitUser(1);
-                    ywRecord.setYwCondition("鏁呴殰绫诲瀷鏇存柊锛屽伐鍗曠姸鎬佽皟鏁翠负寰呭鐞�");
-                    ywRecord.setCreateTime(new Date());
-                    ywRecord.setSysMsg(Boolean.TRUE);
-                    willAddMsg.add(ywRecord);
                 }
             } else {
                 workOrder.setCreateTime(new Date());
@@ -211,7 +211,7 @@
         List<String> willAddSerialNumber = waitAddList.stream().map(WorkOrder::getSerialNumber).collect(Collectors.toList());
         //鍙敓鎴愯�冩牳璁惧銆佷笖鏈夎繍缁村崟浣嶇殑宸ュ崟
         List<YwPoint> pointList = new LambdaQueryChainWrapper<>(ywPointService.getBaseMapper())
-                .select(YwPoint::getUnitId, YwPoint::getSerialNumber, YwPoint::getImportantTag, YwPoint::getImportantTag, YwPoint::getProvinceTag, YwPoint::getImportantCommandImageTag)
+                .select(YwPoint::getUnitId, YwPoint::getSerialNumber, YwPoint::getImportantTag, YwPoint::getImportantTag, YwPoint::getImportantCommandImageTag)
                 .in(YwPoint::getSerialNumber, willAddSerialNumber)
                 .eq(YwPoint::getExamineStatus, Boolean.TRUE)
                 .isNotNull(YwPoint::getUnitId)
@@ -319,46 +319,109 @@
      */
     @Override
     public Result add(WorkOrderForm form) {
-        //TODO锛氬悓涓浗鏍囧伐鍗曞鍔犳晠闅滅被鍨�
         //妫�鏌ョ櫧鍚嶅崟
         List<WorkOrder> data = new ArrayList<>();
         WorkOrder workOrder = WorkOrderForm.getEntityByForm(form, null);
         data.add(workOrder);
+        //鏍¢獙鐧藉悕鍗曞苟鎺掗櫎鍦ㄧ櫧鍚嶅崟鐨勬晠闅滅被鍨�
         data = checkWhite(data);
         if (CollectionUtils.isEmpty(data)) {
             return Result.error("璇ヨ澶囩殑鏁呴殰绫诲瀷鍦ㄧ櫧鍚嶅崟涓紝涓嶈兘娣诲姞宸ュ崟");
         }
         WorkOrder entity = data.get(0);
-
-        //鏌edis浠婃棩宸ュ崟鏁伴噺
-        int workOrderNum = 0;
-        //UUID浣滀负value锛屼繚璇佷笂閿佺殑绾跨▼鑷繁瑙i攣
-        String requestId = IdUtils.fastSimpleUUID();
-        boolean result = redisCache.acquireLock(RedisConstant.WORKORDER_NUM_LOCK, requestId, 10000);
-        if (result) {
-            //鏌ヤ粖鏃ュ伐鍗曢噺
-            Object redisNum = redisCache.getCacheObject(RedisConstant.WORKORDER_NUM);
-            workOrderNum = redisNum == null ? 0 : (Integer) redisNum;
-            workOrderNum++;
-            redisCache.setCacheObject(RedisConstant.WORKORDER_NUM, workOrderNum);
-            redisCache.releaseLock(RedisConstant.WORKORDER_NUM_LOCK, requestId);
-        } else {
-            return Result.error("宸ュ崟姝e湪娣诲姞锛岃绋嶅悗鍐嶈瘯");
-        }
-
-        entity.setCreateTime(DateUtils.getNowDate());
-        entity.setStatus(WorkOrderStatusEnum.WAIT_DISTRIBUTE);
+        String serialNumber = entity.getSerialNumber();
         Date now = new Date();
-        entity.setCreateTime(now);
-        entity.setUpdateTime(now);
-        entity.setWorkOrderNo(IdUtils.workOrderNO(now, String.format("%05d", workOrderNum)));
-        entity.setErrorType(String.join(",", form.getErrorType()));
-        List<WorkOrderErrorType> workOrderErrorTypes = form.getErrorType().stream().map(errorType -> new WorkOrderErrorType(entity.getWorkOrderNo(), errorType)).toList();
-        workOrderErrorTypeService.getBaseMapper().insertWorkOrderErrorTypeList(workOrderErrorTypes);
-        if (baseMapper.insert(entity) > 0) {
+        List<WorkOrder> inDatabaseWorkOrderList = baseMapper.getNotFinishedWorkOrders(Arrays.asList(serialNumber));
+        inDatabaseWorkOrderList.stream().forEach(item -> {
+            if (StringUtils.hasText(item.getErrorType())) {
+                item.setErrorTypeList(List.of(item.getErrorType().split(",")));
+            } else {
+                item.setErrorTypeList(new ArrayList<>(1));
+            }
+        });
+        // 鍥犳晠闅滅被鍨嬩笉涓�鑷磋�岃鏇存柊鐘舵�佺殑宸ュ崟
+        List<WorkOrder> willUpdateStatusWorkOrderList = new ArrayList<>(48);
+        // 鏇存敼宸ュ崟绫诲瀷鑰岃澧炲姞鐨勭郴缁熻繍缁村鐞嗕俊鎭�
+        List<WorkOrderYwConditionRecord> willAddMsg = new ArrayList<>(48);
+        // 鍗冲皢瑕佹坊鍔犵殑閿欒绫诲瀷
+        List<WorkOrderErrorType> willAddErrorType = new ArrayList<>(96);
+        if(!CollectionUtils.isEmpty(inDatabaseWorkOrderList)){
+            WorkOrder workOrderInDB = inDatabaseWorkOrderList.get(0);
+            List<String> errorNameList = workOrderInDB.getErrorTypeList();
+            List<String> errorTypes = entity.getErrorTypeList();
+            if(errorNameList.containsAll(errorTypes)){
+                return Result.error("宸叉湁鍚岀鏁呴殰绫诲瀷宸ュ崟");
+            }else {
+                for (String errorType : errorTypes) {
+                    if(!errorNameList.contains(errorType)){
+                        // 閿欒绫诲瀷涓嶄竴鏍凤紝灏辨柊澧炰竴涓敊璇被鍨嬶紝骞朵笖閲嶇疆宸ュ崟鐘舵�佷负寰呭鐞�
+                        WorkOrderErrorType workOrderErrorType = new WorkOrderErrorType();
+                        workOrderErrorType.setWorkOrderNo(workOrderInDB.getWorkOrderNo());
+                        workOrderErrorType.setCreateTime(now);
+                        workOrderErrorType.setUpdateTime(now);
+                        workOrderErrorType.setErrorName(errorType);
+                        willAddErrorType.add(workOrderErrorType);
+                    }
+                }
+                //閬垮厤浠d笅鍙戠殑宸ュ崟鐩存帴鍙樻垚涓嬪彂
+                if (!workOrderInDB.getStatus().equals(WorkOrderStatusEnum.WAIT_DISTRIBUTE)) {
+                    workOrderInDB.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
+                    // 鍚屾椂鏂板涓�涓繍缁村鐞嗕俊鎭紝琛ㄦ槑姝ゅ伐鍗曡璋冩暣
+                    WorkOrderYwConditionRecord ywRecord = new WorkOrderYwConditionRecord();
+                    ywRecord.setWorkOrderNo(workOrderInDB.getWorkOrderNo());
+                    ywRecord.setCommitUser(1);
+                    ywRecord.setYwCondition("鏁呴殰绫诲瀷鏇存柊锛屽伐鍗曠姸鎬佽皟鏁翠负寰呭鐞�");
+                    ywRecord.setCreateTime(new Date());
+                    ywRecord.setSysMsg(Boolean.TRUE);
+                    willAddMsg.add(ywRecord);
+                }
+                workOrderInDB.setUpdateTime(now);
+                willUpdateStatusWorkOrderList.add(workOrderInDB);
+                //淇敼鏁呴殰绫诲瀷
+                if (willAddErrorType.size() > 0) {
+                    workOrderErrorTypeService.getBaseMapper().addMany(willAddErrorType);
+                }
+                //澧炲姞杩愮淮鎯呭喌
+                if (willAddMsg.size() > 0) {
+                    workOrderYwConditionRecordMapper.insertMany(willAddMsg);
+                }
+                //鏇存敼宸ュ崟鐘舵��
+                if (willUpdateStatusWorkOrderList.size() > 0) {
+                    this.baseMapper.updateMany(willUpdateStatusWorkOrderList);
+                }
+            }
             return Result.ok("娣诲姞鎴愬姛");
+        }else {
+            //鏁版嵁搴撴病鏈夋鍦ㄨ繘琛岀殑宸ュ崟
+            //鏌edis浠婃棩宸ュ崟鏁伴噺
+            int workOrderNum = 0;
+            //UUID浣滀负value锛屼繚璇佷笂閿佺殑绾跨▼鑷繁瑙i攣
+            String requestId = IdUtils.fastSimpleUUID();
+            boolean result = redisCache.acquireLock(RedisConstant.WORKORDER_NUM_LOCK, requestId, 10000);
+            if (result) {
+                //鏌ヤ粖鏃ュ伐鍗曢噺
+                Object redisNum = redisCache.getCacheObject(RedisConstant.WORKORDER_NUM);
+                workOrderNum = redisNum == null ? 0 : (Integer) redisNum;
+                workOrderNum++;
+                redisCache.setCacheObject(RedisConstant.WORKORDER_NUM, workOrderNum);
+                redisCache.releaseLock(RedisConstant.WORKORDER_NUM_LOCK, requestId);
+            } else {
+                return Result.error("宸ュ崟姝e湪娣诲姞锛岃绋嶅悗鍐嶈瘯");
+            }
+            entity.setCreateTime(DateUtils.getNowDate());
+            entity.setStatus(WorkOrderStatusEnum.WAIT_DISTRIBUTE);
+            entity.setCreateTime(now);
+            entity.setUpdateTime(now);
+            entity.setWorkOrderNo(IdUtils.workOrderNO(now, String.format("%05d", workOrderNum)));
+            entity.setErrorType(String.join(",", form.getErrorType()));
+            List<WorkOrderErrorType> workOrderErrorTypes = form.getErrorType().stream().map(errorType -> new WorkOrderErrorType(entity.getWorkOrderNo(), errorType)).toList();
+            workOrderErrorTypeService.getBaseMapper().insertWorkOrderErrorTypeList(workOrderErrorTypes);
+            if (baseMapper.insert(entity) > 0) {
+                return Result.ok("娣诲姞鎴愬姛");
+            }else {
+                return Result.error("娣诲姞澶辫触");
+            }
         }
-        return Result.error("娣诲姞澶辫触");
     }
 
 

--
Gitblit v1.8.0