浏览代码

更新!

TRX 1 年之前
父节点
当前提交
fd425cc95f

+ 61 - 0
OneCardIotServer/src/main/java/com/zhongshu/iot/server/core/controller/devices/DeviceDataController.java

@@ -0,0 +1,61 @@
+package com.zhongshu.iot.server.core.controller.devices;
+
+import com.github.microservice.auth.security.annotations.ResourceAuth;
+import com.github.microservice.auth.security.type.AuthType;
+import com.github.microservice.models.baseParam.IDParam;
+import com.github.microservice.models.iotDeviceData.IotDeviceDataModel;
+import com.github.microservice.models.iotDeviceData.IotDeviceDataSearch;
+import com.github.microservice.net.ResultContent;
+import com.zhongshu.iot.server.core.service.iot.IotDeviceDataService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 设备管理 服务
+ *
+ * @author TRX
+ * @date 2024/3/21
+ */
+@RequestMapping("/deviceData")
+@RestController
+@Validated
+@Tag(name = "设备数据")
+public class DeviceDataController {
+
+    @Autowired
+    private IotDeviceDataService iotDeviceDataService;
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "设备列表(所有的)-分页查询")
+    @RequestMapping(value = {"page"}, method = {RequestMethod.POST})
+    public ResultContent<Page<IotDeviceDataModel>> page(
+            @Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
+            @Parameter(required = false) IotDeviceDataSearch param) {
+        return iotDeviceDataService.page(pageable, param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "数据详情")
+    @RequestMapping(value = "detail", method = {RequestMethod.POST})
+    public ResultContent<IotDeviceDataModel> detail(@RequestBody IDParam param) {
+        return iotDeviceDataService.detail(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "删除数据")
+    @RequestMapping(value = "delete", method = {RequestMethod.POST})
+    public ResultContent delete(@RequestBody IDParam param) {
+        return iotDeviceDataService.delete(param.getId());
+    }
+
+}

+ 5 - 0
OneCardIotServer/src/main/java/com/zhongshu/iot/server/core/dao/iot/impl/IotDeviceDataDaoImpl.java

@@ -5,6 +5,7 @@ import com.github.microservice.models.iotDeviceData.IotDeviceDataSearch;
 import com.zhongshu.iot.server.core.dao.base.BaseImpl;
 import com.zhongshu.iot.server.core.dao.iot.extend.IotDeviceDataDaoExtend;
 import com.zhongshu.iot.server.core.domain.iot.IotDeviceData;
+import com.zhongshu.iot.server.core.domain.iot.IotMain;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,6 +41,10 @@ public class IotDeviceDataDaoImpl extends BaseImpl implements IotDeviceDataDaoEx
     private Criteria buildFilterCriteria(IotDeviceDataSearch param) {
         Criteria criteria = buildCriteriaAboutTime(param);
 
+        if (StringUtils.isNotEmpty(param.getIotMainId())) {
+            criteria.and("iotMain").is(IotMain.build(param.getIotMainId()));
+        }
+
         if (StringUtils.isNotEmpty(param.getDeviceId())) {
             criteria.and("deviceId").is(param.getDeviceId());
         }

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

@@ -50,7 +50,7 @@ public class IotDeviceData extends SuperEntity {
     private String property;
 
     @Schema(description = "对应的值")
-    private Object data;
+    private Object value;
 
     @Schema(description = "数据类型,如:当前数据,历史数据")
     private IotDeviceDataType dataType = IotDeviceDataType.Current;

+ 34 - 3
OneCardIotServer/src/main/java/com/zhongshu/iot/server/core/service/iot/IotDeviceDataService.java

@@ -2,7 +2,9 @@ package com.zhongshu.iot.server.core.service.iot;
 
 import com.github.microservice.models.iotDeviceData.IotDeviceDataModel;
 import com.github.microservice.models.iotDeviceData.IotDeviceDataSearch;
+import com.github.microservice.models.iotDeviceData.IotDeviceDataSimpleModel;
 import com.github.microservice.net.ResultContent;
+import com.github.microservice.net.ResultMessage;
 import com.github.microservice.types.deviceUse.IotDeviceDataType;
 import com.zhongshu.iot.client.type.IotDataType;
 import com.zhongshu.iot.server.core.dao.iot.IotDeviceDataDao;
@@ -71,7 +73,7 @@ public class IotDeviceDataService {
             temp.setDeviceId(deviceId);
             temp.setProjectCode(iotMain.getProjectCode());
             temp.setProperty(property);
-            temp.setData(value);
+            temp.setValue(value);
             temp.setDataType(IotDeviceDataType.Current);
             temp.setTimes();
             temp.setTimeStr(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
@@ -79,7 +81,7 @@ public class IotDeviceDataService {
             iotDeviceDataDao.save(temp);
 
             // 发送刷新信息
-            iotFreshService.sendPageFreshMessage(iotMain);
+            iotFreshService.sendPageFreshMessage(temp);
             return ResultContent.buildSuccess();
         } else {
             return ResultContent.buildFail("没找到对应属性");
@@ -96,7 +98,7 @@ public class IotDeviceDataService {
     public Object getDevicePropertyValue(String deviceId, String property) {
         IotDeviceData entity = getDevicePropertyObject(deviceId, property);
         if (entity != null) {
-            return entity.getData();
+            return entity.getValue();
         }
         return null;
     }
@@ -135,6 +137,26 @@ public class IotDeviceDataService {
         return ResultContent.buildSuccess(PageEntityUtil.toPageModel(page, this::toModel));
     }
 
+    public ResultContent<IotDeviceDataModel> detail(String id) {
+        IotDeviceData entity = iotDeviceDataDao.findTopById(id);
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        return ResultContent.buildSuccess(toModel(entity));
+    }
+
+    public ResultContent delete(String id) {
+        IotDeviceData entity = iotDeviceDataDao.findTopById(id);
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        if (entity.getDataType() == IotDeviceDataType.Current) {
+            return ResultContent.buildFail("当前最新数据无法删除");
+        }
+        iotDeviceDataDao.delete(entity);
+        return ResultContent.buildSuccess();
+    }
+
     public IotDeviceDataModel toModel(IotDeviceData entity) {
         IotDeviceDataModel model = null;
         if (ObjectUtils.isNotEmpty(entity)) {
@@ -144,4 +166,13 @@ public class IotDeviceDataService {
         return model;
     }
 
+    public IotDeviceDataSimpleModel toSimpleModel(IotDeviceData entity) {
+        IotDeviceDataSimpleModel model = null;
+        if (ObjectUtils.isNotEmpty(entity)) {
+            model = new IotDeviceDataSimpleModel();
+            BeanUtils.copyProperties(entity, model);
+        }
+        return model;
+    }
+
 }

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

@@ -3,8 +3,10 @@ package com.zhongshu.iot.server.core.service.iot;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.github.microservice.dataConfig.IotTtlConfig;
+import com.github.microservice.models.iotDeviceData.IotDeviceDataSimpleModel;
 import com.github.microservice.net.ResultContent;
 import com.zhongshu.iot.server.core.dao.mqtt.DeviceInfoDao;
+import com.zhongshu.iot.server.core.domain.iot.IotDeviceData;
 import com.zhongshu.iot.server.core.domain.iot.IotMain;
 import com.zhongshu.iot.server.core.domain.iot.message.OperationMessageResult;
 import com.zhongshu.iot.server.core.service.device.GateWayManagerService;
@@ -33,6 +35,9 @@ public class IotFreshService {
     @Autowired
     private GateWayManagerService gateWayManagerService;
 
+    @Autowired
+    private IotDeviceDataService iotDeviceDataService;
+
     /**
      * 发送页面刷新消息
      * @param messageResult
@@ -69,9 +74,36 @@ public class IotFreshService {
         return ResultContent.buildSuccess();
     }
 
+    /**
+     * 有
+     * @param entity
+     * @return
+     */
+    public ResultContent sendPageFreshMessage(IotDeviceData entity) {
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail("消息信息为空");
+        }
+        IotMain iotMain = entity.getIotMain();
+        String iotThingId = iotMain.getIotThingId();
+        String messageId = entity.getId();
+        String topicDevice = String.format("/page/fresh/message/%s", iotThingId);
 
-    public ResultContent sendPageFreshMessage(IotMain iotMain) {
+        IotDeviceDataSimpleModel model = iotDeviceDataService.toSimpleModel(entity);
+        JSONObject data = JSONUtil.parseObj(model);
+//        JSONObject data = new JSONObject();
+//        data.set("iotThingId", iotThingId);
+//        data.set("deviceId", entity.getDeviceId());
+//        data.set("gateWayId", iotMain.getGateWayId());
 
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.set("id", messageId);
+        jsonObject.set("data", data);
+        jsonObject.set("timeStr", DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternyyyySSS));
+        jsonObject.set("time", System.currentTimeMillis());
+        jsonObject.set("ttl", IotTtlConfig.MQTT_TIME_OUT_TTL);
+        jsonObject.set("issued", Boolean.TRUE);
+        mqClient.sendObject(topicDevice, JSONUtil.toJsonStr(jsonObject), messageId);
+        log.info("sendPageFreshMessage: {}", jsonObject.toString());
         return ResultContent.buildSuccess();
     }