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