From f4e20b2dc544a188d0591c901022383e84fa8e9e Mon Sep 17 00:00:00 2001
From: aijinhui <aijinhui>
Date: 星期一, 13 十一月 2023 17:31:03 +0800
Subject: [PATCH] 清淤电磁锁

---
 ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyCarLockMapper.java            |    4 
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java |  161 +++++++++++++++--
 ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java                     |   72 +++++--
 ard-work/src/main/resources/mapper/sy/ArdSyCarLockMapper.xml                  |   12 +
 ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCarLock.java                  |    2 
 ard-work/src/main/java/com/ruoyi/sy/service/ArdAccessFenceService.java        |    2 
 ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarLockController.java    |   16 +
 ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java         |  164 ++++++++---------
 ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java          |    9 +
 ard-work/src/main/java/com/ruoyi/sy/param/LockTypeParam.java                  |   11 +
 ard-work/src/main/java/com/ruoyi/sy/vo/WallCarVo.java                         |   13 +
 ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java             |   66 +++++-
 12 files changed, 389 insertions(+), 143 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarLockController.java b/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarLockController.java
index ec3e0b4..87887bc 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarLockController.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarLockController.java
@@ -11,6 +11,7 @@
 import com.ruoyi.sy.mapper.ArdAccessFenceMapper;
 import com.ruoyi.sy.param.AddCarParam;
 import com.ruoyi.sy.param.AddRtuParam;
+import com.ruoyi.sy.param.LockTypeParam;
 import com.ruoyi.sy.service.*;
 import com.ruoyi.sy.service.impl.ArdSyCarRtuServiceImpl;
 import com.ruoyi.sy.vo.CarLockVo;
@@ -21,6 +22,7 @@
 import com.ruoyi.utils.result.Results;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.eclipse.paho.client.mqttv3.MqttException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -66,7 +68,7 @@
     @PostMapping("/add")
     @ApiOperation("娣诲姞rtu")
     public AjaxResult add(@RequestBody AddRtuParam addRtuParam){
-        return AjaxResult.success("鎴愬姛娣诲姞"+ardSyCarLockService.addRtu(addRtuParam)+"鏉℃暟鎹�");
+        return AjaxResult.success("鎴愬姛娣诲姞"+ardSyCarLockService.addRtu(addRtuParam)+"鏉℃暟鎹紝璁㈤槄杞﹁締"+addRtuParam.getCarId()+"鎴愬姛");
     }
 
     @DeleteMapping("/del")
@@ -183,10 +185,16 @@
         return AjaxResult.success(ardAccessFenceService.updCarAlarm(id));
     }
 
-    @GetMapping("/openLock")
+    @GetMapping("/onOff")
     @ApiOperation("杩滅▼寮�閿�")
-    public AjaxResult openLock(String carId){
-        return AjaxResult.success(ardSyCarRtuService.openLock(ardSyCarRtuService.one(carId)));
+    public AjaxResult onOff(@RequestBody LockTypeParam lockTypeParam) {
+        return AjaxResult.success(ardSyCarLockService.onOff(lockTypeParam));
+    }
+
+    @GetMapping("/seal")
+    @ApiOperation("杩滅▼灏佸嵃")
+    public AjaxResult seal(@RequestBody LockTypeParam lockTypeParam)  {
+        return AjaxResult.success(ardSyCarLockService.seal(lockTypeParam));
     }
 
 
diff --git a/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCarLock.java b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCarLock.java
index 258acf5..fc42f6a 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCarLock.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/domain/ArdSyCarLock.java
@@ -11,6 +11,6 @@
     private String imgPositionLeft;
     private String relay;
     private String relayInfo;
-    private String current;
+    private String currents;
     private String currentInfo;
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
index 15f192c..d3faf70 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
@@ -15,17 +15,17 @@
 import com.gps31.push.util.MapUtil;
 import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.sy.domain.*;
-import com.ruoyi.sy.service.ArdAccessFenceService;
-import com.ruoyi.sy.service.ArdAccessNumService;
-import com.ruoyi.sy.service.ArdOilWallService;
-import com.ruoyi.sy.service.ArdSyCarRtuService;
+import com.ruoyi.sy.service.*;
 import com.ruoyi.sy.service.impl.*;
 import com.ruoyi.utils.gps.GeoTools;
 import com.ruoyi.utils.mqtt.MqttConsumer;
+import com.ruoyi.utils.mqtt.MqttOnce;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.eclipse.paho.client.mqttv3.MqttException;
 
 import java.awt.geom.Point2D;
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -104,6 +104,10 @@
                 ArdAccessNumService accessNumService = SpringUtils.getBean(ArdAccessNumService.class);
                 //娉ㄥ叆鐢靛瓙閿丅ean
                 ArdSyCarRtuService carRtuService = SpringUtils.getBean(ArdSyCarRtuService.class);
+                //娉ㄥ叆閿丅ean
+                ArdSyCarLockService lockService = SpringUtils.getBean(ArdSyCarLockService.class);
+                //鍒涘缓mqtt宸ュ叿绫诲璞�
+                MqttOnce mqttOnce = new MqttOnce();
                 //鏌ヨ瀹氫綅娌硅溅琛ㄤ腑鏄惁鏈夎杞﹁締
                 ArdAccessFence ardAccessFence = ardAccessFenceService.queryAccess(carId);
                 //鏌ヨ鎵�鏈夎娌圭偣鍥存爮
@@ -137,27 +141,8 @@
                             ardAccessFence1.setDrct(drct);
                             ardAccessFence1.setIsAlarm(0);
                             ardAccessFenceService.access(ardAccessFence1);
-                            //鏌ヨ瑁呮补鐐规棦瀹歊tu鐘舵��
-                            ArdSyCarRtu ardSyCarRtu = carRtuService.one(carId);
-                            Integer installType = ardSyCarRtu.getInstallType();
-                            //1瑙e皝
-                            if(installType==1){
-                                Map<String,Object> map = new HashMap<>();
-                                map.put("A01", 110000);//瀵奸�氱涓�璺户鐢靛櫒
-                                map.put("A02", 110000);//瀵奸�氱浜岃矾缁х數鍣�
-                                map.put("res", String.valueOf(System.currentTimeMillis()));
-                                MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map)));
-                            }
-                            //0鏂藉皝
-                            if(installType==0){
-//鍏抽攣
-
-                                Map<String,Object> map = new HashMap<>();
-                                map.put("A01", 100000);//鏂紑绗竴璺户鐢靛櫒
-                                map.put("A02", 100000);//鏂紑绗簩璺户鐢靛櫒
-                                map.put("res", String.valueOf(System.currentTimeMillis()));
-                                MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map)));
-                            }
+                            //mqtt鍙戦�佹棦瀹歊tu鐘舵��
+                            feng(carId,"瑁呮补鐐�",carRtuService,lockService,mqttOnce);
                             break;
                         }
                     }
