TRX il y a 1 an
Parent
commit
b54aee9a1f

+ 2 - 1
OneCardIotServer/src/main/java/com/zhongshu/iot/server/core/dataConfig/MqttConfig.java

@@ -14,6 +14,7 @@ public class MqttConfig {
     // 本地处理的事件名称
     public static final List<String> localHandelEvent = List.of("ping", "ServerTime",
             "registGateway", "registDevice", "systemTime",
-            "online", "offline");
+            "online", "offline", "postAttr"
+    );
 
 }

+ 4 - 1
OneCardIotServer/src/main/java/com/zhongshu/iot/server/core/domain/iot/IotDeviceData.java

@@ -34,12 +34,15 @@ public class IotDeviceData extends SuperEntity {
     @Schema(description = "关联的设备")
     private String deviceId;
 
-    @Schema(description = "所属分code")
+    @Schema(description = "所属分code")
     private String projectCode;
 
     @Schema(description = "关联字段")
     private IotAttribute iotAttribute;
 
+    @Schema(description = "属性值")
+    private String property;
+
     @Schema(description = "对应的值")
     private Object data;
 

+ 85 - 0
OneCardIotServer/src/main/java/com/zhongshu/iot/server/core/service/iot/IotPropertyService.java

@@ -0,0 +1,85 @@
+package com.zhongshu.iot.server.core.service.iot;
+
+import cn.hutool.json.JSONUtil;
+import com.github.microservice.models.property.DevicePropertyParam;
+import com.github.microservice.models.property.PostPropertyParam;
+import com.github.microservice.models.property.PropertyResult;
+import com.github.microservice.net.ResultContent;
+import com.zhongshu.iot.server.core.dao.iot.IotDeviceDataDao;
+import com.zhongshu.iot.server.core.dao.iot.IotMainDao;
+import com.zhongshu.iot.server.core.dao.mqtt.DeviceInfoDao;
+import com.zhongshu.iot.server.core.domain.iot.device.DeviceInfo;
+import com.zhongshu.iot.server.core.service.base.SuperService;
+import com.zhongshu.iot.server.core.util.DateUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * 属性
+ *
+ * @author TRX
+ * @date 2025/3/5
+ */
+@Slf4j
+@Service
+public class IotPropertyService extends SuperService {
+
+    @Autowired
+    private DeviceInfoDao deviceInfoDao;
+
+    @Autowired
+    private IotMainDao iotMainDao;
+
+    @Autowired
+    private IotDeviceDataDao iotDeviceDataDao;
+
+    /**
+     * 属性上传处理
+     *
+     * @param dataId
+     * @param dataStr
+     * @return
+     */
+    public ResultContent<Object> postAttr(String dataId, String dataStr) {
+        log.info("post attr dataId:{},dataStr:{}", dataId, dataStr);
+        PropertyResult result = new PropertyResult();
+        result.setTime(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
+        PostPropertyParam param = JSONUtil.toBean(dataStr, PostPropertyParam.class);
+        List<DevicePropertyParam> list = param.getList();
+        if (ObjectUtils.isNotEmpty(list)) {
+            for (DevicePropertyParam devicePropertyParam : list) {
+                saveProperties(devicePropertyParam, result);
+            }
+        }
+        result.setSuccess("成功");
+        return ResultContent.buildSuccess(result);
+    }
+
+    private void saveProperties(DevicePropertyParam param, PropertyResult result) {
+        String deviceId = param.getDeviceId();
+        PropertyResult.DeviceAttrs deviceAttrs = result.create(deviceId);
+        DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(deviceId);
+        if (ObjectUtils.isEmpty(deviceInfo)) {
+            deviceAttrs.setFailed(String.format("设备未找到:%s", deviceId));
+            return;
+        }
+        deviceAttrs.setSuccess();
+        HashMap<String, Object> params = param.getParams();
+        if (ObjectUtils.isNotEmpty(params)) {
+            for (String key : params.keySet()) {
+                Object value = params.get(key);
+                saveProperty(deviceId, key, value, deviceAttrs);
+            }
+        }
+    }
+
+    private void saveProperty(String deviceId, String key, Object value, PropertyResult.DeviceAttrs deviceAttrs) {
+
+        deviceAttrs.addSuccess(key);
+    }
+}

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

@@ -1,12 +1,12 @@
 package com.zhongshu.iot.server.core.service.iot;
 
 import com.github.microservice.busInfoModel.device.IotTemplateSimpleModel;
+import com.github.microservice.models.baseParam.NameModel;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.types.FunctionType;
 import com.github.microservice.types.deviceUse.DeviceCategory;
 import com.github.microservice.types.deviceUse.DeviceSpecType;
 import com.github.microservice.types.deviceUse.ThingType;
-import com.github.microservice.models.baseParam.NameModel;
 import com.zhongshu.iot.client.model.iot.*;
 import com.zhongshu.iot.client.type.IotDataType;
 import com.zhongshu.iot.server.core.dao.UserDao;
@@ -500,6 +500,8 @@ public class IotServiceImpl extends SuperService {
         }
         entity.setAboutDataId(aboutDataId);
         iotMainDao.save(entity);
+
+        //
         iotThingSyncService.asyncIotThing(iotThing);
         return ResultContent.buildSuccess();
     }

+ 34 - 0
OneCardIotServer/src/main/java/com/zhongshu/iot/server/core/service/iotPlatform/impl/PostPropertyTopic.java

@@ -0,0 +1,34 @@
+package com.zhongshu.iot.server.core.service.iotPlatform.impl;
+
+import com.github.microservice.net.ResultContent;
+import com.zhongshu.iot.server.core.domain.ExecuteAnnotationService;
+import com.zhongshu.iot.server.core.domain.ExecuteAnnotationServiceMethod;
+import com.zhongshu.iot.server.core.service.iot.IotPropertyService;
+import com.zhongshu.iot.server.core.service.iotPlatform.PlatformTopic;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author TRX
+ * @date 2025/1/13
+ */
+@ExecuteAnnotationService
+@Component
+@Slf4j
+public class PostPropertyTopic implements PlatformTopic {
+
+    @Autowired
+    private IotPropertyService iotPropertyService;
+
+    @Override
+    public String topic() {
+        return "";
+    }
+
+    @ExecuteAnnotationServiceMethod(value = "postAttr", remark = "postAttr属性推送")
+    @Override
+    public ResultContent<Object> action(String dataId, String message) {
+        return iotPropertyService.postAttr(dataId, message);
+    }
+}