瀏覽代碼

Merge branch 'master' of http://git.nzklabs.com:3000/huangyuanhao/jfcloud-coldchain into master

like 6 月之前
父節點
當前提交
c2e6a0ab32
共有 25 個文件被更改,包括 185 次插入133 次删除
  1. 4 0
      snowy-plugin/snowy-plugin-coldchain/pom.xml
  2. 2 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/bean/influxdb/SensorData.java
  3. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/event/SensorDataEventListener.java
  4. 30 7
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/renke/listener/JfcloudColdChainRenKeDefaultDataListener.java
  5. 3 3
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/AbsRenkeMonitorDataProcessor.java
  6. 7 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiCO2TempHumidityProcessor.java
  7. 6 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiLowTempRecorderProcessor1.java
  8. 9 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiLowTempRecorderProcessor2.java
  9. 7 4
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiLowTempRecorderProcessor4.java
  10. 23 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/model/PowerEnum.java
  11. 8 9
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/controller/AppController.java
  12. 13 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/service/AppDeviceService.java
  13. 2 20
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/entity/MonitorTarget.java
  14. 19 9
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/enums/MonitorStatusEnum.java
  15. 0 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/enums/MonitorTargetEnum.java
  16. 2 20
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetAddParam.java
  17. 2 20
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetEditParam.java
  18. 4 4
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/TargetStatus.java
  19. 17 13
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/impl/MonitorTargetServiceImpl.java
  20. 4 3
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/entity/MonitorTargetRegion.java
  21. 3 3
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionAddParam.java
  22. 3 5
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionEditParam.java
  23. 10 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/service/impl/MonitorTargetRegionServiceImpl.java
  24. 5 0
      snowy-plugin/snowy-plugin-sys/pom.xml
  25. 1 2
      snowy-web-app/src/main/java/vip/xiaonuo/weixin/miniapp/controller/WxMaUserController.java

+ 4 - 0
snowy-plugin/snowy-plugin-coldchain/pom.xml

@@ -65,5 +65,9 @@
             <groupId>cn.dev33</groupId>
             <artifactId>sa-token-core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>vip.xiaonuo</groupId>
+            <artifactId>snowy-plugin-auth-api</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 2 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/bean/influxdb/SensorData.java

@@ -14,6 +14,7 @@ import com.influxdb.annotations.Measurement;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import vip.xiaonuo.coldchain.core.service.dataprocess.model.PowerEnum;
 
 @Data
 @AllArgsConstructor
