From 785ce007ce4b7b2119a99aacc95cefe9da09e32e Mon Sep 17 00:00:00 2001
From: jiazx0107@163.com <jiazx0107@163.com>
Date: 星期二, 04 七月 2023 16:49:09 +0800
Subject: [PATCH] 优化出入库逻辑,调整节点事件

---
 igds-inout/src/main/java/com/ld/igds/inout/manager/InoutEventControlManager.java |  326 ++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 253 insertions(+), 73 deletions(-)

diff --git a/igds-inout/src/main/java/com/ld/igds/inout/manager/InoutDeviceManager.java b/igds-inout/src/main/java/com/ld/igds/inout/manager/InoutEventControlManager.java
similarity index 64%
rename from igds-inout/src/main/java/com/ld/igds/inout/manager/InoutDeviceManager.java
rename to igds-inout/src/main/java/com/ld/igds/inout/manager/InoutEventControlManager.java
index 81ce32e..c4c35af 100644
--- a/igds-inout/src/main/java/com/ld/igds/inout/manager/InoutDeviceManager.java
+++ b/igds-inout/src/main/java/com/ld/igds/inout/manager/InoutEventControlManager.java
@@ -5,22 +5,26 @@
 import com.ld.igds.camera.data.ApiCameraData;
 import com.ld.igds.camera.data.ApiCameraResp;
 import com.ld.igds.camera.data.ApiSnapReq;
+import com.ld.igds.constant.BizType;
 import com.ld.igds.data.SnapImgDto;
 import com.ld.igds.file.CoreFileService;
 import com.ld.igds.inout.ApiInoutManager;
-import com.ld.igds.inout.InoutConstant;
-import com.ld.igds.inout.dto.ApiInoutData;
-import com.ld.igds.inout.dto.InoutCameraDto;
-import com.ld.igds.inout.dto.InoutData;
 import com.ld.igds.inout.ApiInoutService;
+import com.ld.igds.inout.InoutConstant;
+import com.ld.igds.inout.dto.*;
+import com.ld.igds.inout.service.InoutService;
 import com.ld.igds.io.constant.ProtocolEnum;
 import com.ld.igds.m.service.InoutCommonService;
 import com.ld.igds.models.InoutConf;
 import com.ld.igds.models.SnapSer;
 import com.ld.igds.util.ContextUtil;
+import com.ld.igds.util.NumberUtil;
 import com.ld.igds.view.service.SnapSerService;
+import com.ld.igds.websocket.WebSocketPacket;
+import com.ld.igds.websocket.WebSocketServer;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
@@ -30,18 +34,22 @@
 
 
 /**
- * @Desc: 鍑哄叆搴撶浉鍏宠澶囨搷浣滐紝涓氬姟閫昏緫鍖呮嫭鎽勫儚澶存搷浣滐紝鍦扮锛屾墻鏍锋満绛夋墍鏈夎澶�
+ * @Desc: 鍑哄叆搴撹繃绋嬩腑锛岄拡瀵规祦绋嬬浉鍏崇殑璁惧鑱斿姩鎺у埗鍖呮嫭锛屽湴纾呫�佹墻鏍锋満銆佽鍗″櫒銆侀椄鏈恒�丩ED瀵规帴绛�
+ * <p>
+ * 娉ㄦ剰锛涘綋鍓嶇被涓簨浠剁被鏂规硶鍧囦娇鐢ㄥ紓姝ユ柟寮忓疄鐜�
  * @author: Andy
- * @update-time: 2022/11/24
+ * @update-time: 2023/7/4 閲嶆柊浼樺寲
  */
 @Slf4j
 @Component
-public class InoutDeviceManager {
+public class InoutEventControlManager {
 
     @Resource
     private SnapSerService snapSerService;
     @Resource
     private InoutCommonService inoutCommonService;
+    @Resource
+    private InoutService inoutService;
     @Resource
     private CoreFileService fileService;
     @Resource
@@ -50,6 +58,12 @@
     private ApiCameraManager apiCameraManager;
 
 
+    /**
+     * 椤甸潰鑾峰彇杞︾墝璇嗗埆
+     *
+     * @param param
+     * @return
+     */
     public ApiInoutData getPlateNum(ApiInoutData param) {
 
         //濡傛灉浣跨敤鐨勬槸鍦扮鎻掍欢鑾峰彇锛屽垯闇�瑕佽皟鏁磋澶囦负鍦扮鎻掍欢淇℃伅
@@ -61,68 +75,44 @@
                 return param;
             }
 
-            ApiInoutData pluginWeight = new ApiInoutData();
-            pluginWeight = param;
-            pluginWeight.setIp(conf.getIp());
-            pluginWeight.setPort(conf.getPort());
-            pluginWeight.setProtocol(conf.getProtocol());
 
-            return apiInoutManager.getApiService(param.getProtocol()).getPlateNum(pluginWeight);
+            param.setIp(conf.getIp());
+            param.setPort(conf.getPort());
+            param.setProtocol(conf.getProtocol());
+
+            return apiInoutManager.getApiService(param.getProtocol()).getPlateNum(param);
 
         }
-
 
         return apiInoutManager.getApiService(param.getProtocol()).getPlateNum(param);
     }
 
