Kaynağa Gözat

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

like 6 ay önce
ebeveyn
işleme
d8fef639db
70 değiştirilmiş dosya ile 3216 ekleme ve 41 silme
  1. 5 0
      snowy-plugin/snowy-plugin-coldchain/pom.xml
  2. 62 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/bean/influxdb/SensorData.java
  3. 34 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/config/ColdChainAsyncConfig.java
  4. 25 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/event/SensorDataEvent.java
  5. 36 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/event/SensorDataEventListener.java
  6. 3 3
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/RKService.java
  7. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/RenKeTest.java
  8. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/config/JfcloudColdChainConstants.java
  9. 6 5
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/config/JfcloudColdChainServerAutoConfiguration.java
  10. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/config/JfcloudColdChainServerProperties.java
  11. 17 7
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/listener/JfcloudColdChainRenKeDefaultDataListener.java
  12. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/util/IPUtils.java
  13. 44 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/AbstractColdChainDataHandler.java
  14. 30 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/ColdChainDataHandler.java
  15. 33 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/ColdChainHandlerRegistry.java
  16. 29 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/DataHandlerFactory.java
  17. 43 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/beanprocessor/ColdChainDataHandlerBeanPostProcessor.java
  18. 24 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/impl/HaierColdChainDataHandler.java
  19. 63 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/impl/RenKeColdChainDataHandler.java
  20. 17 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/model/ColdChainMessageData.java
  21. 14 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/model/HaierColdChainMessageData.java
  22. 16 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/model/RenKeColdChainMessageData.java
  23. 123 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/controller/MonitorDeviceController.java
  24. 93 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/entity/MonitorDevice.java
  25. 34 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/enums/MonitorDeviceEnum.java
  26. 25 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/mapper/MonitorDeviceMapper.java
  27. 5 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/mapper/mapping/MonitorDeviceMapper.xml
  28. 66 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceAddParam.java
  29. 71 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceEditParam.java
  30. 35 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceIdParam.java
  31. 59 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDevicePageParam.java
  32. 80 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/MonitorDeviceService.java
  33. 100 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/impl/MonitorDeviceServiceImpl.java
  34. 123 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/controller/MonitorDeviceParametersController.java
  35. 81 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/entity/MonitorDeviceParameters.java
  36. 34 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/enums/MonitorDeviceParametersEnum.java
  37. 25 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/mapper/MonitorDeviceParametersMapper.java
  38. 5 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/mapper/mapping/MonitorDeviceParametersMapper.xml
  39. 70 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersAddParam.java
  40. 75 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersEditParam.java
  41. 35 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersIdParam.java
  42. 59 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersPageParam.java
  43. 80 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/service/MonitorDeviceParametersService.java
  44. 100 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/service/impl/MonitorDeviceParametersServiceImpl.java
  45. 123 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/controller/MonitorTargetController.java
  46. 69 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/entity/MonitorTarget.java
  47. 34 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/enums/MonitorTargetEnum.java
  48. 25 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/mapper/MonitorTargetMapper.java
  49. 5 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/mapper/mapping/MonitorTargetMapper.xml
  50. 66 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetAddParam.java
  51. 71 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetEditParam.java
  52. 35 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetIdParam.java
  53. 55 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetPageParam.java
  54. 80 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/MonitorTargetService.java
  55. 97 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/impl/MonitorTargetServiceImpl.java
  56. 123 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/controller/MonitorTargetRegionController.java
  57. 77 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/entity/MonitorTargetRegion.java
  58. 34 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/enums/MonitorTargetRegionEnum.java
  59. 25 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/mapper/MonitorTargetRegionMapper.java
  60. 5 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/mapper/mapping/MonitorTargetRegionMapper.xml
  61. 58 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionAddParam.java
  62. 63 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionEditParam.java
  63. 35 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionIdParam.java
  64. 59 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionPageParam.java
  65. 80 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/service/MonitorTargetRegionService.java
  66. 100 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/service/impl/MonitorTargetRegionServiceImpl.java
  67. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/resources/META-INF/spring.factories
  68. 2 2
      snowy-web-app/src/main/java/vip/xiaonuo/Application.java
  69. 4 18
      snowy-web-app/src/main/resources/_sql/冷链管理系统.sql
  70. 7 1
      snowy-web-app/src/main/resources/application.properties

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

@@ -56,5 +56,10 @@
             <groupId>vip.xiaonuo</groupId>
             <artifactId>snowy-common</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.github.jfcloud</groupId>
+            <artifactId>jfcloud-boot-starter-influxdb</artifactId>
+            <version>K6.6.8</version>
+        </dependency>
     </dependencies>
 </project>

+ 62 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/bean/influxdb/SensorData.java

@@ -0,0 +1,62 @@
+package vip.xiaonuo.coldchain.modular.core.bean.influxdb;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/12 14:02:51
+ */
+
+import com.github.jfcloud.influxdb.model.JfcloudInFluxEntity;
+import com.influxdb.annotations.Column;
+import com.influxdb.annotations.Measurement;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Measurement(name = "sensor_data")
+public class SensorData extends JfcloudInFluxEntity {
+    /**
+     * 设备ID标签
+     */
+    @Column(name = "device_id",tag = true)
+    private String deviceId;
+    /**
+     * 位置标签
+     */
+    @Column(name = "location")
+    private String location;
+    /**
+     * 温度字段
+     */
+    @Column(name = "temperature")
+    private double temperature;
+    /**
+     * 湿度字段
+     */
+    @Column(name = "humidity")
+    private double humidity;
+
+    /**
+     * 二氧化碳浓度字段
+     */
+    @Column(name = "co2")
+    private double co2;
+    /**
+     * 经度字段
+     */
+    @Column(name = "longitude")
+    private double lng;
+
+    /**
+     * 纬度字段
+     */
+    @Column(name = "latitude")
+    private double lat;
+
+
+}

+ 34 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/config/ColdChainAsyncConfig.java

