Ver Fonte

fixed固件升级 add固件升级任务部署

18339543638 há 4 anos atrás
pai
commit
609ba99a7d

+ 0 - 9
jetlinks-components/notify-component/notify-webhook/src/main/java/org/jetlinks/community/notify/webhook/WebHookNotifyProvider.java

@@ -48,15 +48,6 @@ public class WebHookNotifyProvider implements NotifierProvider, TemplateProvider
             new StringType()
                 .expand(ConfigMetadataConstants.required.value(true)));
 
-    public static void main(String[] args) {
-        HashMap<String, String> map = new HashMap<>();
-        map.put("url","http://www.baidu.com");
-        map.put("method","get");
-        map.put("connectionTimeout","10");
-        map.put("readTimeout","10");
-        System.out.println(JSONUtil.parse(map));
-    }
-
 //    @Override
 //    public ConfigMetadata getNotifierConfigMetadata() {
 //        return notifierConfig;

+ 18 - 1
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/entity/DeviceFirmwareTaskEntity.java

@@ -12,6 +12,7 @@ import org.hswebframework.web.api.crud.entity.RecordCreationEntity;
 import org.hswebframework.web.crud.generator.Generators;
 import org.hswebframework.web.dict.Dict;
 import org.hswebframework.web.validator.CreateGroup;
+import org.jetlinks.community.device.enums.TaskDeployMode;
 import org.jetlinks.community.device.enums.TaskMode;
 
 import javax.persistence.Column;
@@ -21,7 +22,8 @@ import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Pattern;
 import javax.validation.constraints.Size;
-
+import java.sql.JDBCType;
+import java.util.*;
 /**
  * @author lifang
  * @version 1.0.0
@@ -71,6 +73,21 @@ public class DeviceFirmwareTaskEntity extends GenericEntity<String> implements R
     )
     private TaskMode mode;
 
+    @Column(name = "deploy_mode",length = 16)
+    @EnumCodec
+    @ColumnType(javaType = String.class)
+    @Schema(
+        description = "部署方式"
+        ,accessMode = Schema.AccessMode.READ_WRITE
+    )
+    private TaskDeployMode deployMode;
+
+
+    @Column(name = "deploy_ids")
+    @ColumnType(jdbcType = JDBCType.CLOB,javaType = List.class)
+    @Schema(description = "部署设备id")
+    private List<String> deployIds;
+
     @Comment("超时时间")
     @Column(name = "timeout_seconds", length = 255)
     @NotBlank(message = "超时时间不能为空", groups = CreateGroup.class)

+ 27 - 0
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/enums/TaskDeployMode.java

@@ -0,0 +1,27 @@
+package org.jetlinks.community.device.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.hswebframework.web.dict.Dict;
+import org.hswebframework.web.dict.EnumDict;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName TaskDeployMode.java
+ * @Description TODO
+ * @createTime 2021年09月17日 08:40:00
+ */
+@AllArgsConstructor
+@Getter
+@Dict("firmware-task-deploy-type")
+public enum  TaskDeployMode implements EnumDict<String> {
+    all("全部设备"),
+    special("指定设备");
+
+    private String text;
+    @Override
+    public String getValue() {
+        return name();
+    }
+}

+ 52 - 0
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/LocalDeviceFirmwareTaskService.java

@@ -1,9 +1,15 @@
 package org.jetlinks.community.device.service;
 
+import cn.hutool.core.collection.CollectionUtil;
 import org.hswebframework.web.crud.service.GenericReactiveCrudService;
 import org.jetlinks.community.device.entity.DeviceFirmwareEntity;
 import org.jetlinks.community.device.entity.DeviceFirmwareTaskEntity;
+import org.jetlinks.community.device.enums.TaskDeployMode;
 import org.springframework.stereotype.Service;
