From 58ed1a6894e8fc6896c1ce297a86adac3bbd999e Mon Sep 17 00:00:00 2001
From: zhangnaisong <2434969829@qq.com>
Date: 星期三, 24 七月 2024 11:14:37 +0800
Subject: [PATCH] 电磁锁实时状态暂提交
---
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockStateServiceImpl.java | 14 +++
ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCar.java | 12 +++
ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplSerialPort.java | 32 ++-----
ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml | 24 ++++++
ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockService.java | 2
ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java | 123 ++++++++++++++++++++++++++++++
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java | 19 ++++
7 files changed, 201 insertions(+), 25 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 ed0c2b9..1412e50 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
@@ -53,6 +53,8 @@
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.web.multipart.MultipartFile;
+import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
+
/**
* 涓変竴杞﹁締Controller
*
@@ -204,7 +206,126 @@
thread.start();
}
};
- lockStateTimer.scheduleAtFixedRate(lockStateTask,date,1000);
+ lockStateTimer.scheduleAtFixedRate(lockStateTask,date,3000);
+
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Timer lockCheckTimeTimer = new Timer();//瀹氭椂鏍″噯鏃堕棿
+ TimerTask lockCheckTimeTask =new TimerTask(){
+ @Override
+ public void run() {
+ SysConfig config = new SysConfig();
+ config.setConfigKey("syCarPT");
+ List<SysConfig> sysConfigResult = sysConfigService.selectConfigList(config);
+ String syURL = "";
+
+ if(sysConfigResult.size() == 0){
+ return;
+ }else{
+ syURL = sysConfigResult.get(0).getConfigValue();
+ }
+ String passwordMd5 = DigestUtils.md5Hex(password);
+ Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, userId);
+ String sessionId = (String) LogInResult.get("sessionId");
+
+ String finalSyURL = syURL;
+
+ List<ArdTankLock> result = ardTankLockService.getArdTankLockAll();//鏌ヨ鍏ㄩ儴鐢电閿�
+ for(ArdTankLock ardTankLock : result){
+ Thread LockThread = new Thread(finalSyURL){
+ @Override
+ public void run() {
+ //鑾峰彇鏃堕棿骞舵媶鍒嗗勾鏈堟棩鏃跺垎绉�
+ String nowTime = sdf.format(new Date());
+ String nowYear = nowTime.substring(2,4);
+ String nowMonth = nowTime.substring(5,7);
+ String nowDay = nowTime.substring(8,10);
+ String nowHour = nowTime.substring(11,13);
+ String nowMinute = nowTime.substring(14,16);
+ String nowSecond = nowTime.substring(17,19);
+
+ String nowYearHex = Integer.toHexString(Integer.parseInt(nowYear));
+ if(nowYearHex.length() == 1){
+ nowYearHex = "0" + nowYearHex;
+ }
+ String nowMonthHex = Integer.toHexString(Integer.parseInt(nowMonth));
+ if(nowMonthHex.length() == 1){
+ nowMonthHex = "0" + nowMonthHex;
+ }
+ String nowDayHex = Integer.toHexString(Integer.parseInt(nowDay));
+ if(nowDayHex.length() == 1){
+ nowDayHex = "0" + nowDayHex;
+ }
+ String nowHourHex = Integer.toHexString(Integer.parseInt(nowHour));
+ if(nowHourHex.length() == 1){
+ nowHourHex = "0" + nowHourHex;
+ }
+ String nowMinuteHex = Integer.toHexString(Integer.parseInt(nowMinute));
+ if(nowMinuteHex.length() == 1){
+ nowMinuteHex = "0" + nowMinuteHex;
+ }
+ String nowSecondHex = Integer.toHexString(Integer.parseInt(nowSecond));
+ if(nowSecondHex.length() == 1){
+ nowSecondHex = "0" + nowSecondHex;
+ }
+ //16杩涘埗鏃堕棿
+ String timeHex = nowYearHex + nowMonthHex + nowDayHex + nowHourHex + nowMinuteHex + nowSecondHex;
+ 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("08", 16) +
+ Integer.parseInt(nowYearHex, 16) + Integer.parseInt(nowMonthHex, 16) + Integer.parseInt(nowDayHex, 16) +
+ Integer.parseInt(nowHourHex, 16) + Integer.parseInt(nowMinuteHex, 16) + Integer.parseInt(nowSecondHex, 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() + "08" + timeHex + checkNum + "%22%7D";
+
+ sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
+ }
+ };
+ LockThread.start();
+ }
+ }
+ };
+ lockCheckTimeTimer.scheduleAtFixedRate(lockCheckTimeTask,date,10000);
+
+ Timer sendTimer = new Timer();//瀹氭椂鍙戦�侀攣鐘舵��
+ TimerTask sendLockStateTask =new TimerTask(){
+ @Override
+ public void run() {
+ SysConfig config = new SysConfig();
+ config.setConfigKey("syCarPT");
+ List<SysConfig> sysConfigResult = sysConfigService.selectConfigList(config);
+ String syURL = "";
+
+ if(sysConfigResult.size() == 0){
+ return;
+ }else{
+ syURL = sysConfigResult.get(0).getConfigValue();
+ }
+ String passwordMd5 = DigestUtils.md5Hex(password);
+ Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, userId);
+ String sessionId = (String) LogInResult.get("sessionId");
+
+ String finalSyURL = syURL;
+
+ for (String key : ONLINE_USER_SESSIONS.keySet()){
+ Thread lockThread = new Thread(finalSyURL) {
+ @Override
+ public void run() {
+ String usersId = key.split("_")[0];
+ ardTankLockService.sendLockState(usersId,userId,password);
+ }
+ };
+ lockThread.start();
+ }
+ }
+ };
+ sendTimer.scheduleAtFixedRate(sendLockStateTask,date,3000);
+
+
}
/**
diff --git a/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCar.java b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCar.java
index c3a2723..f568815 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCar.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCar.java
@@ -6,6 +6,8 @@
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
+import java.util.List;
+
/**
* 涓変竴杞﹁締瀵硅薄 ard_sy_car
*
@@ -58,6 +60,8 @@
@TableField("reserved_3")
private String reserved3;
+
+ private List<ArdTankLock> ardTankLockList;
public void setId(String id)
{
@@ -150,6 +154,14 @@
return reserved3;
}
+ public List<ArdTankLock> getArdTankLockList() {
+ return ardTankLockList;
+ }
+
+ public void setArdTankLockList(List<ArdTankLock> ardTankLockList) {
+ this.ardTankLockList = ardTankLockList;
+ }
+
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
diff --git a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplSerialPort.java b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplSerialPort.java
index ce166a3..666b8bb 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplSerialPort.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplSerialPort.java
@@ -182,80 +182,66 @@
}
long cha = now.getTime() - sdf.parse(time).getTime();
- System.out.println("////////////////");
+ /*System.out.println("////////////////");
System.out.println(time);
- System.out.println(cha);
- /*if(Math.abs(cha) >= 5 * 1000){
+ System.out.println(cha);*/
+ if(Math.abs(cha) >= 5 * 1000){
//鏃堕棿鏍″噯
- String url = "http://" + ip + ":9999";
+ /*String url = "http://" + ip + ":9999";
String passwordMd5 = DigestUtils.md5Hex(password);
Map<String, Object> LogInResult = loginIn(url, userId, passwordMd5);
String sessionId = (String) LogInResult.get("sessionId");
//鑾峰彇鏃堕棿骞舵媶鍒嗗勾鏈堟棩鏃跺垎绉�
String nowTime = sdf.format(now);
String nowYear = nowTime.substring(2,4);
- System.out.println(nowYear);
String nowMonth = nowTime.substring(5,7);
- System.out.println(nowMonth);
String nowDay = nowTime.substring(8,10);
- System.out.println(nowDay);
String nowHour = nowTime.substring(11,13);
- System.out.println(nowHour);
String nowMinute = nowTime.substring(14,16);
- System.out.println(nowMinute);
String nowSecond = nowTime.substring(17,19);
- System.out.println(nowSecond);
String nowYearHex = Integer.toHexString(Integer.parseInt(nowYear));
if(nowYearHex.length() == 1){
nowYearHex = "0" + nowYearHex;
}
- System.out.println(nowYearHex);
String nowMonthHex = Integer.toHexString(Integer.parseInt(nowMonth));
if(nowMonthHex.length() == 1){
nowMonthHex = "0" + nowMonthHex;
}
- System.out.println(nowMonthHex);
String nowDayHex = Integer.toHexString(Integer.parseInt(nowDay));
if(nowDayHex.length() == 1){
nowDayHex = "0" + nowDayHex;
}
- System.out.println(nowDayHex);
String nowHourHex = Integer.toHexString(Integer.parseInt(nowHour));
if(nowHourHex.length() == 1){
nowHourHex = "0" + nowHourHex;
}
- System.out.println(nowHourHex);
String nowMinuteHex = Integer.toHexString(Integer.parseInt(nowMinute));
if(nowMinuteHex.length() == 1){
nowMinuteHex = "0" + nowMinuteHex;
}
- System.out.println(nowMinuteHex);
String nowSecondHex = Integer.toHexString(Integer.parseInt(nowSecond));
if(nowSecondHex.length() == 1){
nowSecondHex = "0" + nowSecondHex;
}
- System.out.println(nowSecondHex);
//16杩涘埗鏃堕棿
String timeHex = nowYearHex + nowMonthHex + nowDayHex + nowHourHex + nowMinuteHex + nowSecondHex;
- System.out.println(timeHex);
String lockNumHead = ardTankLockResult.get(0).getLockNum().substring(0,2);
String lockNumTail = ardTankLockResult.get(0).getLockNum().substring(2,4);
//璁$畻鏍¢獙
String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt("08", 16) +
Integer.parseInt(nowYearHex, 16) + Integer.parseInt(nowMonthHex, 16) + Integer.parseInt(nowDayHex, 16) +
Integer.parseInt(nowHourHex, 16) + Integer.parseInt(nowMinuteHex, 16) + Integer.parseInt(nowSecondHex, 16));
- System.out.println(checkNum);
if(checkNum.length() == 1){
checkNum = "0" + checkNum;
}else if(checkNum.length() > 2){
checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
}
- System.out.println(checkNum);
String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "08" + timeHex + checkNum + "%22%7D";
System.out.println(ardTankLock.getLockNum() + "08" + timeHex + checkNum);
- sendCmd(url,userId,ardTankLockResult.get(0).getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
- }else{*/
+ sendCmd(url,userId,ardTankLockResult.get(0).getCarId(),199,"DataDownTransfer", paramsStr,sessionId);*/
+ return;
+ }else{
ArdTankLockState ardTankLockState = new ArdTankLockState();
ardTankLockState.setId(IdUtils.simpleUUID());
ardTankLockState.setLockId(ardTankLockResult.get(0).getId());
@@ -264,6 +250,7 @@
case "01": ardTankLockState.setLockState("寮�閿佺姸鎬�");break;
case "02": ardTankLockState.setLockState("鍏抽攣鐘舵��");break;
case "03": ardTankLockState.setLockState("寮傚父鐘舵��");break;
+ case "04": ardTankLockState.setLockState("鍔ㄤ綔鐘舵��");break;
default:
break;
}
@@ -326,8 +313,7 @@
ardTankLockState.setUploadTime(time);
ardTankLockState.setUniqueMark(uniqueMark);
((ArdTankLockStateServiceImpl)SpringUtils.getBean("ardTankLockStateServiceImpl")).insertOrUpdateArdTankLockState(ardTankLockState);
-
- //}
+ }
}
}catch (Exception e){
e.printStackTrace();
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockService.java b/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockService.java
index c656a1d..d6daab6 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockService.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockService.java
@@ -74,4 +74,6 @@
public Map<String,Object> getLockByCarPlate(String usersId, String carPlate, Integer pageNum, Integer pageSize);
public List<ArdTankLock> getArdTankLockAll();
+
+ public void sendLockState(String userId,String syUserId,String syPassword);
}
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 6ac1b8b..f882b22 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
@@ -458,4 +458,23 @@
List<ArdTankLock> result = ardTankLockMapper.getAll();
return result;
}
+
+ @Override
+ public void sendLockState(String userId, String syUserId, String syPassword) {
+
+
+
+ /*List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
+ String syURL = "";
+ if(syURLResult.size() != 0){
+ syURL = syURLResult.get(0).getConfigValue();
+ }else{
+ return;
+ }
+ String passwordMd5 = DigestUtils.md5Hex(syPassword);
+ Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, syUserId);
+ String sessionId = (String) LogInResult.get("sessionId");
+ List<ArdTankLock> ardTankLockList = ardTankLockMapper.getLockByCarId(carId);
+ Map<String,Object> syResult = sYClient.getCarNearPositionByCarId(syURL, carId, ardSyUser.getUserId(), sessionId);*/
+ }
}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockStateServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockStateServiceImpl.java
index 2d0d907..6471083 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockStateServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockStateServiceImpl.java
@@ -3,6 +3,8 @@
import java.util.List;
import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.sy.domain.ArdTankLock;
+import com.ruoyi.sy.mapper.ArdTankLockMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@@ -24,6 +26,9 @@
public class ArdTankLockStateServiceImpl implements IArdTankLockStateService {
@Resource
private ArdTankLockStateMapper ardTankLockStateMapper;
+
+ @Resource
+ private ArdTankLockMapper ardTankLockMapper;
/**
* 鏌ヨ缃愯溅閿佺姸鎬�
@@ -95,6 +100,13 @@
@Override
public int insertOrUpdateArdTankLockState(ArdTankLockState ardTankLockState) {
int result = ardTankLockStateMapper.insertOrUpdateArdTankLockState(ardTankLockState);
- return result;
+ try{
+ return result;
+ }finally {
+ ArdTankLock ardTankLock = new ArdTankLock();
+ ardTankLock.setId(ardTankLockState.getLockId());
+ ardTankLock.setOnlineTime(ardTankLockState.getUploadTime());
+ ardTankLockMapper.updateArdTankLock(ardTankLock);//鏇存敼鐘舵��
+ }
}
}
diff --git a/ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml b/ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml
index cf822fd..bced356 100644
--- a/ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml
+++ b/ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml
@@ -17,6 +17,30 @@
<result property="reserved3" column="reserved_3" />
</resultMap>
+ <resultMap type="ArdSyCar" id="ArdSyCarLockResult">
+ <result property="id" column="id" />
+ <result property="carId" column="car_id" />
+ <result property="carModel" column="car_model" />
+ <result property="carType" column="car_type" />
+ <result property="carBrand" column="car_brand" />
+ <result property="deptId" column="dept_id" />
+ <result property="carPicture" column="car_picture" />
+ <result property="reserved1" column="reserved_1" />
+ <result property="reserved2" column="reserved_2" />
+ <result property="reserved3" column="reserved_3" />
+ <collection property="ardTankLockList" ofType="com.ruoyi.sy.domain.ArdTankLock">
+ <result property="id" column="lid" />
+ <result property="lockNum" column="lock_num" />
+ <result property="lockName" column="lock_name" />
+ <result property="imgPositionTop" column="img_position_top" />
+ <result property="imgPositionLeft" column="img_position_left" />
+ <result property="carId" column="lcar_id" />
+ <result property="enable" column="enable" />
+ <result property="restartState" column="restart_state" />
+ <result property="onlineTime" column="online_time" />
+ </collection>
+ </resultMap>
+
<sql id="selectArdSyCarVo">
select id, car_id, car_model, car_type, car_brand, dept_id, car_picture, reserved_1, reserved_2, reserved_3 from ard_sy_car
</sql>
--
Gitblit v1.9.3