From b468cde8bfd9d6e1d7ae7ccc535fc7e8ffb9f818 Mon Sep 17 00:00:00 2001
From: zhangnaisong <2434969829@qq.com>
Date: 星期五, 26 七月 2024 22:34:44 +0800
Subject: [PATCH] 电磁锁报警查询提交

---
 ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLockAlarm.java                  |   93 +++++++
 ard-work/src/main/java/com/ruoyi/sy/controller/ArdTankLockController.java         |   25 +
 ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplSerialPort.java           |   16 
 ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockAlarmService.java         |   65 +++++
 ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java                  |   10 
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockAlarmServiceImpl.java |  172 +++++++++++++
 ard-work/src/main/resources/mapper/sy/ArdTankLockAlarmMapper.xml                  |  141 ++++++++++
 ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java            |  156 ++++++-----
 ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockAlarmMapper.java            |   73 +++++
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockServiceImpl.java      |    3 
 10 files changed, 668 insertions(+), 86 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 f525c5c..d3d2fbd 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
@@ -104,8 +104,6 @@
     @Value("${syCar.password}")
     private String password;
 
-    private Timer lockStateTimer;
-
     @PostConstruct
     public void init(){
         ardSyCarController = this;
@@ -155,7 +153,7 @@
         //鍒犻櫎缁撴潫鏃堕棿涓簄ull鐨勮褰�
         int result = ardTankAbnormalParkAlarmService.deleteArdTankAbnormalParkAlarmByEndTime();
 
-        this.lockStateTimer = new Timer();//瀹氭椂鑾峰彇鍚勪釜閿佺殑鐘舵��
+        Timer lockStateTimer = new Timer();//瀹氭椂鑾峰彇鍚勪釜閿佺殑鐘舵��
         TimerTask lockStateTask =new TimerTask(){
             @Override
             public void run(){
@@ -180,7 +178,7 @@
 
                         List<ArdTankLock> result = ardTankLockService.getArdTankLockAll();//鏌ヨ鍏ㄩ儴鐢电閿�
                         for(ArdTankLock ardTankLock : result){
-                            Thread LockThread = new Thread(finalSyURL){
+                            Thread lockThread = new Thread(finalSyURL){
                                 @Override
                                 public void run() {
                                     String lockNumHead = ardTankLock.getLockNum().substring(0,2);
@@ -197,9 +195,13 @@
                                     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());//鍙戦�佸畬锛屼粠瀹瑰櫒鍘婚櫎
                                 }
                             };
-                            LockThread.start();
+                            if(PositionContainer.getCarThreadMap().get(ardTankLock.getCarId()) != null){//瀹瑰櫒涓棤绾跨▼锛屾斁鍏ュ鍣�
+                                PositionContainer.getCarThreadMap().put(ardTankLock.getCarId(),lockThread);
+                            }
+                            lockThread.start();
                         }
                     }
                 };
@@ -214,80 +216,84 @@
         TimerTask lockCheckTimeTask =new TimerTask(){
             @Override
             public void run() {
-                SysConfig config = new SysConfig();
-                config.setConfigKey("syCarPT");
-                List<SysConfig> sysConfigResult = sysConfigService.selectConfigList(config);
-                String syURL = "";
+            SysConfig config = new SysConfig();
+            config.setConfigKey("syCarPT");
+            List<SysConfig> sysConfigResult = sysConfigService.selectConfigList(config);
+            String syURL = "";
 
-                if(sysConfigResult.size() == 0){
-                    return;
-                }else{
-                    syURL = sysConfigResult.get(0).getConfigValue();
-                }
-                String passwordMd5 = DigestUtils.md5Hex(password);
-                Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, userId);
-                String sessionId = (String) LogInResult.get("sessionId");
+            if(sysConfigResult.size() == 0){
+                return;
+            }else{
+                syURL = sysConfigResult.get(0).getConfigValue();
+            }
+            String passwordMd5 = DigestUtils.md5Hex(password);
+            Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, userId);
+            String sessionId = (String) LogInResult.get("sessionId");
 
-                String finalSyURL = syURL;
+            String finalSyURL = syURL;
 
-                List<ArdTankLock> result = ardTankLockService.getArdTankLockAll();//鏌ヨ鍏ㄩ儴鐢电閿�
-                for(ArdTankLock ardTankLock : result){
-                    Thread LockThread = new Thread(finalSyURL){
-                        @Override
-                        public void run() {
-                            //鑾峰彇鏃堕棿骞舵媶鍒嗗勾鏈堟棩鏃跺垎绉�
-                            String nowTime = sdf.format(new Date());
-                            String nowYear = nowTime.substring(2,4);
-                            String nowMonth = nowTime.substring(5,7);
-                            String nowDay = nowTime.substring(8,10);
-                            String nowHour = nowTime.substring(11,13);
-                            String nowMinute = nowTime.substring(14,16);
-                            String nowSecond = nowTime.substring(17,19);
+            List<ArdTankLock> result = ardTankLockService.getArdTankLockAll();//鏌ヨ鍏ㄩ儴鐢电閿�
+            for(ArdTankLock ardTankLock : result){
+                Thread lockThread = new Thread(finalSyURL){
+                    @Override
+                    public void run() {
+                        //鑾峰彇鏃堕棿骞舵媶鍒嗗勾鏈堟棩鏃跺垎绉�
+                        String nowTime = sdf.format(new Date());
+                        String nowYear = nowTime.substring(2,4);
+                        String nowMonth = nowTime.substring(5,7);
+                        String nowDay = nowTime.substring(8,10);
+                        String nowHour = nowTime.substring(11,13);
+                        String nowMinute = nowTime.substring(14,16);
+                        String nowSecond = nowTime.substring(17,19);
 
-                            String nowYearHex = Integer.toHexString(Integer.parseInt(nowYear));
-                            if(nowYearHex.length() == 1){
-                                nowYearHex = "0" + nowYearHex;
-                            }
-                            String nowMonthHex = Integer.toHexString(Integer.parseInt(nowMonth));
-                            if(nowMonthHex.length() == 1){
-                                nowMonthHex = "0" + nowMonthHex;
-                            }
-                            String nowDayHex = Integer.toHexString(Integer.parseInt(nowDay));
-                            if(nowDayHex.length() == 1){
-                                nowDayHex = "0" + nowDayHex;
-                            }
-                            String nowHourHex = Integer.toHexString(Integer.parseInt(nowHour));
-                            if(nowHourHex.length() == 1){
-                                nowHourHex = "0" + nowHourHex;
-                            }
-                            String nowMinuteHex = Integer.toHexString(Integer.parseInt(nowMinute));
-                            if(nowMinuteHex.length() == 1){
-                                nowMinuteHex = "0" + nowMinuteHex;
-                            }
-                            String nowSecondHex = Integer.toHexString(Integer.parseInt(nowSecond));
-                            if(nowSecondHex.length() == 1){
-                                nowSecondHex = "0" + nowSecondHex;
-                            }
-                            //16杩涘埗鏃堕棿
-                            String timeHex = nowYearHex + nowMonthHex + nowDayHex + nowHourHex + nowMinuteHex + nowSecondHex;
-                            String lockNumHead = ardTankLock.getLockNum().substring(0,2);
-                            String lockNumTail = ardTankLock.getLockNum().substring(2,4);
-                            //璁$畻鏍¢獙
-                            String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt("08", 16) +
-                                    Integer.parseInt(nowYearHex, 16) + Integer.parseInt(nowMonthHex, 16) + Integer.parseInt(nowDayHex, 16) +
-                                    Integer.parseInt(nowHourHex, 16) + Integer.parseInt(nowMinuteHex, 16) + Integer.parseInt(nowSecondHex, 16));
-                            if(checkNum.length() == 1){
-                                checkNum = "0" + checkNum;
-                            }else if(checkNum.length() > 2){
-                                checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
-                            }
-                            String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "08" + timeHex + checkNum + "%22%7D";
-
-                            sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
+                        String nowYearHex = Integer.toHexString(Integer.parseInt(nowYear));
+                        if(nowYearHex.length() == 1){
+                            nowYearHex = "0" + nowYearHex;
                         }
-                    };
-                    LockThread.start();
+                        String nowMonthHex = Integer.toHexString(Integer.parseInt(nowMonth));
+                        if(nowMonthHex.length() == 1){
+                            nowMonthHex = "0" + nowMonthHex;
+                        }
+                        String nowDayHex = Integer.toHexString(Integer.parseInt(nowDay));
+                        if(nowDayHex.length() == 1){
+                            nowDayHex = "0" + nowDayHex;
+                        }
+                        String nowHourHex = Integer.toHexString(Integer.parseInt(nowHour));
+                        if(nowHourHex.length() == 1){
+                            nowHourHex = "0" + nowHourHex;
+                        }
+                        String nowMinuteHex = Integer.toHexString(Integer.parseInt(nowMinute));
+                        if(nowMinuteHex.length() == 1){
+                            nowMinuteHex = "0" + nowMinuteHex;
+                        }
+                        String nowSecondHex = Integer.toHexString(Integer.parseInt(nowSecond));
+                        if(nowSecondHex.length() == 1){
+                            nowSecondHex = "0" + nowSecondHex;
+                        }
+                        //16杩涘埗鏃堕棿
+                        String timeHex = nowYearHex + nowMonthHex + nowDayHex + nowHourHex + nowMinuteHex + nowSecondHex;
+                        String lockNumHead = ardTankLock.getLockNum().substring(0,2);
+                        String lockNumTail = ardTankLock.getLockNum().substring(2,4);
+                        //璁$畻鏍¢獙
+                        String checkNum = Integer.toHexString(Integer.parseInt(lockNumHead, 16) + Integer.parseInt(lockNumTail, 16) + Integer.parseInt("08", 16) +
+                                Integer.parseInt(nowYearHex, 16) + Integer.parseInt(nowMonthHex, 16) + Integer.parseInt(nowDayHex, 16) +
+                                Integer.parseInt(nowHourHex, 16) + Integer.parseInt(nowMinuteHex, 16) + Integer.parseInt(nowSecondHex, 16));
+                        if(checkNum.length() == 1){
+                            checkNum = "0" + checkNum;
+                        }else if(checkNum.length() > 2){
+                            checkNum = checkNum.substring(checkNum.length() - 2,checkNum.length());
+                        }
+                        String paramsStr = "%7B%22type%22%3A%22ff%22%2C%22dataCnt%22%3A%22" + ardTankLock.getLockNum() + "08" + timeHex + checkNum + "%22%7D";
+
+                        sendCmd(finalSyURL,userId,ardTankLock.getCarId(),199,"DataDownTransfer", paramsStr,sessionId);
+                        PositionContainer.getCarThreadMap().remove(ardTankLock.getCarId());//鍙戦�佸畬锛屼粠瀹瑰櫒鍘婚櫎
+                    }
+                };
+                if(PositionContainer.getCarThreadMap().get(ardTankLock.getCarId()) != null){//瀹瑰櫒涓棤绾跨▼锛屾斁鍏ュ鍣�
+                    PositionContainer.getCarThreadMap().put(ardTankLock.getCarId(),lockThread);
                 }
+                lockThread.start();
+            }
             }
         };
         lockCheckTimeTimer.scheduleAtFixedRate(lockCheckTimeTask,date,7000);