+import reactor.core.publisher.Mono;
+
+import java.util.Collections;
+import java.util.List;
 
 /**
  * @author lifang
@@ -14,4 +20,50 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class LocalDeviceFirmwareTaskService extends GenericReactiveCrudService<DeviceFirmwareTaskEntity, String> {
+
+    public Mono<Integer> deployAll(String id) {
+        return this
+            .createUpdate()
+            .where(DeviceFirmwareEntity::getId,id)
+            .set(DeviceFirmwareTaskEntity::getDeployMode, TaskDeployMode.all)
+            .execute();
+    }
+
+    public Mono<Integer> deploy(String id,List<String> deviceIds) {
+        return this
+            .createUpdate()
+            .where(DeviceFirmwareEntity::getId,id)
+            .set(DeviceFirmwareTaskEntity::getDeployMode, TaskDeployMode.special)
+            .set(DeviceFirmwareTaskEntity::getDeployIds,deviceIds)
+            .execute();
+    }
+
+    /**
+     * 判断设备是否可以执行该任务
+     * @param id
+     * @param deviceId
+     * @return
+     */
+    public Mono<Boolean> canUpgrade(String id,String deviceId) {
+        return this
+            .findById(id)
+            .map(task->canUpgrade(task,id));
+    }
+
+    /**
+     * 判断设备是否可以执行该任务
+     * @param task
+     * @param deviceId
+     * @return
+     */
+    public Boolean canUpgrade(DeviceFirmwareTaskEntity task,String deviceId) {
+        if(TaskDeployMode.all.eq(task.getDeployMode())){
+            return true;
+        }else {
+            if(CollectionUtil.isNotEmpty(task.getDeployIds())){
+                return task.getDeployIds().contains(deviceId);
+            }
+            return false;
+        }
+    }
 }

+ 26 - 19
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/LocalFirmwareUpgradeHistoryService.java

@@ -59,16 +59,19 @@ public class LocalFirmwareUpgradeHistoryService extends GenericReactiveCrudServi
                 .flatMap(tp3 -> {
                     DeviceOperator operator = tp3.getT1();
                     DeviceFirmwareEntity firmware = tp3.getT2();
-                    if (!firmware.getVersion().equals(message.getVersion())) {
-                        //如果存在平台推送且版本不一致,则推送升级固件消息,等待升级
-                        UpgradeFirmwareMessage firmwareMessage = new UpgradeFirmwareMessage();
-                        firmwareMessage.setDeviceId(message.getDeviceId());
-                        firmwareMessage.setUrl(firmware.getUrl());
-                        firmwareMessage.setVersion(firmware.getVersion());
-                        firmwareMessage.setSign(firmware.getSign());
-                        firmwareMessage.setSignMethod(firmware.getSignMethod());
-                        firmwareMessage.setTimestamp(System.currentTimeMillis());
-                        return operator.messageSender().sendAndForget(firmwareMessage);
+                    if (firmwareTaskService.canUpgrade(tp3.getT3(),operator.getDeviceId())) {
+                        //该设备可以升级
+                        if (!firmware.getVersion().equals(message.getVersion())) {
+                            //如果存在平台推送且版本不一致,则推送升级固件消息,等待升级
+                            UpgradeFirmwareMessage firmwareMessage = new UpgradeFirmwareMessage();
+                            firmwareMessage.setDeviceId(message.getDeviceId());
+                            firmwareMessage.setUrl(firmware.getUrl());
+                            firmwareMessage.setVersion(firmware.getVersion());
+                            firmwareMessage.setSign(firmware.getSign());
+                            firmwareMessage.setSignMethod(firmware.getSignMethod());
+                            firmwareMessage.setTimestamp(System.currentTimeMillis());
+                            return operator.messageSender().sendAndForget(firmwareMessage);
+                        }
                     }
                     return Mono.empty();
                 })
@@ -167,15 +170,19 @@ public class LocalFirmwareUpgradeHistoryService extends GenericReactiveCrudServi
             .flatMap(tp5->{
                 DeviceFirmwareEntity firmware = tp5.getT3();
                 DeviceMessageSender sender = tp5.getT2();
-                RequestFirmwareMessageReply reply = new RequestFirmwareMessageReply();
-                reply.setTimestamp(System.currentTimeMillis());
-                reply.setDeviceId(messages.getDeviceId());
-                reply.setSign(firmware.getSign());
-                reply.setSignMethod(firmware.getSignMethod());
-                reply.setSize(10L);
-                reply.setUrl(firmware.getUrl());
-                reply.setMessageId(messages.getMessageId());
-                return sender.sendAndForget(reply);
+                DeviceFirmwareTaskEntity task = tp5.getT5();
+                if(firmwareTaskService.canUpgrade(task,messages.getDeviceId())){
+                    RequestFirmwareMessageReply reply = new RequestFirmwareMessageReply();
+                    reply.setTimestamp(System.currentTimeMillis());
+                    reply.setDeviceId(messages.getDeviceId());
+                    reply.setSign(firmware.getSign());
+                    reply.setSignMethod(firmware.getSignMethod());
+                    reply.setSize(10L);
+                    reply.setUrl(firmware.getUrl());
+                    reply.setMessageId(messages.getMessageId());
+                    return sender.sendAndForget(reply);
+                }
+                return Mono.empty();
             }).then();
     }
 }

