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