From 00c17a3a10a2856c847757e7021e60135b6ea894 Mon Sep 17 00:00:00 2001
From: zhangnaisong <2434969829@qq.com>
Date: 星期六, 27 七月 2024 23:55:43 +0800
Subject: [PATCH] 电磁锁密码提交
---
ard-work/src/main/java/com/ruoyi/sy/controller/ArdTankLockController.java | 17 +
ard-work/src/main/resources/mapper/sy/ArdTankLockPasswordMapper.xml | 102 +++++++
ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java | 14
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockMapper.java | 2
ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockService.java | 4
ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLock.java | 12
ard-work/src/main/resources/mapper/sy/ArdTankLockMapper.xml | 28 ++
ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java | 29 -
ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLockPassword.java | 94 ++++++
ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockPasswordService.java | 67 ++++
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java | 174 ++++++++++++
ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplSerialPort.java | 85 +++++
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockPasswordMapper.java | 70 +++++
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockPasswordServiceImpl.java | 124 ++++++++
14 files changed, 783 insertions(+), 39 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 d3d2fbd..25dfa7a 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
@@ -195,12 +195,8 @@
String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "01" + checkNum + "%22%7D";
sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
- PositionContainer.getCarThreadMap().remove(ardTankLock.getCarId());//鍙戦�佸畬锛屼粠瀹瑰櫒鍘婚櫎
}
};
- if(PositionContainer.getCarThreadMap().get(ardTankLock.getCarId()) != null){//瀹瑰櫒涓棤绾跨▼锛屾斁鍏ュ鍣�
- PositionContainer.getCarThreadMap().put(ardTankLock.getCarId(),lockThread);
- }
lockThread.start();
}
}
@@ -286,12 +282,8 @@
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);
- PositionContainer.getCarThreadMap().remove(ardTankLock.getCarId());//鍙戦�佸畬锛屼粠瀹瑰櫒鍘婚櫎
}
};
- if(PositionContainer.getCarThreadMap().get(ardTankLock.getCarId()) != null){//瀹瑰櫒涓棤绾跨▼锛屾斁鍏ュ鍣�
- PositionContainer.getCarThreadMap().put(ardTankLock.getCarId(),lockThread);
- }
lockThread.start();
}
}
@@ -315,27 +307,14 @@
};
sendTimer.scheduleAtFixedRate(sendLockStateTask,date,3000);
- try{
- Thread.sleep(3000);
- }catch(Exception e){
-
- }
-
-
- /*Timer alarmTimer = new Timer();//瀹氭椂鑾峰彇鎶ヨ
- TimerTask alarmTask = new TimerTask(){
+ Timer passwordTimer = new Timer();//瀹氭椂鏌ョ湅鐢电閿佸瘑鐮佺姸鎬�
+ TimerTask passwordTask = new TimerTask(){
@Override
public void run() {
- Thread alarmThread = new Thread() {
- @Override
- public void run() {
- ardTankLockService.getAlarm(userId,password);
- }
- };
- alarmThread.start();
+ ardTankLockService.readPassword(userId,password);
}
};
- alarmTimer.scheduleAtFixedRate(alarmTask,date,3000);*/
+ passwordTimer.scheduleAtFixedRate(passwordTask,date,11000);
}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/controller/ArdTankLockController.java b/ard-work/src/main/java/com/ruoyi/sy/controller/ArdTankLockController.java
index 0c331b4..a2de57b 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/controller/ArdTankLockController.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/controller/ArdTankLockController.java
@@ -56,6 +56,9 @@
@Autowired
private IArdTankLockAlarmService ardTankLockAlarmService;
+ @Autowired
+ private IArdTankLockPasswordService ardTankLockPasswordService;
+
/**
* 鏌ヨ鐢电閿佸垪琛�
*/
@@ -350,4 +353,18 @@
dataTable.setMsg("鏌ヨ鎴愬姛");
return dataTable;
}
+
+ @ApiOperation("鏌ヨ鐢电閿佸瘑鐮�")
+ @PreAuthorize("@ss.hasPermi('sy:lock:getLockPasswordByLockId')")
+ @PostMapping("/getLockPasswordByLockId")
+ public TableDataInfo getLockPasswordByLockId(@RequestBody Map<String,Object> para) {
+ Map<String,Object> result = ardTankLockPasswordService.getLockPasswordByLockId(para);
+
+ TableDataInfo dataTable = new TableDataInfo();
+ dataTable.setRows((List<Map<String,Object>>) result.get("list"));
+ dataTable.setTotal((Long) result.get("total"));
+ dataTable.setCode(200);
+ dataTable.setMsg("鏌ヨ鎴愬姛");
+ return dataTable;
+ }
}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLock.java b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLock.java
index 9e808f3..d964901 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLock.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLock.java
@@ -5,6 +5,8 @@
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
+import java.util.List;
+
/**
* 鐢电閿佸璞� ard_tank_lock
*
@@ -51,6 +53,8 @@
private String onlineTime;
private ArdTankLockState ardTankLockState;
+
+ private List<ArdTankLockPassword> ardTankLockPasswords;
public void setId(String id)
{
@@ -142,6 +146,14 @@
this.ardTankLockState = ardTankLockState;
}
+ public List<ArdTankLockPassword> getArdTankLockPasswords() {
+ return ardTankLockPasswords;
+ }
+
+ public void setArdTankLockPasswords(List<ArdTankLockPassword> ardTankLockPasswords) {
+ this.ardTankLockPasswords = ardTankLockPasswords;
+ }
+
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
diff --git a/ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLockPassword.java b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLockPassword.java
new file mode 100644
index 0000000..946af1d
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLockPassword.java
@@ -0,0 +1,94 @@
+package com.ruoyi.sy.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 缃愯溅閿佸瘑鐮佸璞� ard_tank_lock_password
+ *
+ * @author ard
+ * @date 2024-07-27
+ */
+public class ArdTankLockPassword extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 涓婚敭 */
+ private String id;
+
+ /** 閿佷富閿� */
+ @Excel(name = "閿佷富閿�")
+ private String lockId;
+
+ /** 瀵嗙爜 */
+ @Excel(name = "瀵嗙爜")
+ private String password;
+
+ /** 缂栧彿 */
+ @Excel(name = "缂栧彿")
+ private String no;
+
+ /** 浣跨敤鏃堕棿 */
+ @Excel(name = "浣跨敤鏃堕棿")
+ private String useTime;
+
+ public void setId(String id)
+ {
+ this.id = id;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+ public void setLockId(String lockId)
+ {
+ this.lockId = lockId;
+ }
+
+ public String getLockId()
+ {
+ return lockId;
+ }
+ public void setPassword(String password)
+ {
+ this.password = password;
+ }
+
+ public String getPassword()
+ {
+ return password;
+ }
+ public void setNo(String no)
+ {
+ this.no = no;
+ }
+
+ public String getNo()
+ {
+ return no;
+ }
+ public void setUseTime(String useTime)
+ {
+ this.useTime = useTime;
+ }
+
+ public String getUseTime()
+ {
+ return useTime;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("lockId", getLockId())
+ .append("password", getPassword())
+ .append("no", getNo())
+ .append("createTime", getCreateTime())
+ .append("useTime", getUseTime())
+ .toString();
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java b/ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java
index 36ef9cc..45ea361 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java
@@ -5,6 +5,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
public class PositionContainer {
@@ -16,7 +17,9 @@
private static Map<String,Thread> tankCarParkingAlarmTHread = new HashMap();//渚濊溅杈嗗瓨鏀惧紓甯稿仠杞︾嚎绋�:carId锛屽紓甯稿仠杞︾嚎绋�
- private static Map<String,Thread> carThreadMap = new HashMap();//杞﹁締涓婚敭,绾跨▼瀹瑰櫒
+ private static Map<String, Set<String>> carLockPasswordMap = new HashMap();//渚濈數纾侀攣缂栧彿瀛樻斁鐢熸垚鐨勫瘑鐮�
+
+
public static Map<String, List<ArdSyCarLock>> getTopicSubscribe() {
return topicSubscribe;
@@ -61,11 +64,12 @@
PositionContainer.tankCarParkingAlarmTHread = tankCarParkingAlarmTHread;
}
- public static Map<String, Thread> getCarThreadMap() {
- return carThreadMap;
+ public static synchronized Map<String, Set<String>> getCarLockPasswordMap() {
+ return carLockPasswordMap;
}
- public static void setCarThreadMap(Map<String, Thread> carThreadMap) {
- PositionContainer.carThreadMap = carThreadMap;
+ public static synchronized void setCarLockPasswordMap(Map<String, Set<String>> carLockPasswordMap) {
+ PositionContainer.carLockPasswordMap = carLockPasswordMap;
}
+
}
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 ee4a60d..c88f32e 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
@@ -330,9 +330,90 @@
ardTankLockState.setUniqueMark(uniqueMark);
((ArdTankLockStateServiceImpl)SpringUtils.getBean("ardTankLockStateServiceImpl")).insertOrUpdateArdTankLockState(ardTankLockState);
}
- }/*else if(code.equals("06")){//鍔熻兘鐮�06涓洪攣鍘嗗彶鎶ヨ
+ }else if(code.equals("05")){//鍔熻兘鐮�05涓鸿鍙栭攣瀵嗙爜
+ Set<String> passwordAndTimeSet = new HashSet();
+ for(int i = 1;i <= 10;i++){
+ String passwordAndTime = data.substring(6 + 24*(i - 1),6 + 24 * i);
+ passwordAndTimeSet.add(passwordAndTime);//鎷嗗垎鍑哄瘑鐮佸拰浣跨敤鏃堕棿
+ }
+ if(passwordAndTimeSet.size() == 1){//鍏ㄩ儴涓哄垵濮嬪瘑鐮侊紝鍒欎粠鏂拌缃�
+ 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);
+ }
+ if(PositionContainer.getCarLockPasswordMap().get(lockNum) == null){
+ PositionContainer.getCarLockPasswordMap().put(lockNum,passwordSet);
+ }
+ }else{//鏌ョ湅鍝簺瀵嗙爜浣跨敤杩�
+ for(String passwordAndTime : passwordAndTimeSet){
+ String time = passwordAndTime.substring(12,24);
+ if(!time.equals("FFFFFFFFFFFF")){
+ String passwordHex = passwordAndTime.substring(0,12);//16杩涘埗瀵嗙爜
+ String password = "";//瀹為檯瀵嗙爜
+ for(int i = 0;i <= 10;i = i + 2){
+ String passwordHexByte = passwordHex.substring(i, i+2);
+ password = password + passwordHexByte.split("")[1];
+ }
- }*/
+ String useTimeHex = passwordAndTime.substring(12,24);//16杩涘埗鏃堕棿
+ String yearHex = useTimeHex.substring(0, 2);
+ String monthHex = useTimeHex.substring(2, 4);
+ String dayHex = useTimeHex.substring(4, 6);
+ String hourHex = useTimeHex.substring(6, 8);
+ String minuteHex = useTimeHex.substring(8, 10);
+ String secondHex = useTimeHex.substring(10, 12);
+
+ String useTime = "";
+ Integer yearNum = Integer.parseInt(yearHex, 16);
+ if(yearNum <= 9){
+ useTime = "200" + yearNum + "-";
+ }else{
+ useTime = "20" + yearNum + "-";
+ }
+
+ Integer monthNum = Integer.parseInt(monthHex, 16);
+ if(monthNum <= 9){
+ useTime = useTime + "0" + monthNum + "-";
+ }else{
+ useTime = useTime + monthNum + "-";
+ }
+
+ Integer dayNum = Integer.parseInt(dayHex, 16);
+ if(dayNum <= 9){
+ useTime = useTime + "0" + dayNum + " ";
+ }else{
+ useTime = useTime + dayNum + " ";
+ }
+
+ Integer hourNum = Integer.parseInt(hourHex, 16);
+ if(hourNum <= 9){
+ useTime = useTime + "0" + hourNum + ":";
+ }else{
+ useTime = useTime + hourNum + ":";
+ }
+
+ Integer minuteNum = Integer.parseInt(minuteHex, 16);
+ if(minuteNum <= 9){
+ useTime = useTime + "0" + minuteNum + ":";
+ }else{
+ useTime = useTime + minuteNum + ":";
+ }
+
+ Integer secondNum = Integer.parseInt(secondHex, 16);
+ if(secondNum <= 9){
+ useTime = useTime + "0" + secondNum;
+ }else{
+ useTime = useTime + secondNum;
+ }
+ ((ArdTankLockPasswordServiceImpl)SpringUtils.getBean("ardTankLockPasswordServiceImpl")).updateArdTankLockPasswordByLockNum(lockNum,password,useTime);
+ }
+ }
+ }
+ }
}catch (Exception e){
e.printStackTrace();
return;//寮鸿浆澶辫触杩斿洖
diff --git a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockMapper.java b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockMapper.java
index 50b2c27..65ac051 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockMapper.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockMapper.java
@@ -83,4 +83,6 @@
public int deleteArdTankLockAndWallByCarIds(@Param("carIds") List<String> carIds);
public String getIdByLockNum(String lockNum);
+
+ public List<ArdTankLock> selectArdTankLockWithPassword();
}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockPasswordMapper.java b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockPasswordMapper.java
new file mode 100644
index 0000000..b27bea3
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockPasswordMapper.java
@@ -0,0 +1,70 @@
+package com.ruoyi.sy.mapper;
+
+import java.util.List;
+import com.ruoyi.sy.domain.ArdTankLockPassword;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 缃愯溅閿佸瘑鐮丮apper鎺ュ彛
+ *
+ * @author ard
+ * @date 2024-07-27
+ */
+public interface ArdTankLockPasswordMapper
+{
+ /**
+ * 鏌ヨ缃愯溅閿佸瘑鐮�
+ *
+ * @param id 缃愯溅閿佸瘑鐮佷富閿�
+ * @return 缃愯溅閿佸瘑鐮�
+ */
+ public ArdTankLockPassword selectArdTankLockPasswordById(String id);
+
+ /**
+ * 鏌ヨ缃愯溅閿佸瘑鐮佸垪琛�
+ *
+ * @param ardTankLockPassword 缃愯溅閿佸瘑鐮�
+ * @return 缃愯溅閿佸瘑鐮侀泦鍚�
+ */
+ public List<ArdTankLockPassword> selectArdTankLockPasswordList(ArdTankLockPassword ardTankLockPassword);
+
+ /**
+ * 鏂板缃愯溅閿佸瘑鐮�
+ *
+ * @param ardTankLockPassword 缃愯溅閿佸瘑鐮�
+ * @return 缁撴灉
+ */
+ public int insertArdTankLockPassword(ArdTankLockPassword ardTankLockPassword);
+
+ /**
+ * 淇敼缃愯溅閿佸瘑鐮�
+ *
+ * @param ardTankLockPassword 缃愯溅閿佸瘑鐮�
+ * @return 缁撴灉
+ */
+ public int updateArdTankLockPassword(ArdTankLockPassword ardTankLockPassword);
+
+ /**
+ * 鍒犻櫎缃愯溅閿佸瘑鐮�
+ *
+ * @param id 缃愯溅閿佸瘑鐮佷富閿�
+ * @return 缁撴灉
+ */
+ public int deleteArdTankLockPasswordById(String id);
+
+ /**
+ * 鎵归噺鍒犻櫎缃愯溅閿佸瘑鐮�
+ *
+ * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+ * @return 缁撴灉
+ */
+ public int deleteArdTankLockPasswordByIds(String[] ids);
+
+ public int updateArdTankLockPasswordByLockNum(@Param("lockNum") String lockNum,@Param("password") String password,@Param("useTime") String useTime);
+
+ public int insertArdTankLockPasswordList(@Param("ardTankLockPasswordList") List<ArdTankLockPassword> ardTankLockPasswordList);
+
+ public List<ArdTankLockPassword> getLockPasswordByLockId(String lockId);
+
+ public Long selectLockPasswordTotalBylockId(String lockId);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockPasswordService.java b/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockPasswordService.java
new file mode 100644
index 0000000..a4b8180
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockPasswordService.java
@@ -0,0 +1,67 @@
+package com.ruoyi.sy.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.ruoyi.sy.domain.ArdTankLockPassword;
+
+/**
+ * 缃愯溅閿佸瘑鐮丼ervice鎺ュ彛
+ *
+ * @author ard
+ * @date 2024-07-27
+ */
+public interface IArdTankLockPasswordService
+{
+ /**
+ * 鏌ヨ缃愯溅閿佸瘑鐮�
+ *
+ * @param id 缃愯溅閿佸瘑鐮佷富閿�
+ * @return 缃愯溅閿佸瘑鐮�
+ */
+ public ArdTankLockPassword selectArdTankLockPasswordById(String id);
+
+ /**
+ * 鏌ヨ缃愯溅閿佸瘑鐮佸垪琛�
+ *
+ * @param ardTankLockPassword 缃愯溅閿佸瘑鐮�
+ * @return 缃愯溅閿佸瘑鐮侀泦鍚�
+ */
+ public List<ArdTankLockPassword> selectArdTankLockPasswordList(ArdTankLockPassword ardTankLockPassword);
+
+ /**
+ * 鏂板缃愯溅閿佸瘑鐮�
+ *
+ * @param ardTankLockPassword 缃愯溅閿佸瘑鐮�
+ * @return 缁撴灉
+ */
+ public int insertArdTankLockPassword(ArdTankLockPassword ardTankLockPassword);
+
+ /**
+ * 淇敼缃愯溅閿佸瘑鐮�
+ *
+ * @param ardTankLockPassword 缃愯溅閿佸瘑鐮�
+ * @return 缁撴灉
+ */
+ public int updateArdTankLockPassword(ArdTankLockPassword ardTankLockPassword);
+
+ /**
+ * 鎵归噺鍒犻櫎缃愯溅閿佸瘑鐮�
+ *
+ * @param ids 闇�瑕佸垹闄ょ殑缃愯溅閿佸瘑鐮佷富閿泦鍚�
+ * @return 缁撴灉
+ */
+ public int deleteArdTankLockPasswordByIds(String[] ids);
+
+ /**
+ * 鍒犻櫎缃愯溅閿佸瘑鐮佷俊鎭�
+ *
+ * @param id 缃愯溅閿佸瘑鐮佷富閿�
+ * @return 缁撴灉
+ */
+ public int deleteArdTankLockPasswordById(String id);
+
+ public int updateArdTankLockPasswordByLockNum(String lockNum, String password, String useTime);
+
+ public Map<String,Object> getLockPasswordByLockId(Map<String,Object> para);
+}
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 bd76c73..740fc63 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
@@ -77,5 +77,7 @@
public void sendLockState(String userId,String syUserId,String syPassword);
- public void getAlarm(String syUserId,String syPassword);
+ public void readPassword(String userId,String password);
+
+ //public void getAlarm(String syUserId,String syPassword);
}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockPasswordServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockPasswordServiceImpl.java
new file mode 100644
index 0000000..0868771
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockPasswordServiceImpl.java
@@ -0,0 +1,124 @@
+package com.ruoyi.sy.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+
+import com.github.pagehelper.PageHelper;
+import com.ruoyi.common.utils.DateUtils;
+
+import com.ruoyi.common.utils.uuid.IdUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import java.util.ArrayList;
+import java.util.Map;
+
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.sy.mapper.ArdTankLockPasswordMapper;
+import com.ruoyi.sy.domain.ArdTankLockPassword;
+import com.ruoyi.sy.service.IArdTankLockPasswordService;
+
+import javax.annotation.Resource;
+
+/**
+ * 缃愯溅閿佸瘑鐮丼ervice涓氬姟灞傚鐞�
+ *
+ * @author ard
+ * @date 2024-07-27
+ */
+@Service
+public class ArdTankLockPasswordServiceImpl implements IArdTankLockPasswordService {
+ @Resource
+ private ArdTankLockPasswordMapper ardTankLockPasswordMapper;
+
+ /**
+ * 鏌ヨ缃愯溅閿佸瘑鐮�
+ *
+ * @param id 缃愯溅閿佸瘑鐮佷富閿�
+ * @return 缃愯溅閿佸瘑鐮�
+ */
+ @Override
+ public ArdTankLockPassword selectArdTankLockPasswordById(String id) {
+ return ardTankLockPasswordMapper.selectArdTankLockPasswordById(id);
+ }
+
+ /**
+ * 鏌ヨ缃愯溅閿佸瘑鐮佸垪琛�
+ *
+ * @param ardTankLockPassword 缃愯溅閿佸瘑鐮�
+ * @return 缃愯溅閿佸瘑鐮�
+ */
+ @Override
+ public List<ArdTankLockPassword> selectArdTankLockPasswordList(ArdTankLockPassword ardTankLockPassword) {
+ return ardTankLockPasswordMapper.selectArdTankLockPasswordList(ardTankLockPassword);
+ }
+
+ /**
+ * 鏂板缃愯溅閿佸瘑鐮�
+ *
+ * @param ardTankLockPassword 缃愯溅閿佸瘑鐮�
+ * @return 缁撴灉
+ */
+ @Override
+ public int insertArdTankLockPassword(ArdTankLockPassword ardTankLockPassword) {
+ ardTankLockPassword.setId(IdUtils.simpleUUID());
+ ardTankLockPassword.setCreateTime(DateUtils.getNowDate());
+ return ardTankLockPasswordMapper.insertArdTankLockPassword(ardTankLockPassword);
+ }
+
+ /**
+ * 淇敼缃愯溅閿佸瘑鐮�
+ *
+ * @param ardTankLockPassword 缃愯溅閿佸瘑鐮�
+ * @return 缁撴灉
+ */
+ @Override
+ public int updateArdTankLockPassword(ArdTankLockPassword ardTankLockPassword) {
+ return ardTankLockPasswordMapper.updateArdTankLockPassword(ardTankLockPassword);
+ }
+
+ /**
+ * 鎵归噺鍒犻櫎缃愯溅閿佸瘑鐮�
+ *
+ * @param ids 闇�瑕佸垹闄ょ殑缃愯溅閿佸瘑鐮佷富閿�
+ * @return 缁撴灉
+ */
+ @Override
+ public int deleteArdTankLockPasswordByIds(String[] ids) {
+ return ardTankLockPasswordMapper.deleteArdTankLockPasswordByIds(ids);
+ }
+
+ /**
+ * 鍒犻櫎缃愯溅閿佸瘑鐮佷俊鎭�
+ *
+ * @param id 缃愯溅閿佸瘑鐮佷富閿�
+ * @return 缁撴灉
+ */
+ @Override
+ public int deleteArdTankLockPasswordById(String id) {
+ return ardTankLockPasswordMapper.deleteArdTankLockPasswordById(id);
+ }
+
+ @Override
+ public int updateArdTankLockPasswordByLockNum(String lockNum, String password, String useTime) {
+ int result = ardTankLockPasswordMapper.updateArdTankLockPasswordByLockNum(lockNum,password,useTime);
+ return result;
+ }
+
+ @Override
+ public Map<String, Object> getLockPasswordByLockId(Map<String,Object> para) {
+ String lockId = (String) para.get("lockId");
+
+ //鍒嗛〉灞炴��
+ Integer pageNum = (Integer) para.get("pageNum");
+ Integer pageSize = (Integer) para.get("pageSize");
+
+ PageHelper.startPage(pageNum, pageSize);//鍒嗛〉
+ Map<String,Object> resultMap = new HashMap();
+ List<ArdTankLockPassword> resultList = ardTankLockPasswordMapper.getLockPasswordByLockId(lockId);
+ Long total = ardTankLockPasswordMapper.selectLockPasswordTotalBylockId(lockId);
+ resultMap.put("list",resultList);
+ resultMap.put("total",total);
+ return resultMap;
+ }
+}
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..a134e0c 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();//鐢电閿佸巻鍙叉姤璀︾嚎绋嬪鍣�
/**
* 鏌ヨ鐢电閿�
@@ -636,9 +639,168 @@
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(syURL){
+ @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";
+ 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());
+ }
+ }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";
+
+ sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);*/
+ 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);
+ }
+ System.out.println("1111111111111111");
+ System.out.println(passwordSet);
+ //璁剧疆鏂板瘑鐮�
+ 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";
+ 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);
+ }
+ }
+ }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";
+
+ sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
+ }
+ }
+ };
+ lockThread.start();
+ }
+
+ }
+ };
+ passwordThread.start();
+ }
+
+ /*@Override
public void getAlarm(String syUserId,String syPassword) {
List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
String syURL = "";
@@ -687,7 +849,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();
diff --git a/ard-work/src/main/resources/mapper/sy/ArdTankLockMapper.xml b/ard-work/src/main/resources/mapper/sy/ArdTankLockMapper.xml
index bbd54d8..30b16ed 100644
--- a/ard-work/src/main/resources/mapper/sy/ArdTankLockMapper.xml
+++ b/ard-work/src/main/resources/mapper/sy/ArdTankLockMapper.xml
@@ -42,6 +42,26 @@
</association>
</resultMap>
+ <resultMap type="ArdTankLock" id="ArdTankLockWithPasswordResult">
+ <result property="id" column="id" />
+ <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="car_id" />
+ <result property="enable" column="enable" />
+ <result property="restartState" column="restart_state" />
+ <result property="onlineTime" column="online_time" />
+ <collection property="ardTankLockPasswords" ofType="com.ruoyi.sy.domain.ArdTankLockPassword">
+ <result property="id" column="pid" />
+ <result property="lockId" column="lock_id" />
+ <result property="password" column="password" />
+ <result property="no" column="no" />
+ <result property="createTime" column="create_time" />
+ <result property="useTime" column="use_time" />
+ </collection>
+ </resultMap>
+
<sql id="selectArdTankLockVo">
select id, lock_num, lock_name, img_position_top, img_position_left, car_id, enable, restart_state, online_time from ard_tank_lock
</sql>
@@ -205,4 +225,12 @@
<select id="getIdByLockNum" resultType="java.lang.String" parameterType="java.lang.String">
select id from ard_tank_lock atl where atl.lock_num = #{lockNum}
</select>
+
+ <select id="selectArdTankLockWithPassword" resultMap="ArdTankLockWithPasswordResult" >
+ select atl."id",atl.lock_num,atl.lock_name,atl.img_position_top,
+ atl.img_position_left,atl.car_id,atl."enable",atl.restart_state,
+ atl.online_time,atlp."id" as pid,atlp.lock_id,atlp."password",
+ atlp.create_time,atlp.use_time from ard_tank_lock atl
+ left join ard_tank_lock_password atlp on atl.id = atlp.lock_id and use_time is null
+ </select>
</mapper>
\ No newline at end of file
diff --git a/ard-work/src/main/resources/mapper/sy/ArdTankLockPasswordMapper.xml b/ard-work/src/main/resources/mapper/sy/ArdTankLockPasswordMapper.xml
new file mode 100644
index 0000000..64c4f3e
--- /dev/null
+++ b/ard-work/src/main/resources/mapper/sy/ArdTankLockPasswordMapper.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.sy.mapper.ArdTankLockPasswordMapper">
+
+ <resultMap type="ArdTankLockPassword" id="ArdTankLockPasswordResult">
+ <result property="id" column="id" />
+ <result property="lockId" column="lock_id" />
+ <result property="password" column="password" />
+ <result property="no" column="no" />
+ <result property="createTime" column="create_time" />
+ <result property="useTime" column="use_time" />
+ </resultMap>
+
+ <sql id="selectArdTankLockPasswordVo">
+ select id, lock_id, password, no, create_time, use_time from ard_tank_lock_password
+ </sql>
+
+ <select id="selectArdTankLockPasswordList" parameterType="ArdTankLockPassword" resultMap="ArdTankLockPasswordResult">
+ <include refid="selectArdTankLockPasswordVo"/>
+ <where>
+ <if test="lockId != null and lockId != ''"> and lock_id = #{lockId}</if>
+ <if test="password != null and password != ''"> and password = #{password}</if>
+ <if test="no != null and no != ''"> and no = #{no}</if>
+ <if test="useTime != null and useTime != ''"> and use_time = #{useTime}</if>
+ </where>
+ </select>
+
+ <select id="selectArdTankLockPasswordById" parameterType="String" resultMap="ArdTankLockPasswordResult">
+ <include refid="selectArdTankLockPasswordVo"/>
+ where id = #{id}
+ </select>
+
+ <insert id="insertArdTankLockPassword" parameterType="ArdTankLockPassword">
+ insert into ard_tank_lock_password
+ <trim prefix="(" suffix=")" suffixOverrides=",">
+ <if test="id != null">id,</if>
+ <if test="lockId != null">lock_id,</if>
+ <if test="password != null">password,</if>
+ <if test="no != null">no,</if>
+ <if test="createTime != null">create_time,</if>
+ <if test="useTime != null">use_time,</if>
+ </trim>
+ <trim prefix="values (" suffix=")" suffixOverrides=",">
+ <if test="id != null">#{id},</if>
+ <if test="lockId != null">#{lockId},</if>
+ <if test="password != null">#{password},</if>
+ <if test="no != null">#{no},</if>
+ <if test="createTime != null">#{createTime},</if>
+ <if test="useTime != null">#{useTime},</if>
+ </trim>
+ </insert>
+
+ <update id="updateArdTankLockPassword" parameterType="ArdTankLockPassword">
+ update ard_tank_lock_password
+ <trim prefix="SET" suffixOverrides=",">
+ <if test="lockId != null">lock_id = #{lockId},</if>
+ <if test="password != null">password = #{password},</if>
+ <if test="no != null">no = #{no},</if>
+ <if test="createTime != null">create_time = #{createTime},</if>
+ <if test="useTime != null">use_time = #{useTime},</if>
+ </trim>
+ where id = #{id}
+ </update>
+
+ <delete id="deleteArdTankLockPasswordById" parameterType="String">
+ delete from ard_tank_lock_password where id = #{id}
+ </delete>
+
+ <delete id="deleteArdTankLockPasswordByIds" parameterType="String">
+ delete from ard_tank_lock_password where id in
+ <foreach item="id" collection="array" open="(" separator="," close=")">
+ #{id}
+ </foreach>
+ </delete>
+
+ <update id="updateArdTankLockPasswordByLockNum" parameterType="java.lang.String">
+ update ard_tank_lock_password set use_time = #{useTime}
+ where "password" = #{password}
+ and lock_id = (select id from ard_tank_lock where lock_num = #{lockNum})
+ </update>
+
+ <insert id="insertArdTankLockPasswordList" >
+ insert into ard_tank_lock_password(id,lock_id,password,no,create_time) values
+ <foreach collection ="ardTankLockPasswordList" item="ardTankLockPassword" separator =",">
+ (#{ardTankLockPassword.id},(select atl.id from ard_tank_lock atl where atl.lock_num = #{ardTankLockPassword.lockId}),
+ #{ardTankLockPassword.password},#{ardTankLockPassword.no},to_char(now(), 'YYYY-MM-DD HH24:MI:SS'))
+ </foreach>
+ </insert>
+
+ <select id="getLockPasswordByLockId" parameterType="java.lang.String" resultMap="ArdTankLockPasswordResult">
+ select atlp.id,atlp.lock_id,atlp."password",atlp."no",
+ atlp.create_time,coalesce(atlp.use_time,'') as use_time
+ from ard_tank_lock_password atlp
+ where lock_id = #{lockId} order by use_time asc,no asc
+ </select>
+
+ <select id="selectLockPasswordTotalBylockId" parameterType="java.lang.String" resultType="java.lang.Long">
+ select count(*) from ard_tank_lock_password atlp where lock_id = #{lockId}
+ </select>
+</mapper>
\ No newline at end of file
--
Gitblit v1.9.3