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