Explorar o código

fix: 上个月环比异常

jackzhou hai 4 meses
pai
achega
ad84c74a67

+ 2 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/service/SensorAlarmService.java

@@ -3,6 +3,7 @@ package vip.xiaonuo.coldchain.core.alarm.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import vip.xiaonuo.coldchain.core.alarm.bean.SensorAlarm;
+import vip.xiaonuo.coldchain.core.alarm.enums.SensorAlarmType;
 import vip.xiaonuo.coldchain.modular.app.param.Message;
 import vip.xiaonuo.coldchain.modular.app.param.MessagePageParam;
 import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticePageParam;
@@ -19,5 +20,5 @@ public interface SensorAlarmService extends IService<SensorAlarm> {
 
     Page<SensorAlarm> getMessages(MonitorNoticePageParam monitorNoticePageParam);
 
-    long countAlarms(String startDate, String endDate, String sensorCode, String sensorRoute);
+    long countAlarms(String startDate, String endDate, String sensorCode, String sensorRoute, SensorAlarmType type);
 }

+ 14 - 3
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/service/SensorAlarmServiceImpl.java

@@ -20,6 +20,7 @@ import vip.xiaonuo.coldchain.modular.app.param.MessageType;
 import vip.xiaonuo.coldchain.modular.monitornotice.param.MonitorNoticePageParam;
 import vip.xiaonuo.common.page.CommonPageRequest;
 
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -64,12 +65,16 @@ public class SensorAlarmServiceImpl extends ServiceImpl<SensorAlarmMapper, Senso
     }
 
     @Override
