A17404李放 3 роки тому
батько
коміт
517912e50b

+ 4 - 2
nb-system/src/main/java/com/nb/aliyun/AliyunConsumerGroupService.java

@@ -137,7 +137,6 @@ public class AliyunConsumerGroupService {
 
     private void processMessage(Message message) {
         BusHospitalLogEntity hospitalLog = new BusHospitalLogEntity();
-        hospitalLog.setType(HospitalLogEnum.ALI);
         long startTime = System.currentTimeMillis();
         String deviceName=null;
         try {
@@ -166,6 +165,7 @@ public class AliyunConsumerGroupService {
                 }else {
                     log.info(deviceName+"设备【{}】未激活",deviceName);
                 }
+                hospitalLog.setType(HospitalLogEnum.ALI_STATUS);
                 // 更新设备状态
                 deviceService.updateDevice(device);
             }else if (topic.matches("[\\w\\/]*event/property/post$")){//设备属性上报
@@ -175,6 +175,7 @@ public class AliyunConsumerGroupService {
                 BusDeviceRunningEntity deviceRunning = new BusDeviceRunningEntity();
                 deviceRunning.updateFieldsByItems(deviceName,items);
                 deviceRunning.setMsgId(messageId);
+                hospitalLog.setType(HospitalLogEnum.ALI_DATA_UPLOAD);
                 hospitalLog.setTenantId(deviceInfoListener.deviceInfoDetail(new DeviceInfoEvent(this,deviceRunning,deviceName)));
             }else if(topic.matches("[\\w\\/]+thing/lifecycle$")){// 设备生命周期
                 // 获取生命周期类型
@@ -195,12 +196,13 @@ public class AliyunConsumerGroupService {
                     config.setDeviceSecret(content.getString("deviceSecret"));
                     config.setIotId(content.getString("iotId"));
                     config.setProductKey(content.getString("productKey"));
-
+                    hospitalLog.setType(HospitalLogEnum.ALI_LIFECYCLE);
                     // 设置配置信息
                     device.setConfig(config);
                     deviceService.saveDevice(device);
                 }else if ("delete".equals(action)){
                     // 删除设备
+                    hospitalLog.setType(HospitalLogEnum.ALI_DEL);
                     deviceService.removeByDeviceId(deviceName);
                 }
             }else {

+ 12 - 7
nb-system/src/main/java/com/nb/aliyun/sdk/AliyunIotSdk.java

@@ -1,5 +1,6 @@
 package com.nb.aliyun.sdk;
 
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.aliyuncs.DefaultAcsClient;
 import com.aliyuncs.exceptions.ClientException;
@@ -7,6 +8,7 @@ import com.aliyuncs.iot.model.v20180120.*;
 import com.aliyuncs.profile.DefaultProfile;
 import com.aliyuncs.profile.IClientProfile;
 import com.nb.aliyun.PlatformAccount;
+import com.nb.common.util.ExceptionUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -136,23 +138,26 @@ public class AliyunIotSdk {
      * @param
      * @return
      */
-    public int deleteDevice(String iotId){
+    public boolean deleteDevice(String deviceName){
         // 获取阿里云SDK客户端
         DefaultAcsClient client = this.getAliyuniotClient();
         DeleteDeviceRequest request = new DeleteDeviceRequest();
         request.setIotInstanceId(iotInstanceId);
-        // 产品iotId,必需
-        request.setIotId(iotId);
+        request.setProductKey(productKey);
+        request.setDeviceName(deviceName);
+        boolean result=false;
         try {
             DeleteDeviceResponse response = client.getAcsResponse(request);
             // 获取失败直接跳出循环
-            if (!response.getSuccess()){
-                return 1;
+            if (response.getSuccess()){
+                result=true;
+            }else {
+                log.warn("删除设备【{}】失败,阿里云相应【{}】",deviceName, JSONUtil.toJsonStr(response));
             }
         } catch (ClientException e) {
-            e.printStackTrace();
+            log.error("删除设备【{}】失败,报错:【{}】",deviceName, ExceptionUtil.getExceptionMsg(e));
         }
-        return 0;
+        return result;
     }
 
     /**

+ 14 - 6
nb-system/src/main/java/com/nb/bus/controller/BusDeviceController.java

@@ -19,9 +19,6 @@ import com.nb.bus.service.dto.DeviceQuery;
 import com.nb.bus.service.dto.DeviceResult;
 import com.nb.common.annotation.Log;
 import com.nb.common.crud.BaseService;
-import com.nb.common.crud.controller.BaseCrudController;
-import com.nb.common.crud.controller.BaseDeleteController;
-import com.nb.common.crud.controller.BaseQueryController;
 import com.nb.common.crud.controller.BaseSaveController;
 import com.nb.common.exception.CustomException;
 import com.nb.common.result.R;
@@ -47,8 +44,7 @@ import java.util.List;
 @RequestMapping("/bus/device/info")
 @Api(tags = "设备管理",description = "统一权限前缀(device:info),device:info:add")
 public class BusDeviceController implements
-        BaseSaveController<BusDeviceEntity, String>,
-        BaseDeleteController<BusDeviceEntity, String> {
+        BaseSaveController<BusDeviceEntity, String> {
     private final LocalBusDeviceService deviceService;
 
     @Log(title = "设备换绑")
@@ -163,6 +159,19 @@ public class BusDeviceController implements
 //        }else {
 //            return R.fail("同步失败");
 //        }
+//    }
+
+//    @PostMapping("/remove")
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(name = "id",value = "主键id",required = true)
+//    })
+//    @SaCheckPermission("device:info:delete")
+//    @ApiOperation(value = "根据ID删除")
+//    public R delete(@RequestParam("id") String id) {
+//        if(CharSequenceUtil.isNullOrUndefined(String.valueOf(id))){
+//            return R.success();
+//        }
+//        return R.success(deviceService.removeIotById(id));
 //    }
 
     /**
@@ -171,7 +180,6 @@ public class BusDeviceController implements
      * @return
      */
     @Log(title = "从阿里云更新本地设备")
-
     @SaCheckPermission("device:info:poll")
     @ApiOperation(value = "从阿里云更新本地设备",notes = "从阿里云平台获取设备并更新,参数为设备id列表,格式如['123456','456123'],参数可为空。权限【device:info:poll】")
     @PutMapping("/sync-device/batch")

+ 4 - 0
nb-system/src/main/java/com/nb/bus/entity/common/CommonDeviceParam.java

@@ -1,6 +1,7 @@
 package com.nb.bus.entity.common;
 
 import cn.hutool.core.text.CharSequenceUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.nb.bus.enums.DeviceAlarmEnum;
@@ -107,6 +108,9 @@ public class CommonDeviceParam<K,T>  extends DeviceProperties<K,T>  {
 
     public String getWarns() {
         handleWarn();
+        if (StrUtil.isNotEmpty(warns)) {
+            return warns.endsWith(";")&&warns.length()>2?warns.substring(0,warns.length()-1):warns;
+        }
         return warns;
     }
 }

+ 8 - 1
nb-system/src/main/java/com/nb/bus/enums/HospitalLogEnum.java

@@ -1,6 +1,7 @@
 package com.nb.bus.enums;
 
 import com.baomidou.mybatisplus.annotation.IEnum;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
@@ -13,9 +14,15 @@ import lombok.Getter;
  */
 @AllArgsConstructor
 @Getter
+@JsonFormat(shape = JsonFormat.Shape.OBJECT)
 public enum HospitalLogEnum  implements IEnum<Integer> {
     HIS(0,"系统对接信息"),
-    ALI(1,"阿里云平台信息");
+    @Deprecated
+    ALI(1,"阿里云平台信息"),
+    ALI_STATUS(2,"阿里云-设备上下线"),
+    ALI_LIFECYCLE(3,"阿里云-设备生命周期"),
+    ALI_DATA_UPLOAD(4,"阿里云-设备数据上传"),
+    ALI_DEL(5,"阿里云-设备删除"),;
 
     private Integer value;
     @Getter

+ 22 - 0
nb-system/src/main/java/com/nb/bus/service/LocalBusDeviceService.java

@@ -2,6 +2,7 @@ package com.nb.bus.service;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.text.CharSequenceUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.aliyuncs.iot.model.v20180120.QueryDeviceDetailResponse;
 import com.aliyuncs.iot.model.v20180120.QueryDeviceResponse;
@@ -95,6 +96,27 @@ public class LocalBusDeviceService extends BaseService<BusDeviceMapper, BusDevic
         deviceRegistry.remove(registeredEntity.getDeviceId());
     }
 
+    /**
+     * 描述: 根据id删除阿里云设备和本地设备记录
+     * @author lifang
+     * @date 2022/7/8 8:48
+     * @param id
+     * @return void
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public boolean removeIotById(String id){
+        //首先判断id是否存在
+        BusDeviceEntity device = this.getById(id);
+        if(ObjectUtil.isNotNull(device)){
+            if (aliyunIotSdk.deleteDevice(device.getDeviceId())) {
+                return this.removeById(id);
+            }else {
+                return false;
+            }
+        }
+        return true;
+    }
+
     /**
      * @author 龙三郎
      * 根据deviceId删除设备