@@ -216,27 +201,8 @@
                                     ardAccessFence.setIntoShipmentTime(time);
                                     ardAccessFence.setNowWallName(ardOilWall.getName());
                                     ardAccessFence.setLastTime(time);
-                                    //鏌ヨ瑁呮补鐐规棦瀹歊tu鐘舵��
-                                    ArdSyCarRtu ardSyCarRtu = carRtuService.one(carId);
-                                    Integer installType = ardSyCarRtu.getInstallType();
-                                    //1瑙e皝
-                                    if(installType==1){
-                                        Map<String,Object> map = new HashMap<>();
-                                        map.put("A01", 110000);//瀵奸�氱涓�璺户鐢靛櫒
-                                        map.put("A02", 110000);//瀵奸�氱浜岃矾缁х數鍣�
-                                        map.put("res", String.valueOf(System.currentTimeMillis()));
-                                        MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map)));
-                                    }
-                                    //0鏂藉皝
-                                    if(installType==0){
-//鍏抽攣
-
-                                        Map<String,Object> map = new HashMap<>();
-                                        map.put("A01", 100000);//鏂紑绗竴璺户鐢靛櫒
-                                        map.put("A02", 100000);//鏂紑绗簩璺户鐢靛櫒
-                                        map.put("res", String.valueOf(System.currentTimeMillis()));
-                                        MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map)));
-                                    }
+                                    //mqtt鍙戦�佹棦瀹歊tu鐘舵��
+                                    feng(carId,"瑁呮补鐐�",carRtuService,lockService,mqttOnce);
                                     break;
                                 }
                             }
@@ -264,15 +230,7 @@
                                     ardAccessFence.setLat(lat);
                                     ardAccessFenceService.updAccess(ardAccessFence);
                                     //寮�鍑鸿娌圭偣鍥存爮锛屽彂閫佷笂閿佸強鏂藉皝鍛戒护