-    public long countAlarms(String startDate, String endDate, String sensorCode, String sensorRoute) {
+    public long countAlarms(String startDate, String endDate, String sensorCode, String sensorRoute,SensorAlarmType type) {
+        if(Objects.isNull(type)){
+            type=SensorAlarmType.DATA_ALARM;
+        }
         QueryWrapper<SensorAlarm> queryWrapper = new QueryWrapper<>();
         // 获取当前登录用户ID
         String orgId = StpLoginUserUtil.getLoginUser().getOrgId();
-        // 查询创建用户为当前用户的记录
-        queryWrapper.lambda().eq(SensorAlarm::getCreateOrg, orgId);  // 创建组织ID条件
+        // 创建组织ID条件
+        queryWrapper.lambda().eq(SensorAlarm::getCreateOrg, orgId);
+        queryWrapper.lambda().eq(SensorAlarm::getType, type.getDeviceCode());
         // 根据传入的 sensorCode 和 sensorRoute 条件查询
         if (sensorCode != null) {
             queryWrapper.lambda().eq(SensorAlarm::getSensorCode, sensorCode);
@@ -98,6 +103,12 @@ public class SensorAlarmServiceImpl extends ServiceImpl<SensorAlarmMapper, Senso
         }else{
             queryWrapper.lambda().eq(SensorAlarm::getType, SensorAlarmType.DATA_ALARM.getDeviceCode());
         }
+        if(StrUtil.isNotBlank(messagePageParam.getSensorCode())){
+            queryWrapper.lambda().eq(SensorAlarm::getSensorCode, messagePageParam.getSensorCode());
+        }
+        if(Objects.nonNull(messagePageParam.getSensorRoute())){
+            queryWrapper.lambda().eq(SensorAlarm::getSensorRoute, messagePageParam.getSensorRoute());
+        }
         // 如果有关键词,进行模糊查询或者设备名等字段的精确查询
         if (ObjectUtil.isNotEmpty(messagePageParam.getKeyword())) {
             queryWrapper.lambda().and(q -> q.like(SensorAlarm::getMessage, messagePageParam.getKeyword()).or().like(SensorAlarm::getDeviceName, messagePageParam.getKeyword()));

+ 26 - 7
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/JfcloudSensorDataService.java

@@ -9,6 +9,7 @@ import com.influxdb.client.QueryApi;
 import com.influxdb.query.FluxTable;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
+import vip.xiaonuo.coldchain.core.alarm.enums.SensorAlarmType;
 import vip.xiaonuo.coldchain.core.alarm.service.SensorAlarmService;
 import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
 import vip.xiaonuo.coldchain.core.config.JfcloudColdChainConstants;
@@ -265,17 +266,35 @@ public class JfcloudSensorDataService extends JfcloudFluxDataService<SensorData>
         LocalDate lastDayOfLastMonth = LocalDate.now().minusMonths(1).withDayOfMonth(1).plusMonths(1).minusDays(1);
         return lastDayOfLastMonth.format(DateTimeFormatter.ISO_DATE) + "T23:59:59Z";
     }
+    public long getAlarmCount(String sensorCode, String sensorRoute, SensorAlarmType alarmType, boolean isLastMonth) {
+        // 获取上个月或本月的起始时间和结束时间
+        String startDate;
+        String endDate;
+        if (isLastMonth) {
+            startDate = getFirstDayOfLastMonth();
+            endDate = getLastDayOfLastMonth();
+        } else {
+            startDate = getFirstDayOfCurrentMonth();
+            endDate = getLastDayOfCurrentMonth();
+        }
+        // 根据提供的报警类型计算报警数量
+        return sensorAlarmService.countAlarms(startDate, endDate, sensorCode, sensorRoute, alarmType);
+    }
 
     public long getLastMonthAlarmCount(String sensorCode, String sensorRoute) {
-        // 获取上个月的起始时间和结束时间
-        String startDate = getFirstDayOfLastMonth();
-        String endDate = getLastDayOfLastMonth();
-        return sensorAlarmService.countAlarms(startDate, endDate, sensorCode, sensorRoute);
+        return getAlarmCount(sensorCode, sensorRoute, SensorAlarmType.DATA_ALARM, true);
     }
 
     public long getCurrentMonthAlarmCount(String sensorCode, String sensorRoute) {
-        String startDate = getFirstDayOfCurrentMonth();
-        String endDate = getLastDayOfCurrentMonth();
-        return sensorAlarmService.countAlarms(startDate, endDate, sensorCode, sensorRoute);
+        return getAlarmCount(sensorCode, sensorRoute, SensorAlarmType.DATA_ALARM, false);
+    }
+
+    public long getCurrentMonthOfflineCount(String sensorCode, String sensorRoute) {
+        return getAlarmCount(sensorCode, sensorRoute, SensorAlarmType.SENSOR_OFFLINE, false);
     }
+
+    public long getLastMonthOfflineCount(String sensorCode, String sensorRoute) {
+        return getAlarmCount(sensorCode, sensorRoute, SensorAlarmType.SENSOR_OFFLINE, true);
+    }
+
 }

+ 6 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/MessagePageParam.java

@@ -60,6 +60,12 @@ public class MessagePageParam {
     @Schema(description = "关键字")
     private String keyword;
 
+    @Schema(description = "设备序列号")
+    private String sensorCode;
+
+    @Schema(description = "设备路数")
+    private Integer sensorRoute;
+
     /**
      * 查询开始时间
      */

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

@@ -239,11 +239,11 @@ public class AppDeviceService {
         // 假设上月数据
         long lastMonthCollected = jfcloudSensorDataService.getLastMonthDataCount(appDeviceQueryParams.getSensorCode(),appDeviceQueryParams.getSensorRoute());
         long lastMonthWarnings = jfcloudSensorDataService.getLastMonthAlarmCount(appDeviceQueryParams.getSensorCode(),appDeviceQueryParams.getSensorRoute());   // 上月预警总数
-        long lastMonthAbnormal = 0;   // 上月异常总数
+        long lastMonthAbnormal = jfcloudSensorDataService.getLastMonthOfflineCount(appDeviceQueryParams.getSensorCode(),appDeviceQueryParams.getSensorRoute());   // 上月异常总数
         // 计算本月数据
         long totalCollected = jfcloudSensorDataService.getCurrentMonthDataCount(appDeviceQueryParams.getSensorCode(),appDeviceQueryParams.getSensorRoute());
         long totalWarnings = jfcloudSensorDataService.getCurrentMonthAlarmCount(appDeviceQueryParams.getSensorCode(),appDeviceQueryParams.getSensorRoute());   // 同比减少5%
-        long totalAbnormal = 0;   // 同比增长10%
+        long totalAbnormal = jfcloudSensorDataService.getCurrentMonthOfflineCount(appDeviceQueryParams.getSensorCode(),appDeviceQueryParams.getSensorRoute()); ;   // 同比增长10%
         // 创建响应对象
         SensorIndicator response = new SensorIndicator();
         response.setTotalCollected(totalCollected);
@@ -252,7 +252,7 @@ public class AppDeviceService {
         //计算相对上个月的半分比
         response.setCollectedChange(formatChange(calculateChange(lastMonthCollected, totalCollected)));
         response.setWarningsChange(formatChange(calculateChange(lastMonthWarnings, totalWarnings)));
-        response.setAbnormalChange(formatChange(totalAbnormal));
+        response.setAbnormalChange(formatChange(calculateChange(lastMonthAbnormal, totalAbnormal)));
         return response;
     }
     // 计算百分比变化的辅助方法