From 9c2530bafbd5f502fd9bdc9abaa7c357d6f91e86 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 06 八月 2024 17:46:00 +0800
Subject: [PATCH] 点位导入导出

---
 ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java |  272 ++++++++++++++++++++++++++++++++----------------------
 1 files changed, 160 insertions(+), 112 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 670853e..415f927 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
@@ -1,5 +1,6 @@
 package com.ycl.platform.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
@@ -8,22 +9,32 @@
 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.HomeQuery;
+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 lombok.RequiredArgsConstructor;
-import org.apache.commons.lang3.ArrayUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -33,9 +44,7 @@
 
 import java.time.LocalDateTime;
 import java.time.ZoneId;
-import java.util.List;
-import java.util.Objects;
-import java.util.concurrent.TimeUnit;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -44,22 +53,38 @@
  * @author xp
  * @since 2024-03-05
  */
+@Slf4j
 @Service
 @RequiredArgsConstructor
 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;
     private final NotifyService notifyService;
     private final WorkOrderDistributeRecordMapper workOrderDistributeRecordMapper;
+    private final TMonitorMapper monitorMapper;
 
     private final String DISTRIBUTE_LOCK_KEY = "distributeLock";
+    private final static String IMPORTANT = "important";
 
     @Autowired
     private RedisCache redisCache;
