From 7e2a837e26aafca3d49d35f9704442659da8654c Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期四, 02 十一月 2023 17:05:57 +0800
Subject: [PATCH] 硬件协议对接

---
 server/services/src/main/java/com/doumee/dao/business/model/Sites.java                         |    9 ++
 server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java     |   31 ++++++-
 server/platform/src/main/java/com/doumee/service/impl/MqttSubServiceImpl.java                  |    2 
 server/services/src/main/java/com/doumee/core/model/api/WebLoginUserInfo.java                  |    2 
 server/services/src/main/java/com/doumee/service/business/impl/DeviceSubscribeServiceImpl.java |  138 ++++++++++++++++++++++++----------
 server/platform/src/main/java/com/doumee/task/ScheduleTool.java                                |    6 
 server/services/src/main/java/com/doumee/core/constants/Constants.java                         |    6 +
 server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java               |    1 
 server/services/src/main/java/com/doumee/core/mqtt/service/MqttToolService.java                |    8 +
 server/services/src/main/java/com/doumee/service/business/DeviceSubcribeService.java           |    3 
 server/自行车mqtt协议.md                                                                            |   34 ++++----
 11 files changed, 167 insertions(+), 73 deletions(-)

diff --git a/server/platform/src/main/java/com/doumee/service/impl/MqttSubServiceImpl.java b/server/platform/src/main/java/com/doumee/service/impl/MqttSubServiceImpl.java
index c4d49cb..e56e312 100644
--- a/server/platform/src/main/java/com/doumee/service/impl/MqttSubServiceImpl.java
+++ b/server/platform/src/main/java/com/doumee/service/impl/MqttSubServiceImpl.java
@@ -32,6 +32,6 @@
     @PostConstruct
     public void startSubcribe() {
         mqttToolService.subscribe(
-                new String[]{ Constants.MqttTopic.sub_lockInfo, Constants.MqttTopic.sub_closeLock});
+                new String[]{ Constants.MqttTopic.sub_lockInfo, Constants.MqttTopic.sub_closeLock,Constants.MqttTopic.sub_health});
     }
 }
diff --git a/server/platform/src/main/java/com/doumee/task/ScheduleTool.java b/server/platform/src/main/java/com/doumee/task/ScheduleTool.java
index f9fa9ea..1bd9fc6 100644
--- a/server/platform/src/main/java/com/doumee/task/ScheduleTool.java
+++ b/server/platform/src/main/java/com/doumee/task/ScheduleTool.java
@@ -77,9 +77,9 @@
      */
     @Scheduled(cron = "0/30 * * * * ? ")
     public void autoRefreshLockStatus() throws Exception {
-        log.info("=====================寮�濮嬫瘡澶╄嚜鍔ㄧ粨绠�=======================");
+        log.info("=====================寮�濮嬪埛鏂伴獞琛屼腑鐨勬暟鍏呭�兼湭寮�閿佸け璐�=======================");
         memberRidesService.autoRefreshLockStatus();
-        log.info("=====================缁撴潫姣忓ぉ鑷姩缁撶畻=======================");
+        log.info("=====================寮�濮嬪埛鏂伴獞琛屼腑鐨勬暟鍏呭�兼湭寮�閿佸け璐�=======================");
     }
 
 
@@ -87,7 +87,7 @@
      * 绔欑偣杞﹁締婊℃灦鐜囬璀�
      * @throws Exception
      */
-    @Scheduled(fixedDelay = 1000L * 60L * 3L)
+    @Scheduled(fixedDelay = 1000L * 60L * 10L)
     public void siteReserves() throws Exception {
         log.info("=====================寮�濮� 绔欑偣杞﹁締婊℃灦鐜囬璀�=======================");
         sitesService.siteReservesNotice();;
diff --git a/server/services/src/main/java/com/doumee/core/constants/Constants.java b/server/services/src/main/java/com/doumee/core/constants/Constants.java
index 8a7dc38..d2c5bba 100644
--- a/server/services/src/main/java/com/doumee/core/constants/Constants.java
+++ b/server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -49,6 +49,9 @@
         String sub_lockInfo = "device/lock/+/+/info";
         //杩樿溅閿佸ご锛堣闃咃級
         String sub_closeLock = "device/lock/+/+/bike";
+        String sub_health= "device/lock/+/health";
+
+        String sub_brokers = "$SYS/brokers/+/clients/#";
         //瀹炴椂鑾峰彇閿佷俊鎭紙鍙戝竷锛�
         String pub_getLockInfo = "device/lock/{siteId}/{lockId}/getInfo";
     }
