Jelajahi Sumber

feat:增加子设备注册关联

xiwa 1 tahun lalu
induk
melakukan
7ea874c5ac

+ 3 - 1
iot-dao/iot-data-service/src/main/java/cc/iotkit/data/manager/IVirtualDeviceData.java

@@ -9,8 +9,10 @@
  */
 package cc.iotkit.data.manager;
 
+import cc.iotkit.common.api.PageRequest;
 import cc.iotkit.common.api.Paging;
 import cc.iotkit.data.IOwnedData;
+import cc.iotkit.model.alert.AlertConfig;
 import cc.iotkit.model.device.VirtualDevice;
 
 import java.util.List;
@@ -22,5 +24,5 @@ public interface IVirtualDeviceData extends IOwnedData<VirtualDevice, String> {
     List<VirtualDevice> findByUidAndState(String uid, String state);
 
     List<VirtualDevice> findByTriggerAndState(String trigger, String state);
-
+    
 }

+ 1 - 1
iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/DeviceController.java

@@ -85,7 +85,7 @@ public class DeviceController {
     @ApiOperation(value = "设备列表", notes = "设备列表", httpMethod = "POST")
     @SaCheckPermission("iot:device:query")
     @PostMapping("/list")
-    public Paging<DeviceInfo> getDevices(@Validated @RequestBody PageRequest<DeviceQueryBo> pageRequest) {
+    public Paging<DeviceInfoVo> getDevices(@Validated @RequestBody PageRequest<DeviceQueryBo> pageRequest) {
         return deviceServiceImpl.getDevices(pageRequest);
     }
 

+ 10 - 7
iot-module/iot-manager/src/main/java/cc/iotkit/manager/dto/vo/deviceinfo/DeviceInfoVo.java

@@ -1,6 +1,7 @@
 package cc.iotkit.manager.dto.vo.deviceinfo;
 
 import cc.iotkit.model.device.DeviceInfo;
+import cc.iotkit.model.product.Product;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.github.linpeilie.annotations.AutoMapper;
@@ -16,7 +17,7 @@ import java.io.Serializable;
 @ApiModel(value = "DeviceInfoVo")
 @Data
 @ExcelIgnoreUnannotated
-@AutoMapper(target = DeviceInfo.class)
+@AutoMapper(target = DeviceInfo.class,convertGenerate = false)
 public class DeviceInfoVo implements Serializable {
 
     private static final long serialVersionUID = -1L;
@@ -43,10 +44,14 @@ public class DeviceInfoVo implements Serializable {
 
     @ApiModelProperty(value = "设备离线时间")
     @ExcelProperty(value = "设备离线时间")
+    @ReverseAutoMapping(source = "state.offlineTime", target = "offlineTime")
+    @AutoMapping(ignore = true)
     private Long offlineTime;
 
     @ApiModelProperty(value = "设备在线时间")
     @ExcelProperty(value = "设备在线时间")
+    @ReverseAutoMapping(source = "state.onlineTime", target = "onlineTime")
+    @AutoMapping(ignore = true)
     private Long onlineTime;
 
     @ApiModelProperty(value = "父级id")
@@ -63,13 +68,11 @@ public class DeviceInfoVo implements Serializable {
 
     @ApiModelProperty(value = "设备状态")
     @ExcelProperty(value = "设备状态")
+    @ReverseAutoMapping(source = "state.online", target = "online")
     @AutoMapping(ignore = true)
-    @ReverseAutoMapping(ignore = true)
-    private String state;
-
-    @ApiModelProperty(value = "用户id")
-    @ExcelProperty(value = "用户id")
-    private String uid;
+    private Boolean online;
 
+    @ApiModelProperty(value = "所属产品信息")
+    private Product product;
 
 }

+ 1 - 1
iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/IDeviceManagerService.java

@@ -28,7 +28,7 @@ import java.util.List;
  * @Description: 设备服务接口
  */
 public interface IDeviceManagerService {
-    Paging<DeviceInfo> getDevices(PageRequest<DeviceQueryBo> pageRequest);
+    Paging<DeviceInfoVo> getDevices(PageRequest<DeviceQueryBo> pageRequest);
 
     boolean addDevice(DeviceInfoBo data);
 

+ 13 - 14
iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/impl/DeviceManagerServiceImpl.java

@@ -83,19 +83,11 @@ public class DeviceManagerServiceImpl implements IDeviceManagerService {
     private MqProducer<ThingModelMessage> producer;
 
     @Override
-    public Paging<DeviceInfo> getDevices(PageRequest<DeviceQueryBo> pageRequest) {
+    public Paging<DeviceInfoVo> getDevices(PageRequest<DeviceQueryBo> pageRequest) {
         DeviceQueryBo query = pageRequest.getData();
 
         String uid = "";
         String subUid = "";
-//        if (!AuthUtil.isAdmin()) {
-//            //客户端用户使用绑定子用户查询
-//            if (AuthUtil.isClientUser()) {
-//                subUid = AuthUtil.getUserId();
-//            } else {
-//                uid = AuthUtil.getUserId();
-//            }
-//        }
 
         String pk = query.getProductKey();
         //关键字查询
@@ -103,8 +95,12 @@ public class DeviceManagerServiceImpl implements IDeviceManagerService {
         String group = query.getGroup();
         String state = query.getState();
 
-        return deviceInfoData.findByConditions(uid, subUid, pk, group,
-                state, keyword, pageRequest.getPageNum(), pageRequest.getPageSize());
+        Paging<DeviceInfoVo> result = MapstructUtils.convert(deviceInfoData.findByConditions(uid, subUid, pk, group,
+                state, keyword, pageRequest.getPageNum(), pageRequest.getPageSize()), DeviceInfoVo.class);
+        for (DeviceInfoVo row : result.getRows()) {
+            row.setProduct(productData.findByProductKey(row.getProductKey()));
+        }
+        return result;
     }
 
     @Override
@@ -156,7 +152,11 @@ public class DeviceManagerServiceImpl implements IDeviceManagerService {
         }
 
         dataOwnerService.checkOwner(deviceInfo);
-        return MapstructUtils.convert(deviceInfoData.findByParentId(deviceId), DeviceInfoVo.class);
+        List<DeviceInfoVo> list = MapstructUtils.convert(deviceInfoData.findByParentId(deviceId), DeviceInfoVo.class);
+        for (DeviceInfoVo row : list) {
+            row.setProduct(productData.findByProductKey(row.getProductKey()));
+        }
+        return list;
     }
 
     @Override
@@ -413,7 +413,7 @@ public class DeviceManagerServiceImpl implements IDeviceManagerService {
         DeviceInfo di = data.to(DeviceInfo.class);
         di.setLocate(new DeviceInfo.Locate(data.getLongitude(), data.getLatitude()));
         di.setState(data.getState());
-        if(StringUtils.isBlank(data.getSecret())){
+        if (StringUtils.isBlank(data.getSecret())) {
             data.setSecret(RandomStringUtils.random(16));
         }
         //deviceName不可重复
@@ -424,5 +424,4 @@ public class DeviceManagerServiceImpl implements IDeviceManagerService {
         return deviceInfoData.save(di) != null;
     }
 
-
 }

+ 44 - 4
iot-module/iot-plugin/iot-plugin-main/src/main/java/cc/iotkit/plugin/main/ThingServiceImpl.java

@@ -67,7 +67,11 @@ public class ThingServiceImpl implements IThingService {
             switch (type) {
                 case REGISTER:
                     //设备注册
-                    registerDevice(device, (DeviceRegister) action);
+                    registerDevice(device, (DeviceRegister) action, null);
+                    break;
+                case SUB_REGISTER:
+                    //子设备注册
+                    subRegisterDevice(pluginId, device, (SubDeviceRegister) action);
                     break;
                 case STATE_CHANGE:
                     deviceStateChange(device, (DeviceStateChange) action);
@@ -130,7 +134,7 @@ public class ThingServiceImpl implements IThingService {
     public ThingProduct getProduct(String pk) {
         try {
             Product product = productData.findByProductKey(pk);
-            if(product==null){
+            if (product == null) {
                 return null;
             }
             return ThingProduct.builder()
@@ -158,7 +162,7 @@ public class ThingServiceImpl implements IThingService {
     @Override
     public ThingDevice getDevice(String dn) {
         DeviceInfo deviceInfo = getDeviceInfo(dn);
-        if(deviceInfo==null){
+        if (deviceInfo == null) {
             return null;
         }
         return ThingDevice.builder()
@@ -179,7 +183,7 @@ public class ThingServiceImpl implements IThingService {
         return device.getProperty();
     }
 
-    private void registerDevice(DeviceInfo device, DeviceRegister register) {
+    private String registerDevice(DeviceInfo device, DeviceRegister register, String parentId) {
         String productKey = register.getProductKey();
         //指定了pk需验证
         if (StringUtils.isNotBlank(productKey)) {
@@ -191,6 +195,11 @@ public class ThingServiceImpl implements IThingService {
 
         if (device != null) {
             log.info("device already registered");
+            if (parentId != null) {
+                device.setParentId(parentId);
+                deviceInfoData.save(device);
+            }
+            return device.getDeviceId();
         } else {
             //不存在,注册新设备
             DeviceInfo deviceInfo = new DeviceInfo();
@@ -199,6 +208,7 @@ public class ThingServiceImpl implements IThingService {
             deviceInfo.setProductKey(productKey);
             deviceInfo.setDeviceName(register.getDeviceName());
             deviceInfo.setModel(register.getModel());
+            deviceInfo.setParentId(parentId);
             deviceInfo.setSecret(RandomStringUtils.randomAlphabetic(16));
             //默认离线
             deviceInfo.setState(new DeviceInfo.State(false, null, null));
@@ -214,6 +224,36 @@ public class ThingServiceImpl implements IThingService {
                             .identifier("register")
                             .build()
             );
+            return deviceInfo.getDeviceId();
+        }
+    }
+
+    private void subRegisterDevice(String pluginId, DeviceInfo parent, SubDeviceRegister register) {
+        //先注册父设备
+        String parentId = registerDevice(parent,
+                DeviceRegister.builder()
+                        .productKey(register.getProductKey())
+                        .deviceName(register.getDeviceName())
+                        .model(register.getModel())
+                        .version(register.getVersion())
+                        .build(), null);
+
+        for (DeviceRegister sub : register.getSubs()) {
+            String productKey = sub.getProductKey();
+            String deviceName = sub.getDeviceName();
+            DeviceInfo subDevice = getDeviceInfo(sub.getDeviceName());
+            //添加设备路由
+            deviceRouter.putRouter(deviceName, new PluginRouter(IPluginMain.MAIN_ID, pluginId));
+            //注册子设备
+            registerDevice(subDevice,
+                    DeviceRegister.builder()
+                            .productKey(productKey)
+                            .deviceName(deviceName)
+                            .model(sub.getModel())
+                            .version(sub.getVersion())
+                            .build()
+                    , parentId
+            );
         }
     }
 

+ 8 - 8
iot-starter/pom.xml

@@ -71,10 +71,10 @@
         </dependency>
 
         <!--打开注释 启用es数据库-->
-        <dependency>
-            <groupId>cc.iotkit</groupId>
-            <artifactId>iot-temporal-serviceImpl-es</artifactId>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>cc.iotkit</groupId>-->
+<!--            <artifactId>iot-temporal-serviceImpl-es</artifactId>-->
+<!--        </dependency>-->
 
         <!--打开注释 启用timescale数据库-->
         <!--        <dependency>-->
@@ -83,10 +83,10 @@
         <!--        </dependency>-->
 
         <!--打开注释 启用tdengine数据库-->
-<!--        <dependency>-->
-<!--            <groupId>cc.iotkit</groupId>-->
-<!--            <artifactId>iot-temporal-serviceImpl-td</artifactId>-->
-<!--        </dependency>-->
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-temporal-serviceImpl-td</artifactId>
+        </dependency>
 
         <!--====================第三方库===================-->
 

+ 1 - 1
pom.xml

@@ -29,7 +29,7 @@
 
     <properties>
         <java.version>11</java.version>
-        <iot-iita-core.version>1.0.2</iot-iita-core.version>
+        <iot-iita-core.version>1.0.3</iot-iita-core.version>
         <spring-boot.version>2.7.11</spring-boot.version>
         <vertx.version>4.2.2</vertx.version>
         <satoken.version>1.34.0</satoken.version>