@@ -54,7 +55,7 @@ public class SensorData extends JfcloudInFluxEntity {
      * 插电状态0:插电  1: 不插电
      */
     @Column(name = "plugInStatus", tag = true)
-    private String plugInStatus;
+    private String plugInStatus = PowerEnum.AC.getCode();
 
 
     /**

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/event/SensorDataEventListener.java

@@ -28,7 +28,7 @@ public class SensorDataEventListener {
         SensorData sensorData = event.getSensorData();
         try {
             jfcloudInfluxDBService.writePojo(sensorData);
-            log.info("成功写入数据到 InfluxDB: {}", sensorData);
+//            log.info("成功写入数据到 InfluxDB: {}", sensorData);
         } catch (Exception e) {
             log.error("写入数据到 InfluxDB 时出错: {}", e.getMessage());
         }

+ 30 - 7
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/renke/listener/JfcloudColdChainRenKeDefaultDataListener.java

@@ -1,5 +1,6 @@
 package vip.xiaonuo.coldchain.core.renke.listener;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.json.JSONUtil;
 import lombok.extern.slf4j.Slf4j;
 import rk.netDevice.sdk.p2.*;
@@ -29,26 +30,36 @@ public class JfcloudColdChainRenKeDefaultDataListener implements IDataListener {
 
     @Override
     public void receiveTimmingAck(TimmingAck data) {
+        log.info("================================================================");
         log.info("接收到校时应答: 设备ID = {}", data.getDeviceId());
+        log.info("*************************************************************************");
     }
 
     @Override
     public void receiveTelecontrolAck(TelecontrolAck data) {
+        log.info("================================================================");
         log.info("接收到遥控指令应答: 设备ID = {}", data.getDeviceId());
+        log.info("*************************************************************************");
     }
 
     @Override
     public void receiveStoreData(StoreData data) {
+        log.info("======================== 设备ID: {} ========================================", data.getDeviceId());
         log.info("接收到存储数据: 设备ID = {}", data.getDeviceId());
+
         data.getNodeList().forEach(nodeData -> log.info("记录ID: {}, 记录时间: {}, 温度: {}, 湿度: {}", nodeData.getNodeId(), nodeData.getRecordTime(), nodeData.getTem(), nodeData.getHum()));
-        log.info("================================================================");
+        log.info("*************************************************************************");
     }
 
     @Override
     public void receiveRealtimeData(RealTimeData data) {
-        log.info("接收到实时数据: 设备ID = {}", data.getDeviceId());
-        data.getNodeList().forEach(nodeData -> log.info("记录ID: {}, 记录时间: {}, 温度: {}, 湿度: {}", nodeData.getNodeId(), nodeData.getRecordTime(), nodeData.getTem(), nodeData.getHum()));
-        log.info("================================================================");
+        log.info("======================== 设备ID: {} ========================================", data.getDeviceId());
+        log.info("接收到实时数据: 设备ID = {},时间: {}", data.getDeviceId(), DateUtil.now());
+        data.getNodeList().forEach(nodeData -> {
+            log.info("记录ID: {}, 记录时间: {}, 温度: {}°C, 湿度: {}%", nodeData.getNodeId(), nodeData.getRecordTime(), nodeData.getTem(), nodeData.getHum());
+        });
+        log.info("*************************************************************************");
+
         RenKeColdChainMessageData renKeColdChainMessageData = new RenKeColdChainMessageData();
         renKeColdChainMessageData.setRealTimeData(data);
         renKeColdChainDataHandler.handleRealTimeData(renKeColdChainMessageData);
@@ -56,7 +67,9 @@ public class JfcloudColdChainRenKeDefaultDataListener implements IDataListener {
 
     @Override
     public void receiveLoginData(LoginData data) {
+        log.info("======================== 设备ID: {} ========================================", data.getDeviceId());
         log.info("接收到设备登录信息: 设备ID = {}\n{}", data.getDeviceId(), JSONUtil.toJsonStr(data));
+        log.info("*************************************************************************");
         RenKeColdChainMessageData renKeColdChainMessageData = new RenKeColdChainMessageData();
         renKeColdChainMessageData.setDeviceId(data.getDeviceId());
         renKeColdChainDataHandler.login(renKeColdChainMessageData);
@@ -64,31 +77,41 @@ public class JfcloudColdChainRenKeDefaultDataListener implements IDataListener {
 
     @Override
     public void receiveParamIds(ParamIdsData data) {
+        log.info("======================== 设备ID: {} ========================================", data.getDeviceId());
         log.info("接收到设备参数【编号】信息{}", JSONUtil.toJsonStr(data));
+        log.info("*************************************************************************");
         // 更新设备编号参数
         monitorDeviceService.updateParamIds(data);
     }
 
     @Override
     public void receiveParam(ParamData data) {
+        log.info("======================== 设备ID: {} ========================================", data.getDeviceId());
         log.info("接收到设备参数【配置项目】信息: {}", JSONUtil.toJsonStr(data));
+        log.info("*************************************************************************");
         // 更新设备参数
         monitorDeviceService.updateParameters(data);
     }
 
     @Override
     public void receiveWriteParamAck(WriteParamAck data) {
-        log.info("接收到参数下载应答:{}", data);
+        log.info("======================== 设备ID: {} ========================================", data.getDeviceId());
+        log.info("接收到参数下载应答:{}", JSONUtil.toJsonStr(data));
+        log.info("*************************************************************************");
     }
 
     @Override
     public void receiveTransDataAck(TransDataAck data) {
-        log.info("接收到透传数据应答:{}", data);
+        log.info("======================== 设备ID: {} ========================================", data.getDeviceId());
+        log.info("接收到透传数据应答:{}", JSONUtil.toJsonStr(data));
+        log.info("*************************************************************************");
     }
 
     @Override
     public void receiveHeartbeatData(HeartbeatData heartbeatData) {
-        log.info("接收到心跳包: 设备ID = {}", heartbeatData.getDeviceId());
+        log.info("======================== 设备ID: {} ========================================", heartbeatData.getDeviceId());
+        log.info("接收到心跳包: 设备ID = {}", JSONUtil.toJsonStr(heartbeatData));
+        log.info("*************************************************************************");
         RenKeColdChainMessageData renKeColdChainMessageData = new RenKeColdChainMessageData();
         renKeColdChainMessageData.setDeviceId(heartbeatData.getDeviceId());
         renKeColdChainDataHandler.login(renKeColdChainMessageData);

+ 3 - 3
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/AbsRenkeMonitorDataProcessor.java

@@ -60,7 +60,7 @@ public abstract class AbsRenkeMonitorDataProcessor implements MonitorDataProcess
         // 3. 获取设备ID,并从设备缓存中获取设备型号
         final String deviceId = String.valueOf(data.getDeviceId());
         // 4. 日志记录:输出当前设备的型号信息
-        log.info("开始处理设备数据,设备ID: {}, 设备型号: {}", deviceId, getModelName());
+//        log.info("开始处理设备数据,设备ID: {}, 设备型号: {}", deviceId, getModelName());
         // 5. 将实时数据转换为传感器数据列表
         List<SensorData> sensorDataList = transRealTimeData2SensorDatas(data);
         // 6. 发布传感器数据事件
@@ -111,7 +111,7 @@ public abstract class AbsRenkeMonitorDataProcessor implements MonitorDataProcess
     protected boolean writeSensorData(SensorData sensorData) {
         try {
             applicationEventPublisher.publishEvent(new SensorDataEvent(this, sensorData));
-            log.info("成功发布传感器数据事件: {}", sensorData);
+//            log.info("成功发布传感器数据事件: {}", sensorData);
             return true;
         } catch (Exception e) {
             log.error("保存传感器数据失败: {}", sensorData, e);
@@ -127,7 +127,7 @@ public abstract class AbsRenkeMonitorDataProcessor implements MonitorDataProcess
      */
     protected boolean writeSensorDatas(List<SensorData> sensorDataList) {
         if (sensorDataList.isEmpty()) {
-            log.warn("传感器数据列表为空,无法发布事件");
+//            log.warn("传感器数据列表为空,无法发布事件");
             return false;
         }
         // 遍历传感器数据列表并发布每个数据的事件

+ 7 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiCO2TempHumidityProcessor.java

@@ -9,6 +9,7 @@ import rk.netDevice.sdk.p2.NodeData;
 import rk.netDevice.sdk.p2.RealTimeData;
 import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
 import vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.MonitorDataProcessor;
+import vip.xiaonuo.coldchain.core.service.dataprocess.model.PowerEnum;
 import vip.xiaonuo.coldchain.modular.monitordevice.enums.DeviceModelEnum;
 
 import java.util.List;
@@ -30,12 +31,16 @@ public class WifiCO2TempHumidityProcessor extends AbsRenkeMonitorDataProcessor {
     @Override
     List<SensorData> transRealTimeData2SensorDatas(@NotNull RealTimeData data) {
         List<NodeData> nodeList = data.getNodeList();
-        if (nodeList.size() < 2) {
+        final int numNodes = nodeList.size();
+        if (numNodes < 2) {
             log.error("数据节点数量不够,需要2个节点,但只有{}个", nodeList.size());
             return null;
         }
+        // 最后一路的温度的值0=电源供电  100 电池供电
+        final String plugInStatus = nodeList.get(numNodes - 1).getTem() < 1 ? PowerEnum.AC.getCode() : PowerEnum.DC.getCode();
+        // 最后一路的湿度的值 * 10 表示CO2的含量
+        float CO2 = nodeList.get(numNodes - 1).getHum() * 10;
         NodeData nodeData = nodeList.get(0);
-        float CO2 = nodeList.get(1).getHum() * 10;
         SensorData sensorData = defaultSensorData(data);
         sensorData.setTemperature(nodeData.getTem());
         sensorData.setHumidity(nodeData.getHum());

+ 6 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiLowTempRecorderProcessor1.java

@@ -9,6 +9,7 @@ import rk.netDevice.sdk.p2.NodeData;
 import rk.netDevice.sdk.p2.RealTimeData;
 import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
 import vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.MonitorDataProcessor;
+import vip.xiaonuo.coldchain.core.service.dataprocess.model.PowerEnum;
 import vip.xiaonuo.coldchain.modular.monitordevice.enums.DeviceModelEnum;
 
 import java.util.List;
@@ -30,15 +31,19 @@ public class WifiLowTempRecorderProcessor1 extends AbsRenkeMonitorDataProcessor
     @Override
     List<SensorData> transRealTimeData2SensorDatas(@NotNull RealTimeData data) {
         List<NodeData> nodeList = data.getNodeList();
+        final int numNodes = nodeList.size();
         NodeData nodeData = nodeList.get(0);
+        // 最后一路的温度的值0=电源供电  100 电池供电
+        final String plugInStatus = nodeList.get(numNodes - 1).getTem() < 1 ? PowerEnum.AC.getCode() : PowerEnum.DC.getCode();
         SensorData sensorData = defaultSensorData(data);
         // 只处理有效数据:温度和湿度不为0
         if (nodeData.getTem() != 0.0 || nodeData.getHum() != 0.0) {
-            log.info("记录ID: {}, 记录时间: {}, 温度: {}, 湿度: {}", sensorData.getDeviceId() + " : " + nodeData.getNodeId(), nodeData.getRecordTime(), nodeData.getTem(), nodeData.getHum());
+//            log.info("记录ID: {}, 记录时间: {}, 温度: {}, 湿度: {}", sensorData.getDeviceId() + " : " + nodeData.getNodeId(), nodeData.getRecordTime(), nodeData.getTem(), nodeData.getHum());
             sensorData.setTemperature(nodeData.getTem());
             sensorData.setHumidity(nodeData.getHum());
             sensorData.setLat(nodeData.getLat());
             sensorData.setLng(nodeData.getLng());
+            sensorData.setPlugInStatus(plugInStatus);
         }
         return Lists.newArrayList(sensorData);
     }

+ 9 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiLowTempRecorderProcessor2.java

@@ -9,6 +9,7 @@ import rk.netDevice.sdk.p2.NodeData;
 import rk.netDevice.sdk.p2.RealTimeData;
 import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
 import vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.MonitorDataProcessor;
+import vip.xiaonuo.coldchain.core.service.dataprocess.model.PowerEnum;
 import vip.xiaonuo.coldchain.modular.monitordevice.enums.DeviceModelEnum;
 
 import java.util.List;
@@ -29,22 +30,28 @@ public class WifiLowTempRecorderProcessor2 extends AbsRenkeMonitorDataProcessor
 
     List<SensorData> transRealTimeData2SensorDatas(@NotNull RealTimeData data) {
         List<NodeData> nodeList = data.getNodeList();
-        if (nodeList.size() < 3) {
+        final int numNodes = nodeList.size();
+        if (numNodes < 3) {
             log.error("数据节点数量不够,需要2个节点,但只有{}个", nodeList.size());
             return null;
         }
         List<SensorData> rlt = Lists.newArrayList();
+        // 倒数第二路的温度的值  是电池的电量
+        final float battery = nodeList.get(numNodes - 2).getTem();
+        // 最后一路的温度的值0=电源供电  100 电池供电
+        final String plugInStatus = nodeList.get(numNodes - 1).getTem() < 1 ? PowerEnum.AC.getCode() : PowerEnum.DC.getCode();
         //前面两路的温湿度
         for (int i = 0; i < 2; i++) {
             NodeData nodeData = nodeList.get(i);
             SensorData sensorData = defaultSensorData(data);
-            sensorData.setBattery(nodeList.get(2).getTem());//第三路温度表示电量
             sensorData.setTemperature(nodeData.getTem());
             sensorData.setHumidity(nodeData.getHum());
             sensorData.setLat(nodeData.getLat());
             sensorData.setLng(nodeData.getLng());
             //设置路数
             sensorData.setRoads((i + 1));
+            sensorData.setBattery(battery);//第三路温度表示电量
+            sensorData.setPlugInStatus(plugInStatus);//第三路温度表示电量
             rlt.add(sensorData);
         }
         return rlt;

+ 7 - 4
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiLowTempRecorderProcessor4.java

@@ -9,6 +9,7 @@ import rk.netDevice.sdk.p2.NodeData;
 import rk.netDevice.sdk.p2.RealTimeData;
 import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
 import vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.MonitorDataProcessor;
+import vip.xiaonuo.coldchain.core.service.dataprocess.model.PowerEnum;
 import vip.xiaonuo.coldchain.modular.monitordevice.enums.DeviceModelEnum;
 
 import java.util.List;
@@ -29,14 +30,16 @@ public class WifiLowTempRecorderProcessor4 extends AbsRenkeMonitorDataProcessor
 
     List<SensorData> transRealTimeData2SensorDatas(@NotNull RealTimeData data) {
         List<NodeData> nodeList = data.getNodeList();
-        if (nodeList.size() < 6) {
+        final int numNodes = nodeList.size();
+        if (numNodes < 6) {
             log.error("数据节点数量不够,需要6个节点,但只有{}个", nodeList.size());
             return null;
         }
         List<SensorData> rlt = Lists.newArrayList();
-        //前面4路的温湿度
-        float battery = nodeList.get(4).getTem();
-        String plugInStatus = nodeList.get(5).getTem() < 1 ? "电源供电" : "电池供电";
+        // 倒数第二路的温度的值  是电池的电量
+        final float battery = nodeList.get(numNodes - 2).getTem();
+        // 最后一路的温度的值0=电源供电  100 电池供电
+        final String plugInStatus = nodeList.get(numNodes - 1).getTem() < 1 ? PowerEnum.AC.getCode() : PowerEnum.DC.getCode();
         for (int i = 0; i < 4; i++) {
             NodeData nodeData = nodeList.get(i);
             SensorData sensorData = defaultSensorData(data);

+ 23 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/model/PowerEnum.java

@@ -0,0 +1,23 @@
+package vip.xiaonuo.coldchain.core.service.dataprocess.model;
+
+import lombok.Getter;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/21 20:43:29
+ */
+public enum PowerEnum {
+    AC("AC","电源供电"),
+    DC("DC","电池供电");
+    @Getter
+    private final String code;
+    private final String description;
+
+    PowerEnum(String code, String description) {
+        this.code = code;
+        this.description = description;
+    }
+}

+ 8 - 9
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/controller/AppController.java

@@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.*;
 import vip.xiaonuo.coldchain.modular.app.param.*;
 import vip.xiaonuo.coldchain.modular.app.service.AppDeviceService;
 import vip.xiaonuo.coldchain.modular.app.service.MessageService;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.TargetStatus;
 import vip.xiaonuo.common.pojo.CommonResult;
 
 import java.io.ByteArrayInputStream;
@@ -32,11 +33,12 @@ public class AppController {
 
     @GetMapping("/device-status")
     @Operation(summary = "设备总缆")
-    public CommonResult<DeviceStatus> getDeviceStatus() {
-        int totalDevices = 180;
-        int onlineDevices = 120;
-        int offlineDevices = 60;
-        DeviceStatus deviceStatus = new DeviceStatus(totalDevices, onlineDevices, offlineDevices);
+    public CommonResult<TargetStatus> getDeviceStatus(String keyword) {
+//        int totalDevices = 180;
+//        int onlineDevices = 120;
+//        int offlineDevices = 60;
+//        DeviceStatus deviceStatus = new DeviceStatus(totalDevices, onlineDevices, offlineDevices);
+        TargetStatus deviceStatus = appDeviceService.getDeviceStatus(keyword);
         return CommonResult.data(deviceStatus);
     }
 
@@ -165,10 +167,7 @@ public class AppController {
     }
 
     @GetMapping("/message/list")
-    public List<Message> getMessages(
-            @RequestParam MessageType type,
-            @RequestParam int page,
-            @RequestParam int size) {
+    public List<Message> getMessages(@RequestParam MessageType type, @RequestParam int page, @RequestParam int size) {
         return messageService.getMessages(type, page, size);
     }
 

+ 13 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/service/AppDeviceService.java

@@ -12,11 +12,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.Lists;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
 import vip.xiaonuo.coldchain.modular.app.param.*;
 import vip.xiaonuo.coldchain.modular.app.param.mock.AppDeviceTestDataGenerator;
 import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
 import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.TargetStatus;
 import vip.xiaonuo.coldchain.modular.monitortarget.service.MonitorTargetService;
 
 import java.time.LocalDateTime;
@@ -116,7 +118,7 @@ public class AppDeviceService {
     public Page<AppDevice> pageDevices(AppDevicePageParam appDevicePageParam) {
         List<AppDevice> rlt = Lists.newArrayList();
         MonitorTargetPageParam monitorTargetPageParam = new MonitorTargetPageParam();
-        monitorTargetPageParam.setUserId("1543837863788879871");
+        monitorTargetPageParam.setUserId(StpLoginUserUtil.getLoginUser().getId());
         monitorTargetPageParam.setCurrent(appDevicePageParam.getCurrent());
         monitorTargetPageParam.setSize(appDevicePageParam.getSize());
         Page<MonitorTarget> pageByUser = monitorTargetService.getPageByUser(monitorTargetPageParam);
@@ -127,4 +129,14 @@ public class AppDeviceService {
         });
         return null;
     }
+
+    /**
+     * 获取设备总数
+     *
+     * @param keyword
+     * @return
+     */
+    public TargetStatus getDeviceStatus(String keyword) {
+        return monitorTargetService.getTargetCount();
+    }
 }

+ 2 - 20
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/entity/MonitorTarget.java

@@ -59,35 +59,17 @@ public class MonitorTarget {
     @Schema(description = "监控位置区域")
     private String monitorPoint;
 
-    /**
-     * 传感器类型
-     */
-    @Schema(description = "传感器类型")
-    private String sensorType;
-
-    /**
-     * 采集器编号
-     */
-    @Schema(description = "采集器编号")
-    private String monitorDeviceId;
-
-    /**
-     * 冷链编号
-     */
-    @Schema(description = "冷链编号")
-    private String code;
-
     /**
      * 报警上限
      */
     @Schema(description = "报警上限")
-    private String limitUp;
+    private Float limitUp;
 
     /**
      * 报警下限
      */
     @Schema(description = "报警下限")
-    private String limitDown;
+    private Float limitDown;
 
     /**
      * 记录创建时间

+ 19 - 9
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionTreeParam.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/enums/MonitorStatusEnum.java

@@ -10,20 +10,30 @@
  * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  */
-package vip.xiaonuo.coldchain.modular.monitortargetregion.param;
+package vip.xiaonuo.coldchain.modular.monitortarget.enums;
 
-import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
-import lombok.Setter;
 
 /**
- * 字典树参数
+ * 监控对象管理枚举
  *
- * @author xuyuxiang
- * @date 2022/7/30 21:49
- */
+ * @author 黄渊昊
+ * @date 2024/11/13 16:56
+ **/
 @Getter
-@Setter
-public class MonitorTargetRegionTreeParam {
+public enum MonitorStatusEnum {
+    /**
+     * 设备正常
+     */
+    ONLINE("1", "设备启用"),
+    OFF("2", "设备停用");
+
+    @Getter
+    private final String code;
+    private final String description;
 
+    MonitorStatusEnum(String code, String description) {
+        this.code = code;
+        this.description = description;
+    }
 }

+ 0 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/enums/MonitorTargetEnum.java

@@ -22,7 +22,6 @@ import lombok.Getter;
  **/
 @Getter
 public enum MonitorTargetEnum {
-
     /**
      * 测试
      */

+ 2 - 20
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetAddParam.java

@@ -46,36 +46,18 @@ public class MonitorTargetAddParam {
     @Schema(description = "监控位置区域")
     private String monitorPoint;
 
-    /**
-     * 传感器类型
-     */
-    @Schema(description = "传感器类型")
-    private String sensorType;
-
-    /**
-     * 采集器编号
-     */
-    @Schema(description = "采集器编号")
-    private String monitorDeviceId;
-
-    /**
-     * 冷链编号
-     */
-    @Schema(description = "冷链编号")
-    private String code;
-
     /**
      * 报警上限
      */
     @Schema(description = "报警上限")
     @NotNull(message = "报警上限不能为空")
-    private String limitUp;
+    private Float limitUp;
 
     /**
      * 报警下限
      */
     @Schema(description = "报警下限")
     @NotNull(message = "报警下限不能为空")
-    private String limitDown;
+    private Float limitDown;
 
 }

+ 2 - 20
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetEditParam.java

@@ -54,35 +54,17 @@ public class MonitorTargetEditParam {
     @Schema(description = "监控位置区域")
     private String monitorPoint;
 
-    /**
-     * 传感器类型
-     */
-    @Schema(description = "传感器类型")
-    private String sensorType;
-
-    /**
-     * 采集器编号
-     */
-    @Schema(description = "采集器编号")
-    private String monitorDeviceId;
-
-    /**
-     * 冷链编号
-     */
-    @Schema(description = "冷链编号")
-    private String code;
-
     /**
      * 报警上限
      */
     @Schema(description = "报警上限")
-    private String limitUp;
+    private Float limitUp;
 
     /**
      * 报警下限
      */
     @Schema(description = "报警下限")
-    private String limitDown;
+    private Float limitDown;
 
     /**
      * 最后心跳时间

+ 4 - 4
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/TargetStatus.java

@@ -13,14 +13,14 @@ import lombok.Data;
 @Data
 public class TargetStatus {
     @Schema(description = "设备总数")
-    private int total = 0;
+    private long total = 0;
     @Schema(description = "在线设备总数")
-    private int online = 0;
+    private long online = 0;
     @Schema(description = "离线设备总数")
-    private int offline = 0;
+    private long offline = 0;
 
     // 构造函数
-    public TargetStatus(int totalDevices, int onlineDevices, int offlineDevices) {
+    public TargetStatus(long totalDevices, long onlineDevices, long offlineDevices) {
         this.total = totalDevices;
         this.online = onlineDevices;
         this.offline = offlineDevices;

+ 17 - 13
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/impl/MonitorTargetServiceImpl.java

@@ -23,9 +23,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
 import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
 import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
+import vip.xiaonuo.coldchain.modular.monitortarget.enums.MonitorStatusEnum;
 import vip.xiaonuo.coldchain.modular.monitortarget.mapper.MonitorTargetMapper;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.*;
 import vip.xiaonuo.coldchain.modular.monitortarget.service.MonitorTargetService;
@@ -61,8 +62,7 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
         }
         if (ObjectUtil.isAllNotEmpty(monitorTargetPageParam.getSortField(), monitorTargetPageParam.getSortOrder())) {
             CommonSortOrderEnum.validate(monitorTargetPageParam.getSortOrder());
-            queryWrapper.orderBy(true, monitorTargetPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
-                    StrUtil.toUnderlineCase(monitorTargetPageParam.getSortField()));
+            queryWrapper.orderBy(true, monitorTargetPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()), StrUtil.toUnderlineCase(monitorTargetPageParam.getSortField()));
         } else {
             queryWrapper.lambda().orderByAsc(MonitorTarget::getId);
         }
@@ -120,7 +120,8 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
     public List<MonitorTarget> getListByUser(String userId) {
         LambdaQueryWrapper<MonitorTarget> queryWrapper = new LambdaQueryWrapper<MonitorTarget>();
         if (ObjectUtil.isNotNull(userId)) {
-            queryWrapper.eq(MonitorTarget::getCreateBy, userId).orderByDesc(MonitorTarget::getCreateTime);
+            queryWrapper.eq(MonitorTarget::getCreateBy, userId).eq(MonitorTarget::getStatus,"1")
+                    .orderByDesc(MonitorTarget::getCreateTime);
         }
         queryWrapper.orderByDesc(MonitorTarget::getCreateTime);
         List<MonitorTarget> monitorTargetList = list(queryWrapper);
@@ -136,14 +137,17 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
         if (ObjectUtil.isNotEmpty(monitorTargetPageParam.getName())) {
             queryWrapper.lambda().like(MonitorTarget::getName, monitorTargetPageParam.getName());
         }
+        if (ObjectUtil.isNull(monitorTargetPageParam.getUserId())) {
+            queryWrapper.lambda().eq(MonitorTarget::getCreateBy, StpLoginUserUtil.getLoginUser().getId());
+        } else {
+            queryWrapper.lambda().eq(MonitorTarget::getCreateBy, monitorTargetPageParam.getUserId());
+        }
         if (ObjectUtil.isAllNotEmpty(monitorTargetPageParam.getSortField(), monitorTargetPageParam.getSortOrder())) {
             CommonSortOrderEnum.validate(monitorTargetPageParam.getSortOrder());
-            queryWrapper.orderBy(true, monitorTargetPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
-                    StrUtil.toUnderlineCase(monitorTargetPageParam.getSortField()));
+            queryWrapper.orderBy(true, monitorTargetPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()), StrUtil.toUnderlineCase(monitorTargetPageParam.getSortField()));
         } else {
             queryWrapper.lambda().orderByAsc(MonitorTarget::getId);
         }
-        queryWrapper.lambda().eq(MonitorTarget::getCreateBy, monitorTargetPageParam.getUserId());
         Page<MonitorTarget> page = this.page(CommonPageRequest.defaultPage(), queryWrapper);
         //获取设备区域列表并赋值返回
         page.getRecords().forEach(monitorTarget -> {
@@ -154,14 +158,14 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
 
     @Override
     public TargetStatus getTargetCount() {
-        List<MonitorTarget> monitorTargetList = list();
+        long count = this.count();
         LambdaQueryWrapper<MonitorTarget> onlineQueryWrapper = new LambdaQueryWrapper<>();
-        onlineQueryWrapper.eq(MonitorTarget::getStatus, "1");
-        List<MonitorTarget> monitorTargetListOnline = list(onlineQueryWrapper);
+        onlineQueryWrapper.eq(MonitorTarget::getStatus, MonitorStatusEnum.ONLINE.getCode());
+        long monitorTargetListOnline = count(onlineQueryWrapper);
         LambdaQueryWrapper<MonitorTarget> offlineQueryWrapper = new LambdaQueryWrapper<>();
-        offlineQueryWrapper.eq(MonitorTarget::getStatus, "2");
-        List<MonitorTarget> monitorTargetListOffline = list(offlineQueryWrapper);
-        return new TargetStatus(monitorTargetList.size(), monitorTargetListOnline.size(), monitorTargetListOffline.size());
+        offlineQueryWrapper.eq(MonitorTarget::getStatus, MonitorStatusEnum.OFF.getCode());
+        long monitorTargetListOffline = count(offlineQueryWrapper);
+        return new TargetStatus(count, monitorTargetListOnline, monitorTargetListOffline);
     }
 
     @Override

+ 4 - 3
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/entity/MonitorTargetRegion.java

@@ -14,6 +14,7 @@ package vip.xiaonuo.coldchain.modular.monitortargetregion.entity;
 
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.influxdb.annotations.Column;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotNull;
 import lombok.Getter;
@@ -115,17 +116,17 @@ public class MonitorTargetRegion {
      * 冷链编号
      */
     @Schema(description = "冷链编号")
-    private String code;
+    private String deviceCode;
 
     /**
      * 报警上限
      */
     @Schema(description = "报警上限")
-    private String limitUp;
+    private Float limitUp;
 
     /**
      * 报警下限
      */
     @Schema(description = "报警下限")
-    private String limitDown;
+    private Float limitDown;
 }

+ 3 - 3
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionAddParam.java

@@ -83,17 +83,17 @@ public class MonitorTargetRegionAddParam {
      * 冷链编号
      */
     @Schema(description = "冷链编号")
-    private String code;
+    private String deviceCode;
 
     /**
      * 报警上限
      */
     @Schema(description = "报警上限")
-    private String limitUp;
+    private Float limitUp;
 
     /**
      * 报警下限
      */
     @Schema(description = "报警下限")
-    private String limitDown;
+    private Float limitDown;
 }

+ 3 - 5
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionEditParam.java

@@ -87,19 +87,17 @@ public class MonitorTargetRegionEditParam {
      * 冷链编号
      */
     @Schema(description = "冷链编号")
-    private String code;
+    private String deviceCode;
 
     /**
      * 报警上限
      */
     @Schema(description = "报警上限")
-    @NotNull(message = "报警上限不能为空")
-    private String limitUp;
+    private Float limitUp;
 
     /**
      * 报警下限
      */
     @Schema(description = "报警下限")
-    @NotNull(message = "报警下限不能为空")
-    private String limitDown;
+    private Float limitDown;
 }

+ 10 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/service/impl/MonitorTargetRegionServiceImpl.java

@@ -91,8 +91,16 @@ public class MonitorTargetRegionServiceImpl extends ServiceImpl<MonitorTargetReg
         MonitorDevice monitorDevice = monitorDeviceService.queryEntity(monitorTargetRegionAddParam.getMonitorDeviceId());
         Integer sensorCount = monitorDevice.getSensorCount();
         MonitorTarget monitorTarget = monitorTargetService.queryEntity(monitorTargetRegionAddParam.getMonitorTargetId());
+        LambdaQueryWrapper<MonitorTargetRegion> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(MonitorTargetRegion::getMonitorDeviceId,monitorTargetRegionAddParam.getMonitorDeviceId());
+        List<MonitorTargetRegion> list = list(queryWrapper);
+        for (MonitorTargetRegion monitorTargetRegion : list) {
+            if (monitorTargetRegion.getSensorRoute().equals(monitorTargetRegionAddParam.getSensorRoute())) {
+                throw new CommonException("该传感器路数已被使用,请重新选择");
+            }
+        }
         if (monitorTargetRegionAddParam.getSensorRoute() > sensorCount) {
-            throw new CommonException("该传感器路数已用尽");
+            throw new CommonException("路数超出限制,请重新选择");
         }
         if (ObjectUtil.isNull(monitorTargetRegionAddParam.getLimitUp())) {
             monitorTargetRegionAddParam.setLimitUp(monitorTarget.getLimitUp());
@@ -165,7 +173,7 @@ public class MonitorTargetRegionServiceImpl extends ServiceImpl<MonitorTargetReg
                         new TreeNode<>(locationType.getId(), locationType.getParentId(),
                                 locationType.getName(), 0).setExtra(JSONUtil.parseObj(locationType)))
                 .collect(Collectors.toList());
-        List<Tree<String>> build = TreeUtil.build(treeNodeList, "-1");
+        List<Tree<String>> build = TreeUtil.build(treeNodeList, "0");
         return build;
     }
 

+ 5 - 0
snowy-plugin/snowy-plugin-sys/pom.xml

@@ -39,5 +39,10 @@
             <artifactId>snowy-plugin-mobile-api</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>vip.xiaonuo</groupId>
+            <artifactId>snowy-plugin-api</artifactId>
+        </dependency>
+
     </dependencies>
 </project>

+ 1 - 2
snowy-web-app/src/main/java/vip/xiaonuo/weixin/miniapp/controller/WxMaUserController.java

@@ -56,7 +56,7 @@ public class WxMaUserController {
             SysLoginUser loginUser = sysUserService.getUserByOpenId(openid);
             JfcloudWxMaJscode2SessionResult jfcloudWxMaJscode2SessionResult = new JfcloudWxMaJscode2SessionResult();
             jfcloudWxMaJscode2SessionResult.setOpenid(session.getOpenid());
-            jfcloudWxMaJscode2SessionResult.setSessionKey(session.getSessionKey());
+//            jfcloudWxMaJscode2SessionResult.setSessionKey(session.getSessionKey());
             if (!Objects.isNull(loginUser)) {
                 //非新用户,直接登录返回token
                 String token = authService.doLoginByOpenId(openid, loginUser);
@@ -64,7 +64,6 @@ public class WxMaUserController {
                 jfcloudWxMaJscode2SessionResult.setUser(loginUser);
                 jfcloudWxMaJscode2SessionResult.setToken(token);
                 jfcloudWxMaJscode2SessionResult.setOpenid(session.getOpenid());
-                jfcloudWxMaJscode2SessionResult.setSessionKey(session.getSessionKey());
             }
             return JsonUtils.toJson(jfcloudWxMaJscode2SessionResult);
         } catch (WxErrorException e) {