@@ -63,11 +66,12 @@
         int partful = 3;
   }
     public interface LockStatus{
-      //  //鐘舵�侊紝0闂悎, 1鎵撳紑锛�2杩愯涓�, 3寮傚父
+      //  //鐘舵�侊紝0闂悎, 1鎵撳紑锛�2杩愯涓�, 3寮傚父 -1鑷
         int closed =0;
         int open =1;
         int running =2;
         int error= 3;
+        int checking= -1;
     }
     public interface goodsorderStatus{
         int waitPay =0;
diff --git a/server/services/src/main/java/com/doumee/core/model/api/WebLoginUserInfo.java b/server/services/src/main/java/com/doumee/core/model/api/WebLoginUserInfo.java
index 6dd3f38..b49a8fe 100644
--- a/server/services/src/main/java/com/doumee/core/model/api/WebLoginUserInfo.java
+++ b/server/services/src/main/java/com/doumee/core/model/api/WebLoginUserInfo.java
@@ -46,6 +46,6 @@
     @ApiModelProperty(value = "鎬荤Н鍒�")
     private Integer total_integral    	 ;//
     @ApiModelProperty(value = "鎬绘彁浜ゆ暟閲�")
-    private Integer    submission_number 	 ;//
+    private Integer    submission_number ;//
 
 }