+
+    /**
+     * 鑾峰彇鏅烘収鍗$粨鏋�
+     *
+     * @param param
+     * @return
+     */
     public ApiInoutData getIcCardNum(ApiInoutData param) {
 
         return apiInoutManager.getApiService(param.getProtocol()).getIcCardNum(param);
     }
 
-    /**
-     * 鑾峰彇绉伴噸鎻掍欢閰嶇疆淇℃伅
-     *
-     * @param companyId
-     * @param deptId
-     * @param sort
-     * @param type
-     * @return
-     */
-    public InoutConf getInoutConf(String companyId, String deptId, String sort, String type) {
-
-        // 鑾峰彇鍑哄叆搴撻厤缃俊鎭�
-        List<InoutConf> listInoutConf = inoutCommonService.getCacheInoutConf(companyId, deptId);
-
-        if (null == listInoutConf) return null;
-
-        InoutConf result = null;
-
-        for (InoutConf conf : listInoutConf) {
-            if (sort.equals(conf.getSort()) && type.equals(conf.getType())) {
-                result = conf;
-                break;
-            }
-        }
-
-        if (null == result) return null;
-
-        return result;
-    }
-
 
     /**
-     * 鍒濆鍖栬溅鐗岃瘑鍒�
+     * 鍑哄叆搴撶櫥璁板垵濮嬪寲
      *
-     * @param conf
+     * @param lpr 杞︾墝璇嗗埆閰嶇疆淇℃伅
      */