@@ -316,7 +322,7 @@
         }
 
 
-        Timer alarmTimer = new Timer();//瀹氭椂鑾峰彇鎶ヨ
+        /*Timer alarmTimer = new Timer();//瀹氭椂鑾峰彇鎶ヨ
         TimerTask alarmTask = new TimerTask(){
             @Override
             public void run() {
@@ -329,7 +335,7 @@
                 alarmThread.start();
             }
         };
-        alarmTimer.scheduleAtFixedRate(alarmTask,date,3000);
+        alarmTimer.scheduleAtFixedRate(alarmTask,date,3000);*/
 
     }
 
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 079d6b9..379c517 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
@@ -9,9 +9,7 @@
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.sy.domain.ArdTankWall;
-import com.ruoyi.sy.service.IArdTankLockProcessLogService;
-import com.ruoyi.sy.service.IArdTankWallLockService;
-import com.ruoyi.sy.service.IArdTankWallService;
+import com.ruoyi.sy.service.*;
 import com.ruoyi.utils.result.Results;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -30,7 +28,6 @@
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.sy.domain.ArdTankLock;
-import com.ruoyi.sy.service.IArdTankLockService;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.core.page.TableDataInfo;
 
@@ -55,6 +52,9 @@
 
     @Autowired
     private IArdTankLockProcessLogService ardTankLockProcessLogService;
