From 3a40cec4bd55a9668f1b47111c48e99889a5c7d8 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期五, 02 八月 2024 11:56:43 +0800
Subject: [PATCH] 车辆时钟准确性

---
 ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java |  105 ++++++++++++++++++++++++++++++----------------------
 1 files changed, 60 insertions(+), 45 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 745e24a..32c27db 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
@@ -9,22 +9,30 @@
 import com.ycl.platform.domain.entity.*;
 import com.ycl.platform.domain.form.*;
 import com.ycl.platform.domain.query.DistributeWorkOrderQuery;
+import com.ycl.platform.domain.query.ScreenQuery;
 import com.ycl.platform.domain.query.WorkOrderQuery;
 import com.ycl.platform.domain.vo.DistributeWorkOrderVO;
 import com.ycl.platform.domain.vo.WorkOrderVO;
+import com.ycl.platform.domain.vo.WorkOrderYwConditionRecordVO;
+import com.ycl.platform.domain.vo.screen.ScreenWorkOrderVO;
 import com.ycl.platform.mapper.*;
 import com.ycl.platform.service.NotifyService;
 import com.ycl.platform.service.WorkOrderAuditingRecordService;
 import com.ycl.platform.service.WorkOrderService;
+import com.ycl.platform.service.YwPointService;
 import com.ycl.system.Result;
 import com.ycl.system.model.LoginUser;
 import com.ycl.system.page.PageUtil;
 import com.ycl.utils.DateUtils;
 import com.ycl.utils.SecurityUtils;
 import com.ycl.utils.redis.RedisCache;
+import com.ycl.utils.uuid.IdUtils;
+import enumeration.general.NotifyTypeEnum;
+import enumeration.general.UrgentLevelEnum;
+import enumeration.general.WorkOrderDistributeWayEnum;
+import enumeration.general.WorkOrderStatusEnum;
 import enumeration.general.*;
 import lombok.RequiredArgsConstructor;
