Forráskód Böngészése

设备版本自动升级 改版

lijin 1 éve
szülő
commit
9c78f539ba

+ 3 - 0
device-api-service/src/main/java/com/xy/entity/DeviceVersionUp.java

@@ -31,6 +31,9 @@ public class DeviceVersionUp implements Serializable {
     @ApiModelProperty(value = "设备id")
     private Long deviceId;
 
+    @ApiModelProperty(value = "appKey")
+    private String appKey;
+
     @ApiModelProperty(value = "版本号")
     private String deviceVersion;
 

+ 21 - 25
device-api-service/src/main/java/com/xy/service/DeviceStatusServiceImpl.java

@@ -12,7 +12,10 @@ import com.xy.dto.CommandMqtt;
 import com.xy.dto.DeviceEventMsgDto;
 import com.xy.dto.DeviceStatusDto;
 import com.xy.dto.DeviceTempRecordsDto;
-import com.xy.entity.*;
+import com.xy.entity.DeviceConfig;
+import com.xy.entity.DeviceStatus;
+import com.xy.entity.DeviceSysinfo;
+import com.xy.entity.SysDictRedis;
 import com.xy.mapper.DeviceStatusMapper;
 import com.xy.mapper.entity.DeviceStatusCount;
 import com.xy.utils.*;
@@ -58,8 +61,6 @@ public class DeviceStatusServiceImpl extends ServiceImpl<DeviceStatusMapper, Dev
 
     private DeviceSysinfoServiceImpl deviceSysinfoService;
 
-    private DeviceVersionUpServiceImpl deviceVersionUpService;
-
     private RedisService<DeviceVersionUpServiceImpl.UpInfo> upInfoRedisService;
 
     private MqttServiceImpl mqttService;
@@ -78,8 +79,8 @@ public class DeviceStatusServiceImpl extends ServiceImpl<DeviceStatusMapper, Dev
                     if (!Emptys.check(up.getTempValue())) {
                         return;
                     }
-                    DeviceSysinfo deviceSysinfo = deviceSysinfoService.getById(up.getDeviceId());
                     //添加设备温度日志
+                    DeviceSysinfo deviceSysinfo = deviceSysinfoService.getById(up.getDeviceId());
                     if (!deviceSysinfo.getIsHaveTemp()) {
                         return;
                     }
@@ -123,37 +124,32 @@ public class DeviceStatusServiceImpl extends ServiceImpl<DeviceStatusMapper, Dev
                 })
                 .execute(() -> {
                     //检查是否可升级
-                    if (!Emptys.check(up.getIsUpVersion()) || !up.getIsUpVersion()) {
+                    String appKey = up.getAppKey();
+                    String version = up.getVersion();
+                    if (!Emptys.check(appKey) || !Emptys.check(version)) {
                         return;
                     }
-                    DeviceVersionUpServiceImpl.UpInfo upInfo = upInfoRedisService.get(DeviceVersionUpServiceImpl.upInfoKey);
+                    String key = String.format(DeviceVersionUpServiceImpl.upInfoKey, appKey);
+                    DeviceVersionUpServiceImpl.UpInfo upInfo = upInfoRedisService.get(key);
                     if (upInfo == null || !upInfo.getEnable()) {
                         return;
                     }
-                    LambdaQueryWrapper<DeviceVersionUp> lambdaQueryWrapper = new LambdaQueryWrapper<DeviceVersionUp>()
-                            .eq(DeviceVersionUp::getDeviceId, up.getDeviceId())
-                            .ge(DeviceVersionUp::getDeviceVersion, upInfo.getVersion())
-                            .and(deviceVersionUpLambdaQueryWrapper -> deviceVersionUpLambdaQueryWrapper
-                                    .in(DeviceVersionUp::getStatus, Arrays.asList(2, 4, 5))
-                                    .or()
-                                    .eq(DeviceVersionUp::getProgress, 100)
-                            );
-                    long count = deviceVersionUpService.count(lambdaQueryWrapper);
-                    if (count > 0) {
+                    //下发升级指令
+                    int a1 = Integer.parseInt(version.substring(0, version.lastIndexOf(".")).replaceAll("\\.", ""));
+                    int a2 = Integer.parseInt(version.substring(version.lastIndexOf(".") + 1));
+                    int b1 = Integer.parseInt(upInfo.getVersion().substring(0, upInfo.getVersion().lastIndexOf(".")).replaceAll("\\.", ""));
+                    int b2 = Integer.parseInt(upInfo.getVersion().substring(upInfo.getVersion().lastIndexOf(".") + 1));
+                    boolean isUp = (a1 < b1) || (a1 == b1 && a2 < b2);
+                    if (!isUp) {
                         return;
                     }
-                    //下发升级指令
                     String templetStr = SysDictUtils.getValue(EnumMqttCmdTempletTask.Code.CODE.getCode(), EnumMqttCmdTempletTask.APPUPDATE.getCode(), String.class);
-                    String appId = LambdaUtils.getProperty(DeviceVersionUpServiceImpl.UpInfo::getAppId);
-                    String appKey = LambdaUtils.getProperty(DeviceVersionUpServiceImpl.UpInfo::getAppKey);
-                    String version = LambdaUtils.getProperty(DeviceVersionUpServiceImpl.UpInfo::getVersion);
-                    String src = LambdaUtils.getProperty(DeviceVersionUpServiceImpl.UpInfo::getSrc);
                     JSONObject templet = JSONUtil.parseObj(templetStr);
                     JSONObject data = templet.getJSONObject("data")
-                            .set(appId, upInfo.getAppId())
-                            .set(appKey, upInfo.getAppKey())
-                            .set(version, upInfo.getVersion())
-                            .set(src, upInfo.getSrc());
+                            .set(LambdaUtils.getProperty(DeviceVersionUpServiceImpl.UpInfo::getAppId), upInfo.getAppId())
+                            .set(LambdaUtils.getProperty(DeviceVersionUpServiceImpl.UpInfo::getAppKey), upInfo.getAppKey())
+                            .set(LambdaUtils.getProperty(DeviceVersionUpServiceImpl.UpInfo::getVersion), upInfo.getVersion())
+                            .set(LambdaUtils.getProperty(DeviceVersionUpServiceImpl.UpInfo::getSrc), upInfo.getSrc());
                     templet.set("data", data);
                     CommandMqtt commandMqtt = new CommandMqtt()
                             .setDeviceId(up.getDeviceId())

+ 3 - 10
device-api-service/src/main/java/com/xy/service/DeviceSysinfoServiceImpl.java

@@ -1,8 +1,8 @@
 package com.xy.service;
 
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.xy.dto.DeviceStatusDto;
 import com.xy.dto.DeviceSysinfoDto;
 import com.xy.entity.DeviceSysinfo;
 import com.xy.mapper.DeviceSysinfoMapper;
@@ -13,7 +13,6 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -33,11 +32,9 @@ import static com.xy.utils.Beans.copy;
 @Slf4j
 @Service
 @Api(tags = "设备-系统信息")
-@AllArgsConstructor(onConstructor_ = @Lazy)
+@AllArgsConstructor
 public class DeviceSysinfoServiceImpl extends ServiceImpl<DeviceSysinfoMapper, DeviceSysinfo> implements DeviceSysinfoService {
 
-    private DeviceStatusServiceImpl deviceStatusService;
-
     @PostMapping("obj")
     @ApiOperation("对象查询")
     public R<DeviceSysinfoDto.Vo> get(@RequestBody DeviceSysinfoDto.Vo vo) {
@@ -63,12 +60,8 @@ public class DeviceSysinfoServiceImpl extends ServiceImpl<DeviceSysinfoMapper, D
     @PostMapping("up")
     @ApiOperation("上报信息")
     public R up(@RequestBody DeviceSysinfoDto.Up up) {
-        log.info("设备系统信息上报:{}", up.toString());
+        log.info("设备系统信息上报:{}", JSONUtil.toJsonStr(up));
         updateById(copy(DeviceSysinfo.class, up));
-        DeviceStatusDto.Up upStatus = new DeviceStatusDto.Up()
-                .setDeviceId(up.getDeviceId());
-        upStatus.setIsUpVersion(true);
-        deviceStatusService.up(upStatus);
         return R.ok();
     }
 }

+ 22 - 7
device-api-service/src/main/java/com/xy/service/DeviceVersionUpServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.yitter.idgen.YitIdHelper;
+import com.xy.collections.map.JHashMap;
 import com.xy.dto.DeviceVersionUpDto;
 import com.xy.entity.DeviceVersionUp;
 import com.xy.mapper.DeviceVersionUpMapper;
@@ -21,6 +22,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 
 import javax.validation.constraints.NotBlank;
 import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
 
 import static com.xy.utils.PlusBeans.toIPage;
 import static com.xy.utils.PlusBeans.toPageBean;
@@ -41,7 +44,7 @@ public class DeviceVersionUpServiceImpl extends ServiceImpl<DeviceVersionUpMappe
 
     private final RedisService<UpInfo> redisService;
 
-    public static String upInfoKey = "device:version:up";
+    public static String upInfoKey = "device:version:up:%s";
 
     @PostMapping("page")
     @ApiOperation("分页查询")
@@ -82,21 +85,24 @@ public class DeviceVersionUpServiceImpl extends ServiceImpl<DeviceVersionUpMappe
     @PostMapping("saveUpdateUpInfoTask")
     @ApiOperation("添加修改版本升级任务")
     public R saveUpdateUpInfoTask(@RequestBody @Validated UpInfo upInfo) {
-        redisService.set(upInfoKey, upInfo);
+        redisService.set(String.format(upInfoKey, upInfo.getAppKey()), upInfo);
         return R.ok();
     }
 
     @PostMapping("queryUpInfoTask")
     @ApiOperation("查询版本升级任务")
-    public R<UpInfo> queryUpInfoTask() {
-        UpInfo upInfo = redisService.get(upInfoKey);
-        return R.ok(upInfo);
+    public R<List<UpInfo>> queryUpInfoTask() {
+        Map<String, UpInfo> like = redisService.like("device:version:up");
+        if (!Emptys.check(like)) {
+            return R.ok();
+        }
+        return R.ok(new JHashMap<>(like).getValues());
     }
 
     @PostMapping("delUpInfoTask")
     @ApiOperation("清除版本升级任务")
-    public R delUpInfoTask() {
-        redisService.remove(upInfoKey);
+    public R delUpInfoTask(@RequestBody @Validated UpInfoAppKey upInfoAppKey) {
+        redisService.remove(String.format(upInfoKey, upInfoAppKey.getAppKey()));
         return R.ok();
     }
 
@@ -123,4 +129,13 @@ public class DeviceVersionUpServiceImpl extends ServiceImpl<DeviceVersionUpMappe
         @ApiModelProperty(value = "是否开启 默认=true")
         private Boolean enable = true;
     }
+
+    @Data
+    @Accessors(chain = true)
+    public static class UpInfoAppKey {
+
+        @NotBlank(message = "appKey不能为空")
+        @ApiModelProperty(value = "appKey", required = true)
+        private String appKey;
+    }
 }

+ 1 - 0
device-api-service/src/main/java/com/xy/service/factory/cmd/impl/TaskCmdServiceImpl.java

@@ -48,6 +48,7 @@ public class TaskCmdServiceImpl implements CmdService {
                             .setAccumSendNum(1);
                     saveOrUpdate.setCmdValue(mqttDto.getPater().getData().toString());
                     saveOrUpdate.setStatus(value);
+                    saveOrUpdate.setAppKey(data.getStr("appKey"));
                     deviceVersionUpService.saveOrUpdate(saveOrUpdate);
                 }
             }

+ 6 - 2
device-api/src/main/java/com/xy/dto/DeviceStatusDto.java

@@ -22,6 +22,12 @@ public class DeviceStatusDto {
         @NotNull(message = "deviceId不能为空")
         @ApiModelProperty(value = "设备ID", required = true)
         private Long deviceId;
+
+        @ApiModelProperty("appKey")
+        private String appKey;
+
+        @ApiModelProperty("机器当前版本")
+        private String version;
     }
 
     @Data
@@ -187,8 +193,6 @@ public class DeviceStatusDto {
         @ApiModelProperty("缺货状态")
         private Integer stockStatus;
 
-        @ApiModelProperty("版本询问")
-        private Boolean isUpVersion;
     }
 
 }

+ 3 - 0
device-api/src/main/java/com/xy/dto/DeviceVersionUpDto.java

@@ -81,6 +81,9 @@ public class DeviceVersionUpDto {
         @ApiModelProperty(value = "设备id")
         private Long deviceId;
 
+        @ApiModelProperty(value = "appKey")
+        private String appKey;
+
         @ApiModelProperty(value = "版本号")
         private String deviceVersion;