From 80aace69506a46f93519fa583d8c04ab861498d2 Mon Sep 17 00:00:00 2001
From: zhangnaisong <2434969829@qq.com>
Date: 星期五, 02 八月 2024 23:05:23 +0800
Subject: [PATCH] 电磁锁临时电子围栏加入服务器重启生效创建提交

---
 ard-work/src/main/java/com/ruoyi/sy/service/IArdTankWallTemporaryService.java         |    2 
 ard-work/src/main/resources/mapper/sy/ArdTankWallTemporaryMapper.xml                  |   12 +++
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankWallTemporaryServiceImpl.java |  139 ++++++++++++++++++++++++++++++++++
 ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankWallTemporaryMapper.java            |    4 +
 ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java                |   23 ++++-
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java          |    7 +
 6 files changed, 176 insertions(+), 11 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java b/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java
index b8f26ca..2582ec2 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java
@@ -18,15 +18,13 @@
 import com.ruoyi.sy.domain.ArdTankLock;
 import com.ruoyi.sy.gps31.PushClientImplSerialPort;
 import com.ruoyi.sy.param.ArdSyCarParam;
-import com.ruoyi.sy.service.IArdTankAbnormalParkAlarmService;
-import com.ruoyi.sy.service.IArdTankLockService;
+import com.ruoyi.sy.service.*;
 import com.ruoyi.sy.service.impl.ArdTankLockServiceImpl;
 import com.ruoyi.sy.vo.ArdSyCarVo;
 import com.ruoyi.sy.domain.ArdSyUser;
 import com.ruoyi.sy.gps31.PositionContainer;
 import com.ruoyi.sy.gps31.PushClientImplAlarm;
 import com.ruoyi.sy.gps31.PushClientImplPosition;
-import com.ruoyi.sy.service.IArdSyUserService;
 import com.ruoyi.common.core.domain.entity.SysConfig;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysDeptService;
@@ -49,7 +47,6 @@
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.sy.domain.ArdSyCar;
-import com.ruoyi.sy.service.IArdSyCarService;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -89,6 +86,9 @@
 
     @Autowired
     private IArdTankLockService ardTankLockService;
+
+    @Autowired
+    private IArdTankWallTemporaryService ardTankWallTemporaryService;
 
     @Resource
     private SYClient sYClient;
@@ -214,7 +214,10 @@
                             };
                             //lockThread.start();
                             //灏嗙姸鎬佺嚎绋嬫斁鍏ュ鍣�
-                            PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockState",lockThread);
+                            if(PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).get("lockState") == null){
+                                PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockState",lockThread);
+                            }
+
                         }
                     }
                 };
@@ -306,7 +309,9 @@
                         }
                     };
                     //lockThread.start();
-                    PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockTime",lockThread);
+                    if(PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).get("lockTime") == null){
+                        PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockTime",lockThread);
+                    }
                 }
             }
         };
@@ -409,7 +414,9 @@
                                         }
                                     };
                                     //lockThread.start();
-                                    PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockRestart",lockThread);
+                                    if(PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).get("lockRestart") == null){
+                                        PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockRestart",lockThread);
+                                    }
                                 }
                             }
                         }
@@ -495,6 +502,8 @@
         };
         mainLockTimer.scheduleAtFixedRate(mainLockTask,date,2000);
 
