TRX 1 год назад
Родитель
Сommit
b8b1c73fbd

+ 12 - 1
OneCardIotClient/src/main/java/com/zhongshu/iot/client/model/iot/thing/IotThingModel.java

@@ -4,8 +4,10 @@ import com.github.microservice.types.deviceUse.DeviceCategory;
 import com.github.microservice.types.deviceUse.ThingType;
 import com.zhongshu.iot.client.model.baseParam.SuperModel;
 import com.zhongshu.iot.client.model.mqtt.ProjectInfoModel;
+import com.zhongshu.iot.client.model.mqtt.ProjectInfoSimpleModel;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
+import org.apache.commons.lang3.ObjectUtils;
 
 /**
  * @author TRX
@@ -38,8 +40,17 @@ public class IotThingModel extends SuperModel {
     @Schema(description = "所属分组")
     private String projectCode;
 
+    private String projectName;
+
+    public String getProjectName() {
+        if (ObjectUtils.isNotEmpty(projectInfo)) {
+            return projectInfo.getName();
+        }
+        return "";
+    }
+
     @Schema(description = "分组信息")
-    private ProjectInfoModel projectInfo;
+    private ProjectInfoSimpleModel projectInfo;
 
     //-----------------所属产品 start-----------
     @Schema(description = "所属产品数据id")

+ 2 - 0
OneCardIotClient/src/main/java/com/zhongshu/iot/client/model/iot/thing/IotThingParam.java

@@ -20,4 +20,6 @@ public class IotThingParam extends SuperParam {
     @Schema(description = "所属分组")
     private String projectCode;
 
+    @Schema(description = "产品code")
+    private String productCode;
 }

+ 36 - 0
OneCardIotClient/src/main/java/com/zhongshu/iot/client/model/mqtt/ProjectInfoSimpleModel.java

@@ -0,0 +1,36 @@
+package com.zhongshu.iot.client.model.mqtt;
+
+import com.github.microservice.types.common.CommonState;
+import com.zhongshu.iot.client.model.baseParam.SuperModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author TRX
+ * @date 2024/5/21
+ */
+@Data
+@Schema(description = "分组信息")
+public class ProjectInfoSimpleModel {
+
+    @Schema(description = "数据id")
+    private String id;
+
+    @Schema(description = "名称")
+    private String name;
+
+    @Schema(description = "code")
+    private String code;
+
+    @Schema(description = "状态")
+    private CommonState state;
+
+    private String stateStr;
+
+    public String getStateStr() {
+        if (state != null) {
+            return state.getRemark();
+        }
+        return "";
+    }
+}

+ 3 - 0
OneCardIotServer/src/main/java/com/zhongshu/iot/server/core/service/device/GateWayInfoService.java

