Преглед изворни кода

feat:传感器设备增加供电类型,监测点增加低电量预警

陈长荣 пре 5 месеци
родитељ
комит
800e2f8350
14 измењених фајлова са 121 додато и 42 уклоњено
  1. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/controller/MonitorDeviceController.java
  2. 15 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/dto/MonitorDevicePageDto.java
  3. 4 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/entity/MonitorDevice.java
  4. 4 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceAddParam.java
  5. 4 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceEditParam.java
  6. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/MonitorDeviceService.java
  7. 52 20
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/impl/MonitorDeviceServiceImpl.java
  8. 6 3
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/entity/MonitorDeviceType.java
  9. 4 5
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/param/MonitorDeviceTypeAddParam.java
  10. 5 5
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/param/MonitorDeviceTypeEditParam.java
  11. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/impl/MonitorTargetServiceImpl.java
  12. 8 2
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionAddParam.java
  13. 8 3
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionEditParam.java
  14. 8 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/listener/QpListener.java

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

@@ -59,7 +59,7 @@ public class MonitorDeviceController {
     @Operation(summary = "获取采集器管理分页")
     @SaCheckPermission("/coldchain/monitordevice/page")
     @GetMapping("/coldchain/monitordevice/page")
-    public CommonResult<Page<MonitorDevice>> page(MonitorDevicePageParam monitorDevicePageParam) {
+    public CommonResult<Page<?>> page(MonitorDevicePageParam monitorDevicePageParam) {
         return CommonResult.data(monitorDeviceService.page(monitorDevicePageParam));
     }
 

+ 15 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/dto/MonitorDevicePageDto.java

@@ -0,0 +1,15 @@
+package vip.xiaonuo.coldchain.modular.monitordevice.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class MonitorDevicePageDto extends MonitorDevice {
+
+    @Schema(description = "已使用路数")
+    private String sensorRouteDesc;
+
+}

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

@@ -143,4 +143,8 @@ public class MonitorDevice  extends OrgEntity {
     /** 报警下限 */
     @Schema(description = "报警下限")
     private Float co2Down;
+
+    /** 供电类型 */
+    @Schema(description = "供电类型")
+    private String powerType;
 }

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

@@ -17,7 +17,6 @@ import lombok.Getter;
 import lombok.Setter;
 
 import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
 import javax.validation.constraints.Size;
 
 /**
@@ -104,4 +103,8 @@ public class MonitorDeviceAddParam {
      */
     @Schema(description = "报警下限")
     private Float co2Down;
+
+    /** 供电类型 */
+    @Schema(description = "供电类型")
+    private String powerType;
 }

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

@@ -100,4 +100,8 @@ public class MonitorDeviceEditParam {
     /** 报警下限 */
     @Schema(description = "报警下限")
     private Float co2Down;
+
+    /** 供电类型 */
+    @Schema(description = "供电类型")
+    private String powerType;
 }

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

@@ -44,7 +44,7 @@ public interface MonitorDeviceService extends IService<MonitorDevice> {
      * @author 黄渊昊
      * @date 2024/11/13 16:55
      */
-    Page<MonitorDevice> page(MonitorDevicePageParam monitorDevicePageParam);
+    Page<?> page(MonitorDevicePageParam monitorDevicePageParam);
 
     /**
      * 添加采集器管理

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

@@ -35,6 +35,7 @@ import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
 import vip.xiaonuo.coldchain.core.cache.monitordevice.MonitorDeviceCache;
 import vip.xiaonuo.coldchain.core.renke.RenKeService;
 import vip.xiaonuo.coldchain.core.service.JfcloudSensorDataService;
+import vip.xiaonuo.coldchain.modular.monitordevice.dto.MonitorDevicePageDto;
 import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
 import vip.xiaonuo.coldchain.modular.monitordevice.enums.MonitorDeviceStatusEnum;
 import vip.xiaonuo.coldchain.modular.monitordevice.mapper.MonitorDeviceMapper;
@@ -48,6 +49,7 @@ import vip.xiaonuo.coldchain.modular.monitordevicetype.entity.MonitorDeviceType;
 import vip.xiaonuo.coldchain.modular.monitordevicetype.service.MonitorDeviceTypeService;
 import vip.xiaonuo.coldchain.modular.monitortarget.param.TargetStatus;
 import vip.xiaonuo.coldchain.modular.monitortarget.service.MonitorTargetService;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.service.MonitorTargetRegionService;
 import vip.xiaonuo.common.enums.CommonDeleteFlagEnum;
 import vip.xiaonuo.common.enums.CommonSortOrderEnum;
@@ -55,9 +57,8 @@ import vip.xiaonuo.common.exception.CommonException;
 import vip.xiaonuo.common.page.CommonPageRequest;
 
 import java.time.Instant;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 采集器管理Service接口实现类
@@ -80,10 +81,11 @@ public class MonitorDeviceServiceImpl extends ServiceImpl<MonitorDeviceMapper, M
     @Resource
     private MonitorTargetService monitorTargetService;
 
+
     private String bucketName;
 
     @Override
-    public Page<MonitorDevice> page(MonitorDevicePageParam monitorDevicePageParam) {
+    public Page<?> page(MonitorDevicePageParam monitorDevicePageParam) {
         SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
         QueryWrapper<MonitorDevice> queryWrapper = new QueryWrapper<MonitorDevice>().checkSqlInjection();
         if (ObjectUtil.isNotEmpty(monitorDevicePageParam.getDeviceName())) {
@@ -99,15 +101,46 @@ public class MonitorDeviceServiceImpl extends ServiceImpl<MonitorDeviceMapper, M
             queryWrapper.lambda().orderByAsc(MonitorDevice::getSortCode);
         }
         queryWrapper.lambda().eq(MonitorDevice::getCreateOrg,loginUser.getOrgId()).eq(MonitorDevice::getDeleteFlag,CommonDeleteFlagEnum.NOT_DELETE);
+        //分页查询
         Page<MonitorDevice> page = this.page(CommonPageRequest.defaultPage(), queryWrapper);
+        if (page.getTotal() < 1) {
+            return page;
+        }
+
+        //查询型号编号和名称
+        Set<String> codeSet = page.getRecords().stream().map(MonitorDevice::getModelName).filter(StrUtil::isNotBlank).collect(Collectors.toSet());
+        List<MonitorDeviceType> deviceTypeList = monitorDeviceTypeService.list(new LambdaQueryWrapper<>(MonitorDeviceType.class)
+                .select(MonitorDeviceType::getCode, MonitorDeviceType::getName)
+                .in(MonitorDeviceType::getCode, codeSet)
+                .eq(MonitorDeviceType::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE));
+        Map<String, String> typeNameMap = deviceTypeList.stream().collect(Collectors.toMap(MonitorDeviceType::getCode, MonitorDeviceType::getName));
+
+        //查询使用的路数
+        Set<String> deviceIdSet = page.getRecords().stream().map(MonitorDevice::getId).collect(Collectors.toSet());
+        List<MonitorTargetRegion> regionList = monitorTargetRegionService.list(new LambdaQueryWrapper<>(MonitorTargetRegion.class)
+                .in(MonitorTargetRegion::getMonitorDeviceId, deviceIdSet)
+                .eq(MonitorTargetRegion::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE));
+        Map<String, List<MonitorTargetRegion>> regionMap = regionList.stream().collect(Collectors.groupingBy(MonitorTargetRegion::getMonitorDeviceId));
+
+        List<MonitorDevicePageDto> dtoList = new ArrayList<>();
         for (MonitorDevice record : page.getRecords()) {
-            MonitorDeviceType monitorDeviceType = monitorDeviceTypeService.getByModelName(record.getModelName());
-            record.setCreateOrgName(loginUser.getOrgName());
-            if (ObjectUtil.isNotNull(monitorDeviceType)) {
-                record.setTypeName(monitorDeviceType.getName());
+            MonitorDevicePageDto dto = BeanUtil.copyProperties(record, MonitorDevicePageDto.class);
+            dto.setCreateOrgName(loginUser.getOrgName());
+            dto.setTypeName(typeNameMap.get(record.getModelName()));
+            if (regionMap.containsKey(record.getId())) {
+                String desc = regionMap.get(record.getId())
+                        .stream()
+                        .filter(x -> x.getSensorRoute() != null)
+                        .map(x -> x.getSensorRoute() + "路")
+                        .collect(Collectors.joining(","));
+                dto.setSensorRouteDesc(desc);
             }
+            dtoList.add(dto);
         }
-        return page;
+
+        Page<MonitorDevicePageDto> dtoPage = Page.of(page.getCurrent(), page.getSize(), page.getTotal());
+        dtoPage.setRecords(dtoList);
+        return dtoPage;
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -267,24 +300,23 @@ public class MonitorDeviceServiceImpl extends ServiceImpl<MonitorDeviceMapper, M
     @Override
     public List<MonitorDevice> myList(Boolean isAll,String sensorType) {
         SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
+
+        //查询设备类型
+        LambdaQueryWrapper<MonitorDeviceType> typeQueryWrapper = new LambdaQueryWrapper<>(MonitorDeviceType.class)
+                .eq(StrUtil.isNotBlank(sensorType), MonitorDeviceType::getSensorType, sensorType)
+                .eq(MonitorDeviceType::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE);
+        List<MonitorDeviceType> deviceTypeList = monitorDeviceTypeService.list(typeQueryWrapper);
+        List<String> modelNameList = deviceTypeList.stream().map(MonitorDeviceType::getCode).toList();
+
+        //查询设备列表
         LambdaQueryWrapper<MonitorDevice> deviceQueryWrapper = new LambdaQueryWrapper<>();
-        LambdaQueryWrapper<MonitorDeviceType> typeQueryWrapper = new LambdaQueryWrapper<>();
-        if (sensorType != null) {
-            typeQueryWrapper.eq(MonitorDeviceType::getSensorType, sensorType).eq(MonitorDeviceType::getDeleteFlag,CommonDeleteFlagEnum.NOT_DELETE);
-        }
-        List<MonitorDeviceType> list = monitorDeviceTypeService.list(typeQueryWrapper);
-        List<String> modelNameList = new ArrayList<>();
-        for (MonitorDeviceType deviceType : list) {
-            modelNameList.add(deviceType.getCode());
-        }
         deviceQueryWrapper.in(MonitorDevice::getModelName,modelNameList);
         deviceQueryWrapper.eq(MonitorDevice::getCreateOrg,loginUser.getOrgId()).eq(MonitorDevice::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE);
         if (!isAll) {
             deviceQueryWrapper.eq(MonitorDevice::getStatus, MonitorDeviceStatusEnum.NORMAL.getValue())
                     .orderByAsc(MonitorDevice::getSortCode);
         }
-        List<MonitorDevice> monitorDeviceList = this.list(deviceQueryWrapper);
-        return monitorDeviceList;
+        return this.list(deviceQueryWrapper);
     }
 
     // 通用更新方法,避免代码重复,并处理 timestamp 为空的情况

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

@@ -12,7 +12,8 @@
  */
 package vip.xiaonuo.coldchain.modular.monitordevicetype.entity;
 
-import com.baomidou.mybatisplus.annotation.*;
+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;
@@ -22,8 +23,6 @@ import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
-import java.math.BigDecimal;
-import java.util.Date;
 
 /**
  * 监控设备型号实体
@@ -102,4 +101,8 @@ public class MonitorDeviceType extends CommonEntity {
     /** 传感器类型 */
     @Schema(description = "传感器类型")
     private String sensorType;
+
+    /** 供电类型 */
+    @Schema(description = "供电类型")
+    private String powerType;
 }

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

@@ -16,13 +16,8 @@ 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 javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
-import java.math.BigDecimal;
-import java.util.Date;
 
 /**
  * 监控设备型号添加参数
@@ -95,4 +90,8 @@ public class MonitorDeviceTypeAddParam {
     /** 传感器类型 */
     @Schema(description = "传感器类型")
     private String sensorType;
+
+    /** 供电类型 */
+    @Schema(description = "供电类型")
+    private String powerType;
 }

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