-                                    ArdSyCarRtu ardSyCarRtu = carRtuService.one(carId);
-//鍏抽攣
-
-                                    Map<String,Object> map = new HashMap<>();
-                                    map.put("A01", 100000);//鏂紑绗竴璺户鐢靛櫒
-                                    map.put("A02", 100000);//鏂紑绗簩璺户鐢靛櫒
-                                    map.put("res", String.valueOf(System.currentTimeMillis()));
-                                    MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map)));
-
+                                    feng(carId,"鏂藉皝",carRtuService,lockService,mqttOnce);
                                 }
                             }else {
                                 //杞﹁締宸茬粡寮�鍑鸿娌圭偣锛屾煡鐪嬫槸鍚︽湁鍗告补鐐笽D
@@ -302,27 +260,8 @@
                                             ardAccessFenceService.updAccess(ardAccessFence);
                                             //宸茬粡杩涘叆鍗告补鐐癸紝涓嶅湪璺笂涓嶉渶瑕佸仠杞︽姤璀�
                                             isRoad = false;
-                                            //鏌ヨ瑁呮补鐐规棦瀹歊tu鐘舵��
-                                            ArdSyCarRtu ardSyCarRtu = carRtuService.one(carId);
-                                            Integer unloadType = ardSyCarRtu.getUnloadType();
-                                            //1瑙e皝
-                                            if(unloadType==1){
-                                                Map<String,Object> map = new HashMap<>();
-                                                map.put("A01", 110000);//瀵奸�氱涓�璺户鐢靛櫒
-                                                map.put("A02", 110000);//瀵奸�氱浜岃矾缁х數鍣�
-                                                map.put("res", String.valueOf(System.currentTimeMillis()));
-                                                MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map)));
-                                            }
-                                            //0鏂藉皝
-                                            if(unloadType==0){
-//鍏抽攣
-
-                                                Map<String,Object> map = new HashMap<>();
-                                                map.put("A01", 100000);//鏂紑绗竴璺户鐢靛櫒
-                                                map.put("A02", 100000);//鏂紑绗簩璺户鐢靛櫒
-                                                map.put("res", String.valueOf(System.currentTimeMillis()));
-                                                MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map)));
-                                            }
+                                            //mqtt鍙戦�佹棦瀹歊tu鐘舵��
+                                            feng(carId,"鍗告补鐐�",carRtuService,lockService,mqttOnce);
                                             break;
                                         }
                                     }
