Преглед на файлове

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

# Conflicts:
#	snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/impl/MonitorDeviceServiceImpl.java
jackzhou преди 6 месеца
родител
ревизия
1f1bcd9050
променени са 27 файла, в които са добавени 1523 реда и са изтрити 152 реда
  1. 110 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/JfcloudSensorDataService.java
  2. 9 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/entity/MonitorDevice.java
  3. 0 147
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/entity/MonitorDeviceTran.java
  4. 133 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/controller/MonitorDeviceTypeController.java
  5. 109 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/entity/MonitorDeviceType.java
  6. 34 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/enums/MonitorDeviceTypeEnum.java
  7. 25 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/mapper/MonitorDeviceTypeMapper.java
  8. 5 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/mapper/mapping/MonitorDeviceTypeMapper.xml
  9. 90 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/param/MonitorDeviceTypeAddParam.java
  10. 95 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/param/MonitorDeviceTypeEditParam.java
  11. 35 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/param/MonitorDeviceTypeIdParam.java
  12. 59 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/param/MonitorDeviceTypePageParam.java
  13. 80 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/service/MonitorDeviceTypeService.java
  14. 100 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/service/impl/MonitorDeviceTypeServiceImpl.java
  15. 123 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/controller/MonitorNoticeController.java
  16. 69 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/entity/MonitorNotice.java
  17. 34 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/enums/MonitorNoticeEnum.java
  18. 25 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/mapper/MonitorNoticeMapper.java
  19. 5 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/mapper/mapping/MonitorNoticeMapper.xml
  20. 54 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/param/MonitorNoticeAddParam.java
  21. 59 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/param/MonitorNoticeEditParam.java
  22. 35 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/param/MonitorNoticeIdParam.java
  23. 55 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/param/MonitorNoticePageParam.java
  24. 80 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/service/MonitorNoticeService.java
  25. 97 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/service/impl/MonitorNoticeServiceImpl.java
  26. 1 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/entity/MonitorTargetRegion.java
  27. 2 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/enums/SensorTypeEnum.java

+ 110 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/JfcloudSensorDataService.java