+
+    @Autowired
+    private IArdTankLockAlarmService ardTankLockAlarmService;
 
     /**
      * 鏌ヨ鐢电閿佸垪琛�
@@ -335,4 +335,21 @@
         String username = SecurityUtils.getUsername();
         return ardTankLockProcessLogService.processArdTankLockByLockId(userId,username,para);
     }
+
+    @ApiOperation("鏌ヨ鐢电閿佹姤璀�")
+    @PreAuthorize("@ss.hasPermi('sy:lock:getAlarm')")
+    @PostMapping("/getAlarm")
+    public TableDataInfo getAlarm(@RequestBody Map<String,Object> para) {
+
+        PageHelper.startPage((Integer) para.get("pageNum"), (Integer) para.get("pageSize"));
+        String userId = SecurityUtils.getUserId();
+        Map<String,Object> result = ardTankLockAlarmService.getAlarm(userId,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/ArdTankLockAlarm.java b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLockAlarm.java
new file mode 100644
index 0000000..28c9ffb
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdTankLockAlarm.java
@@ -0,0 +1,93 @@
+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_alarm
+ * 
+ * @author ard
+ * @date 2024-07-26
+ */
+public class ArdTankLockAlarm extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 閿佺紪鍙� */
+    @Excel(name = "閿佺紪鍙�")
+    private String lockNum;
+
+    /** 鎶ヨ淇℃伅 */
+    @Excel(name = "鎶ヨ淇℃伅")
+    private String alarmInfo;
+
+    /** 涓婚敭 */
+    private String id;
+
+    /** 閿佷富閿� */
+    @Excel(name = "閿佷富閿�")
+    private String lockId;
+
+    /** 鎶ヨ鏃堕棿 */
+    @Excel(name = "鎶ヨ鏃堕棿")
+    private String alarmTime;
+
+    public void setLockNum(String lockNum) 
+    {
+        this.lockNum = lockNum;
+    }
+
+    public String getLockNum() 
+    {
+        return lockNum;
+    }
+    public void setAlarmInfo(String alarmInfo) 
+    {
+        this.alarmInfo = alarmInfo;
+    }
+
+    public String getAlarmInfo() 
+    {
+        return alarmInfo;
+    }
+    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 setAlarmTime(String alarmTime) 
+    {
+        this.alarmTime = alarmTime;
+    }
+
+    public String getAlarmTime() 
+    {
+        return alarmTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("lockNum", getLockNum())
+            .append("alarmInfo", getAlarmInfo())
+            .append("id", getId())
+            .append("lockId", getLockId())
+            .append("alarmTime", getAlarmTime())
+            .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 1b6e628..36ef9cc 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
@@ -16,6 +16,8 @@
 
     private static Map<String,Thread> tankCarParkingAlarmTHread = new HashMap();//渚濊溅杈嗗瓨鏀惧紓甯稿仠杞︾嚎绋�:carId锛屽紓甯稿仠杞︾嚎绋�
 
+    private static Map<String,Thread> carThreadMap = new HashMap();//杞﹁締涓婚敭,绾跨▼瀹瑰櫒
+
     public static Map<String, List<ArdSyCarLock>> getTopicSubscribe() {
         return topicSubscribe;
     }
@@ -58,4 +60,12 @@
     public static void setTankCarParkingAlarmTHread(Map<String, Thread> tankCarParkingAlarmTHread) {
         PositionContainer.tankCarParkingAlarmTHread = tankCarParkingAlarmTHread;
     }
+
+    public static Map<String, Thread> getCarThreadMap() {
+        return carThreadMap;
+    }
+
+    public static void setCarThreadMap(Map<String, Thread> carThreadMap) {
+        PositionContainer.carThreadMap = carThreadMap;
+    }
 }
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 d0af9ea..ee4a60d 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
@@ -121,9 +121,14 @@
                         for(int i = 0;i <= data.length() - 4;i = i + 2){
                             String str = data.substring(i, i + 2);
                             sum = sum + Integer.parseInt(str, 16);
-                        }
+                        }//姹傚拰
                         String checkNum = data.substring(data.length() - 2, data.length());