+        //寮傚父閲嶅惎閲嶅缓鏈埌鏈熶复鏃剁數瀛愬洿鏍忕嚎绋�
+        ardTankWallTemporaryService.restartArdTankWallTemporaryThread(userId, password);
     }
 
     /**
diff --git a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankWallTemporaryMapper.java b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankWallTemporaryMapper.java
index 415bdea..f8ee6e9 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankWallTemporaryMapper.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankWallTemporaryMapper.java
@@ -1,6 +1,8 @@
 package com.ruoyi.sy.mapper;
 
 import java.util.List;
+import java.util.Map;
+
 import com.ruoyi.sy.domain.ArdTankWallTemporary;
 
 /**
@@ -62,4 +64,6 @@
     public List<ArdTankWallTemporary> getArdTankWallTemporaryByCarId(String carId);
 
     public Long selectArdTankWallTemporaryTotalByCarId(String carId);
+
+    public List<Map<String,Object>> getAliveArdTankWallTemporaryWithCarId();
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankWallTemporaryService.java b/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankWallTemporaryService.java
index 2f5c6c6..7e54356 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankWallTemporaryService.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankWallTemporaryService.java
@@ -66,4 +66,6 @@
     public int updateArdTankWallTemporary(String userId, String userName, Map<String,Object> para);
 
     public Map<String,Object> getArdTankWallTemporaryByCarId(Map<String,Object> para);
+
+    public void restartArdTankWallTemporaryThread(String userId,String password);
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java
index 7e3fc5c..95c3123 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java
@@ -700,7 +700,7 @@
         String sessionId = (String) LogInResult.get("sessionId");
 
         String finalSyURL = syURL;
-        Thread passwordThread = new Thread(syURL){
+        Thread passwordThread = new Thread(){
             @Override
             public void run() {
                 List<ArdTankLock> ardTankLockResult = ardTankLockMapper.selectArdTankLockWithPassword();
@@ -837,7 +837,10 @@
                         }
                     };
                     //lockThread.start();
-                    PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockPassword",lockThread);
+                    if(PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).get("lockPassword") == null){
+                        PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockPassword",lockThread);
+                    }
+
                 }
 
             }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankWallTemporaryServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankWallTemporaryServiceImpl.java
index ad8b921..e288e1d 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankWallTemporaryServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankWallTemporaryServiceImpl.java
@@ -6,14 +6,20 @@
 
 import com.alibaba.fastjson.JSON;
 import com.github.pagehelper.PageHelper;
+import com.ruoyi.common.core.domain.entity.SysConfig;
 import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.sy.domain.ArdSyUser;
 import com.ruoyi.sy.domain.ArdTankLock;
 import com.ruoyi.sy.domain.ArdTankWallLockTemporary;
 import com.ruoyi.sy.gps31.PositionContainer;
+import com.ruoyi.sy.mapper.ArdSyUserMapper;
 import com.ruoyi.sy.mapper.ArdTankLockMapper;
 import com.ruoyi.sy.mapper.ArdTankWallLockTemporaryMapper;
+import com.ruoyi.system.mapper.SysConfigMapper;
 import com.ruoyi.system.mapper.SysUserMapper;
+import com.ruoyi.utils.forest.SYClient;
 import com.ruoyi.utils.websocket.util.WebSocketUtils;
+import org.apache.commons.codec.digest.DigestUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -47,6 +53,15 @@
 
     @Resource
     private SysUserMapper sysUserMapper;
+
+    @Resource
+    private ArdSyUserMapper ardSyUserMapper;
+
+    @Resource
+    private SysConfigMapper sysConfigMapper;
+
+    @Resource
+    private SYClient sYClient;
 
     private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
@@ -120,6 +135,21 @@
 
     @Override
     public int insertArdTankWallTemporary(String userId, String userName, Map<String, Object> para) {
+        ArdSyUser ardSyUser = ardSyUserMapper.userById(userId);
+        if(ardSyUser == null){
+            return 0;
+        }
+        List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
+        String syURL = "";
+        if(syURLResult.size() != 0){
+            syURL = syURLResult.get(0).getConfigValue();
+        }else{
+            return 0;
+        }
+        /*String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword());
+        Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, ardSyUser.getUserId());
+        String sessionId = (String) LogInResult.get("sessionId");*/
+
         ArdTankWallTemporary ardTankWallTemporary = new ArdTankWallTemporary();
         ardTankWallTemporary.setId(IdUtils.simpleUUID());
         ardTankWallTemporary.setWallName((String) para.get("wallName"));
@@ -151,6 +181,7 @@
                 ardTankWallLockTemporaryMapper.insertArdTankWallLockTemporaryList(ardTankWallLockTemporaryList);
             }
             //鍒涘缓瀹氭椂绾跨▼