@@ -0,0 +1,110 @@
+package vip.xiaonuo.coldchain.core.service;
+
+import com.github.jfcloud.influxdb.config.JfcloudInfluxDB2Properties;
+import com.github.jfcloud.influxdb.flux.JfcloudFluxDataService;
+import com.github.jfcloud.influxdb.flux.QueryCondition;
+import com.github.jfcloud.influxdb.service.JfcloudInfluxDBService;
+import com.influxdb.client.QueryApi;
+import com.influxdb.query.FluxTable;
+import org.springframework.stereotype.Service;
+import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
+
+import java.time.Instant;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/25 12:35:02
+ */
+@Service
+public class JfcloudSensorDataService extends JfcloudFluxDataService<SensorData> {
+    public JfcloudSensorDataService(JfcloudInfluxDBService jfcloudInfluxDBService, JfcloudInfluxDB2Properties jfcloudInfluxDB2Properties) {
+        super(jfcloudInfluxDBService, jfcloudInfluxDB2Properties);
+    }
+
+
+
+    /**
+     * 根据 deviceId 和 roads 查询最新的数据
+     *
+     * @param deviceId 设备 ID
+     * @param roads    路数
+     * @return 最新的传感器数据
+     */
+    public SensorData queryLatestDataByDeviceIdAndRoads(String deviceId, Integer roads) {
+        // 构建 Flux 查询,获取最新一条记录
+//        String fluxQuery = String.format(
+//                "from(bucket: \"%s\") " +
+//                        "|> range(start: -30d) " +  // 查询过去 30 天的数据
+//                        "|> filter(fn: (r) => r._measurement == \"%s\" and r[\"device_id\"] == \"%s\" and r[\"roads\"] == \"%s\") " +
+//                        "|> sort(columns: [\"_time\"], desc: true) " +  // 按时间降序排序
+//                        "|> limit(n: 1)",  // 限制查询结果为 1 条
+//                getBucketName(),  // 动态获取桶名
+//                getMeasurement(SensorData.class),  // 动态获取 measurement 名称
+//                deviceId,  // 设备 ID
+//                roads  // 路数
+//        );
+        String fluxQuery = String.format(
+                "from(bucket: \"%s\") " +
+                        "|> range(start: -30d) " +
+                        "|> filter(fn: (r) => r._measurement == \"%s\" and r[\"device_id\"] == \"%s\" and r[\"roads\"] == \"%s\") " +
+                        "|> sort(columns: [\"_time\"], desc: true) " +
+                        "|> limit(n: 1) " +
+                        "|> pivot(rowKey: [\"_time\"], columnKey: [\"_field\"], valueColumn: \"_value\") " +
+                        "|> keep(columns: [\"_time\", \"temperature\", \"humidity\", \"co2\", \"battery\", \"plugInStatus\", \"location\", \"longitude\", \"latitude\", \"device_id\", \"roads\", \"modelName\"])",
+                getBucketName(),
+                getMeasurement(SensorData.class),
+                deviceId,
+                roads
+        );
+        QueryApi queryApi = jfcloudInfluxDBService.getInfluxDBClient().getQueryApi();
+        List<FluxTable> tables = queryApi.query(fluxQuery);
+
+        // 将查询结果映射为 SensorData 实体
+        return tables.stream()
+                .flatMap(table -> table.getRecords().stream())  // 拉平所有记录
+                .map(SensorData::mapToSensorData)  // 将每个记录映射为 SensorData 实体
+                .findFirst()  // 只取第一条记录(即最新一条记录)
+                .orElse(null);  // 如果没有数据,返回 null
+    }
+
+    /**
+     * 根据 deviceId、roads 和时间范围查询数据
+     *
+     * @param deviceId  设备 ID
+     * @param roads     路数
+     * @param startTime 查询开始时间
+     * @param endTime   查询结束时间
+     * @return 查询到的传感器数据列表
+     */
+    public List<SensorData> queryDataByDeviceIdAndRoads(String deviceId, Integer roads, String startTime, String endTime) {
+        String query = String.format("SELECT * FROM \"%s\" WHERE \"device_id\" = '%s' AND \"roads\" = %d AND time >= '%s' AND time <= '%s' ORDER BY time DESC", getMeasurement(SensorData.class), deviceId, roads, startTime, endTime);
+        QueryApi queryApi = jfcloudInfluxDBService.getInfluxDBClient().getQueryApi();
+        List<FluxTable> results = queryApi.query(query);
+        // 将查询结果转换为 SensorData 实体
+        return results.stream().flatMap(table -> table.getRecords().stream()).map(SensorData::mapToSensorData).collect(Collectors.toList());
+    }
+
+
+    /**
+     * 根据 deviceId、roads、时间范围和查询条件查询数据
+     *
+     * @param deviceId        设备 ID
+     * @param roads           路数
+     * @param startTime       查询开始时间
+     * @param endTime         查询结束时间
+     * @param queryConditions 查询条件列表
+     * @return 查询到的传感器数据列表
+     */
+    public List<SensorData> querySensorData(String deviceId, int roads, Instant startTime, Instant endTime, List<QueryCondition> queryConditions) {
+        String fluxQuery = buildFluxQuery(deviceId, roads, startTime, endTime, queryConditions, SensorData.class);
+        QueryApi queryApi = jfcloudInfluxDBService.getInfluxDBClient().getQueryApi();
+        List<FluxTable> tables = queryApi.query(fluxQuery);
+        // 将查询结果映射为 SensorData 实体
+        return tables.stream().flatMap(table -> table.getRecords().stream()).map(SensorData::mapToSensorData).collect(Collectors.toList());
+    }
+}

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

@@ -19,6 +19,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
 import vip.xiaonuo.coldchain.modular.monitordevice.enums.MonitorDeviceStatusEnum;
+import vip.xiaonuo.common.pojo.CommonEntity;
 
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
@@ -33,7 +34,7 @@ import java.util.Date;
 @Getter
 @Setter
 @TableName("monitor_device")