-                        if(!checkNum.equals(Integer.toHexString(sum).toUpperCase())){//鏍¢獙涓嶉�氳繃锛屽氨杩斿洖
+                        String checkNumComputed = Integer.toHexString(sum).toUpperCase();//璁$畻鏍¢獙
+                        //褰撴牎楠屾暟鎹ぇ浜�2涓瓧绗︼紝鎴彇鏈�鍚庝袱浣�
+                        if(checkNumComputed.length() != 2){
+                            checkNumComputed = checkNumComputed.substring(checkNumComputed.length() - 2,checkNumComputed.length());
+                        }
+                        if(!checkNum.equals(checkNumComputed)){//鏍¢獙涓嶉�氳繃锛屽氨杩斿洖
                             return;
                         }
 
@@ -196,9 +201,6 @@
                             }
 
                             long cha = now.getTime() - sdf.parse(time).getTime();
-                            /*System.out.println("////////////////");
-                            System.out.println(time);
-                            System.out.println(cha);*/
                             if(Math.abs(cha) >= 5 * 1000){
                                 //鏃堕棿鏍″噯
                                 /*String url = "http://" + ip + ":9999";
@@ -328,9 +330,9 @@
                                 ardTankLockState.setUniqueMark(uniqueMark);
                                 ((ArdTankLockStateServiceImpl)SpringUtils.getBean("ardTankLockStateServiceImpl")).insertOrUpdateArdTankLockState(ardTankLockState);
                             }
-                        }else if(code.equals("06")){//鍔熻兘鐮�06涓洪攣鍘嗗彶鎶ヨ
+                        }/*else if(code.equals("06")){//鍔熻兘鐮�06涓洪攣鍘嗗彶鎶ヨ
 
-                        }
+                        }*/
                     }catch (Exception e){
                         e.printStackTrace();
                         return;//寮鸿浆澶辫触杩斿洖
diff --git a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockAlarmMapper.java b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockAlarmMapper.java
new file mode 100644
index 0000000..89bcbad
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdTankLockAlarmMapper.java
@@ -0,0 +1,73 @@
+package com.ruoyi.sy.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.sy.domain.ArdTankLockAlarm;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 鐢电閿佹姤璀apper鎺ュ彛
+ * 
+ * @author ard
+ * @date 2024-07-26
+ */
+public interface ArdTankLockAlarmMapper 
+{
+    /**
+     * 鏌ヨ鐢电閿佹姤璀�
+     * 
+     * @param lockNum 鐢电閿佹姤璀︿富閿�
+     * @return 鐢电閿佹姤璀�
+     */
+    public ArdTankLockAlarm selectArdTankLockAlarmByLockNum(String lockNum);
+
+    /**
+     * 鏌ヨ鐢电閿佹姤璀﹀垪琛�
+     * 
+     * @param ardTankLockAlarm 鐢电閿佹姤璀�
+     * @return 鐢电閿佹姤璀﹂泦鍚�
+     */
+    public List<ArdTankLockAlarm> selectArdTankLockAlarmList(ArdTankLockAlarm ardTankLockAlarm);
+
+    /**
+     * 鏂板鐢电閿佹姤璀�
+     * 
+     * @param ardTankLockAlarm 鐢电閿佹姤璀�
+     * @return 缁撴灉
+     */
+    public int insertArdTankLockAlarm(ArdTankLockAlarm ardTankLockAlarm);
+
+    /**
+     * 淇敼鐢电閿佹姤璀�
+     * 
+     * @param ardTankLockAlarm 鐢电閿佹姤璀�
+     * @return 缁撴灉
+     */
+    public int updateArdTankLockAlarm(ArdTankLockAlarm ardTankLockAlarm);
+
+    /**
+     * 鍒犻櫎鐢电閿佹姤璀�
+     * 
+     * @param lockNum 鐢电閿佹姤璀︿富閿�
+     * @return 缁撴灉
+     */
+    public int deleteArdTankLockAlarmByLockNum(String lockNum);
+
+    /**
+     * 鎵归噺鍒犻櫎鐢电閿佹姤璀�
+     * 
+     * @param lockNums 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteArdTankLockAlarmByLockNums(String[] lockNums);
+
+    public List<Map<String, Object>> selectArdTankLockAlarmBylockIdAndTime(@Param("carId") String carId,@Param("lockId") String lockId,@Param("beginTime") String beginTime,@Param("endTime") String endTime);
+
+    public Long selectArdTankLockAlarmTotalBylockIdAndTime(@Param("carId") String carId,@Param("lockId") String lockId,@Param("beginTime") String beginTime,@Param("endTime") String endTime);
+
+    public List<Map<String, Object>> selectArdTankLockAlarmByDeptIdAndTime(@Param("deptId") Long deptId,@Param("beginTime") String beginTime,@Param("endTime") String endTime);
+
+    public Long selectArdTankLockAlarmTotalByDeptIdAndTime(@Param("deptId") Long deptId,@Param("beginTime") String beginTime,@Param("endTime") String endTime);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockAlarmService.java b/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockAlarmService.java
new file mode 100644
index 0000000..c189687
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/IArdTankLockAlarmService.java
@@ -0,0 +1,65 @@
+package com.ruoyi.sy.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.ruoyi.sy.domain.ArdTankLockAlarm;
+
+/**
+ * 鐢电閿佹姤璀ervice鎺ュ彛
+ * 
+ * @author ard
+ * @date 2024-07-26
+ */
+public interface IArdTankLockAlarmService 
+{
+    /**
+     * 鏌ヨ鐢电閿佹姤璀�
+     * 
+     * @param lockNum 鐢电閿佹姤璀︿富閿�
+     * @return 鐢电閿佹姤璀�
+     */
+    public ArdTankLockAlarm selectArdTankLockAlarmByLockNum(String lockNum);
+
+    /**
+     * 鏌ヨ鐢电閿佹姤璀﹀垪琛�
+     * 
+     * @param ardTankLockAlarm 鐢电閿佹姤璀�
+     * @return 鐢电閿佹姤璀﹂泦鍚�
+     */
+    public List<ArdTankLockAlarm> selectArdTankLockAlarmList(ArdTankLockAlarm ardTankLockAlarm);
+
+    /**
+     * 鏂板鐢电閿佹姤璀�
+     * 
+     * @param ardTankLockAlarm 鐢电閿佹姤璀�
+     * @return 缁撴灉
+     */
+    public int insertArdTankLockAlarm(ArdTankLockAlarm ardTankLockAlarm);
+
+    /**
+     * 淇敼鐢电閿佹姤璀�
+     * 
+     * @param ardTankLockAlarm 鐢电閿佹姤璀�
+     * @return 缁撴灉
+     */
+    public int updateArdTankLockAlarm(ArdTankLockAlarm ardTankLockAlarm);
+
+    /**
+     * 鎵归噺鍒犻櫎鐢电閿佹姤璀�
+     * 
+     * @param lockNums 闇�瑕佸垹闄ょ殑鐢电閿佹姤璀︿富閿泦鍚�
+     * @return 缁撴灉
+     */
+    public int deleteArdTankLockAlarmByLockNums(String[] lockNums);
+
+    /**
+     * 鍒犻櫎鐢电閿佹姤璀︿俊鎭�
+     * 
+     * @param lockNum 鐢电閿佹姤璀︿富閿�
+     * @return 缁撴灉
+     */
+    public int deleteArdTankLockAlarmByLockNum(String lockNum);
+
+    public Map<String,Object> getAlarm(String userId,Map<String,Object> para);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockAlarmServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockAlarmServiceImpl.java
new file mode 100644
index 0000000..66ae158
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdTankLockAlarmServiceImpl.java
@@ -0,0 +1,172 @@
+package com.ruoyi.sy.service.impl;
+
+import java.util.HashMap;
+import java.util.List;
+
+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.ArdSyUser;
+import com.ruoyi.sy.mapper.ArdSyCarMapper;
+import com.ruoyi.sy.mapper.ArdSyUserMapper;
+import com.ruoyi.system.mapper.SysConfigMapper;
+import com.ruoyi.utils.forest.SYClient;
+import org.apache.commons.codec.digest.DigestUtils;
+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.ArdTankLockAlarmMapper;
+import com.ruoyi.sy.domain.ArdTankLockAlarm;
+import com.ruoyi.sy.service.IArdTankLockAlarmService;
+
+import javax.annotation.Resource;
+
+/**
+ * 鐢电閿佹姤璀ervice涓氬姟灞傚鐞�
+ *
+ * @author ard
+ * @date 2024-07-26
+ */
+@Service
+public class ArdTankLockAlarmServiceImpl implements IArdTankLockAlarmService {
+    @Resource
+    private ArdTankLockAlarmMapper ardTankLockAlarmMapper;
+
+    @Resource
+    private SysConfigMapper sysConfigMapper;
+
+    @Resource
+    private ArdSyUserMapper ardSyUserMapper;
+
+    @Resource
+    private SYClient sYClient;
+
+    /**
+     * 鏌ヨ鐢电閿佹姤璀�
+     *
+     * @param lockNum 鐢电閿佹姤璀︿富閿�
+     * @return 鐢电閿佹姤璀�
+     */
+    @Override
+    public ArdTankLockAlarm selectArdTankLockAlarmByLockNum(String lockNum) {
+        return ardTankLockAlarmMapper.selectArdTankLockAlarmByLockNum(lockNum);
+    }
+
+    /**
+     * 鏌ヨ鐢电閿佹姤璀﹀垪琛�
+     *
+     * @param ardTankLockAlarm 鐢电閿佹姤璀�
+     * @return 鐢电閿佹姤璀�
+     */
+    @Override
+    public List<ArdTankLockAlarm> selectArdTankLockAlarmList(ArdTankLockAlarm ardTankLockAlarm) {
+        return ardTankLockAlarmMapper.selectArdTankLockAlarmList(ardTankLockAlarm);
+    }
+
+    /**
+     * 鏂板鐢电閿佹姤璀�
+     *
+     * @param ardTankLockAlarm 鐢电閿佹姤璀�
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertArdTankLockAlarm(ArdTankLockAlarm ardTankLockAlarm) {
+                ardTankLockAlarm.setId(IdUtils.simpleUUID());
+            return ardTankLockAlarmMapper.insertArdTankLockAlarm(ardTankLockAlarm);
+    }
+
+    /**
+     * 淇敼鐢电閿佹姤璀�
+     *
+     * @param ardTankLockAlarm 鐢电閿佹姤璀�
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateArdTankLockAlarm(ArdTankLockAlarm ardTankLockAlarm) {
+        return ardTankLockAlarmMapper.updateArdTankLockAlarm(ardTankLockAlarm);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎鐢电閿佹姤璀�
+     *
+     * @param lockNums 闇�瑕佸垹闄ょ殑鐢电閿佹姤璀︿富閿�
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteArdTankLockAlarmByLockNums(String[] lockNums) {
+        return ardTankLockAlarmMapper.deleteArdTankLockAlarmByLockNums(lockNums);
+    }
+
+    /**
+     * 鍒犻櫎鐢电閿佹姤璀︿俊鎭�
+     *
+     * @param lockNum 鐢电閿佹姤璀︿富閿�
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteArdTankLockAlarmByLockNum(String lockNum) {
+        return ardTankLockAlarmMapper.deleteArdTankLockAlarmByLockNum(lockNum);
+    }
+
+    @Override
+    public Map<String, Object> getAlarm(String userId,Map<String, Object> para) {
+        //鏉′欢灞炴��
+        String carId = (String) para.get("carId");
+        String lockId = (String) para.get("lockId");
+        String beginTime = (String) para.get("beginTime");
+        String endTime = (String) para.get("endTime");
+        //鍒嗛〉灞炴��
+        Integer pageNum = (Integer) para.get("pageNum");
+        Integer pageSize = (Integer) para.get("pageSize");
+
+        ArdSyUser ardSyUser = ardSyUserMapper.userById(userId);
+        if(ardSyUser == null){
+            return new HashMap();
+        }
+        List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
+        String syURL = "";
+        if(syURLResult.size() != 0){
+            syURL = syURLResult.get(0).getConfigValue();
+        }else{
+            return new HashMap();
+        }
+        String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword());
+        Map<String, Object> LogInResult = sYClient.logIn(syURL, passwordMd5, ardSyUser.getUserId());
+        String sessionId = (String) LogInResult.get("sessionId");
+
+        PageHelper.startPage(pageNum, pageSize);//鍒嗛〉
+        List<Map<String, Object>> resultList = new ArrayList();
+        Long total = Long.valueOf(0);
+        Map<String,Object> resultMap = new HashMap();
+        if(!carId.equals("") || !lockId.equals("")){//carI鎴杔ockId涓虹┖瀛楃涓�
+            resultList = ardTankLockAlarmMapper.selectArdTankLockAlarmBylockIdAndTime(carId,lockId,beginTime,endTime);
+            total =  ardTankLockAlarmMapper.selectArdTankLockAlarmTotalBylockIdAndTime(carId,lockId,beginTime,endTime);
+        }else{//carI鍜宭ockId閮戒负绌哄瓧绗︿覆锛屾煡璇㈡潈闄愪笅鍏ㄩ儴杞﹁締鎶ヨ
+            try{
+                resultList = ardTankLockAlarmMapper.selectArdTankLockAlarmByDeptIdAndTime(SecurityUtils.getDeptId(),beginTime,endTime);
+            }catch(Exception e){
+                e.printStackTrace();
+            }
+            try{
+                total =  ardTankLockAlarmMapper.selectArdTankLockAlarmTotalByDeptIdAndTime(SecurityUtils.getDeptId(),beginTime,endTime);
+            }catch(Exception e){
+                e.printStackTrace();
+            }
+        }
+
+        for(Map<String, Object> map : resultList){
+            Map<String,Object> syResult = sYClient.getCarNearPositionByCarId(syURL, (String) map.get("carId"), ardSyUser.getUserId(), sessionId);
+            if(((String)syResult.get("rspCode")).equals("1")){
+                Map<String,Object> carMap = ((List<Map<String,Object>>)syResult.get("list")).get(0);
+                map.put("carPlate",carMap.get("carPlate"));
+            }
+        }
+        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 5b23022..622e4ae 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
@@ -592,6 +592,9 @@
                     lockMap.put("ardTankLockState",ardTankLockState);*/
                     String alarmInfo = "";
                     lockMap.put("lockState",ardTankLockStateResult.getLockState());
+                    if(ardTankLockStateResult.getLockState().equals("寮傚父鐘舵��")){
+                        alarmInfo = alarmInfo + "閿佽姱寮傚父;";
+                    }
                     lockMap.put("lockPositionState",ardTankLockStateResult.getLockPositionState());
                     if(ardTankLockStateResult.getLockPositionState().equals("寮傚父")){
                         alarmInfo = alarmInfo + "浣嶇疆寮傚父;";
diff --git a/ard-work/src/main/resources/mapper/sy/ArdTankLockAlarmMapper.xml b/ard-work/src/main/resources/mapper/sy/ArdTankLockAlarmMapper.xml
new file mode 100644
index 0000000..b23c0ba
--- /dev/null
+++ b/ard-work/src/main/resources/mapper/sy/ArdTankLockAlarmMapper.xml
@@ -0,0 +1,141 @@
+<?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.ArdTankLockAlarmMapper">
+    
+    <resultMap type="ArdTankLockAlarm" id="ArdTankLockAlarmResult">
+        <result property="lockNum"    column="lock_num"    />
+        <result property="alarmInfo"    column="alarm_info"    />
+        <result property="id"    column="id"    />
+        <result property="lockId"    column="lock_id"    />
+        <result property="alarmTime"    column="alarm_time"    />
+    </resultMap>
+
+    <sql id="selectArdTankLockAlarmVo">
+        select lock_num, alarm_info, id, lock_id, alarm_time from ard_tank_lock_alarm
+    </sql>
+
+    <select id="selectArdTankLockAlarmList" parameterType="ArdTankLockAlarm" resultMap="ArdTankLockAlarmResult">
+        <include refid="selectArdTankLockAlarmVo"/>
+        <where>  
+            <if test="lockNum != null  and lockNum != ''"> and lock_num = #{lockNum}</if>
+            <if test="alarmInfo != null  and alarmInfo != ''"> and alarm_info = #{alarmInfo}</if>
+            <if test="lockId != null  and lockId != ''"> and lock_id = #{lockId}</if>
+            <if test="alarmTime != null  and alarmTime != ''"> and alarm_time = #{alarmTime}</if>
+        </where>
+    </select>
+    
+    <select id="selectArdTankLockAlarmByLockNum" parameterType="String" resultMap="ArdTankLockAlarmResult">
+        <include refid="selectArdTankLockAlarmVo"/>
+        where lock_num = #{lockNum}
+    </select>
+        
+    <insert id="insertArdTankLockAlarm" parameterType="ArdTankLockAlarm">
+        insert into ard_tank_lock_alarm
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="lockNum != null">lock_num,</if>
+            <if test="alarmInfo != null">alarm_info,</if>
+            <if test="id != null">id,</if>
+            <if test="lockId != null">lock_id,</if>
+            <if test="alarmTime != null">alarm_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="lockNum != null">#{lockNum},</if>
+            <if test="alarmInfo != null">#{alarmInfo},</if>
+            <if test="id != null">#{id},</if>
+            <if test="lockId != null">#{lockId},</if>
+            <if test="alarmTime != null">#{alarmTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateArdTankLockAlarm" parameterType="ArdTankLockAlarm">
+        update ard_tank_lock_alarm
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="alarmInfo != null">alarm_info = #{alarmInfo},</if>
+            <if test="id != null">id = #{id},</if>
+            <if test="lockId != null">lock_id = #{lockId},</if>
+            <if test="alarmTime != null">alarm_time = #{alarmTime},</if>
+        </trim>
+        where lock_num = #{lockNum}
+    </update>
+
+    <delete id="deleteArdTankLockAlarmByLockNum" parameterType="String">
+        delete from ard_tank_lock_alarm where lock_num = #{lockNum}
+    </delete>
+
+    <delete id="deleteArdTankLockAlarmByLockNums" parameterType="String">
+        delete from ard_tank_lock_alarm where lock_num in 
+        <foreach item="lockNum" collection="array" open="(" separator="," close=")">
+            #{lockNum}
+        </foreach>
+    </delete>
+
+    <select id="selectArdTankLockAlarmBylockIdAndTime" parameterType="java.lang.String" resultType="java.util.Map">
+        select atlm.id,atlm.lock_id as "lockId",atlm.lock_num as "lockNum",
+        atlm.alarm_info as "alarmInfo",atlm.alarm_time as "alarmTime",
+        atl.lock_name as "lockName",atl.car_id as "carId"
+        from ard_tank_lock_alarm atlm
+        inner join ard_tank_lock atl on atlm.lock_id = atl."id"
+        <where>
+            <if test="carId != null  and carId != ''"> and car_id = #{carId}</if>
+            <if test="lockId != null  and lockId != ''"> and lock_id = #{lockId}</if>
+            <if test="beginTime != null  and beginTime != ''"> and alarm_time &gt;= #{beginTime}</if>
+            <if test="endTime != null  and endTime != ''"> and alarm_time &lt;= #{endTime}</if>
+        </where>
+        order by atlm.alarm_time desc
+    </select>
+
+    <select id="selectArdTankLockAlarmTotalBylockIdAndTime" parameterType="java.lang.String" resultType="java.lang.Long">
+        select count(*)
+        from ard_tank_lock_alarm atlm
+        inner join ard_tank_lock atl on atlm.lock_id = atl."id"
+        <where>
+            <if test="carId != null  and carId != ''"> and car_id = #{carId}</if>
+            <if test="lockId != null  and lockId != ''"> and lock_id = #{lockId}</if>
+            <if test="beginTime != null  and beginTime != ''"> and alarm_time &gt;= #{beginTime}</if>
+            <if test="endTime != null  and endTime != ''"> and alarm_time &lt;= #{endTime}</if>
+        </where>
+    </select>
+
+    <select id="selectArdTankLockAlarmByDeptIdAndTime" resultType="java.util.Map">
+        select atlm.id,atlm.lock_id as "lockId",atlm.lock_num as "lockNum",
+        atlm.alarm_info as "alarmInfo",atlm.alarm_time as "alarmTime",
+        atl.lock_name as "lockName",atl.car_id as "carId"
+        from ard_tank_lock_alarm atlm
+        inner join ard_tank_lock atl on atlm.lock_id = atl."id"
+        <where>
+            <if test="beginTime != null  and beginTime != ''"> and alarm_time &gt;= #{beginTime}</if>
+            <if test="endTime != null  and endTime != ''"> and alarm_time &lt;= #{endTime}</if>
+            <if test="deptId != null">
+                and atl.car_id in (select car_id from ard_sy_car "asc" where "asc".dept_id in (
+                with recursive rsd as (
+                select sd.dept_id from sys_dept sd where sd.dept_id = #{deptId}
+                union
+                select csd.dept_id from sys_dept csd inner join rsd on rsd.dept_id = csd.parent_id
+                )
+                select * from rsd))
+            </if>
+        </where>
+        order by atlm.alarm_time desc
+    </select>
+
+    <select id="selectArdTankLockAlarmTotalByDeptIdAndTime" resultType="java.lang.Long">
+        select count(*)
+        from ard_tank_lock_alarm atlm
+        inner join ard_tank_lock atl on atlm.lock_id = atl."id"
+        <where>
+            <if test="beginTime != null  and beginTime != ''"> and alarm_time &gt;= #{beginTime}</if>
+            <if test="endTime != null  and endTime != ''"> and alarm_time &lt;= #{endTime}</if>
+            <if test="deptId != null">
+                and atl.car_id in (select car_id from ard_sy_car "asc" where "asc".dept_id in (
+                with recursive rsd as (
+                select sd.dept_id from sys_dept sd where sd.dept_id =  #{deptId}
+                union
+                select csd.dept_id from sys_dept csd inner join rsd on rsd.dept_id = csd.parent_id
+                )
+                select * from rsd))
+            </if>
+        </where>
+    </select>
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.3