-    public void initLpr(InoutConf conf) {
+    @Async
+    public void initInoutRegister(InoutConf lpr) {
 
-        if (null == conf) return;
+        if (null == lpr) return;
 
-        ApiInoutData lprData = new ApiInoutData(conf);
+        ApiInoutData lprData = new ApiInoutData(lpr);
 
-        apiInoutManager.getApiService(conf.getProtocol()).initLpr(lprData);
+        apiInoutManager.getApiService(lpr.getProtocol()).initLpr(lprData);
     }
 
 
@@ -157,34 +147,17 @@
     public SnapImgDto snapImg(SnapImgDto param) {
         try {
             InoutConf conf;
-
-            //鐧昏鏃跺�欐姄鎷�
-            if (InoutConstant.PROGRESS_REGISTER.equals(param.getProgress())) {
-                this.noticeGatewayAddWhitePlate(param);
-            }
-
-            //鐐瑰嚮绉伴噸瀹屾垚
-            if (InoutConstant.PROGRESS_WEIGHT_TAG.equals(param.getProgress())
-                    || InoutConstant.PROGRESS_WEIGHT_FULL.equals(param.getProgress()) ||
-                    InoutConstant.PROGRESS_WEIGHT_EMPTY.equals(param.getProgress())) {
-
-                this.noticeGatewayWeightInfo(param);
-            }
-
             SnapSer ser = snapSerService.getCacheByDeptId(param.getDeptId());
-
             if (StringUtils.isNotEmpty(param.getId1())) {
                 conf = inoutCommonService.getCacheInoutConf(param.getCompanyId(), param.getDeptId(), param.getId1());
                 param.setFileName1(this.snapImgByConf(conf, param, ser));
-                Thread.sleep(600);
+                Thread.sleep(500);
             }
-
             if (StringUtils.isNotEmpty(param.getId2())) {
                 conf = inoutCommonService.getCacheInoutConf(param.getCompanyId(), param.getDeptId(), param.getId2());
                 param.setFileName2(this.snapImgByConf(conf, param, ser));
-                Thread.sleep(600);
+                Thread.sleep(500);
             }
-
             if (StringUtils.isNotEmpty(param.getId3())) {
                 conf = inoutCommonService.getCacheInoutConf(param.getCompanyId(), param.getDeptId(), param.getId3());
                 param.setFileName3(this.snapImgByConf(conf, param, ser));
@@ -221,7 +194,7 @@
         apiData.setMsg("绉伴噸宸插畬鎴�");
 
 //        apiInoutManager.getApiService(apiData.getProtocol()).noticeWeightDone(apiData);
-        apiInoutManager.getApiService(apiData.getProtocol()).noticeRadio(apiData);
+      //  apiInoutManager.getApiService(apiData.getProtocol()).noticeRadio(apiData);
     }
 
     /**
@@ -426,17 +399,224 @@
         return null;
     }
 
+    /**
+     * 鍑哄叆搴撶櫥璁板畬鎴愯Е鍙戜簨浠讹紝榛樿涓哄紓姝ュ鐞�
+     *
+     * @param data
+     */
+    @Async
+    public void onInoutRegister(InoutData data) {
+
+        //DO Nothing
+    }
+
 
     /**
-     * 鏍规嵁鍑哄叆搴撲俊鎭紝鎺у埗鍑哄叆搴撴帶鍒跺櫒
+     * 鍑哄叆搴撶О閲嶅畬鎴愶紝浜嬩欢
      *
      * @param data
      * @param curProgress
      * @param nextProgress
      */
-    public void controlWeight(InoutData data, String curProgress, String nextProgress) {
+    @Async
+    public void onInoutWeight(InoutData data, String curProgress, String nextProgress) {
 
-        //TODO
+        //1銆侀�氱煡绉伴噸鏄剧ず灞�
+
+        //2銆佽闊抽�氱煡
+
+        //3銆佸紑闂告満
+
+        //4銆佸紑绾㈢豢鐏�
 
     }
+
+
+    /**
+     * 鍊间粨瀹屾垚锛屼簨浠�
+     *
+     * @param data
+     * @param curProgress
+     * @param nextProgress
+     */
+    @Async
+    public void onInoutHandle(InoutData data, String curProgress, String nextProgress) {
+
+        //DO Nothing
+    }
+
+
+    /**
+     * 鎵︽牱瀹屾垚锛屼簨浠�
+     *
+     * @param data
+     */
+    @Async
+    public void onInSimple(InoutCheckData data) {
+        //DO Nothing
+    }
+
+    /**
+     * 璐ㄦ瀹屾垚锛屼簨浠�
+     *
+     * @param data
+     * @param curProgress
+     * @param nextProgress
+     */
+    @Async
+    public void onInCheck(InoutCheckData data, String curProgress, String nextProgress) {
+        //1銆佽川妫�澶у睆鏄剧ず
+    }
+
+    /**
+     * 娴佺▼瀹屾垚锛屼簨浠�
+     *
+     * @param data
+     */
+    @Async
+    public void onInoutComplete(InoutData data) {
+        //DO Nothing
+    }
+
+    /**
+     * 鍒濆鍖栧ぇ灞�
+     *
+     * @param companyId 缁勭粐缂栫爜
+     * @param deptId    鍒嗗簱缂栫爜
+     * @param progress  娴佺▼鐜妭
+     */
+    @Async
+    public void initInoutScreen(String companyId, String deptId, String progress) {
+        if (null == WebSocketServer.contextOnLineMap.get(BizType.SCREEN
+                .getCode())) {
+            WebSocketServer.contextOnLineMap.put(BizType.SCREEN.getCode(),
+                    false);
+        }
+        if (null == WebSocketServer.contextOnLineMap.get(BizType.SCREEN_INOUT
+                .getCode())) {
+            WebSocketServer.contextOnLineMap.put(
+                    BizType.SCREEN_INOUT.getCode(), false);
+        }
+        if (null == WebSocketServer.contextOnLineMap.get(BizType.SCREEN_CHECK
+                .getCode())) {
+            WebSocketServer.contextOnLineMap.put(
+                    BizType.SCREEN_CHECK.getCode(), false);
+        }
+
+        if (WebSocketServer.contextOnLineMap.get(BizType.SCREEN.getCode())
+                || WebSocketServer.contextOnLineMap.get(BizType.SCREEN_INOUT
+                .getCode())
+                || WebSocketServer.contextOnLineMap.get(BizType.SCREEN_CHECK
+                .getCode())) {
+
+
+            // 鎺ㄩ�佸埌澶у睆
+            List<InoutData> curList = inoutService.getListInoutCache(deptId);
+
+            List<InoutData> completeList = inoutService.getCompleteListInoutCache(deptId);
+
+            notifyInoutScreen(companyId, deptId, curList, completeList);
+        }
+    }
+
+    private void notifyInoutScreen(String companyId, String deptId, List<InoutData> curList, List<InoutData> completeList) {
+        InoutSumDto dto = new InoutSumDto();
+        if (null != curList) {
+            for (InoutData data : curList) {
+                if (InoutConstant.TYPE_IN.equals(data.getType())) {
+                    dto.setInSumNum(dto.getInSumNum() + 1);
+                }
+                if (InoutConstant.TYPE_OUT.equals(data.getType())) {
+                    dto.setOutSumNum(dto.getOutSumNum() + 1);
+                }
+                dto.setCompanyId(companyId);
+                dto.setDeptId(deptId);
+            }
+        }
+
+        if (null != completeList) {
+            for (InoutData data : completeList) {
+                if (InoutConstant.TYPE_IN.equals(data.getType())) {
+                    dto.setInSumNum(dto.getInSumNum() + 1);
+                    dto.setInComplateNum(dto.getInComplateNum() + 1);
+                }
+                if (InoutConstant.TYPE_OUT.equals(data.getType())) {
+                    dto.setOutSumNum(dto.getOutSumNum() + 1);
+                    dto.setOutComplateNum(dto.getOutComplateNum() + 1);
+                }
+                dto.setCompanyId(data.getCompanyId());
+                dto.setDeptId(data.getDeptId());
+            }
+        }
+
+        // 璋冩暣灏佽
+        if (dto.getInSumNum() > 0) {
+            dto.setPerInComplate(dto.getInComplateNum() / Double.valueOf(dto.getInSumNum()));
+            dto.setPerInComplate(NumberUtil.keepPrecision(
+                    dto.getPerInComplate() * 100, 1));
+        }
+
+        if (dto.getOutSumNum() > 0) {
+            dto.setPerOutComplate(dto.getOutComplateNum() / Double.valueOf(dto.getOutSumNum()));
+            dto.setPerOutComplate(NumberUtil.keepPrecision(
+                    dto.getPerOutComplate() * 100, 1));
+        }
+
+        if (null == dto.getCompanyId()) {
+            dto.setCompanyId(ContextUtil.getDefaultCompanyId());
+        }
+
+        // 鎺ㄩ�佺患鍚堢鐞嗗ぇ灞�
+        WebSocketPacket packet = new WebSocketPacket();
+        packet.setBizId("IN_OUT_SUMMARY");
+        packet.setCompanyId(dto.getCompanyId());
+        packet.setDeptId(dto.getDeptId());
+        packet.setBizType(BizType.SCREEN.getCode());
+        packet.setData(dto);
+        WebSocketServer.sendByBizTag(packet);
+
+        // 鎺ㄩ�佸嚭鍏ュ簱澶у睆
+        dto.setCurList(curList);
+        dto.setComplateList(completeList);
+        packet.setBizType(BizType.SCREEN.getCode());
+        packet.setBizTag(WebSocketPacket.BIZ_TAG_SCREEN_INOUT);
+        WebSocketServer.sendByBizTag(packet);
+
+        // 鎺ㄩ�佸寲楠屽ぇ灞�
+        packet.setBizType(BizType.SCREEN.getCode());
+        packet.setBizTag(WebSocketPacket.BIZ_TAG_SCREEN_CHECK);
+        WebSocketServer.sendByBizTag(packet);
+    }
+
+    /**
+     * 鑾峰彇绉伴噸鎻掍欢閰嶇疆淇℃伅
+     *
+     * @param companyId
+     * @param deptId
+     * @param sort
+     * @param type
+     * @return
+     */
+    public InoutConf getInoutConf(String companyId, String deptId, String sort, String type) {
+
+        // 鑾峰彇鍑哄叆搴撻厤缃俊鎭�
+        List<InoutConf> listInoutConf = inoutCommonService.getCacheInoutConf(companyId, deptId);
+
+        if (null == listInoutConf) return null;
+
+        InoutConf result = null;
+
+        for (InoutConf conf : listInoutConf) {
+            if (sort.equals(conf.getSort()) && type.equals(conf.getType())) {
+                result = conf;
+                break;
+            }
+        }
+
+        if (null == result) return null;
+
+        return result;
+    }
+
+
 }

--
Gitblit v1.9.3