Browse Source

mqtt指令发布

李进 2 years ago
parent
commit
b5c97fa78a

+ 4 - 4
device-api-service/src/main/java/com/xy/entity/MqttCommand.java

@@ -23,14 +23,14 @@ public class MqttCommand {
     private Boolean debug;
 
     /**
-     * 指令大类
+     * 业务类型
      */
-    private String type1;
+    private String cmdType;
 
     /**
-     * 指令小类
+     * 行为类型
      */
-    private String type2;
+    private String actionType;
 
     /**
      * 指令状态 1=已发送 2=发送失败 3=已执行 4=执行失败,5=执行超时 6=已完成

+ 42 - 7
device-api-service/src/main/java/com/xy/service/MqttServiceImpl.java

@@ -2,6 +2,7 @@ package com.xy.service;
 
 import cn.easyes.core.biz.EsPageInfo;
 import cn.easyes.core.conditions.LambdaEsQueryWrapper;
+import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.github.yitter.idgen.YitIdHelper;
@@ -10,13 +11,13 @@ import com.xy.collections.map.JConcurrentHashMap;
 import com.xy.collections.map.JMap;
 import com.xy.config.ThreadPoolConfig;
 import com.xy.dto.BackMqttDto;
+import com.xy.dto.CommandMqtt;
 import com.xy.dto.MqttDto;
 import com.xy.dto.PaterDto;
 import com.xy.entity.MqttCommand;
 import com.xy.mapper.MqttCommandMapper;
 import com.xy.producer.MqttProducer;
 import com.xy.utils.*;
-import com.xy.utils.consts.CommConsts;
 import com.xy.utils.enums.MqttCommandStatusEnum;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -27,6 +28,7 @@ import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -42,10 +44,7 @@ public class MqttServiceImpl implements MqttService {
 
     private MqttCommandMapper mqttCommandMapper;
 
-    @Timer
-    @Override
-    @ApiOperation("指令发布")
-    public Map<String, Boolean> sendMqtt(List<MqttDto> mqttDtos) {
+    private Map<String, Boolean> sendMqtt(List<MqttDto> mqttDtos) {
         String time = DataTime.getSring();
         JMap<String, Boolean> map = new JConcurrentHashMap<>(mqttDtos.size());
         ThreadPoolUtils.Execute execute = ThreadPoolUtils.excPoll(ThreadPoolConfig.SEND_MQTT_POLL, mqttDtos.size());
@@ -54,7 +53,8 @@ public class MqttServiceImpl implements MqttService {
             PaterDto pater = mqttDto.getPater()
                     .setSn(String.valueOf(YitIdHelper.nextId()))
                     .setTime(time)
-                    .setDeviceId(mqttDto.getDeviceId());
+                    .setDeviceId(mqttDto.getDeviceId())
+                    .setDebug(mqttDto.getDebug());
             //延迟发布处理
             String delayTime = mqttDto.getDelayTime();
             String topic = mqttDto.getDeviceId().toString(); //+ CommConsts.DEVICE_MQTT_TOPIC_SUFFIX;
@@ -84,9 +84,44 @@ public class MqttServiceImpl implements MqttService {
         return map;
     }
 
+    @Timer
+    @Override
+    @ApiOperation("发送指令")
+    public R<Map<String, Boolean>> senCommand(List<CommandMqtt> commandMqtts) {
+        List<MqttDto> mqttDtos = new ArrayList<>();
+        for (CommandMqtt commandMqtt : commandMqtts) {
+            JSONObject templetObj = JSONUtil.parseObj(commandMqtt.getTemplet());
+            String debug = templetObj.getStr(LambdaUtils.getProperty(MqttDto::getDebug));
+            String level = templetObj.getStr(LambdaUtils.getProperty(MqttDto::getLevel));
+            String delayTime = templetObj.getStr(LambdaUtils.getProperty(MqttDto::getDelayTime));
+            String timeout = templetObj.getStr(LambdaUtils.getProperty(MqttDto::getTimeout));
+            String wkSn = templetObj.getStr(LambdaUtils.getProperty(PaterDto::getWkSn));
+            String actionType = templetObj.getStr(LambdaUtils.getProperty(PaterDto::getActionType));
+            String cmdType = templetObj.getStr(LambdaUtils.getProperty(PaterDto::getCmdType));
+            String ack = templetObj.getStr(LambdaUtils.getProperty(PaterDto::getAck));
+            JSONArray data = templetObj.getJSONArray(LambdaUtils.getProperty(PaterDto::getData));
+            PaterDto paterDto = new PaterDto()
+                    .setActionType(actionType)
+                    .setCmdType(cmdType)
+                    .setAck(Emptys.check(ack) && !ack.equals("$ack$") ? Boolean.valueOf(ack) : Emptys.check(ack) && ack.equals("$ack$") ? true : true)
+                    .setWkSn(!Emptys.check(wkSn) ? String.valueOf(YitIdHelper.nextId()) : "$wkSn$".equals(wkSn) ? String.valueOf(YitIdHelper.nextId()) : wkSn)
+                    .setData(data);
+            MqttDto mqttDto = new MqttDto()
+                    .setDeviceId(commandMqtt.getDeviceId())
+                    .setDebug(Emptys.check(debug) && !debug.equals("$debug$") ? Boolean.valueOf(debug) : Emptys.check(debug) && debug.equals("$debug$") ? false : false)
+                    .setLevel(Emptys.check(level) && !level.equals("$level$") ? Integer.valueOf(level) : Emptys.check(level) && level.equals("$level$") ? 1 : 1)
+                    .setDelayTime(Emptys.check(delayTime) && !delayTime.equals("$delayTime$") ? delayTime : Emptys.check(delayTime) && delayTime.equals("$delayTime$") ? null : null)
+                    .setTimeout(Emptys.check(timeout) && !timeout.equals("$timeout$") ? Integer.valueOf(timeout) : Emptys.check(timeout) && timeout.equals("$timeout$") ? 60 : 60)
+                    .setPater(paterDto);
+            mqttDtos.add(mqttDto);
+        }
+        Map<String, Boolean> map = sendMqtt(mqttDtos);
+        return R.ok(map);
+    }
+
     @Override
     @ApiOperation("指令结果回执")
-    public R mqttBack(BackMqttDto backMqttDto) {
+    public R commandBack(BackMqttDto backMqttDto) {
         MqttCommand mqttCommand = mqttCommandMapper.selectById(backMqttDto.getSn());
         if (!Emptys.check(mqttCommand)) {
             return R.fail("数据不存在");

+ 16 - 0
device-api/src/main/java/com/xy/dto/CommandMqtt.java

@@ -0,0 +1,16 @@
+package com.xy.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+public class CommandMqtt {
+
+    @ApiModelProperty(value = "设备id", required = true)
+    private Long deviceId;
+
+    @ApiModelProperty(value = "模板", required = true)
+    private String templet;
+}

+ 8 - 11
device-api/src/main/java/com/xy/dto/MqttDto.java

@@ -2,7 +2,6 @@ package com.xy.dto;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.xy.utils.PageBean;
-import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -12,27 +11,25 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 
 @Data
-@ApiModel("指令交互类")
 @Accessors(chain = true)
 public class MqttDto {
 
-    @NotBlank(message = "deviceId不能为空")
-    @ApiModelProperty(value = "设备id", required = true)
+    @ApiModelProperty(value = "设备id")
     private Long deviceId;
 
-    @ApiModelProperty("是否调试模式 默认=false")
-    private Boolean debug = false;
+    @ApiModelProperty("是否调试模式")
+    private Boolean debug;
 
-    @ApiModelProperty("消息级别qs 默认=1")
-    private Integer level = 1;
+    @ApiModelProperty("消息级别qs")
+    private Integer level;
 
     @ApiModelProperty("消息消费时间(延迟消费) yyyy-MM-dd HH:mm:ss")
     private String delayTime;
 
-    @ApiModelProperty("指令有效期,单位:s 默认=60")
-    private Integer timeout = 60;
+    @ApiModelProperty("指令有效期,单位:s")
+    private Integer timeout;
 
-    @ApiModelProperty(value = "指令对象", required = true)
+    @ApiModelProperty(value = "指令对象")
     private PaterDto pater;
 
     @Data

+ 16 - 12
device-api/src/main/java/com/xy/dto/PaterDto.java

@@ -1,5 +1,6 @@
 package com.xy.dto;
 
+import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -9,31 +10,34 @@ import lombok.experimental.Accessors;
 @Accessors(chain = true)
 public class PaterDto {
 
-    @ApiModelProperty(value = "sn编号", hidden = true)
+    @ApiModelProperty(value = "sn编号")
     private String sn;
 
-    @ApiModelProperty(value = "业务系统sn编号", required = true)
+    @ApiModelProperty(value = "业务系统sn编号")
     private String wkSn;
 
-    @ApiModelProperty(value = "设备id", hidden = true)
+    @ApiModelProperty(value = "设备id")
     private Long deviceId;
 
-    @ApiModelProperty(value = "大类", required = true)
-    private String type1;
+    @ApiModelProperty(value = "行为类型")
+    private String actionType;
 
-    @ApiModelProperty(value = "小类", required = true)
-    private String type2;
+    @ApiModelProperty(value = "业务类型")
+    private String cmdType;
 
-    @ApiModelProperty("是否应答 默认=true")
-    private Boolean ack = true;
+    @ApiModelProperty("是否应答")
+    private Boolean ack;
 
-    @ApiModelProperty(value = "指令发送时间", hidden = true)
+    @ApiModelProperty("是否调试模式")
+    private Boolean debug;
+
+    @ApiModelProperty(value = "指令发送时间")
     private String time;
 
-    @ApiModelProperty(value = "指令有效期,单位:s", hidden = true)
+    @ApiModelProperty(value = "指令有效期,单位:s")
     private Integer timeout;
 
     @ApiModelProperty("业务方json数据")
-    private JSONObject data;
+    private JSONArray data;
 
 }

+ 8 - 8
device-api/src/main/java/com/xy/service/MqttService.java

@@ -2,7 +2,7 @@ package com.xy.service;
 
 import com.xy.annotate.RestMappingController;
 import com.xy.dto.BackMqttDto;
-import com.xy.dto.MqttDto;
+import com.xy.dto.CommandMqtt;
 import com.xy.utils.R;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -18,13 +18,13 @@ import java.util.Map;
 public interface MqttService {
 
     /**
-     * 指令发布
+     * 发送指令
      *
-     * @param mqttDtos
-     * @return k=wkSn v=布尔结果
+     * @param commandMqtts
+     * @return
      */
-    @PostMapping("sendMqtt")
-    Map<String, Boolean> sendMqtt(@RequestBody List<MqttDto> mqttDtos);
+    @PostMapping("senCommand")
+    R<Map<String, Boolean>> senCommand(@RequestBody List<CommandMqtt> commandMqtts);
 
     /**
      * 指令结果回执
@@ -32,6 +32,6 @@ public interface MqttService {
      * @param backMqttDto
      * @return
      */
-    @PostMapping("mqttBack")
-    R mqttBack(@Validated @RequestBody BackMqttDto backMqttDto);
+    @PostMapping("commandBack")
+    R commandBack(@RequestBody @Validated BackMqttDto backMqttDto);
 }