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