+            String finalSyURL = syURL;
             Thread thread = new Thread(){
                 @Override
                 public void run() {
@@ -160,13 +191,23 @@
                         //e.printStackTrace();
                         return;
                     }
+                    String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword());
+                    Map<String, Object> LogInResult = sYClient.logIn(finalSyURL, passwordMd5, ardSyUser.getUserId());
+                    String sessionId = (String) LogInResult.get("sessionId");
+                    Map<String,Object> syResult = sYClient.getCarNearPositionByCarId(finalSyURL, (String) para.get("carId"), ardSyUser.getUserId(), sessionId);
+                    String carPlate = "";
+                    if(((String)syResult.get("rspCode")).equals("1")){
+                        Map<String,Object> carMap = ((List<Map<String,Object>>)syResult.get("list")).get(0);
+                        carPlate = (String) carMap.get("carPlate");
+                    }
+
                     List<String> userIdList = sysUserMapper.selectUserIdByCarId((String) para.get("carId"));//鏌ョ湅鍝簺鐢ㄦ埛鏉冮檺涓嬫湁杩欎釜杞�
 
                     for (String key : ONLINE_USER_SESSIONS.keySet()){
                         String userId = key.split("_")[0];
                         if(userIdList.contains(userId)){
                             Map<String,Object> data = new HashMap();
-                            data.put("40003",(String) para.get("wallName") + "宸插埌鏈�");
+                            data.put("40003","杞﹁締-" + carPlate + ": '" + (String) para.get("wallName") + "'"+ "涓存椂鐢靛瓙鍥存爮锛屽凡澶辨晥");
                             WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data));
                         }
                     }
@@ -182,6 +223,21 @@
 
     @Override
     public int updateArdTankWallTemporary(String userId, String userName, Map<String, Object> para) {
+        ArdSyUser ardSyUser = ardSyUserMapper.userById(userId);
+        if(ardSyUser == null){
+            return 0;
+        }
+        List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
+        String syURL = "";
+        if(syURLResult.size() != 0){
+            syURL = syURLResult.get(0).getConfigValue();
+        }else{
+            return 0;
+        }
+        /*String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword());
+        Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, ardSyUser.getUserId());
+        String sessionId = (String) LogInResult.get("sessionId");*/
+
         ArdTankWallTemporary ardTankWallTemporary = new ArdTankWallTemporary();
         ardTankWallTemporary.setId((String) para.get("id"));
         ardTankWallTemporary.setProcessTime((String) para.get("processTime") + "/" + this.sdf.format(new Date()));
@@ -197,12 +253,22 @@
             }catch (Exception e){
                 e.printStackTrace();
             }
+            String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword());
+            Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, ardSyUser.getUserId());
+            String sessionId = (String) LogInResult.get("sessionId");
+            Map<String,Object> syResult = sYClient.getCarNearPositionByCarId(syURL, (String) para.get("carId"), ardSyUser.getUserId(), sessionId);
+            String carPlate = "";
+            if(((String)syResult.get("rspCode")).equals("1")){
+                Map<String,Object> carMap = ((List<Map<String,Object>>)syResult.get("list")).get(0);
+                carPlate = (String) carMap.get("carPlate");
+            }
+
             List<String> userIdList = sysUserMapper.selectUserIdByCarId((String) para.get("carId"));//鏌ョ湅鍝簺鐢ㄦ埛鏉冮檺涓嬫湁杩欎釜杞�
             for (String key : ONLINE_USER_SESSIONS.keySet()){
                 String usersId = key.split("_")[0];
                 if(userIdList.contains(usersId)){
                     Map<String,Object> data = new HashMap();
-                    data.put("40003",(String) para.get("wallName") + "宸茶" + userName + "鎾ら攢");
+                    data.put("40003","杞﹁締-" + carPlate + ":'" + (String) para.get("wallName") + "'" + "涓存椂鐢靛瓙鍥存爮锛�" + "宸茶" + userName + "鎾ら攢");
                     WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data));
                 }
             }
@@ -266,4 +332,73 @@
         return resultMap;
     }
 