@@ -0,0 +1,34 @@
+package vip.xiaonuo.coldchain.modular.core.config;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/12 15:13:41
+ */
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+@Configuration
+@EnableAsync //(proxyTargetClass = true)
+public class ColdChainAsyncConfig {
+    /**
+     * 创建自定义的线程池配置
+     * 线程池会根据实际需求调整线程数量,但不会超过最大线程数
+     */
+    @Bean
+    public ThreadPoolTaskExecutor coldChainAsyncTask() {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        executor.setCorePoolSize(200);  // 设置核心线程数,假设并发的最小线程数为200
+        executor.setMaxPoolSize(1000);  // 设置最大线程数,允许最多1000个线程并行处理
+        executor.setQueueCapacity(10000);  // 设置队列容量,临时保存10000个请求
+        executor.setKeepAliveSeconds(60);  // 设置线程空闲60秒后销毁
+        executor.setThreadNamePrefix("coldchain-async-");  // 设置线程名称的前缀
+        executor.initialize();
+        return executor;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/event/SensorDataEvent.java

@@ -0,0 +1,25 @@
+package vip.xiaonuo.coldchain.modular.core.event;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/12 15:31:05
+ */
+
+import lombok.Getter;
+import org.springframework.context.ApplicationEvent;
+import vip.xiaonuo.coldchain.modular.core.bean.influxdb.SensorData;
+
+@Getter
+public class SensorDataEvent extends ApplicationEvent {
+
+    private final SensorData sensorData;
+
+    public SensorDataEvent(Object source, SensorData sensorData) {
+        super(source);
+        this.sensorData = sensorData;
+    }
+
+}

+ 36 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/event/SensorDataEventListener.java

@@ -0,0 +1,36 @@
+package vip.xiaonuo.coldchain.modular.core.event;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/12 15:31:43
+ */
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+import vip.xiaonuo.coldchain.modular.core.bean.influxdb.SensorData;
+import com.github.jfcloud.influxdb.service.JfcloudInfluxDBService;
+
+@Slf4j
+@RequiredArgsConstructor
+@Component
+public class SensorDataEventListener {
+    private final JfcloudInfluxDBService jfcloudInfluxDBService;
+
+    @Async
+    @EventListener
+    public void handleSensorDataEvent(SensorDataEvent event) {
+        SensorData sensorData = event.getSensorData();
+        try {
+            jfcloudInfluxDBService.writePojo(sensorData);
+            log.info("成功写入数据到 InfluxDB: {}", sensorData);
+        } catch (Exception e) {
+            log.error("写入数据到 InfluxDB 时出错: {}", e.getMessage());
+        }
+    }
+}

+ 3 - 3
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/renke/RKService.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/RKService.java

@@ -1,10 +1,10 @@
-package vip.xiaonuo.coldchain.modular.renke;
+package vip.xiaonuo.coldchain.modular.core.renke;
 
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Component;
 import rk.netDevice.sdk.p2.ParamIdsData;
 import rk.netDevice.sdk.p2.RSServer;
-import vip.xiaonuo.coldchain.modular.renke.listener.JfcloudColdChainDefaultDataListener;
+import vip.xiaonuo.coldchain.modular.core.renke.listener.JfcloudColdChainRenKeDefaultDataListener;
 
 /**
  * @author jackzhou
@@ -23,7 +23,7 @@ public class RKService {
     }
 
     public void paramIdsData() {
-        ParamIdsData paramIdsData = JfcloudColdChainDefaultDataListener.paramIdsData;
+        ParamIdsData paramIdsData = JfcloudColdChainRenKeDefaultDataListener.paramIdsData;
         rsServer.callParam(30067080, paramIdsData.getPararmIdList());
     }
 

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/renke/RenKeTest.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/RenKeTest.java

@@ -1,4 +1,4 @@
-package vip.xiaonuo.coldchain.modular.renke;
+package vip.xiaonuo.coldchain.modular.core.renke;
 
 import rk.netDevice.sdk.p2.*;
 

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/renke/config/JfcloudColdChainConstants.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/config/JfcloudColdChainConstants.java

@@ -1,4 +1,4 @@
-package vip.xiaonuo.coldchain.modular.renke.config;
+package vip.xiaonuo.coldchain.modular.core.renke.config;
 
 /**
  * @author jackzhou

+ 6 - 5
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/renke/config/JfcloudColdChainServerAutoConfiguration.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/config/JfcloudColdChainServerAutoConfiguration.java

@@ -1,4 +1,4 @@
-package vip.xiaonuo.coldchain.modular.renke.config;
+package vip.xiaonuo.coldchain.modular.core.renke.config;
 
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
@@ -10,8 +10,9 @@ import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.EnableAsync;
 import rk.netDevice.sdk.p2.IDataListener;
 import rk.netDevice.sdk.p2.RSServer;
-import vip.xiaonuo.coldchain.modular.renke.listener.JfcloudColdChainDefaultDataListener;
-import vip.xiaonuo.coldchain.modular.renke.util.IPUtils;
+import vip.xiaonuo.coldchain.modular.core.renke.util.IPUtils;
+import vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.impl.RenKeColdChainDataHandler;
+import vip.xiaonuo.coldchain.modular.core.renke.listener.JfcloudColdChainRenKeDefaultDataListener;
 
 import javax.annotation.PreDestroy;
 import java.util.concurrent.ExecutorService;
@@ -34,9 +35,9 @@ public class JfcloudColdChainServerAutoConfiguration {
      */
     @Bean
     @ConditionalOnMissingBean
-    public IDataListener defaultRkDataListener() {
+    public IDataListener defaultRkDataListener(RenKeColdChainDataHandler renKeColdChainDataHandler) {
         // 使用默认实现 DefaultRKDataListener,便于处理数据
-        return new JfcloudColdChainDefaultDataListener();
+        return new JfcloudColdChainRenKeDefaultDataListener(renKeColdChainDataHandler);
     }
 
     /**

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/renke/config/JfcloudColdChainServerProperties.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/config/JfcloudColdChainServerProperties.java

@@ -1,4 +1,4 @@
-package vip.xiaonuo.coldchain.modular.renke.config;
+package vip.xiaonuo.coldchain.modular.core.renke.config;
 
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;

+ 17 - 7
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/renke/listener/JfcloudColdChainDefaultDataListener.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/listener/JfcloudColdChainRenKeDefaultDataListener.java

@@ -1,8 +1,10 @@
-package vip.xiaonuo.coldchain.modular.renke.listener;
+package vip.xiaonuo.coldchain.modular.core.renke.listener;
 
 import cn.hutool.json.JSONUtil;
 import lombok.extern.slf4j.Slf4j;
 import rk.netDevice.sdk.p2.*;
+import vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.impl.RenKeColdChainDataHandler;
+import vip.xiaonuo.coldchain.modular.core.service.dataprocess.model.RenKeColdChainMessageData;
 
 /**
  * 默认的 RK 数据监听器,用于处理设备通信中的各种事件。
@@ -15,8 +17,13 @@ import rk.netDevice.sdk.p2.*;
  * @date 2024/11/1 15:06:18
  */
 @Slf4j
-public class JfcloudColdChainDefaultDataListener implements IDataListener {
+public class JfcloudColdChainRenKeDefaultDataListener implements IDataListener {
     public static ParamIdsData paramIdsData;
+    private final RenKeColdChainDataHandler renKeColdChainDataHandler;
+
+    public JfcloudColdChainRenKeDefaultDataListener(RenKeColdChainDataHandler renKeColdChainDataHandler) {
+        this.renKeColdChainDataHandler = renKeColdChainDataHandler;
+    }
 
     @Override
     public void receiveTimmingAck(TimmingAck data) {
@@ -39,11 +46,14 @@ public class JfcloudColdChainDefaultDataListener implements IDataListener {
 
     @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("接收到实时数据: 设备ID = {}", data.getDeviceId());
+//        data.getNodeList().forEach(nodeData ->
+//                log.info("记录ID: {}, 记录时间: {}, 温度: {}, 湿度: {}",
+//                        nodeData.getNodeId(),nodeData.getRecordTime(), nodeData.getTem(), nodeData.getHum())
+//        );
+        RenKeColdChainMessageData renKeColdChainMessageData = new RenKeColdChainMessageData();
+        renKeColdChainMessageData.setRealTimeData(data);
+        renKeColdChainDataHandler.handleRealTimeData(renKeColdChainMessageData);
     }
 
     @Override

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/renke/util/IPUtils.java → snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/renke/util/IPUtils.java

@@ -1,4 +1,4 @@
-package vip.xiaonuo.coldchain.modular.renke.util;
+package vip.xiaonuo.coldchain.modular.core.renke.util;
 
 /**
  * @author jackzhou

+ 44 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/AbstractColdChainDataHandler.java

@@ -0,0 +1,44 @@
+package vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler;
+
+import vip.xiaonuo.coldchain.modular.core.service.dataprocess.model.ColdChainMessageData;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/12 13:40:41
+ */
+public abstract class AbstractColdChainDataHandler<T extends ColdChainMessageData> implements ColdChainDataHandler<T> {
+
+    /**
+     * 处理实时数据
+     */
+    public abstract boolean handleRealTimeData(T data);
+
+    /**
+     * 注册处理器到 HandlerRegistry
+     */
+    public void registerHandler() {
+        ColdChainHandlerRegistry.registerHandler(getDataClass(), this);
+    }
+
+    /**
+     * 获取处理的数据类型,使用泛型反射来获取实际类型
+     */
+    public Class<T> getDataClass() {
+        // 获取父类的泛型类型
+        Type superClass = getClass().getGenericSuperclass();
+        if (superClass instanceof ParameterizedType) {
+            ParameterizedType parameterizedType = (ParameterizedType) superClass;
+            Type[] typeArguments = parameterizedType.getActualTypeArguments();
+            // 返回泛型类型的第一个参数
+            return (Class<T>) typeArguments[0];
+        } else {
+            throw new IllegalStateException("无法解析泛型类型");
+        }
+    }
+}

+ 30 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/ColdChainDataHandler.java

@@ -0,0 +1,30 @@
+package vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler;
+
+import vip.xiaonuo.coldchain.modular.core.service.dataprocess.model.ColdChainMessageData;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/12 13:02:41
+ */
+public interface ColdChainDataHandler<T extends ColdChainMessageData> {
+
+    /**
+     * 处理实时数据
+     */
+    boolean handleRealTimeData(T data);
+
+    /**
+     * 注册处理器到 HandlerRegistry
+     */
+    default void registerHandler() {
+        ColdChainHandlerRegistry.registerHandler(getDataClass(), this);
+    }
+
+    /**
+     * 获取处理的数据类型,使用泛型反射来获取实际类型
+     */
+    Class<T> getDataClass();
+}

+ 33 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/ColdChainHandlerRegistry.java

@@ -0,0 +1,33 @@
+package vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler;
+
+import vip.xiaonuo.coldchain.modular.core.service.dataprocess.model.ColdChainMessageData;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/12 13:15:10
+ */
+public class ColdChainHandlerRegistry {
+
+    // 使用线程安全的 ConcurrentHashMap 来存储处理器
+    private static final ConcurrentMap<Class<? extends ColdChainMessageData>, ColdChainDataHandler> handlerMap = new ConcurrentHashMap<>();
+
+    // 注册处理器
+    public static void registerHandler(Class<? extends ColdChainMessageData> dataClass, ColdChainDataHandler handler) {
+        handlerMap.put(dataClass, handler);
+    }
+
+    // 获取处理器
+    public static ColdChainDataHandler getHandler(Class<? extends ColdChainMessageData> dataClass) {
+        return handlerMap.get(dataClass);
+    }
+    // 检查处理器是否已经注册
+    public static boolean isHandlerRegistered(Class<?> dataClass) {
+        return handlerMap.containsKey(dataClass);
+    }
+}

+ 29 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/DataHandlerFactory.java

@@ -0,0 +1,29 @@
+package vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler;
+
+import org.springframework.stereotype.Component;
+import vip.xiaonuo.coldchain.modular.core.service.dataprocess.model.ColdChainMessageData;
+
+/**
+ * DataHandlerFactory - 工厂类通过 Map 注册并返回适合的处理器
+ */
+@Component
+public class DataHandlerFactory {
+
+    /**
+     * 根据数据类型返回相应的处理器
+     *
+     * @param data ColdChain 消息数据
+     * @return 对应的 ColdChainDataHandler
+     */
+    public ColdChainDataHandler<? extends ColdChainMessageData> getDataHandler(ColdChainMessageData data) {
+        // 从 HandlerRegistry 获取相应的处理器
+        ColdChainDataHandler handler = ColdChainHandlerRegistry.getHandler(data.getClass());
+        if (handler == null) {
+            throw new IllegalArgumentException("无法处理该类型的数据: " + data.getClass().getSimpleName());
+        }
+        return handler;
+    }
+}
+
+
+

+ 43 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/beanprocessor/ColdChainDataHandlerBeanPostProcessor.java

@@ -0,0 +1,43 @@
+package vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.beanprocessor;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.stereotype.Component;
+import vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.ColdChainHandlerRegistry;
+import vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.AbstractColdChainDataHandler;
+import vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.ColdChainDataHandler;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description 注册非AbstractColdChainDataHandler的数据处理器
+ * @date 2024/11/12 13:21:44
+ */
+
+@Component
+@Slf4j
+public class ColdChainDataHandlerBeanPostProcessor implements BeanPostProcessor {
+
+    @Override
+    public Object postProcessAfterInitialization(Object bean, String beanName) {
+        // 判断 Bean 是否实现了 ColdChainDataHandler 接口,并且不是 AbstractColdChainDataHandler 的子类
+        if (bean instanceof ColdChainDataHandler && !(bean instanceof AbstractColdChainDataHandler)) {
+            ColdChainDataHandler handler = (ColdChainDataHandler) bean;
+            // 防止重复注册
+            if (!ColdChainHandlerRegistry.isHandlerRegistered(handler.getDataClass())) {
+                handler.registerHandler();  // 自动注册
+                log.info("冷链数据自动注册处理器: {}", handler.getDataClass().getSimpleName());
+            } else {
+                log.warn("冷链数据处理器已经注册: {}", handler.getDataClass().getSimpleName());
+            }
+        }
+        return bean;
+    }
+
+    @Override
+    public Object postProcessBeforeInitialization(Object bean, String beanName) {
+        return bean;  // 不做修改,直接返回
+    }
+}
+

+ 24 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/impl/HaierColdChainDataHandler.java

@@ -0,0 +1,24 @@
+package vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.impl;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.AbstractColdChainDataHandler;
+import vip.xiaonuo.coldchain.modular.core.service.dataprocess.model.HaierColdChainMessageData;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/12 13:03:45
+ */
+@Component
+@Slf4j
+public class HaierColdChainDataHandler extends AbstractColdChainDataHandler<HaierColdChainMessageData> {
+
+    @Override
+    public boolean handleRealTimeData(HaierColdChainMessageData data) {
+        log.info("海尔数据处理器正在实时处理时间,{}");
+        return false;
+    }
+}

+ 63 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/handler/impl/RenKeColdChainDataHandler.java

@@ -0,0 +1,63 @@
+package vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.impl;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.stereotype.Component;
+import rk.netDevice.sdk.p2.RealTimeData;
+import vip.xiaonuo.coldchain.modular.core.bean.influxdb.SensorData;
+import vip.xiaonuo.coldchain.modular.core.event.SensorDataEvent;
+import vip.xiaonuo.coldchain.modular.core.service.dataprocess.handler.AbstractColdChainDataHandler;
+import vip.xiaonuo.coldchain.modular.core.service.dataprocess.model.RenKeColdChainMessageData;
+
+import java.time.Instant;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/12 13:03:45
+ */
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class RenKeColdChainDataHandler extends AbstractColdChainDataHandler<RenKeColdChainMessageData> {
+    private final ApplicationEventPublisher eventPublisher;  // To publish events
+
+    @Override
+    public boolean handleRealTimeData(RenKeColdChainMessageData renKeColdChainMessageData) {
+        RealTimeData data = renKeColdChainMessageData.getRealTimeData();
+        final int deviceId = data.getDeviceId();
+        data.getNodeList().forEach(nodeData -> {
+            SensorData sensorData = new SensorData();
+            // 如果记录时间为空,使用当前时间
+            if (nodeData.getRecordTime() == null) {
+                Instant defaultTime = Instant.now();
+                sensorData.setTime(defaultTime);
+            } else {
+                sensorData.setTime(nodeData.getRecordTime().toInstant());
+            }
+            // 只处理有效数据:温度和湿度不为0
+            if (nodeData.getTem() != 0.0 || nodeData.getHum() != 0.0) {
+                log.info("记录ID: {}, 记录时间: {}, 温度: {}, 湿度: {}", deviceId + " : " + 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.putTag("name","周小杰");
+                writeData(sensorData);
+            }
+        });
+        return Boolean.TRUE;
+    }
+
+    /**
+     * 异步将处理后的数据写入 InfluxDB
+     *
+     * @param sensorData 传感器数据
+     */
+    public void writeData(SensorData sensorData) {
+        eventPublisher.publishEvent(new SensorDataEvent(this, sensorData));
+    }
+}

+ 17 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/model/ColdChainMessageData.java

@@ -0,0 +1,17 @@
+package vip.xiaonuo.coldchain.modular.core.service.dataprocess.model;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/12 13:00:25
+ */
+public interface ColdChainMessageData extends java.io.Serializable {
+    // 默认的时间字段,返回当前时间
+    default LocalDateTime getTimestamp() {
+        return LocalDateTime.now();
+    }
+}

+ 14 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/model/HaierColdChainMessageData.java

@@ -0,0 +1,14 @@
+package vip.xiaonuo.coldchain.modular.core.service.dataprocess.model;
+
+import lombok.Data;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description 海尔
+ * @date 2024/11/12 13:00:46
+ */
+@Data
+public class HaierColdChainMessageData implements ColdChainMessageData{
+}

+ 16 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/core/service/dataprocess/model/RenKeColdChainMessageData.java

@@ -0,0 +1,16 @@
+package vip.xiaonuo.coldchain.modular.core.service.dataprocess.model;
+
+import lombok.Data;
+import rk.netDevice.sdk.p2.RealTimeData;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description 仁科
+ * @date 2024/11/12 13:00:46
+ */
+@Data
+public class RenKeColdChainMessageData implements ColdChainMessageData{
+    private RealTimeData realTimeData;
+}

+ 123 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/controller/MonitorDeviceController.java

@@ -0,0 +1,123 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordevice.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
+import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceAddParam;
+import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceEditParam;
+import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceIdParam;
+import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDevicePageParam;
+import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
+
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 监控设备管理控制器
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:55
+ */
+@Tag(name = "监控设备管理控制器")
+@RestController
+@Validated
+public class MonitorDeviceController {
+
+    @Resource
+    private MonitorDeviceService monitorDeviceService;
+
+    /**
+     * 获取监控设备管理分页
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:55
+     */
+    @Operation(summary = "获取监控设备管理分页")
+    @SaCheckPermission("/coldchain/monitordevice/page")
+    @GetMapping("/coldchain/monitordevice/page")
+    public CommonResult<Page<MonitorDevice>> page(MonitorDevicePageParam monitorDevicePageParam) {
+        return CommonResult.data(monitorDeviceService.page(monitorDevicePageParam));
+    }
+
+    /**
+     * 添加监控设备管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:55
+     */
+    @Operation(summary = "添加监控设备管理")
+    @CommonLog("添加监控设备管理")
+    @SaCheckPermission("/coldchain/monitordevice/add")
+    @PostMapping("/coldchain/monitordevice/add")
+    public CommonResult<String> add(@RequestBody @Valid MonitorDeviceAddParam monitorDeviceAddParam) {
+        monitorDeviceService.add(monitorDeviceAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑监控设备管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:55
+     */
+    @Operation(summary = "编辑监控设备管理")
+    @CommonLog("编辑监控设备管理")
+    @SaCheckPermission("/coldchain/monitordevice/edit")
+    @PostMapping("/coldchain/monitordevice/edit")
+    public CommonResult<String> edit(@RequestBody @Valid MonitorDeviceEditParam monitorDeviceEditParam) {
+        monitorDeviceService.edit(monitorDeviceEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除监控设备管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:55
+     */
+    @Operation(summary = "删除监控设备管理")
+    @CommonLog("删除监控设备管理")
+    @SaCheckPermission("/coldchain/monitordevice/delete")
+    @PostMapping("/coldchain/monitordevice/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<MonitorDeviceIdParam> monitorDeviceIdParamList) {
+        monitorDeviceService.delete(monitorDeviceIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取监控设备管理详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:55
+     */
+    @Operation(summary = "获取监控设备管理详情")
+    @SaCheckPermission("/coldchain/monitordevice/detail")
+    @GetMapping("/coldchain/monitordevice/detail")
+    public CommonResult<MonitorDevice> detail(@Valid MonitorDeviceIdParam monitorDeviceIdParam) {
+        return CommonResult.data(monitorDeviceService.detail(monitorDeviceIdParam));
+    }
+}

+ 93 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/entity/MonitorDevice.java

@@ -0,0 +1,93 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordevice.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 监控设备管理实体
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:55
+ **/
+@Getter
+@Setter
+@TableName("monitor_device")
+public class MonitorDevice {
+
+    /** 设备唯一标识符,UUID */
+    @TableId
+    @Schema(description = "设备唯一标识符,UUID")
+    private String id;
+
+    /** 设备名称 */
+    @Schema(description = "设备名称")
+    private String deviceName;
+
+    /** 设备编码 */
+    @Schema(description = "设备编码")
+    private String deviceCode;
+
+    /** 设备型号 */
+    @Schema(description = "设备型号")
+    private String modelName;
+
+    /** 最后心跳时间 */
+    @Schema(description = "最后心跳时间")
+    private Date lastHeartbeatTime;
+
+    /** 设备状态(1:正常,2:闲置) */
+    @Schema(description = "设备状态(1:正常,2:闲置)")
+    private String status;
+
+    /** 传感器路数 */
+    @Schema(description = "传感器路数")
+    private Integer sensorCount;
+
+    /** 最近登录时间 */
+    @Schema(description = "最近登录时间")
+    private Date lastLoginTime;
+
+    /** 排序码 */
+    @Schema(description = "排序码")
+    private Integer sortCode;
+
+    /** 扩展信息 */
+    @Schema(description = "扩展信息")
+    private String extraInfo;
+
+    /** 删除标志 */
+    @Schema(description = "删除标志")
+    private String isDeleted;
+
+    /** 记录创建时间 */
+    @Schema(description = "记录创建时间")
+    private Date createdAt;
+
+    /** 记录创建用户 */
+    @Schema(description = "记录创建用户")
+    private String createdBy;
+
+    /** 记录修改时间 */
+    @Schema(description = "记录修改时间")
+    private Date updatedAt;
+
+    /** 记录修改用户 */
+    @Schema(description = "记录修改用户")
+    private String updatedBy;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/enums/MonitorDeviceEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordevice.enums;
+
+import lombok.Getter;
+
+/**
+ * 监控设备管理枚举
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:55
+ **/
+@Getter
+public enum MonitorDeviceEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    MonitorDeviceEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/mapper/MonitorDeviceMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordevice.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
+
+/**
+ * 监控设备管理Mapper接口
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:55
+ **/
+public interface MonitorDeviceMapper extends BaseMapper<MonitorDevice> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/mapper/mapping/MonitorDeviceMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.coldchain.modular.monitordevice.mapper.MonitorDeviceMapper">
+
+</mapper>

+ 66 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceAddParam.java

@@ -0,0 +1,66 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordevice.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 监控设备管理添加参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:55
+ **/
+@Getter
+@Setter
+public class MonitorDeviceAddParam {
+
+    /** 设备名称 */
+    @Schema(description = "设备名称")
+    private String deviceName;
+
+    /** 设备编码 */
+    @Schema(description = "设备编码")
+    private String deviceCode;
+
+    /** 设备型号 */
+    @Schema(description = "设备型号")
+    private String modelName;
+
+    /** 最后心跳时间 */
+    @Schema(description = "最后心跳时间")
+    private Date lastHeartbeatTime;
+
+    /** 设备状态(1:正常,2:闲置) */
+    @Schema(description = "设备状态(1:正常,2:闲置)")
+    private String status;
+
+    /** 传感器路数 */
+    @Schema(description = "传感器路数")
+    private Integer sensorCount;
+
+    /** 最近登录时间 */
+    @Schema(description = "最近登录时间")
+    private Date lastLoginTime;
+
+    /** 排序码 */
+    @Schema(description = "排序码")
+    private Integer sortCode;
+
+}

+ 71 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceEditParam.java

@@ -0,0 +1,71 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordevice.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 监控设备管理编辑参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:55
+ **/
+@Getter
+@Setter
+public class MonitorDeviceEditParam {
+
+    /** 设备唯一标识符,UUID */
+    @Schema(description = "设备唯一标识符,UUID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 设备名称 */
+    @Schema(description = "设备名称")
+    private String deviceName;
+
+    /** 设备编码 */
+    @Schema(description = "设备编码")
+    private String deviceCode;
+
+    /** 设备型号 */
+    @Schema(description = "设备型号")
+    private String modelName;
+
+    /** 最后心跳时间 */
+    @Schema(description = "最后心跳时间")
+    private Date lastHeartbeatTime;
+
+    /** 设备状态(1:正常,2:闲置) */
+    @Schema(description = "设备状态(1:正常,2:闲置)")
+    private String status;
+
+    /** 传感器路数 */
+    @Schema(description = "传感器路数")
+    private Integer sensorCount;
+
+    /** 最近登录时间 */
+    @Schema(description = "最近登录时间")
+    private Date lastLoginTime;
+
+    /** 排序码 */
+    @Schema(description = "排序码")
+    private Integer sortCode;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordevice.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 监控设备管理Id参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:55
+ **/
+@Getter
+@Setter
+public class MonitorDeviceIdParam {
+
+    /** 设备唯一标识符,UUID */
+    @Schema(description = "设备唯一标识符,UUID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 59 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDevicePageParam.java

@@ -0,0 +1,59 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordevice.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 监控设备管理查询参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:55
+ **/
+@Getter
+@Setter
+public class MonitorDevicePageParam {
+
+    /** 当前页 */
+    @Schema(description = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @Schema(description = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @Schema(description = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @Schema(description = "关键词")
+    private String searchKey;
+
+    /** 设备名称 */
+    @Schema(description = "设备名称")
+    private String deviceName;
+
+    /** 设备编码 */
+    @Schema(description = "设备编码")
+    private String deviceCode;
+
+}

+ 80 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/MonitorDeviceService.java

@@ -0,0 +1,80 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordevice.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
+import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceAddParam;
+import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceEditParam;
+import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceIdParam;
+import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDevicePageParam;
+
+import java.util.List;
+
+/**
+ * 监控设备管理Service接口
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:55
+ **/
+public interface MonitorDeviceService extends IService<MonitorDevice> {
+
+    /**
+     * 获取监控设备管理分页
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:55
+     */
+    Page<MonitorDevice> page(MonitorDevicePageParam monitorDevicePageParam);
+
+    /**
+     * 添加监控设备管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:55
+     */
+    void add(MonitorDeviceAddParam monitorDeviceAddParam);
+
+    /**
+     * 编辑监控设备管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:55
+     */
+    void edit(MonitorDeviceEditParam monitorDeviceEditParam);
+
+    /**
+     * 删除监控设备管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:55
+     */
+    void delete(List<MonitorDeviceIdParam> monitorDeviceIdParamList);
+
+    /**
+     * 获取监控设备管理详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:55
+     */
+    MonitorDevice detail(MonitorDeviceIdParam monitorDeviceIdParam);
+
+    /**
+     * 获取监控设备管理详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:55
+     **/
+    MonitorDevice queryEntity(String id);
+}

+ 100 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/impl/MonitorDeviceServiceImpl.java

@@ -0,0 +1,100 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordevice.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
+import vip.xiaonuo.coldchain.modular.monitordevice.mapper.MonitorDeviceMapper;
+import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceAddParam;
+import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceEditParam;
+import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceIdParam;
+import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDevicePageParam;
+import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
+
+import java.util.List;
+
+/**
+ * 监控设备管理Service接口实现类
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:55
+ **/
+@Service
+public class MonitorDeviceServiceImpl extends ServiceImpl<MonitorDeviceMapper, MonitorDevice> implements MonitorDeviceService {
+
+    @Override
+    public Page<MonitorDevice> page(MonitorDevicePageParam monitorDevicePageParam) {
+        QueryWrapper<MonitorDevice> queryWrapper = new QueryWrapper<MonitorDevice>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(monitorDevicePageParam.getDeviceName())) {
+            queryWrapper.lambda().like(MonitorDevice::getDeviceName, monitorDevicePageParam.getDeviceName());
+        }
+        if(ObjectUtil.isNotEmpty(monitorDevicePageParam.getDeviceCode())) {
+            queryWrapper.lambda().eq(MonitorDevice::getDeviceCode, monitorDevicePageParam.getDeviceCode());
+        }
+        if(ObjectUtil.isAllNotEmpty(monitorDevicePageParam.getSortField(), monitorDevicePageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(monitorDevicePageParam.getSortOrder());
+            queryWrapper.orderBy(true, monitorDevicePageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(monitorDevicePageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(MonitorDevice::getSortCode);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(MonitorDeviceAddParam monitorDeviceAddParam) {
+        MonitorDevice monitorDevice = BeanUtil.toBean(monitorDeviceAddParam, MonitorDevice.class);
+        this.save(monitorDevice);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(MonitorDeviceEditParam monitorDeviceEditParam) {
+        MonitorDevice monitorDevice = this.queryEntity(monitorDeviceEditParam.getId());
+        BeanUtil.copyProperties(monitorDeviceEditParam, monitorDevice);
+        this.updateById(monitorDevice);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<MonitorDeviceIdParam> monitorDeviceIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(monitorDeviceIdParamList, MonitorDeviceIdParam::getId));
+    }
+
+    @Override
+    public MonitorDevice detail(MonitorDeviceIdParam monitorDeviceIdParam) {
+        return this.queryEntity(monitorDeviceIdParam.getId());
+    }
+
+    @Override
+    public MonitorDevice queryEntity(String id) {
+        MonitorDevice monitorDevice = this.getById(id);
+        if(ObjectUtil.isEmpty(monitorDevice)) {
+            throw new CommonException("监控设备管理不存在,id值为:{}", id);
+        }
+        return monitorDevice;
+    }
+}

+ 123 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/controller/MonitorDeviceParametersController.java

@@ -0,0 +1,123 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordeviceparameters.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.entity.MonitorDeviceParameters;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersAddParam;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersEditParam;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersIdParam;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersPageParam;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.service.MonitorDeviceParametersService;
+
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 设备参数及其配置控制器
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 17:03
+ */
+@Tag(name = "设备参数及其配置控制器")
+@RestController
+@Validated
+public class MonitorDeviceParametersController {
+
+    @Resource
+    private MonitorDeviceParametersService monitorDeviceParametersService;
+
+    /**
+     * 获取设备参数及其配置分页
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 17:03
+     */
+    @Operation(summary = "获取设备参数及其配置分页")
+    @SaCheckPermission("/coldchain/monitordeviceparameters/page")
+    @GetMapping("/coldchain/monitordeviceparameters/page")
+    public CommonResult<Page<MonitorDeviceParameters>> page(MonitorDeviceParametersPageParam monitorDeviceParametersPageParam) {
+        return CommonResult.data(monitorDeviceParametersService.page(monitorDeviceParametersPageParam));
+    }
+
+    /**
+     * 添加设备参数及其配置
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 17:03
+     */
+    @Operation(summary = "添加设备参数及其配置")
+    @CommonLog("添加设备参数及其配置")
+    @SaCheckPermission("/coldchain/monitordeviceparameters/add")
+    @PostMapping("/coldchain/monitordeviceparameters/add")
+    public CommonResult<String> add(@RequestBody @Valid MonitorDeviceParametersAddParam monitorDeviceParametersAddParam) {
+        monitorDeviceParametersService.add(monitorDeviceParametersAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑设备参数及其配置
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 17:03
+     */
+    @Operation(summary = "编辑设备参数及其配置")
+    @CommonLog("编辑设备参数及其配置")
+    @SaCheckPermission("/coldchain/monitordeviceparameters/edit")
+    @PostMapping("/coldchain/monitordeviceparameters/edit")
+    public CommonResult<String> edit(@RequestBody @Valid MonitorDeviceParametersEditParam monitorDeviceParametersEditParam) {
+        monitorDeviceParametersService.edit(monitorDeviceParametersEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除设备参数及其配置
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 17:03
+     */
+    @Operation(summary = "删除设备参数及其配置")
+    @CommonLog("删除设备参数及其配置")
+    @SaCheckPermission("/coldchain/monitordeviceparameters/delete")
+    @PostMapping("/coldchain/monitordeviceparameters/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<MonitorDeviceParametersIdParam> monitorDeviceParametersIdParamList) {
+        monitorDeviceParametersService.delete(monitorDeviceParametersIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取设备参数及其配置详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 17:03
+     */
+    @Operation(summary = "获取设备参数及其配置详情")
+    @SaCheckPermission("/coldchain/monitordeviceparameters/detail")
+    @GetMapping("/coldchain/monitordeviceparameters/detail")
+    public CommonResult<MonitorDeviceParameters> detail(@Valid MonitorDeviceParametersIdParam monitorDeviceParametersIdParam) {
+        return CommonResult.data(monitorDeviceParametersService.detail(monitorDeviceParametersIdParam));
+    }
+}

+ 81 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/entity/MonitorDeviceParameters.java

@@ -0,0 +1,81 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordeviceparameters.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 设备参数及其配置实体
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 17:03
+ **/
+@Getter
+@Setter
+@TableName("monitor_device_parameters")
+public class MonitorDeviceParameters {
+
+    /** 主键 */
+    @TableId
+    @Schema(description = "主键")
+    private String id;
+
+    /** 监控设备ID */
+    @Schema(description = "监控设备ID")
+    private Integer monitorDeviceId;
+
+    /** 参数ID,每个参数的唯一标识 */
+    @Schema(description = "参数ID,每个参数的唯一标识")
+    private Integer paramId;
+
+    /** 参数类型 */
+    @Schema(description = "参数类型")
+    private String paramType;
+
+    /** 参数描述 */
+    @Schema(description = "参数描述")
+    private String description;
+
+    /** 参数值 */
+    @Schema(description = "参数值")
+    private String value;
+
+    /** 参数长度 */
+    @Schema(description = "参数长度")
+    private Integer length;
+
+    /** 参数的最小值 */
+    @Schema(description = "参数的最小值")
+    private Integer minValue;
+
+    /** 参数的最大值 */
+    @Schema(description = "参数的最大值")
+    private Integer maxValue;
+
+    /** 可选的值描述 */
+    @Schema(description = "可选的值描述")
+    private String valueDescription;
+
+    /** 记录创建时间 */
+    @Schema(description = "记录创建时间")
+    private Date createdAt;
+
+    /** 记录更新时间 */
+    @Schema(description = "记录更新时间")
+    private Date updatedAt;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/enums/MonitorDeviceParametersEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordeviceparameters.enums;
+
+import lombok.Getter;
+
+/**
+ * 设备参数及其配置枚举
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 17:03
+ **/
+@Getter
+public enum MonitorDeviceParametersEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    MonitorDeviceParametersEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/mapper/MonitorDeviceParametersMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordeviceparameters.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.entity.MonitorDeviceParameters;
+
+/**
+ * 设备参数及其配置Mapper接口
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 17:03
+ **/
+public interface MonitorDeviceParametersMapper extends BaseMapper<MonitorDeviceParameters> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/mapper/mapping/MonitorDeviceParametersMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.coldchain.modular.monitordeviceparameters.mapper.MonitorDeviceParametersMapper">
+
+</mapper>

+ 70 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersAddParam.java

@@ -0,0 +1,70 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordeviceparameters.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 设备参数及其配置添加参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 17:03
+ **/
+@Getter
+@Setter
+public class MonitorDeviceParametersAddParam {
+
+    /** 监控设备ID */
+    @Schema(description = "监控设备ID")
+    private Integer monitorDeviceId;
+
+    /** 参数ID,每个参数的唯一标识 */
+    @Schema(description = "参数ID,每个参数的唯一标识")
+    private Integer paramId;
+
+    /** 参数类型 */
+    @Schema(description = "参数类型")
+    private String paramType;
+
+    /** 参数描述 */
+    @Schema(description = "参数描述")
+    private String description;
+
+    /** 参数值 */
+    @Schema(description = "参数值")
+    private String value;
+
+    /** 参数长度 */
+    @Schema(description = "参数长度")
+    private Integer length;
+
+    /** 参数的最小值 */
+    @Schema(description = "参数的最小值")
+    private Integer minValue;
+
+    /** 参数的最大值 */
+    @Schema(description = "参数的最大值")
+    private Integer maxValue;
+
+    /** 可选的值描述 */
+    @Schema(description = "可选的值描述")
+    private String valueDescription;
+
+}

+ 75 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersEditParam.java

@@ -0,0 +1,75 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordeviceparameters.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 设备参数及其配置编辑参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 17:03
+ **/
+@Getter
+@Setter
+public class MonitorDeviceParametersEditParam {
+
+    /** 主键 */
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 监控设备ID */
+    @Schema(description = "监控设备ID")
+    private Integer monitorDeviceId;
+
+    /** 参数ID,每个参数的唯一标识 */
+    @Schema(description = "参数ID,每个参数的唯一标识")
+    private Integer paramId;
+
+    /** 参数类型 */
+    @Schema(description = "参数类型")
+    private String paramType;
+
+    /** 参数描述 */
+    @Schema(description = "参数描述")
+    private String description;
+
+    /** 参数值 */
+    @Schema(description = "参数值")
+    private String value;
+
+    /** 参数长度 */
+    @Schema(description = "参数长度")
+    private Integer length;
+
+    /** 参数的最小值 */
+    @Schema(description = "参数的最小值")
+    private Integer minValue;
+
+    /** 参数的最大值 */
+    @Schema(description = "参数的最大值")
+    private Integer maxValue;
+
+    /** 可选的值描述 */
+    @Schema(description = "可选的值描述")
+    private String valueDescription;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordeviceparameters.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 设备参数及其配置Id参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 17:03
+ **/
+@Getter
+@Setter
+public class MonitorDeviceParametersIdParam {
+
+    /** 主键 */
+    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 59 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/param/MonitorDeviceParametersPageParam.java

@@ -0,0 +1,59 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordeviceparameters.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 设备参数及其配置查询参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 17:03
+ **/
+@Getter
+@Setter
+public class MonitorDeviceParametersPageParam {
+
+    /** 当前页 */
+    @Schema(description = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @Schema(description = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @Schema(description = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @Schema(description = "关键词")
+    private String searchKey;
+
+    /** 参数类型 */
+    @Schema(description = "参数类型")
+    private String paramType;
+
+    /** 参数值 */
+    @Schema(description = "参数值")
+    private String value;
+
+}

+ 80 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/service/MonitorDeviceParametersService.java

@@ -0,0 +1,80 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordeviceparameters.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.entity.MonitorDeviceParameters;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersAddParam;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersEditParam;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersIdParam;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersPageParam;
+
+import java.util.List;
+
+/**
+ * 设备参数及其配置Service接口
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 17:03
+ **/
+public interface MonitorDeviceParametersService extends IService<MonitorDeviceParameters> {
+
+    /**
+     * 获取设备参数及其配置分页
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 17:03
+     */
+    Page<MonitorDeviceParameters> page(MonitorDeviceParametersPageParam monitorDeviceParametersPageParam);
+
+    /**
+     * 添加设备参数及其配置
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 17:03
+     */
+    void add(MonitorDeviceParametersAddParam monitorDeviceParametersAddParam);
+
+    /**
+     * 编辑设备参数及其配置
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 17:03
+     */
+    void edit(MonitorDeviceParametersEditParam monitorDeviceParametersEditParam);
+
+    /**
+     * 删除设备参数及其配置
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 17:03
+     */
+    void delete(List<MonitorDeviceParametersIdParam> monitorDeviceParametersIdParamList);
+
+    /**
+     * 获取设备参数及其配置详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 17:03
+     */
+    MonitorDeviceParameters detail(MonitorDeviceParametersIdParam monitorDeviceParametersIdParam);
+
+    /**
+     * 获取设备参数及其配置详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 17:03
+     **/
+    MonitorDeviceParameters queryEntity(String id);
+}

+ 100 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordeviceparameters/service/impl/MonitorDeviceParametersServiceImpl.java

@@ -0,0 +1,100 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitordeviceparameters.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.entity.MonitorDeviceParameters;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.mapper.MonitorDeviceParametersMapper;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersAddParam;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersEditParam;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersIdParam;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.param.MonitorDeviceParametersPageParam;
+import vip.xiaonuo.coldchain.modular.monitordeviceparameters.service.MonitorDeviceParametersService;
+
+import java.util.List;
+
+/**
+ * 设备参数及其配置Service接口实现类
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 17:03
+ **/
+@Service
+public class MonitorDeviceParametersServiceImpl extends ServiceImpl<MonitorDeviceParametersMapper, MonitorDeviceParameters> implements MonitorDeviceParametersService {
+
+    @Override
+    public Page<MonitorDeviceParameters> page(MonitorDeviceParametersPageParam monitorDeviceParametersPageParam) {
+        QueryWrapper<MonitorDeviceParameters> queryWrapper = new QueryWrapper<MonitorDeviceParameters>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(monitorDeviceParametersPageParam.getParamType())) {
+            queryWrapper.lambda().eq(MonitorDeviceParameters::getParamType, monitorDeviceParametersPageParam.getParamType());
+        }
+        if(ObjectUtil.isNotEmpty(monitorDeviceParametersPageParam.getValue())) {
+            queryWrapper.lambda().like(MonitorDeviceParameters::getValue, monitorDeviceParametersPageParam.getValue());
+        }
+        if(ObjectUtil.isAllNotEmpty(monitorDeviceParametersPageParam.getSortField(), monitorDeviceParametersPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(monitorDeviceParametersPageParam.getSortOrder());
+            queryWrapper.orderBy(true, monitorDeviceParametersPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(monitorDeviceParametersPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(MonitorDeviceParameters::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(MonitorDeviceParametersAddParam monitorDeviceParametersAddParam) {
+        MonitorDeviceParameters monitorDeviceParameters = BeanUtil.toBean(monitorDeviceParametersAddParam, MonitorDeviceParameters.class);
+        this.save(monitorDeviceParameters);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(MonitorDeviceParametersEditParam monitorDeviceParametersEditParam) {
+        MonitorDeviceParameters monitorDeviceParameters = this.queryEntity(monitorDeviceParametersEditParam.getId());
+        BeanUtil.copyProperties(monitorDeviceParametersEditParam, monitorDeviceParameters);
+        this.updateById(monitorDeviceParameters);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<MonitorDeviceParametersIdParam> monitorDeviceParametersIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(monitorDeviceParametersIdParamList, MonitorDeviceParametersIdParam::getId));
+    }
+
+    @Override
+    public MonitorDeviceParameters detail(MonitorDeviceParametersIdParam monitorDeviceParametersIdParam) {
+        return this.queryEntity(monitorDeviceParametersIdParam.getId());
+    }
+
+    @Override
+    public MonitorDeviceParameters queryEntity(String id) {
+        MonitorDeviceParameters monitorDeviceParameters = this.getById(id);
+        if(ObjectUtil.isEmpty(monitorDeviceParameters)) {
+            throw new CommonException("设备参数及其配置不存在,id值为:{}", id);
+        }
+        return monitorDeviceParameters;
+    }
+}

+ 123 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/controller/MonitorTargetController.java

@@ -0,0 +1,123 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortarget.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetAddParam;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetEditParam;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetIdParam;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
+import vip.xiaonuo.coldchain.modular.monitortarget.service.MonitorTargetService;
+
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 目标设备管理控制器
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:56
+ */
+@Tag(name = "目标设备管理控制器")
+@RestController
+@Validated
+public class MonitorTargetController {
+
+    @Resource
+    private MonitorTargetService monitorTargetService;
+
+    /**
+     * 获取目标设备管理分页
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:56
+     */
+    @Operation(summary = "获取目标设备管理分页")
+    @SaCheckPermission("/coldchain/monitortarget/page")
+    @GetMapping("/coldchain/monitortarget/page")
+    public CommonResult<Page<MonitorTarget>> page(MonitorTargetPageParam monitorTargetPageParam) {
+        return CommonResult.data(monitorTargetService.page(monitorTargetPageParam));
+    }
+
+    /**
+     * 添加目标设备管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:56
+     */
+    @Operation(summary = "添加目标设备管理")
+    @CommonLog("添加目标设备管理")
+    @SaCheckPermission("/coldchain/monitortarget/add")
+    @PostMapping("/coldchain/monitortarget/add")
+    public CommonResult<String> add(@RequestBody @Valid MonitorTargetAddParam monitorTargetAddParam) {
+        monitorTargetService.add(monitorTargetAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑目标设备管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:56
+     */
+    @Operation(summary = "编辑目标设备管理")
+    @CommonLog("编辑目标设备管理")
+    @SaCheckPermission("/coldchain/monitortarget/edit")
+    @PostMapping("/coldchain/monitortarget/edit")
+    public CommonResult<String> edit(@RequestBody @Valid MonitorTargetEditParam monitorTargetEditParam) {
+        monitorTargetService.edit(monitorTargetEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除目标设备管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:56
+     */
+    @Operation(summary = "删除目标设备管理")
+    @CommonLog("删除目标设备管理")
+    @SaCheckPermission("/coldchain/monitortarget/delete")
+    @PostMapping("/coldchain/monitortarget/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<MonitorTargetIdParam> monitorTargetIdParamList) {
+        monitorTargetService.delete(monitorTargetIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取目标设备管理详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:56
+     */
+    @Operation(summary = "获取目标设备管理详情")
+    @SaCheckPermission("/coldchain/monitortarget/detail")
+    @GetMapping("/coldchain/monitortarget/detail")
+    public CommonResult<MonitorTarget> detail(@Valid MonitorTargetIdParam monitorTargetIdParam) {
+        return CommonResult.data(monitorTargetService.detail(monitorTargetIdParam));
+    }
+}

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

@@ -0,0 +1,69 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortarget.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 目标设备管理实体
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:56
+ **/
+@Getter
+@Setter
+@TableName("monitor_target")
+public class MonitorTarget {
+
+    /** ID */
+    @TableId
+    @Schema(description = "ID")
+    private String id;
+
+    /** 名称 */
+    @Schema(description = "名称")
+    private String name;
+
+    /** 状态(1:正常,2:闲置) */
+    @Schema(description = "状态(1:正常,2:闲置)")
+    private String status;
+
+    /** 监控位置区域 */
+    @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;
+
+    /** 报警下限 */
+    @Schema(description = "报警下限")
+    private String limitDown;
+}

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

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortarget.enums;
+
+import lombok.Getter;
+
+/**
+ * 目标设备管理枚举
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:56
+ **/
+@Getter
+public enum MonitorTargetEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    MonitorTargetEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/mapper/MonitorTargetMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortarget.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
+
+/**
+ * 目标设备管理Mapper接口
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:56
+ **/
+public interface MonitorTargetMapper extends BaseMapper<MonitorTarget> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/mapper/mapping/MonitorTargetMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.coldchain.modular.monitortarget.mapper.MonitorTargetMapper">
+
+</mapper>

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

@@ -0,0 +1,66 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortarget.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 目标设备管理添加参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:56
+ **/
+@Getter
+@Setter
+public class MonitorTargetAddParam {
+
+    /** 名称 */
+    @Schema(description = "名称")
+    private String name;
+
+    /** 状态(1:正常,2:闲置) */
+    @Schema(description = "状态(1:正常,2:闲置)")
+    private String status;
+
+    /** 监控位置区域 */
+    @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;
+
+    /** 报警下限 */
+    @Schema(description = "报警下限")
+    private String limitDown;
+
+}

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

@@ -0,0 +1,71 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortarget.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 目标设备管理编辑参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:56
+ **/
+@Getter
+@Setter
+public class MonitorTargetEditParam {
+
+    /** ID */
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 名称 */
+    @Schema(description = "名称")
+    private String name;
+
+    /** 状态(1:正常,2:闲置) */
+    @Schema(description = "状态(1:正常,2:闲置)")
+    private String status;
+
+    /** 监控位置区域 */
+    @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;
+
+    /** 报警下限 */
+    @Schema(description = "报警下限")
+    private String limitDown;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortarget.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 目标设备管理Id参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:56
+ **/
+@Getter
+@Setter
+public class MonitorTargetIdParam {
+
+    /** ID */
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 55 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetPageParam.java

@@ -0,0 +1,55 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortarget.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 目标设备管理查询参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:56
+ **/
+@Getter
+@Setter
+public class MonitorTargetPageParam {
+
+    /** 当前页 */
+    @Schema(description = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @Schema(description = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @Schema(description = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @Schema(description = "关键词")
+    private String searchKey;
+
+    /** 名称 */
+    @Schema(description = "名称")
+    private String name;
+
+}

+ 80 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/MonitorTargetService.java

@@ -0,0 +1,80 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortarget.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetAddParam;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetEditParam;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetIdParam;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
+
+import java.util.List;
+
+/**
+ * 目标设备管理Service接口
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:56
+ **/
+public interface MonitorTargetService extends IService<MonitorTarget> {
+
+    /**
+     * 获取目标设备管理分页
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:56
+     */
+    Page<MonitorTarget> page(MonitorTargetPageParam monitorTargetPageParam);
+
+    /**
+     * 添加目标设备管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:56
+     */
+    void add(MonitorTargetAddParam monitorTargetAddParam);
+
+    /**
+     * 编辑目标设备管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:56
+     */
+    void edit(MonitorTargetEditParam monitorTargetEditParam);
+
+    /**
+     * 删除目标设备管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:56
+     */
+    void delete(List<MonitorTargetIdParam> monitorTargetIdParamList);
+
+    /**
+     * 获取目标设备管理详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:56
+     */
+    MonitorTarget detail(MonitorTargetIdParam monitorTargetIdParam);
+
+    /**
+     * 获取目标设备管理详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:56
+     **/
+    MonitorTarget queryEntity(String id);
+}

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

@@ -0,0 +1,97 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortarget.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
+import vip.xiaonuo.coldchain.modular.monitortarget.mapper.MonitorTargetMapper;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetAddParam;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetEditParam;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetIdParam;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
+import vip.xiaonuo.coldchain.modular.monitortarget.service.MonitorTargetService;
+
+import java.util.List;
+
+/**
+ * 目标设备管理Service接口实现类
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:56
+ **/
+@Service
+public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, MonitorTarget> implements MonitorTargetService {
+
+    @Override
+    public Page<MonitorTarget> page(MonitorTargetPageParam monitorTargetPageParam) {
+        QueryWrapper<MonitorTarget> queryWrapper = new QueryWrapper<MonitorTarget>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(monitorTargetPageParam.getName())) {
+            queryWrapper.lambda().like(MonitorTarget::getName, monitorTargetPageParam.getName());
+        }
+        if(ObjectUtil.isAllNotEmpty(monitorTargetPageParam.getSortField(), monitorTargetPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(monitorTargetPageParam.getSortOrder());
+            queryWrapper.orderBy(true, monitorTargetPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(monitorTargetPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(MonitorTarget::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(MonitorTargetAddParam monitorTargetAddParam) {
+        MonitorTarget monitorTarget = BeanUtil.toBean(monitorTargetAddParam, MonitorTarget.class);
+        this.save(monitorTarget);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(MonitorTargetEditParam monitorTargetEditParam) {
+        MonitorTarget monitorTarget = this.queryEntity(monitorTargetEditParam.getId());
+        BeanUtil.copyProperties(monitorTargetEditParam, monitorTarget);
+        this.updateById(monitorTarget);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<MonitorTargetIdParam> monitorTargetIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(monitorTargetIdParamList, MonitorTargetIdParam::getId));
+    }
+
+    @Override
+    public MonitorTarget detail(MonitorTargetIdParam monitorTargetIdParam) {
+        return this.queryEntity(monitorTargetIdParam.getId());
+    }
+
+    @Override
+    public MonitorTarget queryEntity(String id) {
+        MonitorTarget monitorTarget = this.getById(id);
+        if(ObjectUtil.isEmpty(monitorTarget)) {
+            throw new CommonException("目标设备管理不存在,id值为:{}", id);
+        }
+        return monitorTarget;
+    }
+}

+ 123 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/controller/MonitorTargetRegionController.java

@@ -0,0 +1,123 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortargetregion.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionAddParam;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionEditParam;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionIdParam;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionPageParam;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.service.MonitorTargetRegionService;
+
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 区域管理控制器
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:57
+ */
+@Tag(name = "区域管理控制器")
+@RestController
+@Validated
+public class MonitorTargetRegionController {
+
+    @Resource
+    private MonitorTargetRegionService monitorTargetRegionService;
+
+    /**
+     * 获取区域管理分页
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:57
+     */
+    @Operation(summary = "获取区域管理分页")
+    @SaCheckPermission("/coldchain/monitortargetregion/page")
+    @GetMapping("/coldchain/monitortargetregion/page")
+    public CommonResult<Page<MonitorTargetRegion>> page(MonitorTargetRegionPageParam monitorTargetRegionPageParam) {
+        return CommonResult.data(monitorTargetRegionService.page(monitorTargetRegionPageParam));
+    }
+
+    /**
+     * 添加区域管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:57
+     */
+    @Operation(summary = "添加区域管理")
+    @CommonLog("添加区域管理")
+    @SaCheckPermission("/coldchain/monitortargetregion/add")
+    @PostMapping("/coldchain/monitortargetregion/add")
+    public CommonResult<String> add(@RequestBody @Valid MonitorTargetRegionAddParam monitorTargetRegionAddParam) {
+        monitorTargetRegionService.add(monitorTargetRegionAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑区域管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:57
+     */
+    @Operation(summary = "编辑区域管理")
+    @CommonLog("编辑区域管理")
+    @SaCheckPermission("/coldchain/monitortargetregion/edit")
+    @PostMapping("/coldchain/monitortargetregion/edit")
+    public CommonResult<String> edit(@RequestBody @Valid MonitorTargetRegionEditParam monitorTargetRegionEditParam) {
+        monitorTargetRegionService.edit(monitorTargetRegionEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除区域管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:57
+     */
+    @Operation(summary = "删除区域管理")
+    @CommonLog("删除区域管理")
+    @SaCheckPermission("/coldchain/monitortargetregion/delete")
+    @PostMapping("/coldchain/monitortargetregion/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<MonitorTargetRegionIdParam> monitorTargetRegionIdParamList) {
+        monitorTargetRegionService.delete(monitorTargetRegionIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取区域管理详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:57
+     */
+    @Operation(summary = "获取区域管理详情")
+    @SaCheckPermission("/coldchain/monitortargetregion/detail")
+    @GetMapping("/coldchain/monitortargetregion/detail")
+    public CommonResult<MonitorTargetRegion> detail(@Valid MonitorTargetRegionIdParam monitorTargetRegionIdParam) {
+        return CommonResult.data(monitorTargetRegionService.detail(monitorTargetRegionIdParam));
+    }
+}

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

@@ -0,0 +1,77 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortargetregion.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 区域管理实体
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:57
+ **/
+@Getter
+@Setter
+@TableName("monitor_target_region")
+public class MonitorTargetRegion {
+
+    /** 区域唯一标识符,UUID */
+    @TableId
+    @Schema(description = "区域唯一标识符,UUID")
+    private String id;
+
+    /** 区域名称 */
+    @Schema(description = "区域名称")
+    private String name;
+
+    /** 上级区域ID */
+    @Schema(description = "上级区域ID")
+    private String parentId;
+
+    /** 监控目标设备 */
+    @Schema(description = "监控目标设备")
+    private String monitorTargetId;
+
+    /** 传感器编号 */
+    @Schema(description = "传感器编号")
+    private String sensorCode;
+
+    /** 传感器类型 */
+    @Schema(description = "传感器类型")
+    private String sensorType;
+
+    /** 传感器路数 */
+    @Schema(description = "传感器路数")
+    private Integer sensorRoute;
+
+    /** 记录创建时间 */
+    @Schema(description = "记录创建时间")
+    private Date createdAt;
+
+    /** 记录创建用户 */
+    @Schema(description = "记录创建用户")
+    private String createdBy;
+
+    /** 记录修改时间 */
+    @Schema(description = "记录修改时间")
+    private Date updatedAt;
+
+    /** 记录修改用户 */
+    @Schema(description = "记录修改用户")
+    private String updatedBy;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/enums/MonitorTargetRegionEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortargetregion.enums;
+
+import lombok.Getter;
+
+/**
+ * 区域管理枚举
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:57
+ **/
+@Getter
+public enum MonitorTargetRegionEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    MonitorTargetRegionEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/mapper/MonitorTargetRegionMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortargetregion.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
+
+/**
+ * 区域管理Mapper接口
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:57
+ **/
+public interface MonitorTargetRegionMapper extends BaseMapper<MonitorTargetRegion> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/mapper/mapping/MonitorTargetRegionMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.coldchain.modular.monitortargetregion.mapper.MonitorTargetRegionMapper">
+
+</mapper>

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

@@ -0,0 +1,58 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortargetregion.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 区域管理添加参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:57
+ **/
+@Getter
+@Setter
+public class MonitorTargetRegionAddParam {
+
+    /** 区域名称 */
+    @Schema(description = "区域名称")
+    private String name;
+
+    /** 上级区域ID */
+    @Schema(description = "上级区域ID")
+    private String parentId;
+
+    /** 监控目标设备 */
+    @Schema(description = "监控目标设备")
+    private String monitorTargetId;
+
+    /** 传感器编号 */
+    @Schema(description = "传感器编号")
+    private String sensorCode;
+
+    /** 传感器类型 */
+    @Schema(description = "传感器类型")
+    private String sensorType;
+
+    /** 传感器路数 */
+    @Schema(description = "传感器路数")
+    private Integer sensorRoute;
+
+}

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

@@ -0,0 +1,63 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortargetregion.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 区域管理编辑参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:57
+ **/
+@Getter
+@Setter
+public class MonitorTargetRegionEditParam {
+
+    /** 区域唯一标识符,UUID */
+    @Schema(description = "区域唯一标识符,UUID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 区域名称 */
+    @Schema(description = "区域名称")
+    private String name;
+
+    /** 上级区域ID */
+    @Schema(description = "上级区域ID")
+    private String parentId;
+
+    /** 监控目标设备 */
+    @Schema(description = "监控目标设备")
+    private String monitorTargetId;
+
+    /** 传感器编号 */
+    @Schema(description = "传感器编号")
+    private String sensorCode;
+
+    /** 传感器类型 */
+    @Schema(description = "传感器类型")
+    private String sensorType;
+
+    /** 传感器路数 */
+    @Schema(description = "传感器路数")
+    private Integer sensorRoute;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortargetregion.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 区域管理Id参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:57
+ **/
+@Getter
+@Setter
+public class MonitorTargetRegionIdParam {
+
+    /** 区域唯一标识符,UUID */
+    @Schema(description = "区域唯一标识符,UUID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 59 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionPageParam.java

@@ -0,0 +1,59 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortargetregion.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 区域管理查询参数
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:57
+ **/
+@Getter
+@Setter
+public class MonitorTargetRegionPageParam {
+
+    /** 当前页 */
+    @Schema(description = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @Schema(description = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @Schema(description = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @Schema(description = "关键词")
+    private String searchKey;
+
+    /** 区域名称 */
+    @Schema(description = "区域名称")
+    private String name;
+
+    /** 监控目标设备 */
+    @Schema(description = "监控目标设备")
+    private String monitorTargetId;
+
+}

+ 80 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/service/MonitorTargetRegionService.java

@@ -0,0 +1,80 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortargetregion.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionAddParam;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionEditParam;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionIdParam;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionPageParam;
+
+import java.util.List;
+
+/**
+ * 区域管理Service接口
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:57
+ **/
+public interface MonitorTargetRegionService extends IService<MonitorTargetRegion> {
+
+    /**
+     * 获取区域管理分页
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:57
+     */
+    Page<MonitorTargetRegion> page(MonitorTargetRegionPageParam monitorTargetRegionPageParam);
+
+    /**
+     * 添加区域管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:57
+     */
+    void add(MonitorTargetRegionAddParam monitorTargetRegionAddParam);
+
+    /**
+     * 编辑区域管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:57
+     */
+    void edit(MonitorTargetRegionEditParam monitorTargetRegionEditParam);
+
+    /**
+     * 删除区域管理
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:57
+     */
+    void delete(List<MonitorTargetRegionIdParam> monitorTargetRegionIdParamList);
+
+    /**
+     * 获取区域管理详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:57
+     */
+    MonitorTargetRegion detail(MonitorTargetRegionIdParam monitorTargetRegionIdParam);
+
+    /**
+     * 获取区域管理详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/13 16:57
+     **/
+    MonitorTargetRegion queryEntity(String id);
+}

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

@@ -0,0 +1,100 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortargetregion.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.mapper.MonitorTargetRegionMapper;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionAddParam;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionEditParam;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionIdParam;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.param.MonitorTargetRegionPageParam;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.service.MonitorTargetRegionService;
+
+import java.util.List;
+
+/**
+ * 区域管理Service接口实现类
+ *
+ * @author 黄渊昊
+ * @date  2024/11/13 16:57
+ **/
+@Service
+public class MonitorTargetRegionServiceImpl extends ServiceImpl<MonitorTargetRegionMapper, MonitorTargetRegion> implements MonitorTargetRegionService {
+
+    @Override
+    public Page<MonitorTargetRegion> page(MonitorTargetRegionPageParam monitorTargetRegionPageParam) {
+        QueryWrapper<MonitorTargetRegion> queryWrapper = new QueryWrapper<MonitorTargetRegion>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(monitorTargetRegionPageParam.getName())) {
+            queryWrapper.lambda().like(MonitorTargetRegion::getName, monitorTargetRegionPageParam.getName());
+        }
+        if(ObjectUtil.isNotEmpty(monitorTargetRegionPageParam.getMonitorTargetId())) {
+            queryWrapper.lambda().like(MonitorTargetRegion::getMonitorTargetId, monitorTargetRegionPageParam.getMonitorTargetId());
+        }
+        if(ObjectUtil.isAllNotEmpty(monitorTargetRegionPageParam.getSortField(), monitorTargetRegionPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(monitorTargetRegionPageParam.getSortOrder());
+            queryWrapper.orderBy(true, monitorTargetRegionPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(monitorTargetRegionPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(MonitorTargetRegion::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(MonitorTargetRegionAddParam monitorTargetRegionAddParam) {
+        MonitorTargetRegion monitorTargetRegion = BeanUtil.toBean(monitorTargetRegionAddParam, MonitorTargetRegion.class);
+        this.save(monitorTargetRegion);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(MonitorTargetRegionEditParam monitorTargetRegionEditParam) {
+        MonitorTargetRegion monitorTargetRegion = this.queryEntity(monitorTargetRegionEditParam.getId());
+        BeanUtil.copyProperties(monitorTargetRegionEditParam, monitorTargetRegion);
+        this.updateById(monitorTargetRegion);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<MonitorTargetRegionIdParam> monitorTargetRegionIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(monitorTargetRegionIdParamList, MonitorTargetRegionIdParam::getId));
+    }
+
+    @Override
+    public MonitorTargetRegion detail(MonitorTargetRegionIdParam monitorTargetRegionIdParam) {
+        return this.queryEntity(monitorTargetRegionIdParam.getId());
+    }
+
+    @Override
+    public MonitorTargetRegion queryEntity(String id) {
+        MonitorTargetRegion monitorTargetRegion = this.getById(id);
+        if(ObjectUtil.isEmpty(monitorTargetRegion)) {
+            throw new CommonException("区域管理不存在,id值为:{}", id);
+        }
+        return monitorTargetRegion;
+    }
+}

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/resources/META-INF/spring.factories

@@ -1 +1 @@
-org.springframework.boot.autoconfigure.EnableAutoConfiguration=vip.xiaonuo.coldchain.modular.renke.config.JfcloudColdChainServerAutoConfiguration
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=vip.xiaonuo.coldchain.modular.core.renke.config.JfcloudColdChainServerAutoConfiguration

+ 2 - 2
snowy-web-app/src/main/java/vip/xiaonuo/Application.java

@@ -22,7 +22,7 @@ import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.core.env.Environment;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
-import vip.xiaonuo.coldchain.modular.renke.RKService;
+import vip.xiaonuo.coldchain.modular.core.renke.RKService;
 
 /**
  * SpringBoot方式启动类
@@ -32,7 +32,7 @@ import vip.xiaonuo.coldchain.modular.renke.RKService;
  */
 @Slf4j
 @RestController
-@SpringBootApplication
+@SpringBootApplication(scanBasePackages = {"vip.xiaonuo","com.github.jfcloud"})
 public class Application {
     @Autowired
     RKService service;

+ 4 - 18
snowy-web-app/src/main/resources/_sql/冷链管理系统.sql

@@ -2,19 +2,6 @@ SET NAMES utf8mb4;
 SET FOREIGN_KEY_CHECKS = 0;
 
 
--- ----------------------------
--- Table structure for device_type
--- ----------------------------
-DROP TABLE IF EXISTS `device_type`;
-CREATE TABLE `device_type`  (
-  `id` VARCHAR(50) NOT NULL,
-  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称',
-  `remarks` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述',
-  `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '类型(0:监控设备,1:目标设备)',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '设备类型' ROW_FORMAT = Dynamic;
-
-
 -- ----------------------------
 -- Table structure for monitor_device 监控设备表
 -- ----------------------------
@@ -35,7 +22,7 @@ CREATE TABLE `monitor_device` (
   `created_by` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '记录创建用户',  -- 创建用户
   `updated_at` DATETIME NULL DEFAULT NULL COMMENT '记录修改时间',  -- 记录的修改时间
   `updated_by` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '记录修改用户',  -- 修改用户
-  PRIMARY KEY (`device_id`) USING BTREE
+  PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '监控设备管理表,存储设备信息及其状态管理' ROW_FORMAT = Dynamic;
 
 
@@ -50,7 +37,6 @@ CREATE TABLE `monitor_target`  (
   `status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '状态(1:正常,2:闲置)',
   `monitor_point` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '监控位置区域',
   `sensor_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '传感器类型',
-  `device_type_id` VARCHAR(50) NULL DEFAULT NULL COMMENT '设备类型id',
   `monitor_device_id` VARCHAR(50) NULL DEFAULT NULL COMMENT '监控设备编号',  -- 监控目标设备的UUID
   `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '冷链编号',
   `limit_up` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '报警上限',
@@ -73,7 +59,7 @@ CREATE TABLE `monitor_target_region` (
   `created_by` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '记录创建用户',  -- 创建用户
   `updated_at` DATETIME NULL DEFAULT NULL COMMENT '记录修改时间',  -- 记录修改时间
   `updated_by` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '记录修改用户',  -- 修改用户
-  PRIMARY KEY (`region_id`) USING BTREE
+  PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '区域管理表,用于管理设备区域结构' ROW_FORMAT = Dynamic;
 
 
@@ -103,12 +89,12 @@ CREATE TABLE monitor_device_parameters (
     value_description TEXT COMMENT '可选的值描述,存储该参数可能的取值描述或枚举值',                   -- 可选的值描述 (如关联继电器)
     created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间', -- 创建时间
     updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间', -- 更新时间
-    UNIQUE KEY(device_id, param_id) COMMENT '确保每个设备的每个参数唯一'           -- 唯一约束,确保每个设备的每个参数唯一
+    UNIQUE KEY(id, param_id) COMMENT '确保每个设备的每个参数唯一'           -- 唯一约束,确保每个设备的每个参数唯一
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='存储设备参数及其配置的数据表';  -- 表级注释
 
 
 
-INSERT INTO monitor_device_parameters (id, device_id, param_id, param_type, description, value, length, min_value, max_value, value_description, created_at, updated_at)
+INSERT INTO monitor_device_parameters (id, monitor_device_id, param_id, param_type, description, value, length, min_value, max_value, value_description, created_at, updated_at)
 VALUES
 ('1', 30067080, 2, 'STRING', '网口服务器1URL地址', '10.0.1.125', 64, 0, 0, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
 ('2', 30067080, 3, 'INT16U', '网口服务器1源端口', '-25132', 0, 0, 0, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),

+ 7 - 1
snowy-web-app/src/main/resources/application.properties

@@ -1,7 +1,7 @@
 #########################################
 # server configuration
 #########################################
-server.port=82
+server.port=51182
 
 #########################################
 # spring allow-circular-references
@@ -32,6 +32,12 @@ spring.datasource.dynamic.datasource.master.username=root
 spring.datasource.dynamic.datasource.master.password=Root123...
 spring.datasource.dynamic.strict=true
 
+# influxdb
+spring.data.influxdb.url=${INFLUXDB_URL:http://192.168.67.228:8086}
+spring.data.influxdb.token=${INFLUXDB_TOKEN:1NdDyN3LCKIEBFkQ1AqAmRSitZGfdCs0nuF11nLQbTcnN_5mp_asnfFnmAXTvDDQXGr83llxuXJu5wNTPtrsIw==}
+spring.data.influxdb.org=${INFLUXDB_ORG:jfcloud}
+spring.data.influxdb.bucket=${INFLUXDB_BUCKET:jfcloud}
+
 # postgres
 #spring.datasource.dynamic.datasource.master.driver-class-name=org.postgresql.Driver
 #spring.datasource.dynamic.datasource.master.url=jdbc:postgresql://localhost:5432/snowy