-public class MonitorDevice {
+public class MonitorDevice  extends CommonEntity {
 
     /**
      * 设备唯一标识符,UUID
@@ -143,4 +144,11 @@ public class MonitorDevice {
     @TableField(value = "parameters")//, typeHandler = JacksonTypeHandler.class)
 //    private List<ParamItem> parameters;
     private String parameters;
+
+    /**
+     * 设备类型名称
+     */
+    @Schema(description = "设备类型名称")
+    @TableField(exist = false)
+    private String typeName;
 }

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

@@ -1,147 +0,0 @@
-/*
- * 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.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Getter;
-import lombok.Setter;
-import vip.xiaonuo.coldchain.modular.monitordevice.enums.MonitorDeviceStatusEnum;
-import vip.xiaonuo.common.pojo.CommonEntity;
-
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-import java.util.Date;
-
-/**
- * 采集器管理实体
- *
- * @author 黄渊昊
- * @date 2024/11/13 16:55
- **/
-@Getter
-@Setter
-@TableName("monitor_device")
-public class MonitorDeviceTran extends CommonEntity {
-
-    /**
-     * 设备唯一标识符,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 = MonitorDeviceStatusEnum.NORMAL.getValue();
-
-    /**
-     * 传感器路数
-     */
-    @Schema(description = "传感器路数")
-    @NotNull(message = "传感器路数不能为空")
-    @Size(min = 1, max = 4, message = "传感器路数的大小必须在1到10之间")
-    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;
-
-    /**
-     * 设备参数编号信息
-     */
-    @Schema(description = "设备参数编号信息")
-    @TableField(value = "param_ids")//, typeHandler = JacksonTypeHandler.class)
-//    private List<Integer> paramIds;
-    private String paramIds;
-
-    /**
-     * 设备参数信息
-     */
-    @Schema(description = "设备参数信息")
-    @TableField(value = "parameters")//, typeHandler = JacksonTypeHandler.class)
-//    private List<ParamItem> parameters;
-    private String parameters;
-}

+ 133 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/controller/MonitorDeviceTypeController.java

@@ -0,0 +1,133 @@
+/*
+ * 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.monitordevicetype.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.monitordevicetype.entity.MonitorDeviceType;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.param.MonitorDeviceTypeAddParam;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.param.MonitorDeviceTypeEditParam;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.param.MonitorDeviceTypeIdParam;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.param.MonitorDeviceTypePageParam;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.service.MonitorDeviceTypeService;
+
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 监控设备型号控制器
+ *
+ * @author 黄渊昊
+ * @date  2024/11/25 10:15
+ */
+@Tag(name = "监控设备型号控制器")
+@RestController
+@Validated
+public class MonitorDeviceTypeController {
+
+    @Resource
+    private MonitorDeviceTypeService monitorDeviceTypeService;
+
+    /**
+     * 获取监控设备型号分页
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:15
+     */
+    @Operation(summary = "获取监控设备型号分页")
+    @SaCheckPermission("/coldchain/monitordevicetype/page")
+    @GetMapping("/coldchain/monitordevicetype/page")
+    public CommonResult<Page<MonitorDeviceType>> page(MonitorDeviceTypePageParam monitorDeviceTypePageParam) {
+        return CommonResult.data(monitorDeviceTypeService.page(monitorDeviceTypePageParam));
+    }
+
+    /**
+     * 添加监控设备型号
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:15
+     */
+    @Operation(summary = "添加监控设备型号")
+    @CommonLog("添加监控设备型号")
+    @SaCheckPermission("/coldchain/monitordevicetype/add")
+    @PostMapping("/coldchain/monitordevicetype/add")
+    public CommonResult<String> add(@RequestBody @Valid MonitorDeviceTypeAddParam monitorDeviceTypeAddParam) {
+        monitorDeviceTypeService.add(monitorDeviceTypeAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑监控设备型号
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:15
+     */
+    @Operation(summary = "编辑监控设备型号")
+    @CommonLog("编辑监控设备型号")
+    @SaCheckPermission("/coldchain/monitordevicetype/edit")
+    @PostMapping("/coldchain/monitordevicetype/edit")
+    public CommonResult<String> edit(@RequestBody @Valid MonitorDeviceTypeEditParam monitorDeviceTypeEditParam) {
+        monitorDeviceTypeService.edit(monitorDeviceTypeEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除监控设备型号
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:15
+     */
+    @Operation(summary = "删除监控设备型号")
+    @CommonLog("删除监控设备型号")
+    @SaCheckPermission("/coldchain/monitordevicetype/delete")
+    @PostMapping("/coldchain/monitordevicetype/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<MonitorDeviceTypeIdParam> monitorDeviceTypeIdParamList) {
+        monitorDeviceTypeService.delete(monitorDeviceTypeIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取监控设备型号详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:15
+     */
+    @Operation(summary = "获取监控设备型号详情")
+    @SaCheckPermission("/coldchain/monitordevicetype/detail")
+    @GetMapping("/coldchain/monitordevicetype/detail")
+    public CommonResult<MonitorDeviceType> detail(@Valid MonitorDeviceTypeIdParam monitorDeviceTypeIdParam) {
+        return CommonResult.data(monitorDeviceTypeService.detail(monitorDeviceTypeIdParam));
+    }
+
+    /**
+     * 获取监控设备类型列表
+     */
+    @Operation(summary = "获取监控设备类型列表")
+    @SaCheckPermission("/coldchain/monitordevicetype/list")
+    @GetMapping("/coldchain/monitordevicetype/list")
+    public CommonResult<List<MonitorDeviceType>> list() {
+        return CommonResult.data(monitorDeviceTypeService.list());
+    }
+}

+ 109 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/entity/MonitorDeviceType.java

@@ -0,0 +1,109 @@
+/*
+ * 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.monitordevicetype.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/25 10:15
+ **/
+@Getter
+@Setter
+@TableName("monitor_device_type")
+public class MonitorDeviceType {
+
+    /** 设备唯一标识符,UUID */
+    @TableId
+    @Schema(description = "设备唯一标识符,UUID")
+    private String id;
+
+    /** 型号名称 */
+    @Schema(description = "型号名称")
+    private String name;
+
+    /** 型号编码 */
+    @Schema(description = "型号编码")
+    private String code;
+
+    /** 传感器路数 */
+    @Schema(description = "传感器路数")
+    private Integer sensorCount;
+
+    /** 排序码 */
+    @Schema(description = "排序码")
+    private Integer sortCode;
+
+    /** 扩展信息 */
+    @Schema(description = "扩展信息")
+    private String extraInfo;
+
+    /** 设备编号集合 */
+    @Schema(description = "设备编号集合")
+    private String paramIds;
+
+    /** 设备参数集合 */
+    @Schema(description = "设备参数集合")
+    private String parameters;
+
+    /** 删除标志 */
+    @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;
+
+    /** 报警上限 */
+    @Schema(description = "报警上限")
+    private Float temperatureUp;
+
+    /** 报警上限 */
+    @Schema(description = "报警上限")
+    private Float humidityUp;
+
+    /** 报警上限 */
+    @Schema(description = "报警上限")
+    private Float co2Up;
+
+    /** 报警下限 */
+    @Schema(description = "报警下限")
+    private Float temperatureDown;
+
+    /** 报警下限 */
+    @Schema(description = "报警下限")
+    private Float humidityDown;
+
+    /** 报警下限 */
+    @Schema(description = "报警下限")
+    private Float co2Down;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/enums/MonitorDeviceTypeEnum.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.monitordevicetype.enums;
+
+import lombok.Getter;
+
+/**
+ * 监控设备型号枚举
+ *
+ * @author 黄渊昊
+ * @date  2024/11/25 10:15
+ **/
+@Getter
+public enum MonitorDeviceTypeEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    MonitorDeviceTypeEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/mapper/MonitorDeviceTypeMapper.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.monitordevicetype.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.entity.MonitorDeviceType;
+
+/**
+ * 监控设备型号Mapper接口
+ *
+ * @author 黄渊昊
+ * @date  2024/11/25 10:15
+ **/
+public interface MonitorDeviceTypeMapper extends BaseMapper<MonitorDeviceType> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/mapper/mapping/MonitorDeviceTypeMapper.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.monitordevicetype.mapper.MonitorDeviceTypeMapper">
+
+</mapper>

+ 90 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/param/MonitorDeviceTypeAddParam.java

@@ -0,0 +1,90 @@
+/*
+ * 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.monitordevicetype.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/25 10:15
+ **/
+@Getter
+@Setter
+public class MonitorDeviceTypeAddParam {
+
+    /** 型号名称 */
+    @Schema(description = "型号名称")
+    private String name;
+
+    /** 型号编码 */
+    @Schema(description = "型号编码")
+    private String code;
+
+    /** 传感器路数 */
+    @Schema(description = "传感器路数")
+    private Integer sensorCount;
+
+    /** 排序码 */
+    @Schema(description = "排序码")
+    private Integer sortCode;
+
+    /** 扩展信息 */
+    @Schema(description = "扩展信息")
+    private String extraInfo;
+
+    /** 设备编号集合 */
+    @Schema(description = "设备编号集合")
+    private String paramIds;
+
+    /** 设备参数集合 */
+    @Schema(description = "设备参数集合")
+    private String parameters;
+
+    /** 删除标志 */
+    @Schema(description = "删除标志")
+    private String isDeleted;
+
+    /** 报警上限 */
+    @Schema(description = "报警上限")
+    private Float temperatureUp;
+
+    /** 报警上限 */
+    @Schema(description = "报警上限")
+    private Float humidityUp;
+
+    /** 报警上限 */
+    @Schema(description = "报警上限")
+    private Float co2Up;
+
+    /** 报警下限 */
+    @Schema(description = "报警下限")
+    private Float temperatureDown;
+
+    /** 报警下限 */
+    @Schema(description = "报警下限")
+    private Float humidityDown;
+
+    /** 报警下限 */
+    @Schema(description = "报警下限")
+    private Float co2Down;
+
+}

+ 95 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/param/MonitorDeviceTypeEditParam.java

@@ -0,0 +1,95 @@
+/*
+ * 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.monitordevicetype.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/25 10:15
+ **/
+@Getter
+@Setter
+public class MonitorDeviceTypeEditParam {
+
+    /** 设备唯一标识符,UUID */
+    @Schema(description = "设备唯一标识符,UUID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 型号名称 */
+    @Schema(description = "型号名称")
+    private String name;
+
+    /** 型号编码 */
+    @Schema(description = "型号编码")
+    private String code;
+
+    /** 传感器路数 */
+    @Schema(description = "传感器路数")
+    private Integer sensorCount;
+
+    /** 排序码 */
+    @Schema(description = "排序码")
+    private Integer sortCode;
+
+    /** 扩展信息 */
+    @Schema(description = "扩展信息")
+    private String extraInfo;
+
+    /** 设备编号集合 */
+    @Schema(description = "设备编号集合")
+    private String paramIds;
+
+    /** 设备参数集合 */
+    @Schema(description = "设备参数集合")
+    private String parameters;
+
+    /** 删除标志 */
+    @Schema(description = "删除标志")
+    private String isDeleted;
+
+    /** 报警上限 */
+    @Schema(description = "报警上限")
+    private Float temperatureUp;
+
+    /** 报警上限 */
+    @Schema(description = "报警上限")
+    private Float humidityUp;
+
+    /** 报警上限 */
+    @Schema(description = "报警上限")
+    private Float co2Up;
+
+    /** 报警下限 */
+    @Schema(description = "报警下限")
+    private Float temperatureDown;
+
+    /** 报警下限 */
+    @Schema(description = "报警下限")
+    private Float humidityDown;
+
+    /** 报警下限 */
+    @Schema(description = "报警下限")
+    private Float co2Down;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/param/MonitorDeviceTypeIdParam.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.monitordevicetype.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/25 10:15
+ **/
+@Getter
+@Setter
+public class MonitorDeviceTypeIdParam {
+
+    /** 设备唯一标识符,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/monitordevicetype/param/MonitorDeviceTypePageParam.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.monitordevicetype.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/25 10:15
+ **/
+@Getter
+@Setter
+public class MonitorDeviceTypePageParam {
+
+    /** 当前页 */
+    @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 Integer sensorCount;
+
+}

+ 80 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/service/MonitorDeviceTypeService.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.monitordevicetype.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.entity.MonitorDeviceType;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.param.MonitorDeviceTypeAddParam;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.param.MonitorDeviceTypeEditParam;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.param.MonitorDeviceTypeIdParam;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.param.MonitorDeviceTypePageParam;
+
+import java.util.List;
+
+/**
+ * 监控设备型号Service接口
+ *
+ * @author 黄渊昊
+ * @date  2024/11/25 10:15
+ **/
+public interface MonitorDeviceTypeService extends IService<MonitorDeviceType> {
+
+    /**
+     * 获取监控设备型号分页
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:15
+     */
+    Page<MonitorDeviceType> page(MonitorDeviceTypePageParam monitorDeviceTypePageParam);
+
+    /**
+     * 添加监控设备型号
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:15
+     */
+    void add(MonitorDeviceTypeAddParam monitorDeviceTypeAddParam);
+
+    /**
+     * 编辑监控设备型号
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:15
+     */
+    void edit(MonitorDeviceTypeEditParam monitorDeviceTypeEditParam);
+
+    /**
+     * 删除监控设备型号
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:15
+     */
+    void delete(List<MonitorDeviceTypeIdParam> monitorDeviceTypeIdParamList);
+
+    /**
+     * 获取监控设备型号详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:15
+     */
+    MonitorDeviceType detail(MonitorDeviceTypeIdParam monitorDeviceTypeIdParam);
+
+    /**
+     * 获取监控设备型号详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:15
+     **/
+    MonitorDeviceType queryEntity(String id);
+}

+ 100 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/service/impl/MonitorDeviceTypeServiceImpl.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.monitordevicetype.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.monitordevicetype.entity.MonitorDeviceType;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.mapper.MonitorDeviceTypeMapper;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.param.MonitorDeviceTypeAddParam;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.param.MonitorDeviceTypeEditParam;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.param.MonitorDeviceTypeIdParam;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.param.MonitorDeviceTypePageParam;
+import vip.xiaonuo.coldchain.modular.monitordevicetype.service.MonitorDeviceTypeService;
+
+import java.util.List;
+
+/**
+ * 监控设备型号Service接口实现类
+ *
+ * @author 黄渊昊
+ * @date  2024/11/25 10:15
+ **/
+@Service
+public class MonitorDeviceTypeServiceImpl extends ServiceImpl<MonitorDeviceTypeMapper, MonitorDeviceType> implements MonitorDeviceTypeService {
+
+    @Override
+    public Page<MonitorDeviceType> page(MonitorDeviceTypePageParam monitorDeviceTypePageParam) {
+        QueryWrapper<MonitorDeviceType> queryWrapper = new QueryWrapper<MonitorDeviceType>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(monitorDeviceTypePageParam.getName())) {
+            queryWrapper.lambda().like(MonitorDeviceType::getName, monitorDeviceTypePageParam.getName());
+        }
+        if(ObjectUtil.isNotEmpty(monitorDeviceTypePageParam.getSensorCount())) {
+            queryWrapper.lambda().eq(MonitorDeviceType::getSensorCount, monitorDeviceTypePageParam.getSensorCount());
+        }
+        if(ObjectUtil.isAllNotEmpty(monitorDeviceTypePageParam.getSortField(), monitorDeviceTypePageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(monitorDeviceTypePageParam.getSortOrder());
+            queryWrapper.orderBy(true, monitorDeviceTypePageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(monitorDeviceTypePageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(MonitorDeviceType::getSortCode);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(MonitorDeviceTypeAddParam monitorDeviceTypeAddParam) {
+        MonitorDeviceType monitorDeviceType = BeanUtil.toBean(monitorDeviceTypeAddParam, MonitorDeviceType.class);
+        this.save(monitorDeviceType);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(MonitorDeviceTypeEditParam monitorDeviceTypeEditParam) {
+        MonitorDeviceType monitorDeviceType = this.queryEntity(monitorDeviceTypeEditParam.getId());
+        BeanUtil.copyProperties(monitorDeviceTypeEditParam, monitorDeviceType);
+        this.updateById(monitorDeviceType);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<MonitorDeviceTypeIdParam> monitorDeviceTypeIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(monitorDeviceTypeIdParamList, MonitorDeviceTypeIdParam::getId));
+    }
+
+    @Override
+    public MonitorDeviceType detail(MonitorDeviceTypeIdParam monitorDeviceTypeIdParam) {
+        return this.queryEntity(monitorDeviceTypeIdParam.getId());
+    }
+
+    @Override
+    public MonitorDeviceType queryEntity(String id) {
+        MonitorDeviceType monitorDeviceType = this.getById(id);
+        if(ObjectUtil.isEmpty(monitorDeviceType)) {
+            throw new CommonException("监控设备型号不存在,id值为:{}", id);
+        }
+        return monitorDeviceType;
+    }
+}

+ 123 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/controller/MonitorNoticeController.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.monitornotice.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.monitornotice.entity.MonitorNotice;
+import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticeAddParam;
+import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticeEditParam;
+import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticeIdParam;
+import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticePageParam;
+import vip.xiaonuo.coldchain.modular.monitornotice.service.MonitorNoticeService;
+
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 监控通知控制器
+ *
+ * @author 黄渊昊
+ * @date  2024/11/25 10:58
+ */
+@Tag(name = "监控通知控制器")
+@RestController
+@Validated
+public class MonitorNoticeController {
+
+    @Resource
+    private MonitorNoticeService monitorNoticeService;
+
+    /**
+     * 获取监控通知分页
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:58
+     */
+    @Operation(summary = "获取监控通知分页")
+    @SaCheckPermission("/coldchain/monitornotice/page")
+    @GetMapping("/coldchain/monitornotice/page")
+    public CommonResult<Page<MonitorNotice>> page(MonitorNoticePageParam monitorNoticePageParam) {
+        return CommonResult.data(monitorNoticeService.page(monitorNoticePageParam));
+    }
+
+    /**
+     * 添加监控通知
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:58
+     */
+    @Operation(summary = "添加监控通知")
+    @CommonLog("添加监控通知")
+    @SaCheckPermission("/coldchain/monitornotice/add")
+    @PostMapping("/coldchain/monitornotice/add")
+    public CommonResult<String> add(@RequestBody @Valid MonitorNoticeAddParam monitorNoticeAddParam) {
+        monitorNoticeService.add(monitorNoticeAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑监控通知
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:58
+     */
+    @Operation(summary = "编辑监控通知")
+    @CommonLog("编辑监控通知")
+    @SaCheckPermission("/coldchain/monitornotice/edit")
+    @PostMapping("/coldchain/monitornotice/edit")
+    public CommonResult<String> edit(@RequestBody @Valid MonitorNoticeEditParam monitorNoticeEditParam) {
+        monitorNoticeService.edit(monitorNoticeEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除监控通知
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:58
+     */
+    @Operation(summary = "删除监控通知")
+    @CommonLog("删除监控通知")
+    @SaCheckPermission("/coldchain/monitornotice/delete")
+    @PostMapping("/coldchain/monitornotice/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<MonitorNoticeIdParam> monitorNoticeIdParamList) {
+        monitorNoticeService.delete(monitorNoticeIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取监控通知详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:58
+     */
+    @Operation(summary = "获取监控通知详情")
+    @SaCheckPermission("/coldchain/monitornotice/detail")
+    @GetMapping("/coldchain/monitornotice/detail")
+    public CommonResult<MonitorNotice> detail(@Valid MonitorNoticeIdParam monitorNoticeIdParam) {
+        return CommonResult.data(monitorNoticeService.detail(monitorNoticeIdParam));
+    }
+}

+ 69 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/entity/MonitorNotice.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.monitornotice.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.common.pojo.CommonEntity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 监控通知实体
+ *
+ * @author 黄渊昊
+ * @date  2024/11/25 10:58
+ **/
+@Getter
+@Setter
+@TableName("monitor_notice")
+public class MonitorNotice extends CommonEntity {
+
+    /** ID */
+    @TableId
+    @Schema(description = "ID")
+    private String id;
+
+    /** 通知类型 */
+    @Schema(description = "通知类型")
+    private String type;
+
+    /** 通知标题 */
+    @Schema(description = "通知标题")
+    private String title;
+
+    /** 通知内容 */
+    @Schema(description = "通知内容")
+    private String content;
+
+    /** 创建时间 */
+    @Schema(description = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 创建人 */
+    @Schema(description = "创建人")
+    private String createBy;
+
+    /** 更新时间 */
+    @Schema(description = "更新时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 更新人 */
+    @Schema(description = "更新人")
+    private String updateBy;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/enums/MonitorNoticeEnum.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.monitornotice.enums;
+
+import lombok.Getter;
+
+/**
+ * 监控通知枚举
+ *
+ * @author 黄渊昊
+ * @date  2024/11/25 10:58
+ **/
+@Getter
+public enum MonitorNoticeEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    MonitorNoticeEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/mapper/MonitorNoticeMapper.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.monitornotice.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.coldchain.modular.monitornotice.entity.MonitorNotice;
+
+/**
+ * 监控通知Mapper接口
+ *
+ * @author 黄渊昊
+ * @date  2024/11/25 10:58
+ **/
+public interface MonitorNoticeMapper extends BaseMapper<MonitorNotice> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/mapper/mapping/MonitorNoticeMapper.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.monitornotice.mapper.MonitorNoticeMapper">
+
+</mapper>

+ 54 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/param/MonitorNoticeAddParam.java

@@ -0,0 +1,54 @@
+/*
+ * 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.monitornotice.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/25 10:58
+ **/
+@Getter
+@Setter
+public class MonitorNoticeAddParam {
+
+    /** 通知类型 */
+    @Schema(description = "通知类型")
+    private String type;
+
+    /** 通知标题 */
+    @Schema(description = "通知标题")
+    private String title;
+
+    /** 通知内容 */
+    @Schema(description = "通知内容")
+    private String content;
+
+    /** 创建人 */
+    @Schema(description = "创建人")
+    private String createBy;
+
+    /** 更新人 */
+    @Schema(description = "更新人")
+    private String updateBy;
+
+}

+ 59 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/param/MonitorNoticeEditParam.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.monitornotice.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/25 10:58
+ **/
+@Getter
+@Setter
+public class MonitorNoticeEditParam {
+
+    /** ID */
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 通知类型 */
+    @Schema(description = "通知类型")
+    private String type;
+
+    /** 通知标题 */
+    @Schema(description = "通知标题")
+    private String title;
+
+    /** 通知内容 */
+    @Schema(description = "通知内容")
+    private String content;
+
+    /** 创建人 */
+    @Schema(description = "创建人")
+    private String createBy;
+
+    /** 更新人 */
+    @Schema(description = "更新人")
+    private String updateBy;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/param/MonitorNoticeIdParam.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.monitornotice.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/25 10:58
+ **/
+@Getter
+@Setter
+public class MonitorNoticeIdParam {
+
+    /** 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/monitornotice/param/MonitorNoticePageParam.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.monitornotice.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/25 10:58
+ **/
+@Getter
+@Setter
+public class MonitorNoticePageParam {
+
+    /** 当前页 */
+    @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 type;
+
+}

+ 80 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/service/MonitorNoticeService.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.monitornotice.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.coldchain.modular.monitornotice.entity.MonitorNotice;
+import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticeAddParam;
+import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticeEditParam;
+import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticeIdParam;
+import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticePageParam;
+
+import java.util.List;
+
+/**
+ * 监控通知Service接口
+ *
+ * @author 黄渊昊
+ * @date  2024/11/25 10:58
+ **/
+public interface MonitorNoticeService extends IService<MonitorNotice> {
+
+    /**
+     * 获取监控通知分页
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:58
+     */
+    Page<MonitorNotice> page(MonitorNoticePageParam monitorNoticePageParam);
+
+    /**
+     * 添加监控通知
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:58
+     */
+    void add(MonitorNoticeAddParam monitorNoticeAddParam);
+
+    /**
+     * 编辑监控通知
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:58
+     */
+    void edit(MonitorNoticeEditParam monitorNoticeEditParam);
+
+    /**
+     * 删除监控通知
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:58
+     */
+    void delete(List<MonitorNoticeIdParam> monitorNoticeIdParamList);
+
+    /**
+     * 获取监控通知详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:58
+     */
+    MonitorNotice detail(MonitorNoticeIdParam monitorNoticeIdParam);
+
+    /**
+     * 获取监控通知详情
+     *
+     * @author 黄渊昊
+     * @date  2024/11/25 10:58
+     **/
+    MonitorNotice queryEntity(String id);
+}

+ 97 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitornotice/service/impl/MonitorNoticeServiceImpl.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.monitornotice.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.monitornotice.entity.MonitorNotice;
+import vip.xiaonuo.coldchain.modular.monitornotice.mapper.MonitorNoticeMapper;
+import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticeAddParam;
+import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticeEditParam;
+import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticeIdParam;
+import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticePageParam;
+import vip.xiaonuo.coldchain.modular.monitornotice.service.MonitorNoticeService;
+
+import java.util.List;
+
+/**
+ * 监控通知Service接口实现类
+ *
+ * @author 黄渊昊
+ * @date  2024/11/25 10:58
+ **/
+@Service
+public class MonitorNoticeServiceImpl extends ServiceImpl<MonitorNoticeMapper, MonitorNotice> implements MonitorNoticeService {
+
+    @Override
+    public Page<MonitorNotice> page(MonitorNoticePageParam monitorNoticePageParam) {
+        QueryWrapper<MonitorNotice> queryWrapper = new QueryWrapper<MonitorNotice>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(monitorNoticePageParam.getType())) {
+            queryWrapper.lambda().eq(MonitorNotice::getType, monitorNoticePageParam.getType());
+        }
+        if(ObjectUtil.isAllNotEmpty(monitorNoticePageParam.getSortField(), monitorNoticePageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(monitorNoticePageParam.getSortOrder());
+            queryWrapper.orderBy(true, monitorNoticePageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(monitorNoticePageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(MonitorNotice::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(MonitorNoticeAddParam monitorNoticeAddParam) {
+        MonitorNotice monitorNotice = BeanUtil.toBean(monitorNoticeAddParam, MonitorNotice.class);
+        this.save(monitorNotice);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(MonitorNoticeEditParam monitorNoticeEditParam) {
+        MonitorNotice monitorNotice = this.queryEntity(monitorNoticeEditParam.getId());
+        BeanUtil.copyProperties(monitorNoticeEditParam, monitorNotice);
+        this.updateById(monitorNotice);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<MonitorNoticeIdParam> monitorNoticeIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(monitorNoticeIdParamList, MonitorNoticeIdParam::getId));
+    }
+
+    @Override
+    public MonitorNotice detail(MonitorNoticeIdParam monitorNoticeIdParam) {
+        return this.queryEntity(monitorNoticeIdParam.getId());
+    }
+
+    @Override
+    public MonitorNotice queryEntity(String id) {
+        MonitorNotice monitorNotice = this.getById(id);
+        if(ObjectUtil.isEmpty(monitorNotice)) {
+            throw new CommonException("监控通知不存在,id值为:{}", id);
+        }
+        return monitorNotice;
+    }
+}

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

@@ -22,8 +22,6 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
 import vip.xiaonuo.coldchain.modular.app.param.FloatNullToDashSerializer;
-import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
-import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDeviceTran;
 
 import java.util.Date;
 
@@ -161,6 +159,7 @@ public class MonitorTargetRegion {
     @JsonSerialize(using = FloatNullToDashSerializer.class)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
     private Float co2Up;
+
     /**
      * 二氧化碳报警下限
      */

+ 2 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/enums/SensorTypeEnum.java

@@ -23,9 +23,9 @@ import lombok.Getter;
 public enum SensorTypeEnum {
 
     /**
-     * 测试
+     * 温湿度传感器
      */
-    TemperatureAndHumidity("TEST");
+    TemperatureAndHumidity("温湿度传感器");
 
     private final String value;