@@ -13,14 +13,10 @@
 package vip.xiaonuo.coldchain.modular.monitordevicetype.param;
 
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
 import lombok.Getter;
 import lombok.Setter;
 
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
-
 /**
  * 监控设备型号编辑参数
  *
@@ -95,4 +91,8 @@ public class MonitorDeviceTypeEditParam {
     /** 传感器类型 */
     @Schema(description = "传感器类型")
     private String sensorType;
+
+    /** 供电类型 */
+    @Schema(description = "供电类型")
+    private String powerType;
 }

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

@@ -224,7 +224,7 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
     }
 
     @Override
-    public List<MonitorTarget> myList(Boolean isAll) {
+    public List<MonitorTarget>  myList(Boolean isAll) {
         SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
         LambdaQueryWrapper<MonitorTarget> queryWrapper = new LambdaQueryWrapper<>();
         if (!isAll) {

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

@@ -13,7 +13,6 @@
 package vip.xiaonuo.coldchain.modular.monitortargetregion.param;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.google.common.collect.Lists;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -24,7 +23,6 @@ import vip.xiaonuo.coldchain.core.alarm.bean.SensorAlarmUser;
 import vip.xiaonuo.coldchain.core.handler.SensorAlarmUserTypeHandler;
 import vip.xiaonuo.coldchain.modular.app.param.FloatNullToDashSerializer;
 
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -142,6 +140,14 @@ public class MonitorTargetRegionAddParam {
 //    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
     private Float co2Down;
 
+    /**
+     * 低电量报警下限
+     */
+    @Schema(description = "低电量报警下限")
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+//    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float batteryDown;
+
     /**
      * 告警接收人,存储告警通知的接收用户信息
      */

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

@@ -13,19 +13,16 @@
 package vip.xiaonuo.coldchain.modular.monitortargetregion.param;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.google.common.collect.Lists;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
 import vip.xiaonuo.coldchain.core.alarm.bean.SensorAlarmUser;
 import vip.xiaonuo.coldchain.core.handler.SensorAlarmUserTypeHandler;
 import vip.xiaonuo.coldchain.modular.app.param.FloatNullToDashSerializer;
 
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -146,6 +143,14 @@ public class MonitorTargetRegionEditParam {
 //    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
     private Float co2Down;
 
+    /**
+     * 低电量报警下限
+     */
+    @Schema(description = "低电量报警下限")
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+//    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float batteryDown;
+
     /**
      * 告警接收人,存储告警通知的接收用户信息
      */

+ 8 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/qp/listener/QpListener.java

@@ -115,6 +115,14 @@ public class QpListener implements CommonDataChangeListener {
                         .setThreshold(region.getCo2Up().intValue());
                 qpAlertConfigMap.get(mac).add(configVo);
             }
+            //电量下限
+            if (region.getBatteryDown() != null) {
+                QpAlertConfigVo configVo = new QpAlertConfigVo()
+                        .setMetric_name("battery")
+                        .setOperator("lt")
+                        .setThreshold(region.getBatteryDown().intValue());
+                qpAlertConfigMap.get(mac).add(configVo);
+            }
         }
 
         qpAlertConfigMap.forEach(qpApi::saveConfig);