+
+    @Override
+    public Boolean innerAdd(List<WorkOrder> workOrderList) {
+        int total = workOrderList.size();
+        workOrderList.stream().filter(item -> {
+            return StringUtils.hasText(item.getSerialNumber()) && Objects.nonNull(item.getStatus()) && StringUtils.hasText(item.getErrorType());
+        });
+        // TODO 鑷姩涓嬪彂宸ュ崟
+        int real = workOrderList.size();
+        boolean result = this.saveBatch(workOrderList);
+        log.info("浼犲叆宸ュ崟鎬绘暟: {}锛屽疄闄呮坊鍔犲伐鍗曟暟锛歿}", total, real);
+        return result;
+    }
 
     /**
      * 娣诲姞
@@ -69,10 +94,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("娣诲姞鎴愬姛");
         }
@@ -113,12 +137,59 @@
         workOrderAuditingRecord.setRemark(form.getAuditingRemark());
         workOrderAuditingRecordMapper.insert(workOrderAuditingRecord);
         // 娣诲姞鏂伴�氱煡
-        try {
-            Notify notify = new Notify(NotifyTypeEnum.WORK_ORDER, form.getAuditingResult().getDesc(), workOrder.getYwPeopleId(), "0", "0", workOrder.getId());
-            notifyService.save(notify);
-        } catch (Exception e) {
-            return Result.error("瀹℃牳鎴愬姛锛岄�氱煡杩愮淮浜哄憳澶辫触");
+        Notify notify = Notify.genEntityByUnit(NotifyTypeEnum.WORK_ORDER,
+                form.getAuditingResult().getDesc(),
+                workOrder.getUnitId(),
+                UrgentLevelEnum.WARNING,
+                workOrder.getWorkOrderNo());
+        notifyService.save(notify);
+        // 鍚屾鐐逛綅鐘舵��
+        if (form.getAuditingResult() == WorkOrderStatusEnum.AUDITING_SUCCESS) {
+            ywPointService.updateRecovery(Arrays.asList(workOrder.getSerialNumber()), 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, ids);
+        lambdaUpdateWrapper.set(WorkOrder::getStatus, form.getAuditingResult());
+        baseMapper.update(lambdaUpdateWrapper);
+        // 娣诲姞澶氭潯瀹℃牳璁板綍
+        List<WorkOrderAuditingRecord> workOrderAuditingRecords = new ArrayList<>();
+        for (Integer id : ids) {
+            WorkOrderAuditingRecord workOrderAuditingRecord = new WorkOrderAuditingRecord();
+            workOrderAuditingRecord.setWorkOrderId(id);
+            workOrderAuditingRecord.setAuditingUser(SecurityUtils.getLoginUser().getUserId().intValue());
+            workOrderAuditingRecord.setResult(form.getAuditingResult().getDesc());
+            workOrderAuditingRecord.setRemark(form.getAuditingRemark());
+            workOrderAuditingRecords.add(workOrderAuditingRecord);
+        }
+        workOrderAuditingRecordService.saveBatch(workOrderAuditingRecords);
+        // 娣诲姞鏂伴�氱煡
+        List<Notify> notifies = new ArrayList<>();
+        for (WorkOrder workOrder : list) {
+            Notify notify = Notify.genEntityByUnit(NotifyTypeEnum.WORK_ORDER,
+                    form.getAuditingResult().getDesc(),
+                    workOrder.getUnitId(),
+                    UrgentLevelEnum.WARNING,
+                    workOrder.getWorkOrderNo());
+            notifies.add(notify);
+        }
+        notifyService.saveBatch(notifies);
         return Result.ok("鎿嶄綔鎴愬姛");
     }
 
@@ -131,6 +202,7 @@
         }
         // 宸ュ崟鐘舵��
         workOrder.setStatus(WorkOrderStatusEnum.YW_HANDLE);
+        workOrder.setYwHandleTime(LocalDateTime.now());
         baseMapper.updateById(workOrder);
         // 娣诲姞涓�鏉¤繍缁存儏鍐佃褰�
         WorkOrderYwConditionRecord workOrderYwConditionRecord = new WorkOrderYwConditionRecord();
@@ -143,22 +215,9 @@
     }
 
     @Override
-    public Result selectYwConditionByYwId(String id) {
-        return Result.ok().data(
-                new LambdaQueryChainWrapper<>(workOrderYwConditionRecordMapper)
-                        .eq(WorkOrderYwConditionRecord::getWorkOrderId, id)
-                        .orderByAsc(WorkOrderYwConditionRecord::getCreateTime)
-                        .last("limit 1")
-                        .one());
-    }
-
-    @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
@@ -213,144 +272,104 @@
      */
     @Override
     public Result page(WorkOrderQuery query) {
-        IPage<WorkOrder> page = new LambdaQueryChainWrapper<>(baseMapper)
-                .eq(StringUtils.hasText(query.getWorkOrderNo()), WorkOrder::getWorkOrderNo, query.getWorkOrderNo())
-                .eq(StringUtils.hasText(query.getStatus().getValue()), WorkOrder::getStatus, query.getStatus())
-                .eq(StringUtils.hasText(query.getErrorType()), WorkOrder::getErrorType, query.getErrorType())
-                .between(Objects.nonNull(query.getStart()) && Objects.nonNull(query.getEnd()),
-                        WorkOrder::getYwHandleTime,
-                        DateUtils.getDayStart(query.getStart()),
-                        DateUtils.getDayEnd(query.getEnd()))
-                .orderByDesc(WorkOrder::getCreateTime)
-                .page(PageUtil.getPage(query, WorkOrder.class));
-
-        List<WorkOrderVO> vos = page.getRecords().stream()
-                .map(
-                        entity -> {
-                            WorkOrderVO vo = WorkOrderVO.getVoByEntity(entity, null);
-                            YwUnit unit = ywUnitMapper.selectById(vo.getUnitId());
-                            if (Objects.nonNull(unit)) {
-                                vo.setUnitName(unit.getUnitName());
-                            }
-                            YwPeople ywPeople = ywPeopleMapper.selectById(vo.getYwPeopleId());
-                            if (Objects.nonNull(ywPeople)) {
-                                vo.setYwPeopleName(ywPeople.getYwPersonName());
-                            }
-                            return vo;
-                        }
-                )
-                .collect(Collectors.toList());
-        return Result.ok().data(vos).total(page.getTotal());
+        IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class);
+        baseMapper.page(page, query);
+        return Result.ok().data(page.getRecords()).total(page.getTotal());
     }
 
     @Override
     public Result distributePage(DistributeWorkOrderQuery query) {
-        IPage<WorkOrder> page = new LambdaQueryChainWrapper<>(baseMapper)
-                .eq(Objects.nonNull(query.getUnitId()), WorkOrder::getUnitId, query.getUnitId())
-                .eq(WorkOrder::getStatus, WorkOrderStatusEnum.WAIT_DISTRIBUTE)
-                .orderByDesc(WorkOrder::getCreateTime)
-                .page(PageUtil.getPage(query, WorkOrder.class));
-        List<WorkOrderVO> vos = page.getRecords().stream()
-                .map(
-                        entity -> {
-                            WorkOrderVO vo = WorkOrderVO.getVoByEntity(entity, null);
-                            YwUnit unit = ywUnitMapper.selectById(vo.getUnitId());
-                            if (Objects.nonNull(unit)) {
-                                vo.setUnitName(unit.getUnitName());
-                            }
-                            YwPeople ywPeople = ywPeopleMapper.selectById(vo.getYwPeopleId());
-                            if (Objects.nonNull(ywPeople)) {
-                                vo.setYwPeopleName(ywPeople.getYwPersonName());
-                            }
-                            return vo;
-                        }
-                )
-                .collect(Collectors.toList());
-        return Result.ok().data(vos).total(page.getTotal());
+        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::getSerialNumber, WorkOrder::getSerialNumber)
                 .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<String> serialNumberList = list.stream().map(WorkOrder::getSerialNumber).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);
+            addDistributeRecord(ids, WorkOrderDistributeWayEnum.FAST_DISTRIBUTE);
+            // 鍚屾鐐逛綅鐘舵��
+            ywPointService.updateRecovery(serialNumberList, 1);
             return Result.ok("鎴愬姛涓嬪彂" + ids.size() + "鏉″伐鍗�");
         } catch (Exception e) {
-            return Result.ok("鎿嶄綔澶辫触");
+            return Result.error("鎿嶄綔澶辫触");
         } finally {
             distributeUnLock();
         }
     }
 
     @Override