@@ -365,14 +304,7 @@
                                     }
                                     if (!GeoTools.IsPtInPoly(point, pts)) {
                                         //寮�鍑轰簡鍗告补鐐瑰洿鏍忥紝鍙戦�佷笂閿佸強鏂借В灏佹寚浠�
-                                        ArdSyCarRtu ardSyCarRtu = carRtuService.one(carId);
-//鍏抽攣
-
-                                        Map<String,Object> map = new HashMap<>();
-                                        map.put("A01", 100000);//鏂紑绗竴璺户鐢靛櫒
-                                        map.put("A02", 100000);//鏂紑绗簩璺户鐢靛櫒
-                                        map.put("res", String.valueOf(System.currentTimeMillis()));
-                                        MqttConsumer.publish(ardSyCarRtu.getTopicPublish(), String.valueOf(new JSONObject(map)));
+                                        feng(carId,"鏂藉皝",carRtuService,lockService,mqttOnce);
                                         //鍒犻櫎璇ユ潯杞﹁締鏁版嵁
                                         ardAccessFenceService.delAccess(carId);
                                     }else {
@@ -487,4 +419,68 @@
     public void run() {
         sendMassage();
     }
+
+    private void feng(String carId,String type,ArdSyCarRtuService carRtuService,ArdSyCarLockService lockService,MqttOnce mqttOnce) throws MqttException {
+        //鏌ヨ瑁呮补鐐规棦瀹歊tu鐘舵��
+        ArdSyCarRtu ardSyCarRtu = carRtuService.one(carId);
+        Integer fengType = null;
+        if("瑁呮补鐐�".equals(type)){
+            fengType = ardSyCarRtu.getInstallType();
+        }else if("鍗告补鐐�".equals(type)){
+            fengType = ardSyCarRtu.getUnloadType();
+        }else if("鏂藉皝".equals(type)){
+            fengType = 0;
+        }
+        //1瑙e皝
+        if(fengType==1){
+            Map<String,Object> map = new HashMap<>();
+            map.put("A01", 110000);//瀵奸�氱涓�璺户鐢靛櫒
+            map.put("A02", 110000);//瀵奸�氱浜岃矾缁х數鍣�
+            map.put("res", String.valueOf(System.currentTimeMillis()));
+            mqttOnce.publishCar(carId,ardSyCarRtu.getTopicPublish(),String.valueOf(new JSONObject(map)),"瑙e皝");
+        }
+        //0鏂藉皝
+        if(fengType==0){
+            //閿佸紑鍏崇姸鎬�
+            int lockCloseNum = 0;
+            //鏌ヨ閿佷俊鎭�
+            List<ArdSyCarLock> ardSyCarLocks = lockService.carLock(ardSyCarRtu.getId());
+            for (int j = 0; j < ardSyCarLocks.size(); j++) {
+                ArdSyCarLock ardSyCarLock = ardSyCarLocks.get(j);
+                String currents = ardSyCarLock.getCurrents();
+                String currentInfo = ardSyCarLock.getCurrentInfo();
+                //鐢垫祦鍊间负4.0鏄叧閿佺姸鎬�
+                if(currentInfo.equals(4.00)){
+                    lockCloseNum += 1;
+                }else {
+                    String key = "";
+                    if(currents.equals("C01")){
+                        key = "D03";
+                    }else if(currents.equals("C02")){
+                        key = "D04";
+                    }
+                    Map<String,Object> map = new HashMap();
+                    map.put(key, 0.01);
+                    map.put("res", String.valueOf(System.currentTimeMillis()));
+                    mqttOnce.publishCar("carId",ardSyCarRtu.getTopicPublish(),String.valueOf(new JSONObject(map)),"寮�閿侊細"+currents);
+                    while(true){
+                        ArdSyCarLock ardSyCarLock1 = lockService.getCurrentInfo(ardSyCarRtu.getId(),currents);
+                        String currentInfo1 = ardSyCarLock1.getCurrentInfo();
+                        if(currentInfo1.equals(4.00)){
+                            lockCloseNum +=1;
+                            break;
+                        }
+                    }
+                }
+            }
+            if(lockCloseNum == 2){
+                Map<String,Object> map = new HashMap<>();
+                map.put("A01", 100000);//鏂紑绗竴璺户鐢靛櫒
+                map.put("A02", 100000);//鏂紑绗簩璺户鐢靛櫒
+                map.put("res", String.valueOf(System.currentTimeMillis()));
+                mqttOnce.publishCar(carId,ardSyCarRtu.getTopicPublish(),String.valueOf(new JSONObject(map)),"鏂藉皝");
+            }
+        }
+    }
+
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyCarLockMapper.java b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyCarLockMapper.java
index 49ceb4f..f3a596a 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyCarLockMapper.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyCarLockMapper.java
@@ -3,5 +3,9 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.sy.domain.ArdSyCarLock;
 
+import java.util.List;
+
 public interface ArdSyCarLockMapper extends BaseMapper<ArdSyCarLock> {
+
+    List<ArdSyCarLock> lockList(String rtuId);
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/param/LockTypeParam.java b/ard-work/src/main/java/com/ruoyi/sy/param/LockTypeParam.java
new file mode 100644
index 0000000..0e69512
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/param/LockTypeParam.java
@@ -0,0 +1,11 @@
+package com.ruoyi.sy.param;
+
+import lombok.Data;
+
+@Data
+public class LockTypeParam {
+    private String carId;
+    private Integer type;
+    private String lockId;
+    private Integer num;
+}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/ArdAccessFenceService.java b/ard-work/src/main/java/com/ruoyi/sy/service/ArdAccessFenceService.java
index 1c919ea..abd92c3 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/ArdAccessFenceService.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/ArdAccessFenceService.java
@@ -4,6 +4,7 @@
 import com.ruoyi.sy.domain.ArdSyCar;
 import com.ruoyi.sy.param.OilWallParam;
 import com.ruoyi.sy.vo.CarVo;
+import com.ruoyi.sy.vo.WallCarVo;
 
 import java.util.List;
 
@@ -19,6 +20,7 @@
 
     List<ArdAccessFence> all(String url);
 
+
     int delCar(String id);
 
     int updCarAlarm(String id);
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java b/ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java
index f953c42..c6d5243 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/ArdSyCarLockService.java
@@ -1,10 +1,13 @@
 package com.ruoyi.sy.service;
 
+import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.sy.domain.ArdSyCarLock;
 import com.ruoyi.sy.domain.ArdSyCarRtu;
 import com.ruoyi.sy.param.AddRtuParam;
+import com.ruoyi.sy.param.LockTypeParam;
 import com.ruoyi.sy.vo.CarVo;
 import com.ruoyi.sy.vo.RtuVo;
+import org.eclipse.paho.client.mqttv3.MqttException;
 
 import java.util.List;
 
@@ -41,4 +44,10 @@
 
     int updLock(ArdSyCarLock ardSyCarLock);
 
+    ArdSyCarLock getCurrentInfo(String Rtu,String currents);
+
+    AjaxResult seal(LockTypeParam lockTypeParam);
+
+    AjaxResult onOff(LockTypeParam lockTypeParam);
+
 }
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java
index d2ee258..0a39c98 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarLockServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.sy.domain.ArdSyCar;
 import com.ruoyi.sy.domain.ArdSyCarLock;
@@ -10,20 +11,24 @@
 import com.ruoyi.sy.mapper.ArdSyCarMapper;
 import com.ruoyi.sy.mapper.ArdSyCarRtuMapper;
 import com.ruoyi.sy.param.AddRtuParam;
+import com.ruoyi.sy.param.LockTypeParam;
 import com.ruoyi.sy.service.ArdSyCarLockService;
 import com.ruoyi.sy.vo.CarVo;
 import com.ruoyi.sy.vo.RtuVo;
 import com.ruoyi.system.mapper.SysDeptMapper;
+import com.ruoyi.utils.mqtt.MqttOnce;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
+import java.text.DecimalFormat;
+import java.util.*;
 
 /**
  * @author Administrator
  */
+@Slf4j
 @Service
 public class ArdSyCarLockServiceImpl implements ArdSyCarLockService {
 
@@ -62,12 +67,15 @@
         ardSyCarRtu.setTopicSubscribe("/p"+addRtuParam.getCarId()+"/set/");
         ardSyCarRtu.setInstallType(addRtuParam.getInstallType());
         ardSyCarRtu.setUnloadType(addRtuParam.getUnloadType());
-        rtuMapper.insert(ardSyCarRtu);
+        int num = rtuMapper.insert(ardSyCarRtu);
         QueryWrapper<ArdSyCar> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("car_id",addRtuParam.getCarId());
         ArdSyCar ardSyCar = ardSyCarMapper.selectOne(queryWrapper);
         ardSyCar.setReserved1(ardSyCarRtu.getId());
-        return ardSyCarMapper.updateById(ardSyCar);
+        ardSyCarMapper.updateById(ardSyCar);
+        MqttOnce mqttOnce = new MqttOnce();
+        mqttOnce.subscribeCar(ardSyCarRtu);
+        return num;
     }
 
     @Override
@@ -109,15 +117,15 @@
 
     @Override
     public List<ArdSyCarLock> carLock(String rtu) {
-        List<ArdSyCarLock> locks = new ArrayList<>();
-        try {
-            QueryWrapper<ArdSyCarLock> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("rtu_id",rtu);
-            locks = lockMapper.selectList(queryWrapper);
-        }catch (Exception e){
-
-        }
-        return locks;
+//        List<ArdSyCarLock> locks = new ArrayList<>();
+//        try {
+//            QueryWrapper<ArdSyCarLock> queryWrapper = new QueryWrapper<>();
+//            queryWrapper.eq("rtu_id",rtu);
+//            locks = lockMapper.selectList(queryWrapper);
+//        }catch (Exception e){
+//
+//        }
+        return lockMapper.lockList(rtu);
     }
 
     @Override
@@ -188,19 +196,21 @@
 
     @Override
     public List<ArdSyCarLock> data(String msg) {
+        String pattern = "0.00"; // 鎸囧畾淇濈暀涓や綅灏忔暟鐨勬牸寮�
+        DecimalFormat decimalFormat = new DecimalFormat(pattern); //
         JSONObject jsonObject = JSONObject.parseObject(msg);
         List<ArdSyCarLock> lockList = new ArrayList<>();
         ArdSyCarLock ardSyCarLock1 = new ArdSyCarLock();
         ardSyCarLock1.setRelay("A01");
         ardSyCarLock1.setRelayInfo(String.valueOf(jsonObject.getInteger("A01")));
-        ardSyCarLock1.setCurrent("C01");
-        ardSyCarLock1.setCurrentInfo(String.valueOf(jsonObject.getFloat("C01")));
+        ardSyCarLock1.setCurrents("C01");
+        ardSyCarLock1.setCurrentInfo(decimalFormat.format(jsonObject.getDouble("C01")));
         lockList.add(ardSyCarLock1);
         ArdSyCarLock ardSyCarLock2 = new ArdSyCarLock();
         ardSyCarLock2.setRelay("A02");
         ardSyCarLock2.setRelayInfo(String.valueOf(jsonObject.getInteger("A02")));
-        ardSyCarLock2.setCurrent("C02");
-        ardSyCarLock2.setCurrentInfo(String.valueOf(jsonObject.getFloat("C02")));
+        ardSyCarLock2.setCurrents("C02");
+        ardSyCarLock2.setCurrentInfo(decimalFormat.format(jsonObject.getDouble("C02")));
         lockList.add(ardSyCarLock2);
         return lockList;
     }
@@ -210,6 +220,121 @@
         return lockMapper.updateById(ardSyCarLock);
     }
 