+ 2 - 2
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceCategoryController.java

@@ -30,7 +30,7 @@ public class DeviceCategoryController{
     private final LocalDeviceProductService productService;
     private final DeviceCategoryService service;
 
-    @PostMapping("/add")
+    @PostMapping
     @Operation(summary = "添加目录")
     public Mono<?>  add(@RequestBody Mono<DeviceCategory> payload){
         return this.service.insert(payload)
@@ -57,7 +57,7 @@ public class DeviceCategoryController{
     }
 
 
-    @PutMapping
+    @PatchMapping
     @Operation(summary = "更新目录")
     public Mono<Void> updata(@RequestBody Mono<DeviceCategory> payload){
         return payload.flatMap(data->

+ 8 - 11
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceFirmwareTaskController.java

@@ -11,10 +11,9 @@ import org.jetlinks.community.device.entity.DeviceFirmwareEntity;
 import org.jetlinks.community.device.entity.DeviceFirmwareTaskEntity;
 import org.jetlinks.community.device.service.LocalDeviceFirmwareService;
 import org.jetlinks.community.device.service.LocalDeviceFirmwareTaskService;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import reactor.core.publisher.Mono;
-
+import java.util.*;
 /**
  * @author lifang
  * @version 1.0.0
@@ -38,15 +37,13 @@ public class DeviceFirmwareTaskController implements
         return firmwareTaskService;
     }
 
-    //todo 有设备在进行升级时不可删除
-    @Override
-    public Mono<DeviceFirmwareTaskEntity> delete(String id) {
-        return null;
+    @PostMapping("/{id}/all/_deploy")
+    public Mono<Integer> deployAll(@PathVariable("id") String id){
+        return firmwareTaskService.deployAll(id);
     }
 
-    //todo 有设备在进行升级时不可修改
-    @Override
-    public Mono<Boolean> update(String id, Mono<DeviceFirmwareTaskEntity> payload) {
-        return null;
+    @PostMapping("/{id}/_deploy")
+    public Mono<Integer> deployAll(@PathVariable("id") String id,@RequestBody List<String> ids){
+        return firmwareTaskService.deploy(id,ids);
     }
 }

+ 0 - 12
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceFirmwareUpgradeHistoryController.java

@@ -40,16 +40,4 @@ public class DeviceFirmwareUpgradeHistoryController implements
     public ReactiveCrudService<DeviceUpgradeHistoryEntity, String> getService() {
         return historyService;
     }
-
-    //todo 有设备在进行升级时不可删除
-    @Override
-    public Mono<DeviceUpgradeHistoryEntity> delete(String id) {
-        return null;
-    }
-
-    //todo 有设备在进行升级时不可修改
-    @Override
-    public Mono<Boolean> update(String id, Mono<DeviceUpgradeHistoryEntity> payload) {
-        return null;
-    }
 }