From 64f046ed41c2ae607dc065c82b6d454f64e90584 Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq.com>
Date: 星期四, 19 六月 2025 21:52:33 +0800
Subject: [PATCH] 预警分析管理-电源告警

---
 src/main/java/com/whyc/service/WorkflowLinkService.java |  233 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 233 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/whyc/service/WorkflowLinkService.java b/src/main/java/com/whyc/service/WorkflowLinkService.java
new file mode 100644
index 0000000..86b2328
--- /dev/null
+++ b/src/main/java/com/whyc/service/WorkflowLinkService.java
@@ -0,0 +1,233 @@
+package com.whyc.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.whyc.constant.WorkflowEnum;
+import com.whyc.dto.Response;
+import com.whyc.mapper.*;
+import com.whyc.pojo.db_user.User;
+import com.whyc.pojo.web_site.WorkflowDevice;
+import com.whyc.pojo.web_site.WorkflowLink;
+import com.whyc.pojo.web_site.WorkflowMain;
+import com.whyc.util.CommonUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class WorkflowLinkService {
+
+    @Resource
+    private WorkflowLinkMapper mapper;
+
+    @Autowired
+    @Lazy
+    private WorkflowMainService mainService;
+
+    @Autowired
+    private WorkflowDeviceService deviceService;
+
+
+    public void addBatch(List<WorkflowLink> links) {
+        mapper.insertBatchSomeColumn(links);
+    }
+
+    public List<WorkflowLink> getWorkflowInfo(Integer mainId) {
+        QueryWrapper<WorkflowLink> wrapper = Wrappers.query();
+        wrapper.eq("main_id", mainId);
+        return mapper.selectList(wrapper);
+    }
+
+    @Transactional
+    public Response updateLink(WorkflowLink link) {
+        //鑾峰彇褰撳墠鑺傜偣鐨勮褰�
+        WorkflowLink linkInDB = mapper.selectById(link.getId());
+        User user = CommonUtil.getUser();
+        Date now = new Date();
+        //鏍规嵁id.鏌ヨ鍏宠仈鐨勪富琛�
+        WorkflowMain mainInDB = mainService.getById(linkInDB.getMainId());
+        //鏌ョ湅鐢宠娴佺▼绫诲瀷
+        switch (mainInDB.getType()) {
+            case 1: { //璁惧缁翠慨鐢宠
+                //鏌ョ湅涓昏〃鐨勭姸鎬�
+                //鍥犱负鏄崟涓摼璺妭鐐�,鎵�浠ヤ笉闇�瑕佸垽鏂槸涓嶆槸寰呭鐞�,鑲畾鍙湁1涓妭鐐�. 瀹℃壒閫氳繃鎴栬�呴┏鍥�
+                //if(main.getStatus() == WorkflowEnum.MAIN_STATUS_DEALING.getValue().intValue()){ //寰呭鐞�,涓嬩竴姝ユ槸瀹℃壒閫氳繃,寰呭鐞� 鎴栬�呴┏鍥�
+                if(link.getStatus() == WorkflowEnum.LINK_STATUS_PASS.getValue().intValue()){
+                    mainInDB.setStatus(WorkflowEnum.MAIN_STATUS_WAIT_FOR_DEALING.getValue());
+                    mainService.updateById(mainInDB);
+                }else if(link.getStatus() == WorkflowEnum.LINK_STATUS_REJECT.getValue().intValue()){
+                    mainInDB.setStatus(WorkflowEnum.MAIN_STATUS_END_REJECT.getValue());
+                    mainInDB.setEndReason(link.getDealRejectReason());
+                    mainInDB.setEndTime(now);
+                    mainService.updateById(mainInDB);
+                    link.setDealAndClose(1);
+                }
+            }break;
+            //璁惧鍏ュ簱鐢宠
+            case 2:
+            //璁惧鎶ュ簾鐢宠
+            case 3:{
+                if(link.getStatus() == WorkflowEnum.LINK_STATUS_PASS.getValue().intValue()){
+                    mainInDB.setStatus(WorkflowEnum.MAIN_STATUS_END_PASS.getValue());
+                    mainInDB.setEndTime(now);
+                    mainInDB.setEndReason(link.getDealReason());
+                    mainService.updateById(mainInDB);
+                }else if(link.getStatus() == WorkflowEnum.LINK_STATUS_REJECT.getValue().intValue()){
+                    mainInDB.setStatus(WorkflowEnum.MAIN_STATUS_END_REJECT.getValue());
+                    mainInDB.setEndReason(link.getDealRejectReason());
+                    mainInDB.setEndTime(now);
+                    //妫�鏌ユ槸鍚︽湁鍏宠仈宸ュ崟.
+                    // 濡傛灉鏈夊叧鑱斿伐鍗�,鍏宠仈宸ュ崟鐘舵�侀噸缃负瀹岀粨寰呭鐞�,瀹屾垚鏃堕棿閲嶇疆涓虹┖
+                    if(mainInDB.getRelatedId() != null){
+                        Integer relatedId = mainInDB.getRelatedId();
+                        mainService.resetRepairStatus(relatedId);
+                        //鍏宠仈宸ュ崟鐨勮澶囬檮灞炶〃鏈鐞嗘暟閲忎篃瑕佸洖閫�,绛変簬涓昏〃璁惧鏁伴噺
+                        List<WorkflowDevice> deviceRelatedListInDB = deviceService.getByMainId(mainInDB.getRelatedId());
+                        List<WorkflowDevice> deviceListInDB = deviceService.getByMainId(mainInDB.getId());
+                        for (int i = 0; i < deviceListInDB.size(); i++) {
+                            WorkflowDevice deviceInDB = deviceListInDB.get(i);
+                            for (int j = 0; j < deviceRelatedListInDB.size(); j++) {
+                                WorkflowDevice deviceRelatedInDB = deviceRelatedListInDB.get(j);
+                                if (deviceInDB.getName().equals(deviceRelatedInDB.getName())
+                                        && deviceInDB.getModel().equals(deviceRelatedInDB.getModel())
+                                        && deviceInDB.getVersion().equals(deviceRelatedInDB.getVersion())
+                                        && deviceInDB.getBrand().equals(deviceRelatedInDB.getBrand())
+                                        && deviceInDB.getType().equals(deviceRelatedInDB.getType())
+                                        && deviceInDB.getSupplier().equals(deviceRelatedInDB.getSupplier())
+                                ) {
+                                    deviceRelatedInDB.setQuantityUnprocessed(deviceInDB.getQuantity());
+                                    //鍏宠仈宸ュ崟褰撳墠璁惧闄勫睘鐨勬湭澶勭悊鏁伴噺鍥為��瀹屾垚,涓嬩竴涓�
+                                    break;
+                                }
+                            }
+                        }
+                        deviceService.updateQuantityUnprocessedBatch(deviceRelatedListInDB);
+                    }
+                    mainService.updateById(mainInDB);
+                    link.setDealAndClose(1);
+                }
+            }break;
+            case 4:{ //TODO 鍑哄簱鐢宠
+                if(link.getStatus() == WorkflowEnum.LINK_STATUS_PASS.getValue().intValue()){
+                    mainInDB.setStatus(WorkflowEnum.MAIN_STATUS_WAIT_FOR_DEALING.getValue());
+                    mainService.updateById(mainInDB);
+                }else if(link.getStatus() == WorkflowEnum.LINK_STATUS_REJECT.getValue().intValue()){
+                    mainInDB.setStatus(WorkflowEnum.MAIN_STATUS_END_REJECT.getValue());
+                    mainInDB.setEndReason(link.getDealRejectReason());
+                    mainInDB.setEndTime(now);
+                    //妫�鏌ユ槸鍚︽湁鍏宠仈宸ュ崟.濡傛灉鏈夊叧鑱斿伐鍗�,鍏宠仈宸ュ崟鐘舵�侀噸缃负瀹岀粨寰呭鐞�,瀹屾垚鏃堕棿閲嶇疆涓虹┖
+                    if(mainInDB.getRelatedId() != null){
+                        Integer relatedId = mainInDB.getRelatedId();
+                        //mainService.resetRepairStatus(relatedId,mainInDB.getQuantity());
+                    }
+                    mainService.updateById(mainInDB);
+                    link.setDealAndClose(1);
+                }
+            }break;
+            default:
+                break;
+
+        }
+
+        link.setId(linkInDB.getId());
+        link.setDealUserId(user.getId());
+        link.setDealTime(now);
+
+        mapper.updateById(link);
+
+        return new Response().setII(1,"鏇存柊瀹屾垚");
+    }
+
+    /**
+     *
+     * @param mainId 鐗瑰畾鐨勫崟鎹�
+     * @param processLevel 鐗瑰畾鐨勮繃绋�
+     * @return 鐗瑰畾鍗曟嵁,鐗瑰畾杩囩▼,鏈畬鎴愮殑浼氱鐨勬暟閲�
+     */
+    private int getLeftAssignNum(Integer mainId, String processLevel) {
+        QueryWrapper<WorkflowLink> query = Wrappers.query();
+        query.select("count(*) as id").eq("main_id",mainId).eq("process_level",processLevel).ne("status",WorkflowEnum.LINK_STATUS_PASS.getValue());
+        return mapper.selectOne(query).getId();
+    }
+
+    /**
+     * 鏇存柊鑺傜偣,涓昏妭鐐逛笉瀹岀粨
+     * @param link 鍙傛暟id,status,dealReason鎴栬�卍ealRejectReason
+     */
+    private void updateLinkField(WorkflowLink link) {
+        Date now = new Date();
+        link.setDealTime(now);
+        mapper.updateById(link);
+    }
+
+
+    public Map<Integer, Integer> getReceivedStatistics(int type, User user) {
+        Map<Integer,Integer> statistics = new HashMap<>();
+        statistics.put(1,0);
+        statistics.put(6,0);
+        statistics.put(58,0);
+        List<WorkflowLink> links = mapper.getReceivedList(type,user);
+        Map<Integer, List<WorkflowLink>> receivedListMap = links.stream().collect(Collectors.groupingBy(WorkflowLink::getStatus));
+        Set<Integer> statusSet = receivedListMap.keySet();
+        for (Integer status : statusSet) {
+            if (status == 5 || status == 8) {
+                statistics.put(58, statistics.get(58) + receivedListMap.get(status).size());
+            } else {
+                statistics.put(status, receivedListMap.get(status).size());
+            }
+        }
+        return statistics;
+    }
+
+    /**
+     *
+     * 浜屾鏍稿鍜岄殣鎮f晠闅滅殑缁熻
+     *
+     * 澧炲姞浜嗗叏閮� 0
+     * 0:鍏ㄩ儴
+     * 1:瀹℃壒涓�
+     * 2:閫氳繃
+     * 3:椹冲洖
+     *
+     * status鍚箟:1-寰呮帴鍗�,6-寰呭鏍�,58-宸插鏍�
+     * @param type
+     * @param user
+     * @return
+     */
+    public Response getReceivedStatistics2(int type, User user) {
+        Map<Integer,Integer> statistics = new HashMap<>();
+        statistics.put(0,0);
+        statistics.put(1,0);
+        statistics.put(2,0);
+        statistics.put(3,0);
+        List<WorkflowLink> links = mapper.getReceivedList2(type,user);
+        Map<Integer, List<WorkflowLink>> receivedListMap = links.stream().collect(Collectors.groupingBy(WorkflowLink::getStatus));
+        Set<Integer> statusSet = receivedListMap.keySet();
+        int sum = 0;
+        for (Integer status : statusSet) {
+            int size = receivedListMap.get(status).size();
+            if (status == 1 || status == 6) { //瀹℃壒涓�
+                statistics.put(1, statistics.get(1) + size);
+            } else if(status == 5){ //閫氳繃
+                statistics.put(2, size);
+            }else if(status == 8){ //椹冲洖
+                statistics.put(3,size);
+            }
+            sum+=size;
+        }
+        statistics.put(0,sum);
+        return new Response().set(1,statistics);
+    }
+
+
+    public void add(WorkflowLink link) {
+        mapper.insert(link);
+    }
+
+
+}

--
Gitblit v1.9.1