+    @Override
+    public ArdSyCarLock getCurrentInfo(String Rtu, String currents) {
+        QueryWrapper<ArdSyCarLock> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("rtu_id",Rtu).eq("currents",currents);
+        return lockMapper.selectOne(queryWrapper);
+    }
+
+    @Override
+    public AjaxResult seal(LockTypeParam lockTypeParam) {
+        QueryWrapper<ArdSyCarRtu> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("carId",lockTypeParam.getCarId());
+        ArdSyCarRtu ardSyCarRtu = rtuMapper.selectOne(queryWrapper);
+        MqttOnce mqttOnce = new MqttOnce();
+        //1瑙e皝
+        if(lockTypeParam.getType()==1){
+            Map<String,Object> map = new HashMap<>();
+            map.put("A01", 110000);//瀵奸�氱涓�璺户鐢靛櫒
+            map.put("A02", 110000);//瀵奸�氱浜岃矾缁х數鍣�
+            map.put("res", String.valueOf(System.currentTimeMillis()));
+            try {
+                return AjaxResult.success(mqttOnce.publishCar(lockTypeParam.getCarId(),ardSyCarRtu.getTopicPublish(),String.valueOf(new com.alibaba.fastjson2.JSONObject(map)),"瑙e皝"));
+            } catch (MqttException e) {
+                log.debug("瑙e皝鎸囦护鍙戠敓澶辫触"+e);
+            }
+        }
+        //0鏂藉皝
+        if(lockTypeParam.getType()==0){
+            //閿佸紑鍏崇姸鎬�
+            int lockCloseNum = 0;
+            //鏌ヨ閿佷俊鎭�
+            List<ArdSyCarLock> ardSyCarLocks = carLock(ardSyCarRtu.getId());
+            for (int j = 0; j < ardSyCarLocks.size(); j++) {
+                ArdSyCarLock ardSyCarLock = ardSyCarLocks.get(j);
+                String currents = ardSyCarLock.getCurrents();
+                String currentInfo = ardSyCarLock.getCurrentInfo();
+                //鐢垫祦鍊间负4.0鏄叧閿佺姸鎬�
+                if(currentInfo.equals(4.00)){
+                    lockCloseNum += 1;
+                }else {
+                    String key = "";
+                    if(currents.equals("C01")){
+                        key = "D03";
+                    }else if(currents.equals("C02")){
+                        key = "D04";
+                    }
+                    Map<String,Object> map = new HashMap();
+                    map.put(key, 0.01);
+                    map.put("res", String.valueOf(System.currentTimeMillis()));
+                    try {
+                        mqttOnce.publishCar("carId",ardSyCarRtu.getTopicPublish(),String.valueOf(new com.alibaba.fastjson2.JSONObject(map)),"寮�閿侊細"+currents);
+                    } catch (MqttException e) {
+                        log.debug("寮�閿佹寚浠ゅ彂鐢熷け璐�"+e);
+                    }
+                    while(true){
+                        ArdSyCarLock ardSyCarLock1 = getCurrentInfo(ardSyCarRtu.getId(),currents);
+                        String currentInfo1 = ardSyCarLock1.getCurrentInfo();
+                        if(currentInfo1.equals(4.00)){
+                            lockCloseNum +=1;
+                            break;
+                        }
+                    }
+                }
+            }
+            if(lockCloseNum == 2){
+                Map<String,Object> map = new HashMap<>();
+                map.put("A01", 100000);//鏂紑绗竴璺户鐢靛櫒
+                map.put("A02", 100000);//鏂紑绗簩璺户鐢靛櫒
+                map.put("res", String.valueOf(System.currentTimeMillis()));
+                try {
+                    return AjaxResult.success(mqttOnce.publishCar(lockTypeParam.getCarId(),ardSyCarRtu.getTopicPublish(),String.valueOf(new com.alibaba.fastjson2.JSONObject(map)),"鏂藉皝"));
+                } catch (MqttException e) {
+                    log.debug("鏂藉皝鎸囦护鍙戠敓澶辫触"+e);
+                }
+            }
+        }
+        return AjaxResult.success();
+    }
+
+    @Override
+    public AjaxResult onOff(LockTypeParam lockTypeParam) {
+        QueryWrapper<ArdSyCarRtu> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("car_id",lockTypeParam.getCarId());
+        ArdSyCarRtu ardSyCarRtu = rtuMapper.selectOne(queryWrapper);
+        ArdSyCarLock ardSyCarLock = lockMapper.selectById(lockTypeParam.getLockId());
+        String relay = ardSyCarLock.getRelayInfo();
+        if(relay.equals("1")){
+            AjaxResult.error(0,"璇ラ攣澶勪簬瑙e皝鐘舵��,杩滅▼鏃犳硶鎿嶆帶,璇峰厛鎵ц鏂藉皝鎿嶄綔!");
+        }
+        String key = "";
+        String currentInfo = ardSyCarLock.getCurrentInfo();
+        if(currentInfo.equals("C01")){
+            key = "D03";
+        }else if(currentInfo.equals("C02")){
+            key = "D04";
+        }
+        Number lockState = (Number) lockTypeParam.getNum();
+        if(lockState.equals(100)){
+            lockState = 99.99;
+        }else if(lockState.equals(0)){
+            lockState = 0.01;
+        }else{
+            lockState = lockState.doubleValue() + 0.01;
+        }
+        Map<String,Object> map = new HashMap();
+        map.put(key, lockState);//鑼冨洿鏄�0.01鍒�99.99
+        map.put("res", String.valueOf(System.currentTimeMillis()));
+        MqttOnce mqttOnce = new MqttOnce();
+        try {
+            return AjaxResult.success(mqttOnce.publishCar("carId",ardSyCarRtu.getTopicPublish(),String.valueOf(new com.alibaba.fastjson2.JSONObject(map)),"寮�鍏抽攣鎸囦护"+lockState));
+        } catch (MqttException e) {
+            log.debug("寮�鍏抽攣鎸囦护鍙戦�佸け璐�"+e);
+        }
+        return AjaxResult.success();
+    }
+
 
     //杞﹁締鍒楄〃灏佽
     public List<CarVo> carAnalysis(List<ArdSyCar> ardSyCars){
diff --git a/ard-work/src/main/java/com/ruoyi/sy/vo/WallCarVo.java b/ard-work/src/main/java/com/ruoyi/sy/vo/WallCarVo.java
new file mode 100644
index 0000000..5725b6c
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/sy/vo/WallCarVo.java
@@ -0,0 +1,13 @@
+package com.ruoyi.sy.vo;
+
+import com.ruoyi.sy.domain.ArdAccessFence;
+import com.ruoyi.sy.domain.ArdSyCarLock;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class WallCarVo {
+    private ArdAccessFence ardAccessFence;
+    private List<ArdSyCarLock> lock;
+}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java
index 3b88ad2..70d9196 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnce.java
@@ -29,29 +29,16 @@
     @Autowired
     private ISysConfigService sysConfigService;
 
-    @PostConstruct
+//    @PostConstruct
     public void init() {
-        //鑾峰彇鐢电閿佸湴鍧�
-        String mqttUrl = sysConfigService.selectConfigByKey("ElectromagneticLockUrl");
         List<ArdSyCarRtu> rtus = ardSyCarRtuService.allCarTopicList();
         for (int i = 0; i < rtus.size(); i++) {
             ArdSyCarRtu rtu = rtus.get(i);
             String carId = rtu.getCarId();
             String subscribe = rtu.getTopicSubscribe();
             try {
-                MqttClient client = new MqttClient(mqttUrl,carId);
-//                log.debug("--鍒涘缓"+carId+"鍙疯溅杈嗙數瀛愰攣mqtt瀹㈡埛绔�");
-                MqttConnectOptions options = new MqttConnectOptions();
-                //璁剧疆鐢ㄦ埛鍚嶅瘑鐮�
-                options.setUserName("admin");
-                options.setPassword("xzx12345".toCharArray());
-                // 璁剧疆瓒呮椂鏃堕棿
-                options.setConnectionTimeout(100);
-                // 璁剧疆浼氳瘽蹇冭烦鏃堕棿
-                options.setKeepAliveInterval(60);
-                // 鏄惁娓呴櫎session
-                options.setCleanSession(true);
-//                log.debug("--鐢熸垚"+carId+"鍙疯溅杈嗙數瀛愰攣mqtt閰嶇疆瀵硅薄");
+                MqttClient client = getMqttClient(carId);
+                MqttConnectOptions options = getMqttConnectOptions();
                 client.setCallback(new MqttOnceCallback(client,options,subscribe,2));
 //                log.debug("--娣诲姞杞﹁締鐢电閿佸洖璋冨鐞嗙被");
                 client.connect(options);
@@ -59,10 +46,53 @@
                 e.printStackTrace();
             }
         }
-//        MqttConsumer mqttConsumer = new MqttConsumer();
-//        for (int i = 0; i < topic.length; i++) {
-//            mqttConsumer.subscribe(topic[i],2);
-//        }
-//        log.info("mqtt璁㈤槄娓呮筏杞﹁締閿佷俊鎭細"+Arrays.toString(topic));
     }
+
+    public void subscribeCar(ArdSyCarRtu ardSyCarRtu){
+        String carId = ardSyCarRtu.getCarId();
+        String subscribe = ardSyCarRtu.getTopicSubscribe();
+        try {
+            MqttClient client = getMqttClient(carId);
+            MqttConnectOptions options = getMqttConnectOptions();
+            client.setCallback(new MqttOnceCallback(client,options,subscribe,2));
+//          log.debug("--娣诲姞杞﹁締鐢电閿佸洖璋冨鐞嗙被");
+            client.connect(options);
+        }catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public MqttClient getMqttClient(String carId) throws MqttException {
+        //鑾峰彇鐢电閿佸湴鍧�
+        String mqttUrl = sysConfigService.selectConfigByKey("ElectromagneticLockUrl");
+        MqttClient client = new MqttClient(mqttUrl,carId);
+        //log.debug("--鍒涘缓"+carId+"鍙疯溅杈嗙數瀛愰攣mqtt瀹㈡埛绔�");
+        return client;
+    }
+
+    public MqttConnectOptions getMqttConnectOptions(){
+        MqttConnectOptions options = new MqttConnectOptions();
+        //璁剧疆鐢ㄦ埛鍚嶅瘑鐮�
+        options.setUserName("admin");
+        options.setPassword("xzx12345".toCharArray());
+        // 璁剧疆瓒呮椂鏃堕棿
+        options.setConnectionTimeout(100);
+        // 璁剧疆浼氳瘽蹇冭烦鏃堕棿
+        options.setKeepAliveInterval(60);
+        // 鏄惁娓呴櫎session
+        options.setCleanSession(true);
+//      log.debug("--鐢熸垚"+carId+"鍙疯溅杈嗙數瀛愰攣mqtt閰嶇疆瀵硅薄");
+        return options;
+    }
+
+    public String publishCar(String carId,String topic,String message,String type) throws MqttException {
+        MqttClient client = getMqttClient(carId);
+        MqttConnectOptions options = getMqttConnectOptions();
+        MqttMessage msg = new MqttMessage(message.getBytes());
+        msg.setQos(2);
+        client.publish(topic,msg);
+        client.disconnect();
+        return "鍙戝竷"+type+"鎸囦护鎴愬姛锛�";
+    }
+
 }
diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java
index d89ef67..e469e7f 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttOnceCallback.java
@@ -79,24 +79,60 @@
 //            System.out.println("銆愯溅杈嗛攣涓婚銆戯細"+topic+"銆愯溅杈嗛攣淇℃伅銆戯細"+new String(message.getPayload(), StandardCharsets.UTF_8));
             //鍑烘潵鍥炶皟鏁版嵁
             List<ArdSyCarLock> ardSyCarLocks = carLockService.data(new String(message.getPayload(), StandardCharsets.UTF_8));
-            //瀛樺叆闆嗗悎
-            Map<String,List<ArdSyCarLock>> map = PositionContainer.getTopicSubscribe();
-            if(map==null){
-                Map<String,List<ArdSyCarLock>> newMap = new HashMap<>();
-                newMap.put("topic",ardSyCarLocks);
-                PositionContainer.setTopicSubscribe(newMap);
-            }else {
-                for(Map.Entry entry : map.entrySet()){
-                    String mapTopic = (String) entry.getKey();
-                    if(topic.equals(mapTopic)){
-                        map.remove(entry.getKey());
+            //鏍规嵁topic鏌ヨRTUID
+            ArdSyCarRtu ardSyCarRtu = carRtuService.subscribeByCarId(topic);
+            String RTU = ardSyCarRtu.getId();
+            //鏍规嵁RTUID鏌ヨ閿�
+            List<ArdSyCarLock> ardSyCarLockList = carLockService.carLock(RTU);
+            for (int i = 0; i < ardSyCarLocks.size(); i++) {
+                ArdSyCarLock ardSyCarLockData = ardSyCarLocks.get(i);
+                String relay = ardSyCarLockData.getRelay();
+                String relayInfo = ardSyCarLockData.getRelayInfo();
+                String current = ardSyCarLockData.getCurrents();
+                String currentInfo = ardSyCarLockData.getCurrentInfo();
+                for (int j = 0; j < ardSyCarLockList.size(); j++) {
+                    ArdSyCarLock lock = ardSyCarLockList.get(j);
+                    String relay1 = lock.getRelay();
+                    String current1 = lock.getCurrents();
+                    String relayInfo1 = lock.getRelayInfo();
+                    String currentInfo1 = lock.getCurrentInfo();
+                    Boolean upd = false;
+                    if(relay.equals(relay1)){
+                        if(!relayInfo.equals(relayInfo1)){
+                            lock.setRelayInfo(relayInfo);
+                            upd = true;
+                        }
                     }
-                    Map<String,List<ArdSyCarLock>> newMap = new HashMap<>();
-                    newMap.put("topic",ardSyCarLocks);
-                    PositionContainer.setTopicSubscribe(newMap);
+                    if(current.equals(current1)){
+                        if(!currentInfo.equals(currentInfo1)){
+                            lock.setCurrentInfo(currentInfo);
+                            upd = true;
+                        }
+                    }
+                    if(upd){
+                        int num = carLockService.updLock(lock);
+//                        log.debug("淇敼"+num+"鏁版嵁");
+                    }
                 }
             }
-            log.debug(String.valueOf(map));
+//            //瀛樺叆闆嗗悎
+//            Map<String,List<ArdSyCarLock>> map = PositionContainer.getTopicSubscribe();
+//            if(map==null){
+//                Map<String,List<ArdSyCarLock>> newMap = new HashMap<>();
+//                newMap.put("topic",ardSyCarLocks);
+//                PositionContainer.setTopicSubscribe(newMap);
+//            }else {
+//                for(Map.Entry entry : map.entrySet()){
+//                    String mapTopic = (String) entry.getKey();
+//                    if(topic.equals(mapTopic)){
+//                        map.remove(entry.getKey());
+//                    }
+//                    Map<String,List<ArdSyCarLock>> newMap = new HashMap<>();
+//                    newMap.put("topic",ardSyCarLocks);
+//                    PositionContainer.setTopicSubscribe(newMap);
+//                }
+//            }
+//            log.debug(String.valueOf(map));
         } catch (Exception e) {
             log.debug("杞﹁締鐢电閿佸鐞唌qtt娑堟伅寮傚父:" + e);
         }
diff --git a/ard-work/src/main/resources/mapper/sy/ArdSyCarLockMapper.xml b/ard-work/src/main/resources/mapper/sy/ArdSyCarLockMapper.xml
new file mode 100644
index 0000000..b91c775
--- /dev/null
+++ b/ard-work/src/main/resources/mapper/sy/ArdSyCarLockMapper.xml
@@ -0,0 +1,12 @@
+<?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.ArdSyCarLockMapper">
+
+    <select id="lockList" parameterType="String" resultType="com.ruoyi.sy.domain.ArdSyCarLock">
+        SELECT  id,currents,rtu_id,current_info,relay,img_position_left,img_position_top,relay_info,lock_name  FROM ard_sy_car_lock
+        WHERE rtu_id = #{rtuId}
+    </select>
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.3