Browse Source

feate: 冷链预警更新

jackzhou 7 months ago
parent
commit
7e742edb74

+ 20 - 1
snowy-common/src/main/java/vip/xiaonuo/common/pojo/CommonResult.java

@@ -22,7 +22,7 @@ import java.io.Serializable;
  * @author xuyuxiang
  * @date 2022/8/15 16:08
  **/
-public class CommonResult<T> implements Serializable{
+public class CommonResult<T> implements Serializable {
     private static final long serialVersionUID = 1L;
     public static final int CODE_SUCCESS = 200;
     public static final int CODE_ERROR = 500;
@@ -47,6 +47,7 @@ public class CommonResult<T> implements Serializable{
 
     /**
      * 获取code
+     *
      * @return code
      */
     public Integer getCode() {
@@ -55,13 +56,16 @@ public class CommonResult<T> implements Serializable{
 
     /**
      * 获取msg
+     *
      * @return msg
      */
     public String getMsg() {
         return this.msg;
     }
+
     /**
      * 获取data
+     *
      * @return data
      */
     public T getData() {
@@ -70,6 +74,7 @@ public class CommonResult<T> implements Serializable{
 
     /**
      * 给code赋值,连缀风格
+     *
      * @param code code
      * @return 对象自身
      */
@@ -80,6 +85,7 @@ public class CommonResult<T> implements Serializable{
 
     /**
      * 给msg赋值,连缀风格
+     *
      * @param msg msg
      * @return 对象自身
      */
@@ -90,6 +96,7 @@ public class CommonResult<T> implements Serializable{
 
     /**
      * 给data赋值,连缀风格
+     *
      * @param data data
      * @return 对象自身
      */
@@ -105,20 +112,32 @@ public class CommonResult<T> implements Serializable{
     public static <T> CommonResult<T> ok() {
         return new CommonResult<>(CODE_SUCCESS, "操作成功", null);
     }
+
     public static <T> CommonResult<T> ok(String msg) {
         return new CommonResult<>(CODE_SUCCESS, msg, null);
     }
+
     public static <T> CommonResult<T> code(int code) {
         return new CommonResult<>(code, null, null);
     }
+
     public static <T> CommonResult<T> data(T data) {
         return new CommonResult<>(CODE_SUCCESS, "操作成功", data);
     }
 
+    public static <T> CommonResult<T> fair(T data) {
+        return new CommonResult<>(CODE_SUCCESS, "操作失败", data);
+    }
+
+    public static <T> CommonResult<T> result(boolean success, T data) {
+        return success ? data(data) : fair(data);
+    }
+
     // 构建失败
     public static <T> CommonResult<T> error() {
         return new CommonResult<>(CODE_ERROR, "服务器异常", null);
     }
+
     public static <T> CommonResult<T> error(String msg) {
         return new CommonResult<>(CODE_ERROR, msg, null);
     }

+ 42 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/util/DateFormatter.java

@@ -102,6 +102,48 @@ public class DateFormatter {
         }
     }
 
+    public static String getFormattedSingleDateHourse(Instant lastUpdated) {
+        // 如果 lastUpdated 为 null,返回默认值
+        if (lastUpdated == null) {
+            return "";
+        }
+        // 将 Instant 转换为 LocalDateTime
+        LocalDateTime lastUpdatedLocal = LocalDateTime.ofInstant(lastUpdated, ZoneId.systemDefault());
+        // 获取当前时间
+        LocalDateTime now = LocalDateTime.now();
+        // 计算两个日期的差值(以天为单位)
+        long daysDiff = ChronoUnit.DAYS.between(lastUpdatedLocal, now);
+
+        // 始终使用日期和小时分钟秒的格式
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd HH:mm");
+
+        if (daysDiff <= 7) {
+            // 使用 Locale.CHINESE 进行格式化,显示中文星期几并加小时
+            DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("EEEE", Locale.SIMPLIFIED_CHINESE);
+            // 返回中文星期几 + 小时
+            return lastUpdatedLocal.format(dayFormatter) + " " + lastUpdatedLocal.format(DateTimeFormatter.ofPattern("HH:mm"));
+        } else {
+            // 超过 7 天,显示完整的日期时间格式
+            return lastUpdatedLocal.format(formatter);  // 返回完整的日期时间
+        }
+    }
+
+
+    public static void main(String[] args) {
+        // 当前时间
+        Instant now = Instant.now();
+
+        // 创建一些不同的时间点来进行测试
+        Instant recentTime = now.minus(3, ChronoUnit.DAYS);  // 3 天前
+        Instant olderTime = now.minus(10, ChronoUnit.DAYS);  // 10 天前
+        Instant exactlyNow = now;  // 当前时间
+
+        // 输出测试结果
+        System.out.println("最近的时间(3天前): " + getFormattedSingleDateHourse(recentTime));
+        System.out.println("较早的时间(10天前): " + getFormattedSingleDateHourse(olderTime));
+        System.out.println("当前时间: " + getFormattedSingleDateHourse(exactlyNow));
+    }
+
 
     public static String convertToUTCPlus8(String time) {
         // 1. 解析时间为 Instant (UTC)

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

@@ -71,6 +71,13 @@ public class AppController {
         return CommonResult.data((stringObjectMap));
     }
 
+    @PostMapping("/device/alarm")
+    @Operation(summary = "更新设备预警")
+    public CommonResult<Boolean> deviceAlarm(@RequestBody @Valid AppDeviceAlarmParam appDeviceAlarmParam) {
+        Boolean alarm = appDeviceService.updateDeviceAlarm(appDeviceAlarmParam);
+        return CommonResult.result(alarm, alarm);
+    }
+
     // 下载设备数据接口(POST)
     @PostMapping("/device/download/{deviceCode}")
     @Operation(summary = "下载采集器设备数据接口")

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/SensorDataTransformer.java

@@ -64,7 +64,7 @@ public class SensorDataTransformer {
                     if ("co2".equals(dataType)) return data.getCo2() != null;
                     return false;
                 })
-                .map(data -> DateFormatter.getFormattedSingleDate(data.getTime())) // 获取时间
+                .map(data -> DateFormatter.getFormattedSingleDateHourse(data.getTime())) // 获取时间
                 .collect(Collectors.toList());
 
         List<Float> values = sortedData.stream()

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

@@ -26,10 +26,9 @@ 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 java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
 
 @Service
 @RequiredArgsConstructor
@@ -44,6 +43,7 @@ public class AppDeviceService {
         System.out.println("设备已添加:" + device);
         return true; // 假设设备保存成功
     }
+
     /**
      * 监控对象列表包含温湿度监控指标--分页
      *
@@ -151,4 +151,30 @@ public class AppDeviceService {
         Assert.notNull(appDeviceQueryParams, "appDeviceQueryParams cannot be null");
         return monitorDeviceService.queryDataByDeviceIdAndRoads(appDeviceQueryParams.getSensorCode(), appDeviceQueryParams.getSensorRoute(), appDeviceQueryParams.getStartTime(), appDeviceQueryParams.getEndTime());
     }
+
+
+    public Boolean updateDeviceAlarm(AppDeviceAlarmParam appDeviceAlarmParam) {
+        Assert.notNull(appDeviceAlarmParam, "appDeviceAlarmParam cannot be null");
+        MonitorTargetRegion monitorTargetRegion = monitorTargetRegionService.getById(appDeviceAlarmParam.getMonitorTargetRegionId());
+        if (Objects.isNull(monitorTargetRegion)) {
+            return Boolean.FALSE;
+        }
+        updateField(appDeviceAlarmParam::getTemperatureDown, monitorTargetRegion::setTemperatureDown);
+        updateField(appDeviceAlarmParam::getTemperatureUp, monitorTargetRegion::setTemperatureUp);
+        updateField(appDeviceAlarmParam::getHumidityDown, monitorTargetRegion::setHumidityDown);
+        updateField(appDeviceAlarmParam::getHumidityUp, monitorTargetRegion::setHumidityUp);
+        updateField(appDeviceAlarmParam::getCo2Down, monitorTargetRegion::setCo2Down);
+        updateField(appDeviceAlarmParam::getCo2Up, monitorTargetRegion::setCo2Up);
+        return monitorTargetRegionService.updateById(monitorTargetRegion);
+    }
+
+    private <V> void updateField(Supplier<V> getter, Consumer<V> setter) {
+        V value = getter.get();
+        if (value != null) {
+            setter.accept(value);
+        }
+    }
+
+
+
 }

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

@@ -15,7 +15,6 @@ package vip.xiaonuo.coldchain.modular.monitortargetregion.entity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.google.common.collect.Lists;
@@ -29,7 +28,6 @@ import vip.xiaonuo.coldchain.core.handler.SensorAlarmUserTypeHandler;
 import vip.xiaonuo.coldchain.modular.app.param.FloatNullToDashSerializer;
 import vip.xiaonuo.common.pojo.OrgEntity;
 
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -186,4 +184,27 @@ public class MonitorTargetRegion extends OrgEntity {
     @Schema(description = "勿扰结束时间")
     private String ignoreEndTime;
 
+    public void setTemperatureUp(Float temperatureUp) {
+        this.temperatureUp = temperatureUp;
+    }
+
+    public void setTemperatureDown(Float temperatureDown) {
+        this.temperatureDown = temperatureDown;
+    }
+
+    public void setHumidityUp(Float humidityUp) {
+        this.humidityUp = humidityUp;
+    }
+
+    public void setHumidityDown(Float humidityDown) {
+        this.humidityDown = humidityDown;
+    }
+
+    public void setCo2Up(Float co2Up) {
+        this.co2Up = co2Up;
+    }
+
+    public void setCo2Down(Float co2Down) {
+        this.co2Down = co2Down;
+    }
 }