-import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -37,7 +45,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
-import java.util.concurrent.TimeUnit;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -51,8 +59,7 @@
 public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder> implements WorkOrderService {
 
     private final WorkOrderMapper workOrderMapper;
-    private final YwUnitMapper ywUnitMapper;
-    private final YwPeopleMapper ywPeopleMapper;
+    private final YwPointService ywPointService;
     private final WorkOrderAuditingRecordMapper workOrderAuditingRecordMapper;
     private final WorkOrderAuditingRecordService workOrderAuditingRecordService;
     private final WorkOrderYwConditionRecordMapper workOrderYwConditionRecordMapper;
@@ -60,6 +67,7 @@
     private final WorkOrderDistributeRecordMapper workOrderDistributeRecordMapper;
 
     private final String DISTRIBUTE_LOCK_KEY = "distributeLock";
+    private final static String IMPORTANT = "important";
 
     @Autowired
     private RedisCache redisCache;
@@ -72,10 +80,9 @@
     @Override
     public Result add(WorkOrderForm form) {
         WorkOrder entity = WorkOrderForm.getEntityByForm(form, null);
-        entity.setWorkOrderNo(DateUtils.dateTimeNow());
+        entity.setWorkOrderNo(IdUtils.timeAddRandomNO(5));
         entity.setCreateTime(DateUtils.getNowDate());
         entity.setStatus(WorkOrderStatusEnum.WAIT_DISTRIBUTE);
-        entity.setDeleted("0");
         if(baseMapper.insert(entity) > 0) {
             return Result.ok("娣诲姞鎴愬姛");
         }
@@ -122,20 +129,34 @@
                 UrgentLevelEnum.WARNING,
                 workOrder.getWorkOrderNo());
         notifyService.save(notify);
+        // 鍚屾鐐逛綅鐘舵��
+        if (form.getAuditingResult() == WorkOrderStatusEnum.AUDITING_SUCCESS) {
+            ywPointService.updateRecovery(Collections.singletonList(workOrder.getPointId()), 0);
+        }
         return Result.ok("鎿嶄綔鎴愬姛");
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Result batchAuditing(WorkOrderBatchAuditingForm form) {
+        // 鏍规嵁鏁呴殰绫诲瀷鑾峰彇鍒楄〃
+        List<WorkOrder> list = new LambdaQueryChainWrapper<>(baseMapper)
+                .in(WorkOrder::getStatus, WorkOrderStatusEnum.YW_HANDLE.getValue())
+                .in(WorkOrder::getErrorType, form.getErrorTypes())
+                .select(WorkOrder::getId, WorkOrder::getUnitId, WorkOrder::getWorkOrderNo)
+                .list();
+        if (list.isEmpty()) {
+            return Result.error("娌℃湁宸ュ崟鍙互瀹℃牳");
+        }
+        List<Integer> ids = list.stream().map(WorkOrder::getId).collect(Collectors.toList());
         // 宸ュ崟鐘舵��
         LambdaUpdateWrapper<WorkOrder> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
-        lambdaUpdateWrapper.in(WorkOrder::getId, form.getIds());
+        lambdaUpdateWrapper.in(WorkOrder::getId, ids);
         lambdaUpdateWrapper.set(WorkOrder::getStatus, form.getAuditingResult());
         baseMapper.update(lambdaUpdateWrapper);
         // 娣诲姞澶氭潯瀹℃牳璁板綍
         List<WorkOrderAuditingRecord> workOrderAuditingRecords = new ArrayList<>();
-        for (Integer id : form.getIds()) {
+        for (Integer id : ids) {
             WorkOrderAuditingRecord workOrderAuditingRecord = new WorkOrderAuditingRecord();
             workOrderAuditingRecord.setWorkOrderId(id);
             workOrderAuditingRecord.setAuditingUser(SecurityUtils.getLoginUser().getUserId().intValue());
@@ -145,7 +166,6 @@
         }
         workOrderAuditingRecordService.saveBatch(workOrderAuditingRecords);
         // 娣诲姞鏂伴�氱煡
-        List<WorkOrder> list = new LambdaQueryChainWrapper<>(baseMapper).in(WorkOrder::getId, form.getIds()).select(WorkOrder::getUnitId, WorkOrder::getWorkOrderNo).list();
         List<Notify> notifies = new ArrayList<>();
         for (WorkOrder workOrder : list) {
             Notify notify = Notify.genEntityByUnit(NotifyTypeEnum.WORK_ORDER,
@@ -181,21 +201,9 @@
     }
 
     @Override
-    public Result selectYwConditionByYwId(String id) {
-        return Result.ok().data(
-                new LambdaQueryChainWrapper<>(workOrderYwConditionRecordMapper)
-                        .eq(WorkOrderYwConditionRecord::getWorkOrderId, id)
-                        .orderByAsc(WorkOrderYwConditionRecord::getCreateTime)
-                        .list());
-    }
-
-    @Override
-    public Result selectYwConditionListByYwId(String id) {
-        return Result.ok().data(
-                new LambdaQueryChainWrapper<>(workOrderYwConditionRecordMapper)
-                        .eq(WorkOrderYwConditionRecord::getWorkOrderId, id)
-                        .orderByAsc(WorkOrderYwConditionRecord::getCreateTime)
-                        .list());
+    public Result selectYwConditionByYwId(Integer id) {
+        List<WorkOrderYwConditionRecordVO> ywConditionList = workOrderYwConditionRecordMapper.selectYwConditionByYwId(id);
+        return Result.ok().data(ywConditionList);
     }
 
     @Override
@@ -259,57 +267,58 @@
     public Result distributePage(DistributeWorkOrderQuery query) {
         IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class);
         baseMapper.distributePage(page, query);
+        page.getRecords().stream().forEach(workOrder -> {
+            if (StringUtils.hasText(workOrder.getPointTag()) && workOrder.getPointTag().contains(IMPORTANT)) {
+                workOrder.setImportant(Boolean.TRUE);
+            }
+        });
         return Result.ok().data(page).total(page.getTotal());
     }
 
     @Override
+    @Transactional
     public Result distributeFast(DistributeWorkOrderVO data) {
         // 鑾峰彇褰撳墠鏃堕棿
         LocalDateTime now = LocalDateTime.now(ZoneId.systemDefault());
+        data.setEnd(now);
         switch (data.getFastWay()) {
             case LAST_HALF_HOUR:
                 data.setStart(now.minusMinutes(30));
-                data.setEnd(now);
                 break;
             case LAST_HOUR:
                 data.setStart(now.minusHours(1));
-                data.setEnd(now);
                 break;
             case LAST_TWO_HOUR:
                data.setStart(now.minusHours(2));
-               data.setEnd(now);
                break;
             case LAST_DAY:
                 data.setStart(now.minusDays(1));
-                data.setEnd(now);
                 break;
            }
 
         // 鏌ヨ绗﹀悎鏉′欢鐨勫伐鍗�
-        List<Integer> ids = new LambdaQueryChainWrapper<>(baseMapper)
+        List<WorkOrder> list = new LambdaQueryChainWrapper<>(baseMapper)
+                .select(WorkOrder::getId, WorkOrder::getPointId)
                 .eq(WorkOrder::getStatus, WorkOrderStatusEnum.WAIT_DISTRIBUTE)
                 .eq(Objects.nonNull(data.getUnitId()), WorkOrder::getUnitId, data.getUnitId())
                 .eq(WorkOrder::getErrorType, data.getErrorType())
                 .between(WorkOrder::getCreateTime, data.getStart(), data.getEnd())
                 .orderByDesc(WorkOrder::getCreateTime)
                 .last("limit " + data.getFastNumLimit())
-                .list()
-                .stream()
-                .map(WorkOrder::getId)
-                .toList();
+                .list();
+        List<Integer> ids = list.stream().map(WorkOrder::getId).toList();
+        List<Integer> pointIds = list.stream().map(WorkOrder::getPointId).toList();
 
-        if (ids.isEmpty()) {
-            return Result.error("娌℃湁绗﹀悎鏉′欢鐨勫伐鍗�");
-        }
-        if (!getDistributeLock()) {
-            return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�");
-        }
+        if (ids.isEmpty()) { return Result.error("娌℃湁绗﹀悎鏉′欢鐨勫伐鍗�"); }
+        if (!getDistributeLock()) { return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�"); }
         try {
             new LambdaUpdateChainWrapper<>(baseMapper)
                     .set(WorkOrder::getStatus, WorkOrderStatusEnum.DISTRIBUTED)
                     .in(WorkOrder::getId, ids)
                     .update();
             addDistributeRecord(ids, WorkOrderDistributeWayEnum.FAST_DISTRIBUTE);
+            // 鍚屾鐐逛綅鐘舵��
+            ywPointService.updateRecovery(pointIds, 1);
             return Result.ok("鎴愬姛涓嬪彂" + ids.size() + "鏉″伐鍗�");
         } catch (Exception e) {
             return Result.error("鎿嶄綔澶辫触");
@@ -319,11 +328,10 @@
     }
 
     @Override
+    @Transactional
     public Result selectedIdsDistribute(DistributeWorkOrderQuery query) {
         WorkOrderDistributeWayEnum distributeWayEnum = WorkOrderDistributeWayEnum.SELECTED_DISTRIBUTE;
-        if (!getDistributeLock()) {
-            return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�");
-        }
+        if (!getDistributeLock()) { return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�"); }
         try {
             if (query.getIds().isEmpty()) {
                 query.setIds(new LambdaQueryChainWrapper<>(baseMapper)
@@ -336,14 +344,15 @@
                         .collect(Collectors.toList()));
                 distributeWayEnum = WorkOrderDistributeWayEnum.ALL_DISTRIBUTE;
             }
-            if (query.getIds().isEmpty()) {
-                return Result.error("娌℃湁宸ュ崟寰呬笅鍙�");
-            }
+            if (query.getIds().isEmpty()) { return Result.error("娌℃湁宸ュ崟寰呬笅鍙�"); }
             new LambdaUpdateChainWrapper<>(baseMapper)
                     .set(WorkOrder::getStatus, WorkOrderStatusEnum.DISTRIBUTED)
                     .in(WorkOrder::getId, query.getIds())
                     .update();
             addDistributeRecord(query.getIds(), distributeWayEnum);
+            // 鍚屾鐐逛綅鐘舵��
+            List<Integer> pointIds = new LambdaQueryChainWrapper<>(baseMapper).select(WorkOrder::getPointId).in(WorkOrder::getId, query.getIds()).list().stream().map(WorkOrder::getPointId).toList();
+            ywPointService.updateRecovery(pointIds, 1);
             return Result.ok("鎴愬姛涓嬪彂" + query.getIds().size() + "鏉″伐鍗�");
         } catch (Exception e) {
             return Result.error("鎿嶄綔澶辫触");
@@ -413,4 +422,10 @@
                 .collect(Collectors.toList());
         return Result.ok().data(vos);
     }
+
+    @Override
+    public Result screenWorkOrder(ScreenQuery query) {
+        ScreenWorkOrderVO screen = baseMapper.screenWorkOrder(query);
+        return Result.ok().data(screen);
+    }
 }

--
Gitblit v1.8.0