+    @Override
+    public void restartArdTankWallTemporaryThread(String userId, String password) {
+        List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
+        String syURL = "";
+        if(syURLResult.size() != 0){
+            syURL = syURLResult.get(0).getConfigValue();
+        }else{
+            return;
+        }
+
+        List<Map<String,Object>> result = ardTankWallTemporaryMapper.getAliveArdTankWallTemporaryWithCarId();
+        Date now = new Date();
+        try{
+            String finalSyURL = syURL;
+            for(Map<String,Object> map : result){
+                if(now.getTime() - sdf.parse((String)map.get("processTime")).getTime() < Long.parseLong((String)map.get("interval")) * 60 * 1000){
+                    //鏃堕棿娌℃湁杩囨湡锛屼粠鏂板垱寤虹嚎绋�
+                    Thread thread = new Thread(){
+                        @Override
+                        public void run() {
+                            try {
+                                //璁℃椂浠庣粨鏉熸椂闂村埌褰撳墠鏃堕棿
+                                Thread.sleep( sdf.parse((String)map.get("processTime")).getTime() + Long.parseLong((String)map.get("interval")) * 60 * 1000 - now.getTime());
+                            } catch (InterruptedException e) {
+                                //e.printStackTrace();
+                                return;
+                            } catch (ParseException e) {
+                                //e.printStackTrace();
+                                return;
+                            }
+                            String passwordMd5 = DigestUtils.md5Hex(password);
+                            Map<String, Object> LogInResult = sYClient.logIn(finalSyURL, passwordMd5, userId);
+                            String sessionId = (String) LogInResult.get("sessionId");
+                            Map<String,Object> syResult = sYClient.getCarNearPositionByCarId(finalSyURL, (String) map.get("carId"), userId, sessionId);
+                            String carPlate = "";
+                            if(((String)syResult.get("rspCode")).equals("1")){
+                                Map<String,Object> carMap = ((List<Map<String,Object>>)syResult.get("list")).get(0);
+                                carPlate = (String) carMap.get("carPlate");
+                            }
+
+                            List<String> userIdList = sysUserMapper.selectUserIdByCarId((String) map.get("carId"));//鏌ョ湅鍝簺鐢ㄦ埛鏉冮檺涓嬫湁杩欎釜杞�
+
+                            for (String key : ONLINE_USER_SESSIONS.keySet()){
+                                String userId = key.split("_")[0];
+                                if(userIdList.contains(userId)){
+                                    Map<String,Object> data = new HashMap();
+                                    data.put("40003","杞﹁締-" + carPlate + ": '" + (String) map.get("wallName") + "'"+ "涓存椂鐢靛瓙鍥存爮锛屽凡澶辨晥");
+                                    WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data));
+                                }
+                            }
+                            ArdTankWallTemporary ardTankWallTemporary = new ArdTankWallTemporary();
+                            ardTankWallTemporary.setId((String) map.get("id"));
+                            ardTankWallTemporary.setProcessMark("-1");//-1涓哄埌鏈�
+                            ardTankWallTemporaryMapper.updateArdTankWallTemporary(ardTankWallTemporary);
+                            PositionContainer.getCarWallThreadMap().remove((String) map.get("carId"));
+                        }
+                    };
+                    thread.start();
+                    PositionContainer.getCarWallThreadMap().put((String) map.get("carId"), thread);
+                }else{
+                    //蹇界暐瓒呮椂
+                    continue;
+                }
+            }
+        }catch (Exception e){
+
+        }
+    }
+
 }
diff --git a/ard-work/src/main/resources/mapper/sy/ArdTankWallTemporaryMapper.xml b/ard-work/src/main/resources/mapper/sy/ArdTankWallTemporaryMapper.xml
index f9172fa..45b960c 100644
--- a/ard-work/src/main/resources/mapper/sy/ArdTankWallTemporaryMapper.xml
+++ b/ard-work/src/main/resources/mapper/sy/ArdTankWallTemporaryMapper.xml
@@ -145,4 +145,16 @@
         inner join ard_tank_wall_temporary atwt on atwlt.wall_id = atwt."id"
         where "asc".car_id = #{carId} and atwt.process_mark = '1'
     </select>
+
+    <select id="getAliveArdTankWallTemporaryWithCarId" resultType="java.util.Map">
+        select distinct atwt."id",atwt.wall_name as "wallName",
+        atwt.longitude,atwt.latitude,atwt.distance,atwt."interval",
+        atwt.process_time as "processTime",atwt.process_mark as "processMark",
+        atwt.user_id as "userId",atwt.user_name as "userName",
+        "asy".car_id as "carId" from ard_tank_wall_temporary atwt
+        inner join ard_tank_wall_lock_temporary atwlt on atwt."id" = atwlt.wall_id
+        inner join ard_tank_lock atl on atwlt.lock_id = atl."id"
+        inner join ard_sy_car "asy" on atl.car_id = "asy".car_id
+        where atwt.process_mark = '1'
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3