@@ -610,6 +610,9 @@ public class GateWayInfoService extends SuperService {
      * @return
      */
     public GateWayInfo getDeviceGateWayInfo(DeviceInfo deviceInfo) {
+        if (ObjectUtils.isEmpty(deviceInfo)) {
+            return null;
+        }
         GateWay2Device gateWay2Device = gateWay2DeviceDao.findTopByDeviceInfoOrderByUpdateTimeDesc(deviceInfo);
         if (gateWay2Device == null) {
             return null;

+ 14 - 2
OneCardIotServer/src/main/java/com/zhongshu/iot/server/core/service/device/ProjectInfoService.java

@@ -1,15 +1,16 @@
 package com.zhongshu.iot.server.core.service.device;
 
+import com.github.microservice.net.ResultContent;
 import com.github.microservice.types.common.CommonState;
 import com.zhongshu.iot.client.model.mqtt.ProjectInfoAddParam;
 import com.zhongshu.iot.client.model.mqtt.ProjectInfoModel;
 import com.zhongshu.iot.client.model.mqtt.ProjectInfoSearchParam;
+import com.zhongshu.iot.client.model.mqtt.ProjectInfoSimpleModel;
 import com.zhongshu.iot.server.core.dao.mqtt.ProjectInfoDao;
 import com.zhongshu.iot.server.core.domain.iot.mqtt.ProjectInfo;
 import com.zhongshu.iot.server.core.service.base.SuperService;
 import com.zhongshu.iot.server.core.util.bean.BeanUtils;
 import com.zhongshu.iot.server.core.util.page.PageEntityUtil;
-import com.github.microservice.net.ResultContent;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -48,7 +49,7 @@ public class ProjectInfoService extends SuperService {
             projectInfo = new ProjectInfo();
             initEntity(projectInfo);
             BeanUtils.copyProperties(param, projectInfo, "id");
-        }else {
+        } else {
             BeanUtils.copyProperties(param, projectInfo, "id", "createTime", "updateTime", "isDelete");
         }
         projectInfoDao.save(projectInfo);
@@ -106,4 +107,15 @@ public class ProjectInfoService extends SuperService {
         }
         return projectInfoModel;
     }
+
+    public ProjectInfoSimpleModel toSimpleModel(ProjectInfo entity) {
+        ProjectInfoSimpleModel projectInfoModel = null;
+        if (ObjectUtils.isNotEmpty(entity)) {
+            projectInfoModel = new ProjectInfoSimpleModel();
+            BeanUtils.copyProperties(entity, projectInfoModel);
+        }
+        return projectInfoModel;
+    }
+
+
 }

+ 3 - 0
OneCardIotServer/src/main/java/com/zhongshu/iot/server/core/service/iot/IotServiceImpl.java

@@ -452,6 +452,9 @@ public class IotServiceImpl extends SuperService {
         if (iotMain != null && iotMain.getIotDataType() == IotDataType.Device) {
             // 把 topic有占位符的换为具体的值
             String deviceId = iotMain.getDeviceId();
+            if (StringUtils.isEmpty(deviceId)) {
+                return;
+            }
             // 发布的topic
             String iotTopic = iotMain.getIotTopic();
             // 响应的topic

+ 20 - 9
OneCardIotServer/src/main/java/com/zhongshu/iot/server/core/service/iot/IotTemplateManagerService.java

@@ -21,6 +21,7 @@ import com.zhongshu.iot.server.core.service.device.GateWayInfoService;
 import com.zhongshu.iot.server.core.util.bean.BeanUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -81,22 +82,28 @@ public class IotTemplateManagerService extends SuperService {
      * @param deviceInfo
      * @return
      */
-    public ResultContent deviceBindAutoIotTemplate(IotThing iotThing, DeviceInfo deviceInfo) {
+    public ResultContent deviceBindIotTemplate(IotThing iotThing, DeviceInfo deviceInfo) {
         if (ObjectUtils.isEmpty(iotThing) || ObjectUtils.isEmpty(deviceInfo)) {
             return ResultContent.buildFail("数据不全");
         }
+        String projectInfoCode = "";
+        // 分组code
+        if (ObjectUtils.isNotEmpty(deviceInfo)) {
+            projectInfoCode = deviceInfo.getProjectInfoCode();
+        }
+        if (StringUtils.isEmpty(projectInfoCode)) {
+            projectInfoCode = iotThing.getProjectCode();
+        }
         // 所属产品信息
         IotTemplate iotTemplate = iotTemplateDao.findTopById(iotThing.getIotTemplateId());
-        return deviceBindAutoIotTemplate(iotTemplate, deviceInfo, iotThing.getId());
+        return deviceBindAutoIotTemplate(iotTemplate, deviceInfo, iotThing.getId(), projectInfoCode);
     }
 
-    public ResultContent deviceBindAutoIotTemplate(IotTemplate iotTemplate, DeviceInfo deviceInfo, String iotThingId) {
-        if (ObjectUtils.isEmpty(iotTemplate) || ObjectUtils.isEmpty(deviceInfo)) {
+    public ResultContent deviceBindAutoIotTemplate(IotTemplate iotTemplate, DeviceInfo deviceInfo,
+            String iotThingId, String projectInfoCode) {
+        if (ObjectUtils.isEmpty(iotTemplate)) {
             return ResultContent.buildFail("数据不全");
         }
-        // 分组code
-        String projectInfoCode = deviceInfo.getProjectInfoCode();
-
         // 判断该设备是否已绑定该模版
         IotTemplate temp = iotTemplateDao.findTopByIotThingIdAndIotDataTypeAndIotTemplateId(iotThingId, IotDataType.Device, iotTemplate.getId());
         IotTemplate newIotTemplate = null;
@@ -110,7 +117,9 @@ public class IotTemplateManagerService extends SuperService {
         newIotTemplate.setIotDataType(IotDataType.Device);
         newIotTemplate.setIotThingId(iotThingId);
         newIotTemplate.setIotTemplateId(iotTemplate.getId());
-        newIotTemplate.setDeviceId(deviceInfo.getDeviceId());
+        if (ObjectUtils.isNotEmpty(deviceInfo)) {
+            newIotTemplate.setDeviceId(deviceInfo.getDeviceId());
+        }
         newIotTemplate.setProjectCode(projectInfoCode);
         iotTemplateDao.save(newIotTemplate);
 
@@ -150,7 +159,9 @@ public class IotTemplateManagerService extends SuperService {
                 main.setIotMainTemplateId(it.getId());
 
                 main.setIotDataType(IotDataType.Device);
-                main.setDeviceId(deviceInfo.getDeviceId());
+                if (deviceInfo != null) {
+                    main.setDeviceId(deviceInfo.getDeviceId());
+                }
                 main.setProjectCode(projectInfoCode);
                 main.setAddTime(System.currentTimeMillis());
                 if (ObjectUtils.isNotEmpty(gateWayInfo)) {

+ 1 - 1
OneCardIotServer/src/main/java/com/zhongshu/iot/server/core/service/iot/IotThing2DeviceService.java

@@ -95,7 +95,7 @@ public class IotThing2DeviceService extends SuperService {
             entity.setIotThingId(iotThing.getId());
 
             // 设备关联信息
-            entity.setDeviceCategory(deviceInfo.getDeviceCategory());
+            entity.setDeviceCategory(deviceInfo.getDeviceCategory()); // 设备品类,如:网关、设备、直连设备
             entity.setDeviceId(deviceInfo.getDeviceId());
             entity.setDeviceName(deviceInfo.getDeviceName());
             entity.setDeviceType(deviceInfo.getDeviceType());

+ 21 - 4
OneCardIotServer/src/main/java/com/zhongshu/iot/server/core/service/iot/IotThingService.java

@@ -122,19 +122,20 @@ public class IotThingService extends SuperService {
             // 更新物模型 对应的设备数量
             updateThingDeviceCount(iotThing);
             // 绑定物模型属性信息
-            iotTemplateManagerService.deviceBindAutoIotTemplate(iotThing, deviceInfo);
+            iotTemplateManagerService.deviceBindIotTemplate(iotThing, deviceInfo);
         }
         return ResultContent.buildSuccess();
     }
 
     /**
-     * 保存物模型
+     * 保存物模型(手动添加的)
      *
      * @param param
      * @return
      */
     public ResultContent saveIotThing(IotThingParam param) {
         IotThing entity = null;
+        boolean isAdd = false;
         if (StringUtils.isEmpty(param.getId())) {
             entity = iotThingDao.findTopById(param.getId());
             if (ObjectUtils.isEmpty(entity)) {
@@ -147,14 +148,29 @@ public class IotThingService extends SuperService {
             entity = new IotThing();
             entity.setThingType(ThingType.Manual);
             entity.setCode(String.format("ML%s", CommonUtil.randomStr(10)));
+            isAdd = true;
         }
-        BeanUtils.copyProperties(param, entity);
+        BeanUtils.copyProperties(param, entity, "productCode");
+        // 分组信息
         ProjectInfo projectInfo = projectInfoDao.findTopByCode(param.getProjectCode());
         if (ObjectUtils.isEmpty(projectInfo)) {
             return ResultContent.buildFail(String.format("分组不存在"));
         }
         entity.setProjectCode(projectInfo.getCode());
+
+        // 所属产品信息
+        if (isAdd && StringUtils.isNotEmpty(param.getProductCode())) {
+            IotTemplate iotTemplate = iotTemplateDao.findTopByProductCodeAndIotDataType(param.getProductCode(), IotDataType.IotTemplate);
+            if (ObjectUtils.isEmpty(iotTemplate)) {
+                return ResultContent.buildFail(String.format("产品不存在%s", param.getProductCode()));
+            }
+            entity.setIotTemplateId(iotTemplate.getId());
+            entity.setProductCode(param.getProductCode());
+        }
         iotThingDao.save(entity);
+        // 保存物模型的产品副本信息
+        iotTemplateManagerService.deviceBindIotTemplate(entity, null);
+
         return ResultContent.buildSuccess();
     }
 
@@ -248,7 +264,8 @@ public class IotThingService extends SuperService {
         if (ObjectUtils.isNotEmpty(entity)) {
             model = new IotThingModel();
             BeanUtils.copyProperties(entity, model);
-            model.setProjectInfo(projectInfoService.toModel(projectInfoDao.findTopByCode(entity.getProjectCode())));
+            // 分组信息
+            model.setProjectInfo(projectInfoService.toSimpleModel(projectInfoDao.findTopByCode(entity.getProjectCode())));
         }
         return model;
     }