From 57c673aa3e83677bcf5d30b4b45d06bae6609db8 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: 星期四, 08 八月 2024 16:14:40 +0800
Subject: [PATCH] 优化:获取会话
---
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java | 248 +++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 239 insertions(+), 9 deletions(-)
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 622e4ae..2120ab0 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
@@ -1,15 +1,16 @@
package com.ruoyi.sy.service.impl;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
import java.util.*;
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.ArdSyCar;
-import com.ruoyi.sy.domain.ArdSyUser;
-import com.ruoyi.sy.domain.ArdTankLockState;
+import com.ruoyi.sy.domain.*;
+import com.ruoyi.sy.gps31.PositionContainer;
import com.ruoyi.sy.mapper.*;
import com.ruoyi.system.mapper.SysConfigMapper;
import com.ruoyi.utils.forest.SYClient;
@@ -22,7 +23,6 @@
import java.util.stream.Collectors;
-import com.ruoyi.sy.domain.ArdTankLock;
import com.ruoyi.sy.service.IArdTankLockService;
import javax.annotation.Resource;
@@ -59,9 +59,12 @@
private ArdTankLockStateMapper ardTankLockStateMapper;
@Resource
+ private ArdTankLockPasswordMapper ardTankLockPasswordMapper;
+
+ @Resource
private SYClient sYClient;
- private Map<String,Thread> alarmMap = new HashMap();//鐢电閿佸巻鍙叉姤璀︾嚎绋嬪鍣�
+ //private Map<String,Thread> alarmMap = new HashMap();//鐢电閿佸巻鍙叉姤璀︾嚎绋嬪鍣�
/**
* 鏌ヨ鐢电閿�
@@ -104,9 +107,27 @@
ardTankLock.setImgPositionLeft(map.get("imgPositionLeft"));
ardTankLock.setCarId(carId);
ardTankLock.setEnable(map.get("enable"));
+ ardTankLock.setRestartState(map.get("restartState"));
ardTankLocks.add(ardTankLock);
}
- return ardTankLockMapper.insertArdTankLocks(ardTankLocks);
+ try{
+ return ardTankLockMapper.insertArdTankLocks(ardTankLocks);
+ }finally {
+ if(PositionContainer.getCarLockProcessThreadMap().keySet().contains(carId)){
+ Map<String, Map<String,Thread>> lockMap = PositionContainer.getCarLockProcessThreadMap().get(carId);
+ for(Map<String,String> map : lockList){
+ Map<String,Thread> lockThreadMap = new HashMap();
+ lockMap.put(map.get("lockNum"),lockThreadMap);
+ }
+ }else{
+ Map<String,Map<String,Thread>> carMap = new HashMap();//杞﹁締瀹瑰櫒
+ for(Map<String,String> map : lockList){
+ Map<String,Thread> lockMap = new HashMap();//閿佸鍣�
+ carMap.put(map.get("lockNum"),lockMap);
+ }
+ PositionContainer.getCarLockProcessThreadMap().put(carId,carMap);
+ }
+ }
}
/*@Override
public int insertArdTankLock(ArdTankLock ardTankLock) {
@@ -308,7 +329,11 @@
@Override
public int deleteLockByCarId(String carId) {
int result = ardTankLockMapper.deleteLockByCarId(carId);
- return result;
+ try{
+ return result;
+ }finally {
+ PositionContainer.getCarLockProcessThreadMap().remove(carId);//绉婚櫎瀹瑰櫒
+ }
}
@Override
@@ -327,7 +352,11 @@
return 1;
}
result = ardTankLockMapper.deleteLockByCarId(carId);
- return result;
+ try{
+ return result;
+ }finally {
+ PositionContainer.getCarLockProcessThreadMap().get(carId).clear();
+ }
}
List<ArdTankLock> ardTankLocks = new ArrayList();
@@ -343,6 +372,7 @@
ardTankLock.setImgPositionLeft((String) map.get("imgPositionLeft"));
ardTankLock.setCarId((String) map.get("carId"));
ardTankLock.setEnable((String) map.get("enable"));
+ ardTankLock.setRestartState((String) map.get("restartState"));
result = result + ardTankLockMapper.updateArdTankLock(ardTankLock);
}else{//鏃犱富閿紝鍋氭柊澧炴搷浣�
ArdTankLock ardTankLock = new ArdTankLock();
@@ -352,10 +382,27 @@
ardTankLock.setImgPositionTop((String) map.get("imgPositionTop"));
ardTankLock.setImgPositionLeft((String) map.get("imgPositionLeft"));
ardTankLock.setCarId(carId);
+ ardTankLock.setRestartState((String) map.get("restartState"));
ardTankLock.setEnable((String) map.get("enable"));
ardTankLocks.add(ardTankLock);
}
}
+ //鏇存柊瀹瑰櫒
+ if(PositionContainer.getCarLockProcessThreadMap().keySet().contains(carId)){
+ Map<String, Map<String,Thread>> lockMap = PositionContainer.getCarLockProcessThreadMap().get(carId);
+ for(Map<String,Object> map : lockList){
+ Map<String,Thread> lockThreadMap = new HashMap();
+ lockMap.put((String) map.get("lockNum"),lockThreadMap);
+ }
+ }else{
+ Map<String,Map<String,Thread>> carMap = new HashMap();//杞﹁締瀹瑰櫒
+ for(Map<String,Object> map : lockList){
+ Map<String,Thread> lockMap = new HashMap();//閿佸鍣�
+ carMap.put((String) map.get("lockNum"),lockMap);
+ }
+ PositionContainer.getCarLockProcessThreadMap().put(carId,carMap);
+ }
+
if(ardTankLocks.size() != 0){
result = result + ardTankLockMapper.insertArdTankLocks(ardTankLocks);
}
@@ -636,9 +683,192 @@
data.put("40002",result);
WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(userId), JSON.toJSONString(data));
}
+ return;
}
@Override
+ public void readPassword(String userId,String password) {
+ List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
+ String syURL = "";
+ if(syURLResult.size() != 0){
+ syURL = syURLResult.get(0).getConfigValue();
+ }else{
+ return;
+ }
+ String passwordMd5 = DigestUtils.md5Hex(password);
+ Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, userId);
+ String sessionId = (String) LogInResult.get("sessionId");
+
+ String finalSyURL = syURL;
+ Thread passwordThread = new Thread(){
+ @Override
+ public void run() {
+ List<ArdTankLock> ardTankLockResult = ardTankLockMapper.selectArdTankLockWithPassword();
+ for(ArdTankLock ardTankLock : ardTankLockResult){
+ Thread lockThread = new Thread(){//璇诲彇瀵嗙爜
+ @Override
+ public void run() {
+ if(ardTankLock.getArdTankLockPasswords().isEmpty()){//鏃犲彲鐢ㄥ瘑鐮�
+ if(PositionContainer.getCarLockPasswordMap().get(ardTankLock.getLockNum()) != null){//鏂拌缃殑10缁勫瘑鐮�
+ Set<String> passwordSet = PositionContainer.getCarLockPasswordMap().get(ardTankLock.getLockNum());
+ //璁剧疆鏂板瘑鐮�
+ String lockNumHead = ardTankLock.getLockNum().substring(0,2);
+ String lockNumTail = ardTankLock.getLockNum().substring(2,4);
+ String code = "04";
+ Integer check = Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt(code, 16);;
+ for(String password : passwordSet){
+ String[] passwordArray = password.split("");
+ for(String p : passwordArray){
+ check = check + Integer.parseInt(p);
+ }
+ }
+ String checkNum = Integer.toHexString(check);
+ if(checkNum.length() == 1){
+ checkNum = "0" + checkNum;
+ }else if(checkNum.length() > 2){
+ checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
+ }
+ String data = ardTankLock.getLockNum() + "04";
+ for(String password : passwordSet){
+ String[] passwordArray = password.split("");
+ for(String p : passwordArray){
+ data = data + "0" + p;
+ }
+ }
+ data = data + checkNum;
+ String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + data + "%22%7D";
+
+ try{
+ Map<String,Object> syResult = sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
+ if(((String)syResult.get("rspCode")).equals("0")){
+ List<ArdTankLockPassword> ardTankLockPasswordList = new ArrayList();
+ int i = 0;
+ for(String password : passwordSet){
+ ArdTankLockPassword ardTankLockPassword = new ArdTankLockPassword();
+ ardTankLockPassword.setId(IdUtils.simpleUUID());
+ ardTankLockPassword.setLockId(ardTankLock.getLockNum());//鏆傚瓨閿佺紪鍙�
+ ardTankLockPassword.setPassword(password);
+ ardTankLockPassword.setNo(String.valueOf(i));
+ ardTankLockPasswordList.add(ardTankLockPassword);
+ i = i + 1;
+ }
+ int result = ardTankLockPasswordMapper.insertArdTankLockPasswordList(ardTankLockPasswordList);
+ PositionContainer.getCarLockPasswordMap().remove(ardTankLock.getLockNum());
+ }
+ PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockPassword");
+ }catch (Exception e){
+ PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockPassword");
+ }
+ }else{//璇诲彇瀵嗙爜
+ Set<String> passwordSet = new HashSet();
+ while(passwordSet.size() != 10){
+ String password = "";
+ for(int i = 0;i <= 5;i++){
+ password = password + String.valueOf(10 * Math.random()).split("\\.")[0];
+ }
+ passwordSet.add(password);
+ }
+ //璁剧疆鏂板瘑鐮�
+ String lockNumHead = ardTankLock.getLockNum().substring(0,2);
+ String lockNumTail = ardTankLock.getLockNum().substring(2,4);
+ String code = "04";
+ Integer check = Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt(code, 16);;
+ for(String password : passwordSet){
+ String[] passwordArray = password.split("");
+ for(String p : passwordArray){
+ check = check + Integer.parseInt(p);
+ }
+ }
+ String checkNum = Integer.toHexString(check);
+ if(checkNum.length() == 1){
+ checkNum = "0" + checkNum;
+ }else if(checkNum.length() > 2){
+ checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
+ }
+ String data = ardTankLock.getLockNum() + "04";
+ for(String password : passwordSet){
+ String[] passwordArray = password.split("");
+ for(String p : passwordArray){
+ data = data + "0" + p;
+ }
+ }
+ data = data + checkNum;
+ String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + data + "%22%7D";
+ try{
+ Map<String,Object> syResult = sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
+ if(((String)syResult.get("rspCode")).equals("0")){
+ List<ArdTankLockPassword> ardTankLockPasswordList = new ArrayList();
+ int i = 0;
+ for(String password : passwordSet){
+ ArdTankLockPassword ardTankLockPassword = new ArdTankLockPassword();
+ ardTankLockPassword.setId(IdUtils.simpleUUID());
+ ardTankLockPassword.setLockId(ardTankLock.getLockNum());//鏆傚瓨閿佺紪鍙�
+ ardTankLockPassword.setPassword(password);
+ ardTankLockPassword.setNo(String.valueOf(i));
+ ardTankLockPasswordList.add(ardTankLockPassword);
+ i = i + 1;
+ }
+ int result = ardTankLockPasswordMapper.insertArdTankLockPasswordList(ardTankLockPasswordList);
+ }
+ PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockPassword");
+ }catch(Exception e){
+ PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockPassword");
+ }
+ }
+ }else{
+ String lockNumHead = ardTankLock.getLockNum().substring(0,2);
+ String lockNumTail = ardTankLock.getLockNum().substring(2,4);
+ //璁$畻鏍¢獙
+ String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt("05", 16));
+
+ if(checkNum.length() == 1){
+ checkNum = "0" + checkNum;
+ }else if(checkNum.length() > 2){
+ checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
+ }
+ String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "05" + checkNum + "%22%7D";
+ try{
+ sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
+ PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockPassword");
+ }catch (Exception e){
+ PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).remove("lockPassword");
+ }
+ }
+ }
+ };
+ //lockThread.start();
+ if(PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).get("lockPassword") == null){
+ PositionContainer.getCarLockProcessThreadMap().get(ardTankLock.getCarId()).get(ardTankLock.getLockNum()).put("lockPassword",lockThread);
+ }
+
+ }
+
+ }
+ };
+ passwordThread.start();
+ }
+
+ @Override
+ public List<ArdTankLock> getArdTankLockAllWithState() {
+ List<ArdTankLock> result = ardTankLockMapper.getArdTankLockAllWithState();
+ return result;
+ }
+
+ @Override
+ public Long getArdTankLockCount() {
+ Long result = ardTankLockMapper.getArdTankLockCount();
+ return result;
+ }
+
+ @Override
+ public int updateLockEnableByCarId(Map<String, Object> para) {
+ String carId = (String) para.get("carId");
+ String enable = String.valueOf((Boolean) para.get("enable"));
+ int result = ardTankLockMapper.updateLockEnableByCarId(carId, enable);
+ return result;
+ }
+
+ /*@Override
public void getAlarm(String syUserId,String syPassword) {
List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
String syURL = "";
@@ -687,7 +917,7 @@
thread.start();
alarmMap.put(ardTankLock.getLockNum(),thread);
}
- }
+ }*/
public Map<String,Object> sendCmd(String syURL,String userId,String carId,Integer cmdId,String cmd,String paramsStr,String sessionId){
OkHttpClient okHttpClient = new OkHttpClient();
--
Gitblit v1.9.3