From aa6744d4d673b55f4bf38ffd55cdf4b090d8c07f Mon Sep 17 00:00:00 2001 From: guochaojie Date: Wed, 26 Jun 2024 09:31:03 +0800 Subject: [PATCH 1/2] mqtt --- nxhs-service/pom.xml | 34 ++++---- .../main/java/cc/yunxi/config/MqttConfig.java | 7 +- .../java/cc/yunxi/config/WebMvcConfig.java | 1 + .../cc/yunxi/config/props/MqttProperties.java | 6 +- .../cc/yunxi/controller/DeviceController.java | 6 +- .../yunxi/controller/WxMessageController.java | 13 +++- .../cc/yunxi/utils/CustomerMqttClient.java | 23 +++--- .../java/cc/yunxi/utils/HeartbeatTask.java | 12 --- .../main/java/cc/yunxi/utils/MqttTool.java | 11 +-- .../java/cc/yunxi/utils/MyMqttCallback.java | 78 +++++++------------ .../java/cc/yunxi/utils/TopicHandler.java | 2 +- .../src/main/resources/application-dev.yml | 12 ++- 12 files changed, 96 insertions(+), 109 deletions(-) delete mode 100644 nxhs-service/src/main/java/cc/yunxi/utils/HeartbeatTask.java diff --git a/nxhs-service/pom.xml b/nxhs-service/pom.xml index 325f9be..73c6fa8 100644 --- a/nxhs-service/pom.xml +++ b/nxhs-service/pom.xml @@ -63,25 +63,25 @@ spring-boot-starter-websocket - - org.springframework.boot - spring-boot-starter-integration - - - org.springframework.integration - spring-integration-stream - - - org.springframework.integration - spring-integration-mqtt - - - - - - + + + + + + + + + + + + + + org.eclipse.paho + org.eclipse.paho.mqttv5.client + 1.2.5 + diff --git a/nxhs-service/src/main/java/cc/yunxi/config/MqttConfig.java b/nxhs-service/src/main/java/cc/yunxi/config/MqttConfig.java index 15cce3c..5fef676 100644 --- a/nxhs-service/src/main/java/cc/yunxi/config/MqttConfig.java +++ b/nxhs-service/src/main/java/cc/yunxi/config/MqttConfig.java @@ -3,17 +3,18 @@ package cc.yunxi.config; import cc.yunxi.config.props.MqttProperties; import cc.yunxi.utils.CustomerMqttClient; import lombok.extern.slf4j.Slf4j; -import org.eclipse.paho.client.mqttv3.MqttException; +import org.eclipse.paho.mqttv5.common.MqttException; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.annotation.Resource; +import java.io.UnsupportedEncodingException; @Slf4j -//@Configuration -//@EnableConfigurationProperties(MqttProperties.class) +@Configuration +@EnableConfigurationProperties(MqttProperties.class) public class MqttConfig { @Resource diff --git a/nxhs-service/src/main/java/cc/yunxi/config/WebMvcConfig.java b/nxhs-service/src/main/java/cc/yunxi/config/WebMvcConfig.java index c8d36b8..67bc4de 100644 --- a/nxhs-service/src/main/java/cc/yunxi/config/WebMvcConfig.java +++ b/nxhs-service/src/main/java/cc/yunxi/config/WebMvcConfig.java @@ -50,6 +50,7 @@ public class WebMvcConfig implements WebMvcConfigurer { "/upload/**", "/qrcode/**.txt", "/wx/**",//微信消息推送验证 + "/wx-message/**",//微信消息推送验证 "/webSocketServer/**",//socket通信 "/doc.html", "/api/delivery-order/**", diff --git a/nxhs-service/src/main/java/cc/yunxi/config/props/MqttProperties.java b/nxhs-service/src/main/java/cc/yunxi/config/props/MqttProperties.java index b7b4234..6dcb3af 100644 --- a/nxhs-service/src/main/java/cc/yunxi/config/props/MqttProperties.java +++ b/nxhs-service/src/main/java/cc/yunxi/config/props/MqttProperties.java @@ -6,12 +6,12 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import java.util.Map; @Data -//@ConfigurationProperties(prefix = "mqtt") +@ConfigurationProperties(prefix = "mqtt") public class MqttProperties { private String host; private String clientId; - private String userName; - private String passWord; + private String username; + private String password; private Map topics; private Boolean cleanSession; private Integer timeout; diff --git a/nxhs-service/src/main/java/cc/yunxi/controller/DeviceController.java b/nxhs-service/src/main/java/cc/yunxi/controller/DeviceController.java index 3b1a657..481e3db 100644 --- a/nxhs-service/src/main/java/cc/yunxi/controller/DeviceController.java +++ b/nxhs-service/src/main/java/cc/yunxi/controller/DeviceController.java @@ -9,6 +9,7 @@ import cc.yunxi.domain.vo.device.*; import cc.yunxi.domain.vo.file.FileUploadRespVO; import cc.yunxi.service.*; import cc.yunxi.utils.CommandUtil; +import cc.yunxi.utils.CustomerMqttClient; import cc.yunxi.utils.RedisTool; import cc.yunxi.utils.UserContext; import cn.hutool.core.util.StrUtil; @@ -69,10 +70,12 @@ public class DeviceController { private RedisTool redisTool; @Resource private CommandUtil commandUtil; - @Resource private IFileService fileService; + @Resource + private CustomerMqttClient mqttClient; + @ApiOperation("小程序获取设备配置") @PostMapping("/getDeviceConfig") @@ -513,6 +516,7 @@ public class DeviceController { // 下发指令 String ip = status.getIp(); CommonResult _result = commandUtil.sendCommand(cmd, ip); + mqttClient.publish("/device/command/result", JSONUtil.toJsonStr(cmd), 1, false); // 记录指令下发事件 RecycleDeviceEvent event = new RecycleDeviceEvent(); event.setDeviceCode(deviceCode); diff --git a/nxhs-service/src/main/java/cc/yunxi/controller/WxMessageController.java b/nxhs-service/src/main/java/cc/yunxi/controller/WxMessageController.java index b1abeb6..26ac9b4 100644 --- a/nxhs-service/src/main/java/cc/yunxi/controller/WxMessageController.java +++ b/nxhs-service/src/main/java/cc/yunxi/controller/WxMessageController.java @@ -7,12 +7,14 @@ import cc.yunxi.domain.vo.socket.MessageTypeEnum; import cc.yunxi.domain.vo.socket.SocketMessage; import cc.yunxi.domain.vo.vxmessage.*; import cc.yunxi.service.IWsService; -import cc.yunxi.utils.*; +import cc.yunxi.utils.CustomerMqttClient; +import cc.yunxi.utils.UserContext; +import cc.yunxi.utils.VerifyUtil; +import cc.yunxi.utils.WeChatMessageUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; -import org.eclipse.paho.client.mqttv3.MqttMessage; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -30,8 +32,8 @@ public class WxMessageController { @Resource private VerifyUtil verifyUtil; -// @Resource -// private CustomerMqttClient client; + @Resource + private CustomerMqttClient client; /** * 预约端对接微信推送消息验证 @@ -162,6 +164,9 @@ public class WxMessageController { @PostMapping("/test") public CommonResult test() { + client.subscribe("testtopc/1",1); + client.publish("testtopc/1","{\"msg\": \"hello\"}"); + client.unsubscribe("testtopc/1"); return CommonResult.success("success"); } diff --git a/nxhs-service/src/main/java/cc/yunxi/utils/CustomerMqttClient.java b/nxhs-service/src/main/java/cc/yunxi/utils/CustomerMqttClient.java index 93bcbdc..f3ed6d8 100644 --- a/nxhs-service/src/main/java/cc/yunxi/utils/CustomerMqttClient.java +++ b/nxhs-service/src/main/java/cc/yunxi/utils/CustomerMqttClient.java @@ -3,9 +3,13 @@ package cc.yunxi.utils; import cc.yunxi.config.props.MqttProperties; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; -import org.eclipse.paho.client.mqttv3.*; -import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; - +import org.eclipse.paho.mqttv5.client.MqttClient; +import org.eclipse.paho.mqttv5.client.MqttConnectionOptions; +import org.eclipse.paho.mqttv5.client.MqttTopic; +import org.eclipse.paho.mqttv5.client.persist.MemoryPersistence; +import org.eclipse.paho.mqttv5.common.MqttException; +import org.eclipse.paho.mqttv5.common.MqttMessage; +import java.nio.charset.StandardCharsets; import java.util.Map; @Slf4j @@ -23,17 +27,18 @@ public class CustomerMqttClient { public void connect() throws MqttException { client = new MqttClient(properties.getHost(), properties.getClientId(), new MemoryPersistence()); - MqttConnectOptions options = new MqttConnectOptions(); - if (StrUtil.isNotEmpty(properties.getUserName())) { - options.setUserName(properties.getUserName()); + MqttConnectionOptions options = new MqttConnectionOptions(); + if (StrUtil.isNotEmpty(properties.getUsername())) { + options.setUserName(properties.getUsername()); } - if (StrUtil.isNotEmpty(properties.getPassWord())) { - options.setPassword(properties.getPassWord().toCharArray()); + if (StrUtil.isNotEmpty(properties.getPassword())) { + options.setPassword(properties.getPassword().getBytes(StandardCharsets.UTF_8)); } - options.setCleanSession(properties.getCleanSession()); + options.setCleanStart(properties.getCleanSession()); options.setKeepAliveInterval(properties.getKeepAlive()); options.setConnectionTimeout(properties.getTimeout()); options.setAutomaticReconnect(true); + options.setSessionExpiryInterval(0l);//会话过期时间 client.setCallback(new MyMqttCallback(client)); if (!client.isConnected()) { client.connect(options); diff --git a/nxhs-service/src/main/java/cc/yunxi/utils/HeartbeatTask.java b/nxhs-service/src/main/java/cc/yunxi/utils/HeartbeatTask.java deleted file mode 100644 index 537dbcd..0000000 --- a/nxhs-service/src/main/java/cc/yunxi/utils/HeartbeatTask.java +++ /dev/null @@ -1,12 +0,0 @@ -package cc.yunxi.utils; - -import org.eclipse.paho.client.mqttv3.MqttClient; - -public class HeartbeatTask implements Runnable { - private MqttClient mqttClient; - - @Override - public void run() { -// mqttClient.publish("heartbeat", "alive".getBytes()); - } -} diff --git a/nxhs-service/src/main/java/cc/yunxi/utils/MqttTool.java b/nxhs-service/src/main/java/cc/yunxi/utils/MqttTool.java index 3945684..64163b8 100644 --- a/nxhs-service/src/main/java/cc/yunxi/utils/MqttTool.java +++ b/nxhs-service/src/main/java/cc/yunxi/utils/MqttTool.java @@ -1,18 +1,15 @@ package cc.yunxi.utils; import lombok.extern.slf4j.Slf4j; -import org.eclipse.paho.client.mqttv3.MqttClient; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; +import org.eclipse.paho.mqttv5.client.MqttClient; +import org.eclipse.paho.mqttv5.common.MqttException; +import org.eclipse.paho.mqttv5.common.MqttMessage; //@Component @Slf4j public class MqttTool { -// @Resource + // @Resource private MqttClient client; public boolean publish(String topic, MqttMessage message) { diff --git a/nxhs-service/src/main/java/cc/yunxi/utils/MyMqttCallback.java b/nxhs-service/src/main/java/cc/yunxi/utils/MyMqttCallback.java index e4963e8..d01d785 100644 --- a/nxhs-service/src/main/java/cc/yunxi/utils/MyMqttCallback.java +++ b/nxhs-service/src/main/java/cc/yunxi/utils/MyMqttCallback.java @@ -1,79 +1,50 @@ package cc.yunxi.utils; import lombok.extern.slf4j.Slf4j; -import org.eclipse.paho.client.mqttv3.*; +import org.eclipse.paho.mqttv5.client.*; +import org.eclipse.paho.mqttv5.common.MqttException; +import org.eclipse.paho.mqttv5.common.MqttMessage; +import org.eclipse.paho.mqttv5.common.packet.MqttProperties; import java.nio.charset.StandardCharsets; @Slf4j -public class MyMqttCallback implements MqttCallbackExtended { +public class MyMqttCallback implements MqttCallback { private MqttClient mqttClient; + private TopicHandler topicHandler; + public MyMqttCallback(MqttClient mqttClient) { this.mqttClient = mqttClient; } - //链接断开 + + @Override + public void disconnected(MqttDisconnectResponse mqttDisconnectResponse) { + log.error("MQTT 断开连接,原因:{}", mqttDisconnectResponse.getReasonString()); + mqttDisconnectResponse.getException().printStackTrace(); + } + @Override - public void connectionLost(Throwable throwable) { - log.error("mqtt connectionLost 连接断开,5S之后尝试重连: {}", throwable.getMessage()); - throwable.printStackTrace(); - try { - mqttClient.reconnect(); - } catch (MqttException e) { - e.printStackTrace(); - throw new RuntimeException(e); - } -// AtomicLong reconnectTimes = new AtomicLong(1); -// while (true) { -// try { -// if (mqttClient.getClient().isConnected()) { -// //判断已经重新连接成功 需要重新订阅主题 可以在这个if里面订阅主题 或者 connectComplete(方法里面) 看你们自己选择 -// log.warn("mqtt 重新连接成功,重新开始初始化订阅主题..."); -// return; -// } -// reconnectTimes.incrementAndGet(); -// log.warn("mqtt 重连次数{}, 重新连接时间 {}", reconnectTimes, LocalDateTime.now()); -// mqttClient.connect(); -// } catch (MqttException e) { -// log.error("mqtt断连异常", e.getMessage()); -// e.printStackTrace(); -// } -// try { -// this.wait(5000); -// } catch (InterruptedException e) { -// throw new RuntimeException(e); -// } -// } + public void mqttErrorOccurred(MqttException e) { + log.error("MQTT 错误,错误信息:{}", e.getMessage()); + e.printStackTrace(); } - // 接受成功 + //接收到消息 @Override public void messageArrived(String topic, MqttMessage mqttMessage) { byte[] payload = mqttMessage.getPayload(); String message = new String(payload, StandardCharsets.UTF_8); log.info("接收到MQTT消息,主题:{},消息体:{}", topic, message); -// topicHandler.handleTopic(topic, mqttMessage); + topicHandler.handleTopic(topic, mqttMessage); } - //发送完成 @Override - public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { - log.info("==========deliveryComplete={}==========", iMqttDeliveryToken.isComplete()); - log.info("消息发送完成,消息ID:{}", iMqttDeliveryToken.getMessageId()); - try { - MqttMessage message = iMqttDeliveryToken.getMessage(); - if(null != message){ - byte[] payload = message.getPayload(); - String content = new String(payload, StandardCharsets.UTF_8); - log.info("消息发送完成,返回消息内容:{}", content); - } - } catch (MqttException e) { - log.error("获取消息内容失败,原因:{}", e.getMessage()); - e.printStackTrace(); - } - + public void deliveryComplete(IMqttToken iMqttToken) { + int messageId = iMqttToken.getMessageId(); + log.info("MQTT 消息发送完成,消息ID:{}", messageId); } //连接完成后 @@ -81,4 +52,9 @@ public class MyMqttCallback implements MqttCallbackExtended { public void connectComplete(boolean reconnect, String serverURI) { log.info("MQTT 连接成功,连接方式:{}", reconnect ? "重连" : "直连"); } + + @Override + public void authPacketArrived(int i, MqttProperties mqttProperties) { + log.info("MQTT 认证包到达,原因码:{},原因:{}", i, mqttProperties.getReasonString()); + } } diff --git a/nxhs-service/src/main/java/cc/yunxi/utils/TopicHandler.java b/nxhs-service/src/main/java/cc/yunxi/utils/TopicHandler.java index b0f5a53..e8be440 100644 --- a/nxhs-service/src/main/java/cc/yunxi/utils/TopicHandler.java +++ b/nxhs-service/src/main/java/cc/yunxi/utils/TopicHandler.java @@ -1,6 +1,6 @@ package cc.yunxi.utils; -import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.eclipse.paho.mqttv5.common.MqttMessage; import org.springframework.stereotype.Component; @Component diff --git a/nxhs-service/src/main/resources/application-dev.yml b/nxhs-service/src/main/resources/application-dev.yml index ab675c2..7e22117 100644 --- a/nxhs-service/src/main/resources/application-dev.yml +++ b/nxhs-service/src/main/resources/application-dev.yml @@ -28,4 +28,14 @@ nxhs: #测试环境为 develop 本地调试为 trial env_version: "trial" recycler: - env_version: "trial" \ No newline at end of file + env_version: "trial" +mqtt: + host: tcp://222.71.165.188:1883 + clientId: nxhs-service + username: nxhs-service + password: 123456 + cleanSession: false + timeout: 30 + qos: 1 + keepAlive: 30 + topics: {} \ No newline at end of file From 226108637f211b284fd74d678f6a0cdce7a92120 Mon Sep 17 00:00:00 2001 From: guochaojie Date: Wed, 26 Jun 2024 11:05:59 +0800 Subject: [PATCH 2/2] =?UTF-8?q?mqtt=20=E6=B6=88=E6=81=AF=E9=80=9A=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cc/yunxi/controller/DeviceController.java | 53 +++++++------------ .../yunxi/domain/vo/device/BucketStatus.java | 8 +-- .../yunxi/domain/vo/device/DeviceStatus.java | 3 +- .../cc/yunxi/service/impl/CommonService.java | 31 ++++++----- .../impl/RecycleBucketServiceImpl.java | 20 +++---- .../impl/RecycleDeviceServiceImpl.java | 5 +- .../main/java/cc/yunxi/utils/CommandUtil.java | 43 --------------- .../cc/yunxi/utils/CustomerMqttClient.java | 11 ++-- 8 files changed, 56 insertions(+), 118 deletions(-) delete mode 100644 nxhs-service/src/main/java/cc/yunxi/utils/CommandUtil.java diff --git a/nxhs-service/src/main/java/cc/yunxi/controller/DeviceController.java b/nxhs-service/src/main/java/cc/yunxi/controller/DeviceController.java index 481e3db..69e6d46 100644 --- a/nxhs-service/src/main/java/cc/yunxi/controller/DeviceController.java +++ b/nxhs-service/src/main/java/cc/yunxi/controller/DeviceController.java @@ -8,7 +8,6 @@ import cc.yunxi.domain.po.*; import cc.yunxi.domain.vo.device.*; import cc.yunxi.domain.vo.file.FileUploadRespVO; import cc.yunxi.service.*; -import cc.yunxi.utils.CommandUtil; import cc.yunxi.utils.CustomerMqttClient; import cc.yunxi.utils.RedisTool; import cc.yunxi.utils.UserContext; @@ -69,10 +68,7 @@ public class DeviceController { @Resource private RedisTool redisTool; @Resource - private CommandUtil commandUtil; - @Resource private IFileService fileService; - @Resource private CustomerMqttClient mqttClient; @@ -222,7 +218,6 @@ public class DeviceController { } private void fillQrCode(String qrCode, DeviceRespVO respVO) { - ArrayList posters = new ArrayList<>(); List files = JSONUtil.toList(qrCode, FileUploadRespVO.class); if (files.size() > 0) { FileUploadRespVO file = files.get(0); @@ -504,65 +499,53 @@ public class DeviceController { @ApiOperation("设备命令下发") @PostMapping("/command") public CommonResult command(@RequestBody CommandVO cmd) { + UserDTO user = UserContext.getUser(); String deviceCode = cmd.getDeviceCode(); Object value = redisTool.getValue(deviceCode); - if (null == value) { - return CommonResult.error(400, "设备不在线"); - } + if (null == value) return CommonResult.error(400, "设备不在线"); DeviceStatus status = JSONUtil.toBean(value.toString(), DeviceStatus.class); // 判断设备是否在线 - Boolean online = status.getOnline(); + boolean online = status.isOnline(); if (!online) return CommonResult.error(400, "设备不在线"); + boolean connected = mqttClient.isConnected(); + if (!connected) throw new BizIllegalException("与mqtt服务器连接中断,请稍后重试!"); // 下发指令 - String ip = status.getIp(); - CommonResult _result = commandUtil.sendCommand(cmd, ip); - mqttClient.publish("/device/command/result", JSONUtil.toJsonStr(cmd), 1, false); + mqttClient.publish(deviceCode + "/command", JSONUtil.toJsonStr(cmd)); // 记录指令下发事件 RecycleDeviceEvent event = new RecycleDeviceEvent(); event.setDeviceCode(deviceCode); - event.setBucketCode("");// - event.setDoorNum(0);// + event.setBucketCode("");//桶编码 + if (StrUtil.isNotEmpty(cmd.getData())) { + event.setBucketCode(cmd.getData());//桶编码 + } + event.setEventType(deviceCode); event.setEventDesc("设备命令下发"); event.setEventTime(new Date()); event.setIsLocal("0");//远程调用 - - if (_result.getCode() != 200) { - event.setEventResult("1"); - } else { - event.setEventResult("0"); - } - UserDTO user = UserContext.getUser(); event.setCreateUserId(user.getId()); event.setCreateTime(new Date()); event.setCompanyId(user.getCompanyId()); - event.setOrganizeJsonId(""); eventService.save(event); - return _result; + return CommonResult.success("指令下发成功"); } @ApiOperation("获取设备状态") @PostMapping("/getStatus") public CommonResult getStatus(@RequestBody DeviceVO deviceVO) { Object value = redisTool.getValue(deviceVO.getDeviceCode()); - if (value == null) { - return CommonResult.error(400, "获取失败,设备不在线!"); - } + if (value == null) return CommonResult.error(400, "获取失败,设备不在线!"); DeviceStatus status = JSONUtil.toBean(value.toString(), DeviceStatus.class); + if (status.isOnline()) return CommonResult.error(400, "获取失败,设备不在线!"); CommandVO command = new CommandVO(); command.setCmd(CMDEnum.status); command.setDeviceCode(deviceVO.getDeviceCode()); command.setOptTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); command.setData(""); command.setRemark(""); - CommonResult commonResult = commandUtil.sendCommand(command, status.getIp()); - Object data = commonResult.getData(); - DeviceStatus status1 = JSONUtil.toBean(data.toString(), DeviceStatus.class); - deviceService.updateDevice(status1); - status1.getBucketList().forEach(bucket -> { - bucketService.updateStatus(bucket); - }); + if (!mqttClient.isConnected()) throw new BizIllegalException("与mqtt服务器连接中断,请稍后重试!"); + mqttClient.publish(deviceVO.getDeviceCode() + "/command", JSONUtil.toJsonStr(command)); return CommonResult.success("获取成功!"); } @@ -613,7 +596,7 @@ public class DeviceController { } } } - redisTool.setValue(deviceCode, JSONUtil.toJsonStr(des), 1000 * 60 * 60l); + redisTool.setValue(deviceCode, JSONUtil.toJsonStr(des), 1000 * 60 * 60L); CommonResult success = CommonResult.success(deviceCode); success.setMsg("success"); return success; @@ -636,7 +619,7 @@ public class DeviceController { } } } - redisTool.setValue(weight.getBucketCode(), JSONUtil.toJsonStr(weight), 1000 * 60l);//一分钟过期 + redisTool.setValue(weight.getBucketCode(), JSONUtil.toJsonStr(weight), 1000 * 60L);//一分钟过期 return CommonResult.success("success"); } diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/device/BucketStatus.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/device/BucketStatus.java index 62e5914..b8bbc98 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/vo/device/BucketStatus.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/device/BucketStatus.java @@ -18,13 +18,13 @@ public class BucketStatus { @NotNull(message = "门号不能为空") private Integer doorNum; @ApiModelProperty(value = "投递门状态",required = true) - private Boolean deliveryDoor; + private boolean deliveryDoor; @ApiModelProperty(value = "清运门状态",required = true) - private Boolean cleanDoor; + private boolean cleanDoor; @ApiModelProperty(value = "烟雾报警", required = true, example = "true") - private Boolean smogAlarm; + private boolean smogAlarm; @ApiModelProperty(value = "是否满",required = true) - private Boolean isFull; + private boolean isFull; @ApiModelProperty(value = "重量",required = true) private BigDecimal weight; } diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/device/DeviceStatus.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/device/DeviceStatus.java index e6ceaa1..0fee19c 100644 --- a/nxhs-service/src/main/java/cc/yunxi/domain/vo/device/DeviceStatus.java +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/device/DeviceStatus.java @@ -5,7 +5,6 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; import java.util.List; @Data @@ -15,7 +14,7 @@ public class DeviceStatus { @NotBlank(message = "设备编码不能为空") private String deviceCode; @ApiModelProperty(value = "是否在线", hidden = true) - private Boolean online; + private boolean online; @ApiModelProperty(value = "设备ip地址", hidden = true) private String ip; @ApiModelProperty(value = "设备端口", hidden = true) diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/CommonService.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/CommonService.java index 613d685..29f7448 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/impl/CommonService.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/CommonService.java @@ -1,24 +1,18 @@ package cc.yunxi.service.impl; -import cc.yunxi.common.domain.CommonResult; import cc.yunxi.common.exception.BizIllegalException; import cc.yunxi.common.exception.BusinessLogicException; -import cc.yunxi.common.exception.ForbiddenException; import cc.yunxi.config.props.WxHsyProperties; import cc.yunxi.config.props.WxShProperties; import cc.yunxi.domain.dto.UserDTO; import cc.yunxi.domain.dto.WxLoginDTO; import cc.yunxi.domain.dto.ZSGLoginDTO; import cc.yunxi.domain.po.Client; -import cc.yunxi.domain.po.Manager; import cc.yunxi.domain.po.Recycler; -import cc.yunxi.domain.query.RecyclerQuery; import cc.yunxi.domain.vo.device.CMDEnum; import cc.yunxi.domain.vo.device.CommandVO; import cc.yunxi.domain.vo.device.LoginRespVO; import cc.yunxi.enums.UserTypeEnum; -import cc.yunxi.mapper.ManagerMapper; -import cc.yunxi.mapper.ProductMapper; import cc.yunxi.service.IClientService; import cc.yunxi.service.ICommonService; import cc.yunxi.service.IManagerService; @@ -30,18 +24,13 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import io.swagger.annotations.ApiModelProperty; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; -import java.time.LocalDateTime; import java.util.Date; -import java.util.List; /** * 统一服务类 @@ -71,7 +60,7 @@ public class CommonService implements ICommonService { private WxShProperties wxShProperties; @Resource - private CommandUtil commandUtil; + private CustomerMqttClient mqttClient; @Resource private JwtTool jwtTool; @@ -179,8 +168,13 @@ public class CommonService implements ICommonService { command.setData(data); command.setOptTime(DateUtil.now()); command.setRemark("登录成功"); - CommonResult commonResult = commandUtil.sendCommand(command); - log.info("设备登录结果 回收员 ===> code:{},msg:{}", commonResult.getCode(), commonResult.getMsg()); + boolean connected = mqttClient.isConnected(); + if (connected) { + mqttClient.publish(wxLoginDTO.getDevCode() + "command", JSONUtil.toJsonStr(command)); + log.info("扫描登录 回收员 ===> 通知设备 code:{}", wxLoginDTO.getDevCode()); + } else { + log.error("扫描登录失败 回收员 ===> mqtt未连接 code:{}", wxLoginDTO.getDevCode()); + } } return userDTO; } @@ -215,8 +209,13 @@ public class CommonService implements ICommonService { command.setData(data); command.setOptTime(DateUtil.now()); command.setRemark("登录成功"); - CommonResult commonResult = commandUtil.sendCommand(command); - log.info("设备登录结果 散户 ===> code:{},msg:{}", commonResult.getCode(), commonResult.getMsg()); + boolean connected = mqttClient.isConnected(); + if (connected) { + mqttClient.publish(wxLoginDTO.getDevCode() + "command", JSONUtil.toJsonStr(command)); + log.info("扫描登录 散户 ===> 通知设备 code:{}", wxLoginDTO.getDevCode()); + } else { + log.error("扫描登录失败 散户 ===> mqtt未连接 code:{}", wxLoginDTO.getDevCode()); + } } return userDTO; diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleBucketServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleBucketServiceImpl.java index f33057a..813f5a2 100644 --- a/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleBucketServiceImpl.java +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/RecycleBucketServiceImpl.java @@ -3,7 +3,6 @@ package cc.yunxi.service.impl; import cc.yunxi.domain.po.RecycleBucket; import cc.yunxi.domain.vo.device.BucketStatus; import cc.yunxi.mapper.RecycleBucketMapper; -import cc.yunxi.mapper.RecycleDeviceMapper; import cc.yunxi.service.IRecycleBucketService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -38,10 +37,10 @@ public class RecycleBucketServiceImpl extends ServiceImpl wrapper = new UpdateWrapper<>(); wrapper.lambda() .set(RecycleBucket::getCurrentWeight, status.getWeight()) - .set(RecycleBucket::getDeliveryDoorStatus, status.getDeliveryDoor() ? 1 : 0) - .set(RecycleBucket::getCleanDoorStatus, status.getCleanDoor() ? 1 : 0) - .set(RecycleBucket::getFullStatus, status.getIsFull() ? 1 : 0) - .set(RecycleBucket::getSmogStatus, status.getSmogAlarm() ? 1 : 0) + .set(RecycleBucket::getDeliveryDoorStatus, status.isDeliveryDoor() ? 1 : 0) + .set(RecycleBucket::getCleanDoorStatus, status.isCleanDoor() ? 1 : 0) + .set(RecycleBucket::getFullStatus, status.isFull() ? 1 : 0) + .set(RecycleBucket::getSmogStatus, status.isSmogAlarm() ? 1 : 0) .eq(RecycleBucket::getBucketCode, status.getBucketCode()); boolean update = this.update(wrapper); return update ? 1 : 0; @@ -52,19 +51,16 @@ public class RecycleBucketServiceImpl extends ServiceImpl wrapper = new UpdateWrapper<>(); wrapper.lambda() .set(RecycleDevice::getIpAddress, status.getIp()) - .set(RecycleDevice::getStatus, status.getOnline() ? 1 : 0) + .set(RecycleDevice::getStatus, status.isOnline() ? 1 : 0) .eq(RecycleDevice::getDeviceCode, status.getDeviceCode()); return update(wrapper) ? 1 : 0; } @@ -45,7 +45,6 @@ public class RecycleDeviceServiceImpl extends ServiceImpl