-    public Result selectedIdsDistribute(List<Integer> ids, Integer unitId) {
-        if (!getDistributeLock()) {
-            return Result.error("宸ュ崟涓嬪彂涓紝璇风◢鍚庨噸璇�");
-        }
+    @Transactional
+    public Result selectedIdsDistribute(DistributeWorkOrderQuery query) {
+        WorkOrderDistributeWayEnum distributeWayEnum = WorkOrderDistributeWayEnum.SELECTED_DISTRIBUTE;
+        if (!getDistributeLock()) { return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�"); }
         try {
-            if (ids.isEmpty()) {
-                ids = new LambdaQueryChainWrapper<>(baseMapper)
+            if (query.getIds().isEmpty()) {
+                query.setIds(new LambdaQueryChainWrapper<>(baseMapper)
                         .eq(WorkOrder::getStatus, WorkOrderStatusEnum.WAIT_DISTRIBUTE)
-                        .eq(Objects.nonNull(unitId), WorkOrder::getUnitId, unitId)
+                        .eq(Objects.nonNull(query.getUnitId()), WorkOrder::getUnitId, query.getUnitId())
                         .select(WorkOrder::getId)
                         .list()
                         .stream()
                         .map(WorkOrder::getId)
-                        .collect(Collectors.toList());
+                        .collect(Collectors.toList()));
+                distributeWayEnum = WorkOrderDistributeWayEnum.ALL_DISTRIBUTE;
             }
+            if (query.getIds().isEmpty()) { return Result.error("娌℃湁宸ュ崟寰呬笅鍙�"); }
             new LambdaUpdateChainWrapper<>(baseMapper)
                     .set(WorkOrder::getStatus, WorkOrderStatusEnum.DISTRIBUTED)
-                    .in(WorkOrder::getId, ids)
-                    .eq(WorkOrder::getStatus, WorkOrderStatusEnum.WAIT_DISTRIBUTE)
-                    .eq(Objects.nonNull(unitId), WorkOrder::getUnitId, unitId)
+                    .in(WorkOrder::getId, query.getIds())
                     .update();
-            addDistributeRecord(ids);
-            return Result.ok("鎿嶄綔鎴愬姛");
+            addDistributeRecord(query.getIds(), distributeWayEnum);
+            // 鍚屾鐐逛綅鐘舵��
+            List<String> serialNumberList = new LambdaQueryChainWrapper<>(baseMapper).select(WorkOrder::getSerialNumber).in(WorkOrder::getId, query.getIds()).list().stream().map(WorkOrder::getSerialNumber).toList();
+            ywPointService.updateRecovery(serialNumberList, 1);
+            return Result.ok("鎴愬姛涓嬪彂" + query.getIds().size() + "鏉″伐鍗�");
         } catch (Exception e) {
-            return Result.ok("鎿嶄綔澶辫触");
+            return Result.error("鎿嶄綔澶辫触");
         } finally {
             distributeUnLock();
         }
@@ -380,11 +399,11 @@
      * 娣诲姞宸ュ崟涓嬪彂璁板綍
      * @param ids 宸ュ崟id
      */
-    private void addDistributeRecord(List<Integer> ids) {
+    private void addDistributeRecord(List<Integer> ids, WorkOrderDistributeWayEnum distributeWay) {
         LoginUser loginUser = SecurityUtils.getLoginUser();
         workOrderDistributeRecordMapper.insertBatch(
                 ids.stream()
-                        .map(id -> new WorkOrderDistributeRecord(id, loginUser.getUserId()))
+                        .map(id -> new WorkOrderDistributeRecord(id, loginUser.getUserId(), distributeWay))
                         .toList()
         );
     }
@@ -417,4 +436,33 @@
                 .collect(Collectors.toList());
         return Result.ok().data(vos);
     }
+
+    @Override
+    public Result screenWorkOrder(ScreenQuery query) {
+        ScreenWorkOrderVO screen = baseMapper.screenWorkOrder(query);
+        return Result.ok().data(screen);
+    }
+
+    @Override
+    public Map<String, Object> home(HomeQuery monitorQuery) {
+        Map<String, Object> dataMap = new HashMap<>();
+        Map<String, Object> data1 = new HashMap<>();
+        Map<String, Object> data2 = new HashMap<>();
+        Map<String, Object> data3 = new HashMap<>();
+        List<Map<String, Object>> home = baseMapper.home(monitorQuery);
+        if (ObjectUtils.isNotEmpty(home)) {
+            for (Map<String, Object> map : home) {
+                if (Objects.nonNull(map.get("dateType")) && StringUtils.hasText(map.get("dateType").toString())) {
+                    data1.put(map.get("dateType").toString(), map.get("num1"));
+                    data2.put(map.get("dateType").toString(), map.get("num2"));
+                    data3.put(map.get("dateType").toString(), map.get("num3"));
+                }
+            }
+            dataMap.put("name", home.get(0).get("name"));
+        }
+        dataMap.put("complete", data1);
+        dataMap.put("waiting", data2);
+        dataMap.put("pending", data3);
+        return dataMap;
+    }
 }

--
Gitblit v1.8.0