diff --git a/server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java b/server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java
index 0470a42..b050971 100644
--- a/server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java
+++ b/server/services/src/main/java/com/doumee/core/mqtt/service/MqttPushCallback.java
@@ -20,7 +20,6 @@
         //鎺ユ敹娑堟伅鍥炶皟
         @Override
         public void connectionLost(Throwable cause) {
-
             // 杩炴帴涓㈠け鍚庯紝涓�鑸湪杩欓噷闈㈣繘琛岄噸杩�
             System.out.println("杩炴帴鏂紑锛岄噸杩炰腑");
             try {
diff --git a/server/services/src/main/java/com/doumee/core/mqtt/service/MqttToolService.java b/server/services/src/main/java/com/doumee/core/mqtt/service/MqttToolService.java
index 27a35e5..f4ef56c 100644
--- a/server/services/src/main/java/com/doumee/core/mqtt/service/MqttToolService.java
+++ b/server/services/src/main/java/com/doumee/core/mqtt/service/MqttToolService.java
@@ -14,7 +14,6 @@
     private MqttConfig config;
     @Autowired
     private MqttPushCallback callBack ;
-
     /**
      * 璁㈤槄娑堟伅锛屽惎鍔ㄥ姞杞戒竴娆�
      * @param topics
@@ -25,6 +24,11 @@
             int[] Qos = new int[topics.length];//0锛氭渶澶氫竴娆� 銆�1锛氭渶灏戜竴娆� 銆�2锛氬彧鏈変竴娆�
             for (int i = 0; i < Qos.length; i++) {
                 Qos[i] = 1;
+                /*if(i ==2){
+                    Qos[i] = 2;
+                }else{
+                    Qos[i] = 1;
+                }*/
             }
             MqttClientInit.getSubInstance(config,callBack).subscribe(topics, Qos);
         } catch (Exception e) {
@@ -39,7 +43,7 @@
     public  int pubMessage(String message,String topic){
         MqttMessage mess = new MqttMessage();
         mess.setQos(1);
-        mess.setRetained(true);
+        mess.setRetained(false);
         mess.setPayload(message.getBytes());
         try {
             MqttClientInit.getInstance(config).publish(topic, mess);
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Sites.java b/server/services/src/main/java/com/doumee/dao/business/model/Sites.java
index f7b0b64..33317cf 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Sites.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Sites.java
@@ -37,6 +37,10 @@
     @ExcelColumn(name="缂栬緫鏃堕棿")
     //@JsonFormat(pattern = "yyyy-MM-dd")
     private Date editDate;
+    @ApiModelProperty(value = "鏈�鍚庨�氳鏃堕棿")
+    @ExcelColumn(name="鏈�鍚庨�氳鏃堕棿")
+    //@JsonFormat(pattern = "yyyy-MM-dd")
+    private Date lastLinkDate;
 
     @ApiModelProperty(value = "缂栬緫浜�")
     @ExcelColumn(name="缂栬緫浜�")
@@ -59,9 +63,12 @@
     @ExcelColumn(name="缂栧彿")
     private String code;
 
-    @ApiModelProperty(value = "鐘舵�� 0姝e父 1绂佺敤", example = "1")
+    @ApiModelProperty(value = "鐘舵�� 0姝e父 1绂佺敤 ", example = "1")
     @ExcelColumn(name="鐘舵�� 0姝e父 1绂佺敤")
     private Integer status;
+    @ApiModelProperty(value = "鐘舵�� 0鍦ㄧ嚎 1绂荤嚎 ", example = "1")
+    @ExcelColumn(name="鐘舵�� 0鍦ㄧ嚎 1绂荤嚎")
+    private Integer online;
 
     @ApiModelProperty(value = "閿佸ご鏁伴噺", example = "1")
     @ExcelColumn(name="閿佸ご鏁伴噺")
diff --git a/server/services/src/main/java/com/doumee/service/business/DeviceSubcribeService.java b/server/services/src/main/java/com/doumee/service/business/DeviceSubcribeService.java
index 62d4bd2..47d3798 100644
--- a/server/services/src/main/java/com/doumee/service/business/DeviceSubcribeService.java
+++ b/server/services/src/main/java/com/doumee/service/business/DeviceSubcribeService.java
@@ -1,14 +1,11 @@
 package com.doumee.service.business;
 
-import com.doumee.dao.business.model.Locks;
-
 /**
  * 涓庣‖浠跺鎺ユ湇鍔�
  * @author 姹熻箘韫�
  * @date 2023/10/09 18:06
  */
 public interface DeviceSubcribeService {
-
     /**
      * 璁惧涓婃姤鏁版嵁锛堜笂鎶ワ級
      * @param param 涓婃姤鍙傛暟
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/DeviceSubscribeServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/DeviceSubscribeServiceImpl.java
index 8a8f01e..0b483c2 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/DeviceSubscribeServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/DeviceSubscribeServiceImpl.java
@@ -6,11 +6,10 @@
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.mqtt.config.MqttConfig;
 import com.doumee.core.mqtt.service.MqttToolService;
+import com.doumee.dao.business.MemberRidesMapper;
 import com.doumee.dao.business.MqttLogMapper;
-import com.doumee.dao.business.model.Bikes;
-import com.doumee.dao.business.model.Locks;
-import com.doumee.dao.business.model.MemberRides;
-import com.doumee.dao.business.model.MqttLog;
+import com.doumee.dao.business.SitesMapper;
+import com.doumee.dao.business.model.*;
 import com.doumee.service.business.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -32,6 +31,9 @@
     @Autowired
     @Lazy
     MemberRidesService memberRidesService;
+    @Lazy
+    @Autowired
+    SitesMapper sitesMapper;
     @Autowired
     private MqttLogMapper mqttLogMapper;
     @Autowired
@@ -41,24 +43,21 @@
        log.info("mqtt娑堟伅璁㈤槄==================="+param);
         String info = Constants.MqttTopic.sub_lockInfo.substring(Constants.MqttTopic.sub_lockInfo.lastIndexOf("/")+1) ;
         String closeLock = Constants.MqttTopic.sub_closeLock.substring(Constants.MqttTopic.sub_closeLock.lastIndexOf("/")+1) ;
-        if(topic.indexOf(Constants.MqttTopic.topic_index)!=0
-                ||topic.split("/").length < 5
-                || (!StringUtils.contains(topic, info)
-                   &&!StringUtils.contains(topic,closeLock))){
-            log.error("mqtt娑堟伅璁㈤槄===========鏃犳晥鏁版嵁========"+param);
-            return;
-        }
-
-        String[] ss = topic.split("/");
-        String siteid =  ss[2];//绔欑偣缂栫爜
-        String lockid =  ss[3];//閿佸ご缂栫爜
-        if(StringUtils.isBlank(siteid)||StringUtils.isBlank(lockid)){
-            //濡傛灉閿佸ご缂栫爜涓虹┖
-            log.error("mqtt娑堟伅璁㈤槄==============鏃犳晥鏁版嵁====="+param);
-            return;
+        String health = Constants.MqttTopic.sub_health.substring(Constants.MqttTopic.sub_health.lastIndexOf("/")+1) ;
+        String brokers = "brokers";
+        if(!StringUtils.contains(topic, brokers)){
+            if(topic.indexOf(Constants.MqttTopic.topic_index)!=0
+                    ||topic.split("/").length < 4
+                    || (!StringUtils.contains(topic, info)
+                    &&!StringUtils.contains(topic, health)
+                    &&!StringUtils.contains(topic,closeLock))){
+                log.error("mqtt娑堟伅璁㈤槄===========鏃犳晥鏁版嵁========"+param);
+                return;
+            }
         }
         MqttLog mqttLog = new MqttLog();
         mqttLog.setMsgId(msgId);
+        mqttLog.setTopic(topic);
         int msgCount  =mqttLogMapper.selectCount(new QueryWrapper<MqttLog>().lambda().eq(MqttLog::getMsg, param).eq(MqttLog::getType, Constants.ZERO));
         if(msgCount>0){
             log.error("mqtt娑堟伅璁㈤槄==============宸叉秷璐规暟鎹�====="+param);
@@ -68,27 +67,86 @@
         String logInfo = "";
         int result =0;
         try {
-            if(StringUtils.contains(topic, info)){
-                //濡傛灉閿佸ご淇℃伅涓婃姤
-                Locks locks  = JSONObject.parseObject(param, Locks.class);
-                locks.setSiteId(siteid);
-                locks.setCode(lockid);
-                locks.setInfo(logId);
-                result = memberRidesService.mqttLockInfoEvent(locks);
-                logInfo = "mqtt娑堟伅璁㈤槄閿佸ご淇℃伅";
-                log.info("mqtt娑堟伅璁㈤槄=========閿佷俊鎭�==========鎴愬姛");
-            }
-            if(StringUtils.contains(topic, closeLock)){
-                //濡傛灉杩樿溅涓婃姤
-                JSONObject pjson  = JSONObject.parseObject(param);
-                MemberRides bikes = new MemberRides();
-                bikes.setBikeCode(pjson.getString("bikeCode"));
-                bikes.setBackLockId( lockid);
-                bikes.setBackSiteId( siteid);
-                bikes.setBackCommondId(logId);
-                result = memberRidesService.mqttCloseBikeEvent(bikes);
-                logInfo = "mqtt娑堟伅璁㈤槄杩樿溅娑堟伅";
-                log.info("mqtt娑堟伅璁㈤槄=========杩樿溅==========鎴愬姛");
+            if(!topic.contains(brokers)){
+                String[] ss = topic.split("/");
+                String siteid =  ss[2];//绔欑偣缂栫爜
+                if(StringUtils.isBlank(siteid) ){
+                    //濡傛灉閿佸ご缂栫爜涓虹┖
+                    log.error("mqtt娑堟伅璁㈤槄==============鏃犳晥鏁版嵁====="+topic+param);
+                    return;
+                }
+                if(StringUtils.contains(topic, info)){
+                    //濡傛灉閿佸ご淇℃伅涓婃姤
+                    String lockid =  ss[3];//閿佸ご缂栫爜
+                    if( StringUtils.isBlank(lockid)){
+                        //濡傛灉閿佸ご缂栫爜涓虹┖
+                        log.error("mqtt娑堟伅璁㈤槄==============鏃犳晥鏁版嵁====="+topic+param);
+                        return;
+                    }
+                    Locks locks  = JSONObject.parseObject(param, Locks.class);
+                    locks.setSiteId(siteid);
+                    locks.setCode(lockid);
+                    locks.setInfo(logId);
+                    result = memberRidesService.mqttLockInfoEvent(locks);
+                    logInfo = "mqtt娑堟伅璁㈤槄閿佸ご淇℃伅";
+                    log.info("mqtt娑堟伅璁㈤槄=========閿佷俊鎭�==========鎴愬姛");
+                }else if(StringUtils.contains(topic, closeLock)){
+                    //濡傛灉杩樿溅涓婃姤
+                    String lockid =  ss[3];//閿佸ご缂栫爜
+                    if( StringUtils.isBlank(lockid)){
+                        //濡傛灉閿佸ご缂栫爜涓虹┖
+                        log.error("mqtt娑堟伅璁㈤槄==============鏃犳晥鏁版嵁====="+topic+param);
+                        return;
+                    }
+                    JSONObject pjson  = JSONObject.parseObject(param);
+                    MemberRides bikes = new MemberRides();
+                    bikes.setBikeCode(pjson.getString("bikeCode"));
+                    bikes.setBackLockId( lockid);
+                    bikes.setBackSiteId( siteid);
+                    bikes.setBackCommondId(logId);
+                    result = memberRidesService.mqttCloseBikeEvent(bikes);
+                    logInfo = "mqtt娑堟伅璁㈤槄杩樿溅娑堟伅";
+                    log.info("mqtt娑堟伅璁㈤槄=========杩樿溅==========鎴愬姛");
+                }else if(StringUtils.contains(topic, health)){
+                    //蹇冭烦娑堟伅=
+                    Sites site = new Sites();
+                    site.setId(siteid);
+                    site.setOnline(Constants.ZERO);
+                    site.setLastLinkDate(new Date());
+                    sitesMapper.updateById(site);//鏇存柊绔欑偣鐘舵��
+                    logInfo = "mqtt娑堟伅璁㈤槄蹇冭烦娑堟伅";
+                    log.info("mqtt娑堟伅璁㈤槄=========蹇冭烦娑堟伅==========鎴愬姛");
+
+                }
+            }else {
+                //濡傛灉绔欑偣涓婁笅绾挎秷鎭�
+                JSONObject pjson = JSONObject.parseObject(param);
+                String clientId = String.valueOf(pjson.get("clientid"));
+                if(clientId.contains("doumee")){
+                    log.error("mqtt娑堟伅璁㈤槄==============鏃犳晥璁㈤槄鐘舵��====="+topic+param);
+                    return;
+                }
+                Sites site = sitesMapper.selectById(clientId);
+                if(site == null){
+                    log.error("mqtt娑堟伅璁㈤槄==============鏃犳晥璁㈤槄鐘舵��====="+topic+param);
+                    return;
+                }
+                if (topic.endsWith("disconnected")) {
+                    if(Constants.formatIntegerNum(site.getOnline()) == Constants.ONE){
+                        log.error("mqtt娑堟伅璁㈤槄==============宸茶闃呯姸鎬佹帀绾�====="+param);
+                        return;
+                    }
+                    site.setOnline(Constants.ONE);
+                } else {
+                    if(Constants.formatIntegerNum(site.getOnline()) == Constants.ZERO){
+                        log.error("mqtt娑堟伅璁㈤槄==============宸茶闃呯姸鎬佷笂绾�====="+param);
+                        return;
+                    }
+                    site.setOnline(Constants.ZERO);
+                }
+                site.setLastLinkDate(new Date());
+                sitesMapper.updateById(site);//鏇存柊绔欑偣鐘舵��
+                log.info("mqtt娑堟伅璁㈤槄=========绔欑偣涓婁笅绾�==========鎴愬姛");
             }
         }catch (BusinessException e){
             e.printStackTrace();
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java
index 7fe93bc..6126046 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java
@@ -449,14 +449,26 @@
                 .eq(Locks::getIsdeleted, Constants.ZERO)
                 .last("limit 1"));
         if (Objects.isNull(locks)) {
-            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鎵爜鏃犳晥锛屾湭鏌ヨ鍒伴攣澶翠俊鎭�");
+//            locks =new Locks();
+//            locks.setCode(codes[1]);
+//            locks.setSiteId(codes[0]);
+//            deviceService.getLockInfo(locks);
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鎵爜鏃犳晥锛岃绔欑偣閿佸ご鏆備笉鏀寔鍊熷嚭涓氬姟鍝︼紒");
         }
         //鏌ヨ閿佸ご鏄惁瀛樺湪杞﹁締 浠ュ強鏄惁姝e父
         if (Constants.formatIntegerNum(locks.getStatus())!=Constants.ZERO) {
-            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "褰撳墠鎵爜閿佸ご鐘舵�侀敊璇紝鏃犳硶杩涜寮�閿�");
+            locks =new Locks();
+            locks.setCode(codes[1]);
+            locks.setSiteId(codes[0]);
+            deviceService.getLockInfo(locks);
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "褰撳墠鎵爜閿佸ご鐘舵�侀敊璇紝宸插皾璇曟洿鏂伴攣澶寸姸鎬侊紝璇风◢鍚庨噸璇曪紒");
         }
         if (StringUtils.isBlank(locks.getBikeCode())) {
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠鎵爜閿佸ご鏃犺溅杈嗕俊鎭紝鏃犳硶杩涜寮�閿�");
+            locks =new Locks();
+            locks.setCode(codes[1]);
+            locks.setSiteId(codes[0]);
+            deviceService.getLockInfo(locks);
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠鎵爜閿佸ご鏃犺溅杈嗕俊鎭紝宸插皾璇曟洿鏂伴攣澶寸姸鎬侊紝璇风◢鍚庨噸璇曪紒");
         }
         MemberRides memberRides = new MemberRides();
         //鏍规嵁杞﹀瀷鏌ヨ璁′环鏂规
@@ -698,6 +710,7 @@
             sites.setStatus(Constants.ZERO);
             sites.setEditDate(date);
             sites.setLockNum(1);
+            sites.setLastLinkDate(date);
             //鏂板閿佸ご
             sitesMapper.insert(sites);
         }
@@ -751,13 +764,23 @@
     @Override
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     public  int mqttCloseBikeEvent(MemberRides bikes){
+        Locks locks  = new Locks();
+        locks.setSiteId(bikes.getBackSiteId());
+        locks.setCode(bikes.getBackLockId());
+        locks.setBikeCode(bikes.getBikeCode());
+        locks.setInfo(bikes.getBackCommondId());
+        //澶勭悊閿佸ご鏁版嵁
+         mqttLockInfoEvent(locks);
         //鍏嶈垂楠戣鏃堕暱鏌ヨ锛屾暟鎹瓧鍏搁厤缃�
         if(StringUtils.isBlank(bikes.getBikeCode()) ||StringUtils.isBlank(bikes.getBackLockId())||StringUtils.isBlank(bikes.getBackSiteId())){
           throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"杩樿溅涓婃姤鍙傛暟閿欒锛�");
         }
         QueryWrapper<MemberRides> wrapper = new QueryWrapper<>();
+        List<Integer> statusList = new ArrayList<>();
+        statusList.add(Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey());
+        statusList.add(Constants.MEMBER_RIDES_STATUS.LOCKING.getKey());
         wrapper.lambda().eq(MemberRides::getBikeCode, bikes.getBikeCode());
-        wrapper.lambda().eq(MemberRides::getStatus, Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey());
+        wrapper.lambda().in(MemberRides::getStatus, statusList);
         wrapper.lambda().eq(MemberRides::getIsdeleted, Constants.ZERO);
         //鏍规嵁杞﹁締缂栫爜鏌ヨ楠戣涓殑楠戣璁板綍淇℃伅锛屽鏋滄湁杩涜杩樿溅鎿嶄綔
         MemberRides memberRides = memberRidesMapper.selectOne(wrapper.last("limit  1"));
diff --git "a/server/\350\207\252\350\241\214\350\275\246mqtt\345\215\217\350\256\256.md" "b/server/\350\207\252\350\241\214\350\275\246mqtt\345\215\217\350\256\256.md"
index 2690788..7bfe95f 100644
--- "a/server/\350\207\252\350\241\214\350\275\246mqtt\345\215\217\350\256\256.md"
+++ "b/server/\350\207\252\350\241\214\350\275\246mqtt\345\215\217\350\256\256.md"
@@ -3,47 +3,49 @@
 ## sub: device/lock/{siteId}/{lockId}/info {"bikeCode":"1234567890","lockId":"kjflksjlkfsjdlk","siteId": 456,"status":0,"code":"789"}
 
 ## sub: device/lock/{siteId}/{lockId}/bike  {"bikeCode":"1234567890","lockId":789,"siteId": 456,"time":"2023-10-13 10:12:90"}
+ 
+# 鑷杞� mqtt 鍗忚鏂囨。
+
 ## 閫氫俊瑙勮寖
 - 姣忎釜绔欑偣涓�涓� mqtt 杩炴帴锛宑lientId 涓� SITE_绔欑偣缂栧彿
 - 涓�涓珯鐐圭敱閮ㄧ讲鍦ㄤ笂浣嶆満涓婄殑杞欢閫氳繃can鎬荤嚎涓庡涓攣閫氫俊锛屽苟涓庢湇鍔″櫒閫氳繃mqtt鍋氭秷鎭浆鍙�
+- siteId + lockId 涓洪攣鐨勫敮涓�绱㈠紩锛屽湪鍚屼竴绔欑偣涓嬶紝lockId涓嶉噸澶�
 
 
-## sub: device/lock/{siteId}/{lockId}/info
-> **閿佷俊鎭紝鍦ㄥ垵濮嬪寲銆佺姸鎬佸彉鏇存椂浼氭帹閫侀攣鐨勫畬鏁寸姸鎬�**
+## sub: device/lock/{siteId}/{lockId}/info qos=1
+> **閿佷俊鎭紝鍦ㄧ珯鐐硅蒋浠跺惎鍔ㄥ垵濮嬪寲銆乬etInfo涓婚锛寀nlock涓婚鏃舵椂浼氭帹閫侀攣鐨勫畬鏁寸姸鎬�**
 - 鏁版嵁
 ```json
 {
     "siteId": "1015", // 绔欑偣缂栧彿,鍚屼富棰榹siteId}
     "lockId": 2, // 閿佺紪鍙�,鍚屼富棰榹lockId}
     "status": 1, // 鐘舵�侊紝0闂悎, 1鎵撳紑锛�2杩愯涓�, 3寮傚父, -1鑷涓�
-    "bikeCode": "12345678" // 鑷杞c鍗″彿锛�8浣嶆暟瀛�,濡傦細10000012锛屾棤杞︿负绌�
+    "bikeCode": "12345678", // 鑷杞c鍗″彿锛�8浣嶆暟瀛�,濡傦細10000012锛屾棤杞︿负绌�
+    "timestamp": 1234567823423 // 鏃堕棿鎴筹紝 ms鍊�
 }
 ```
 
-## pub: device/lock/{siteId}/{lockId}/getInfo
-> 瀹炴椂鑾峰彇閿佷俊鎭�
+## pub: device/lock/{siteId}/{lockId}/getInfo qos=0
+> 瀹炴椂鑾峰彇閿佷俊鎭�, 绔欑偣鍦ㄦ敹鍒版娑堟伅鏃讹紝鍙戦�佹寚瀹氳幏鍙栧埌閿佺殑瀹炴椂娑堟伅锛屽苟鍙戝竷鍒癷nfo涓婚
 - 鏁版嵁
 ```json
-{}
 ```
 
-## pub: device/lock/{siteId}/{lockId}/unlock
+## pub: device/lock/{siteId}/{lockId}/unlock qos=0
 > 寮�閿侊紝鎴愬姛澶辫触鍙叧娉╥nfo娑堟伅鎺ㄩ��
 - 鏁版嵁
 ```json
-{}
 ```
 
-## sub: device/lock/{siteId}/{lockId}/bike
+## sub: device/lock/{siteId}/{lockId}/bike qos=1
 > 杩樿溅, 杩樿溅鎴愬姛鏃讹紝鑾峰緱鎵�杩樿溅杈唅c鍗″彿鎺ㄩ��
 - 鏁版嵁
 ```json
 {
-    "bikeCode": "12345678",
-    "lockId": 2,
-    "siteId": "1050",
-    "time": "2023-10-13 10:12:90" // 绔欑偣涓婁綅鏈烘敹鍒拌繕杞︽寚浠ょ殑鏃堕棿锛屼粎鍋氬弬鑰冿紝璇蜂互鏈嶅姟鍣ㄦ椂闂翠负鍑�
+    "siteId": "1015", // 绔欑偣缂栧彿,鍚屼富棰榹siteId}
+    "lockId": 2, // 閿佺紪鍙�,鍚屼富棰榹lockId}
+    "status": 1, // 鐘舵�侊紝0闂悎, 1鎵撳紑锛�2杩愯涓�, 3寮傚父, -1鑷涓�
+    "bikeCode": "12345678", // 鑷杞c鍗″彿锛�8浣嶆暟瀛�,濡傦細10000012锛屾棤杞︿负绌�
+    "timestamp": 1234567823423 // 鏃堕棿鎴筹紝 ms鍊硷紝绔欑偣涓婁綅鏈烘敹鍒拌繕杞︽寚浠ょ殑鏃堕棿锛屼粎鍋氬弬鑰冿紝璇蜂互鏈嶅姟鍣ㄦ椂闂翠负鍑�
 }
-```
-
- 
\ No newline at end of file
+```
\ No newline at end of file

--
Gitblit v1.9.3