wukai 3 miesięcy temu
rodzic
commit
b6813fab82

+ 7 - 3
jjt-biz/src/main/java/com/jjt/calc/controller/TwinCalcStopController.java

@@ -91,9 +91,10 @@ public class TwinCalcStopController extends BaseController {
         Map<String, Object> statistics = new HashMap<>();
         statistics.put("totalDevices", resultList.size());
         statistics.put("trendCounts", trendCounts);
-
         resultList.sort(Comparator.comparing(StopVO::getDeviceId));
-        return success(resultList).put("statistics", statistics);
+        List<StopDetail> monthList = twinCalcStopService.selectTwinCalcStopMonthList(twinCalcStop);
+
+        return success(resultList).put("statistics", statistics).put("monthList", monthList);
     }
 
     @ApiOperation("断纱停机统计")
@@ -140,7 +141,9 @@ public class TwinCalcStopController extends BaseController {
 //        resultList.get(0).setAdditionalInfo(statistics);
 
         resultList.sort(Comparator.comparing(StopVO::getDeviceId));
-        return success(resultList).put("statistics", statistics);
+        List<StopDetail> monthList = twinCalcStopService.selectTwinCalcStopMonthList(twinCalcStop);
+
+        return success(resultList).put("statistics", statistics).put("monthList", monthList);
     }
 
     @ApiOperation("停机统计")
@@ -299,6 +302,7 @@ public class TwinCalcStopController extends BaseController {
 
     /**
      * 处理停机数据查询条件
+     *
      * @param twinCalcStop 停机查询条件
      */
     private void processStopData(TwinCalcStop twinCalcStop) {

+ 16 - 5
jjt-biz/src/main/java/com/jjt/calc/service/ITwinCalcStopService.java

@@ -1,13 +1,13 @@
 package com.jjt.calc.service;
 
-import java.time.LocalDateTime;
-import java.util.Date;
-import java.util.List;
-
 import com.jjt.biz.domain.TwinDevice;
 import com.jjt.calc.domain.TwinCalcStop;
 import com.jjt.calc.vo.StopDetail;
 
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
 /**
  * 停机数据统计Service接口
  *
@@ -62,6 +62,7 @@ public interface ITwinCalcStopService {
      * @return 结果
      */
     public int deleteTwinCalcStopById(Long id);
+
     /**
      * 停机数据治理,从停机记录表到停机统计表中
      *
@@ -70,6 +71,7 @@ public interface ITwinCalcStopService {
      * @param deviceList 设备列表
      */
     void process(LocalDateTime startTime, LocalDateTime endTime, List<TwinDevice> deviceList);
+
     /**
      * 按开始和结束时间查询数据
      *
@@ -88,10 +90,19 @@ public interface ITwinCalcStopService {
      * @return 查询列表
      */
     List<TwinCalcStop> selectTwinCalcStopListByDate(Date sTime, Date eTime, int type);
+
     /**
      * 按开始和结束时间查询数据--停机类型)
-     *
+     * @param twinCalcStop 查询条件
      * @return 停机详情列表
      */
     List<StopDetail> selectTwinCalcStopDetailList(TwinCalcStop twinCalcStop);
+
+    /**
+     * 按月查询数据--停机类型)
+     *
+     * @param twinCalcStop 查询条件
+     * @return 停机详情列表
+     */
+    List<StopDetail> selectTwinCalcStopMonthList(TwinCalcStop twinCalcStop);
 }

+ 79 - 24
jjt-biz/src/main/java/com/jjt/calc/service/impl/TwinCalcStopServiceImpl.java

@@ -326,6 +326,61 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
     }
 
     /**
+     * 按月查询数据--停机类型)
+     *
+     * @param twinCalcStop 查询条件
+     * @return 停机详情列表
+     */
+    @Override
+    public List<StopDetail> selectTwinCalcStopMonthList(TwinCalcStop twinCalcStop) {
+        // 获取当月第一天和最后一天
+        Calendar cal = Calendar.getInstance();
+        if (twinCalcStop.getDataDate() != null) {
+            cal.setTime(twinCalcStop.getDataDate());
+        }
+        cal.set(Calendar.DAY_OF_MONTH, 1);
+        Date firstDay = cal.getTime();
+
+        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
+        Date lastDay = cal.getTime();
+
+        // 结束日期为当前时间减去31小时
+        Calendar endCal = Calendar.getInstance();
+        endCal.add(Calendar.HOUR_OF_DAY, -31);
+        Date endDate = endCal.getTime();
+
+        // 取 endDate 和 lastDay 中较早的日期作为实际结束日期
+        Date actualEndDate = endDate.before(lastDay) ? endDate : lastDay;
+
+        // 设置查询条件
+        twinCalcStop.setWorkDay(firstDay);
+        Map<String, Object> params = twinCalcStop.getParams();
+        if (params == null) {
+            params = new HashMap<>();
+            twinCalcStop.setParams(params);
+        }
+        params.put("endDate", actualEndDate);
+        List<StopDetail> monthList = twinCalcStopMapper.selectTwinCalcStopDetailListByMonth(twinCalcStop);
+        List<StopDetail> dailySummaryList = monthList.stream()
+                .collect(Collectors.groupingBy(
+                        detail -> detail.getDate(),
+                        Collectors.summingInt(StopDetail::getTimes)
+                ))
+                .entrySet()
+                .stream()
+                .map(entry -> {
+                    StopDetail summary = new StopDetail();
+                    summary.setDate(entry.getKey());
+                    summary.setTimes(entry.getValue());
+                    return summary;
+                })
+                .sorted(Comparator.comparing(StopDetail::getDate))
+                .collect(Collectors.toList());
+
+        return dailySummaryList;
+    }
+
+    /**
      * 查询月度停机详情列表(按日统计)
      *
      * @param twinCalcStop 查询条件
@@ -339,18 +394,18 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
         }
         cal.set(Calendar.DAY_OF_MONTH, 1);
         Date firstDay = cal.getTime();
-        
+
         cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
         Date lastDay = cal.getTime();
-        
+
         // 结束日期为当前时间减去31小时
         Calendar endCal = Calendar.getInstance();
         endCal.add(Calendar.HOUR_OF_DAY, -31);
         Date endDate = endCal.getTime();
-        
+
         // 取 endDate 和 lastDay 中较早的日期作为实际结束日期
         Date actualEndDate = endDate.before(lastDay) ? endDate : lastDay;
-        
+
         // 设置查询条件
         twinCalcStop.setWorkDay(firstDay);
         Map<String, Object> params = twinCalcStop.getParams();
@@ -359,10 +414,10 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
             twinCalcStop.setParams(params);
         }
         params.put("endDate", actualEndDate);
-        
+
         // 查询数据库中的实际数据
         List<StopDetail> actualList = twinCalcStopMapper.selectTwinCalcStopDetailListByMonth(twinCalcStop);
-        
+
         // 获取所有涉及的设备
         Set<Long> deviceIds = actualList.stream().map(StopDetail::getDeviceId).collect(Collectors.toSet());
         Map<Long, String> deviceNames = new HashMap<>();
@@ -372,22 +427,22 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
                 deviceNames.put(detail.getDeviceId(), detail.getDeviceName());
             }
         }
-        
+
         // 如果没有任何设备数据,直接返回空列表
         if (deviceIds.isEmpty()) {
             return new ArrayList<>();
         }
-        
+
         // 构建完整的日期列表(从当月第一天到实际结束日期)
         List<Date> dateList = new ArrayList<>();
         Calendar dateCal = Calendar.getInstance();
         dateCal.setTime(firstDay);
-        
+
         while (!dateCal.getTime().after(actualEndDate)) {
             dateList.add(dateCal.getTime());
             dateCal.add(Calendar.DAY_OF_MONTH, 1);
         }
-        
+
         // 构建完整的结果列表,没有数据的日期补0
         List<StopDetail> resultList = new ArrayList<>();
         for (Long deviceId : deviceIds) {
@@ -395,12 +450,12 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
             Map<Date, StopDetail> dateMap = actualList.stream()
                     .filter(d -> d.getDeviceId().equals(deviceId))
                     .collect(Collectors.toMap(StopDetail::getDate, d -> d));
-            
+
             // 如果该设备在整个月内没有任何数据记录,则不加入结果列表
             if (dateMap.isEmpty()) {
                 continue;
             }
-            
+
             for (Date date : dateList) {
                 StopDetail detail;
                 if (dateMap.containsKey(date)) {
@@ -415,7 +470,7 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
                 resultList.add(detail);
             }
         }
-        
+
         return resultList;
     }
 
@@ -434,12 +489,12 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
             cal.add(Calendar.DAY_OF_MONTH, -90);
             queryDate = cal.getTime();
         }
-        
+
         twinCalcStop.setWorkDay(queryDate);
-        
+
         // 查询数据库中的实际数据
         List<StopDetail> actualList = twinCalcStopMapper.selectTwinCalcStopDetailList(twinCalcStop);
-        
+
         // 获取所有涉及的设备
         Set<Long> deviceIds = actualList.stream().map(StopDetail::getDeviceId).collect(Collectors.toSet());
         Map<Long, String> deviceNames = new HashMap<>();
@@ -448,12 +503,12 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
                 deviceNames.put(detail.getDeviceId(), detail.getDeviceName());
             }
         }
-        
+
         // 如果没有任何设备数据,直接返回空列表
         if (deviceIds.isEmpty()) {
             return new ArrayList<>();
         }
-        
+
         // 构建完整的结果列表,没有数据的小时补0(从7点到第二天7点,共24小时)
         List<StopDetail> resultList = new ArrayList<>();
         for (Long deviceId : deviceIds) {
@@ -469,12 +524,12 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
                     String key = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, d.getDate()) + "-" + d.getHour();
                     hourMap.put(key, d);
                 });
-            
+
             // 如果该设备在24小时内没有任何数据记录,则不加入结果列表
             if (hourMap.isEmpty()) {
                 continue;
             }
-            
+
             // 构建从7点到第二天7点的24小时数据
             Calendar cal = Calendar.getInstance();
             cal.setTime(queryDate);
@@ -482,11 +537,11 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
             cal.set(Calendar.MINUTE, 0);
             cal.set(Calendar.SECOND, 0);
             cal.set(Calendar.MILLISECOND, 0);
-            
+
             for (int i = 0; i < 24; i++) {
                 // 构造key查找是否有数据
                 String key = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, cal.getTime()) + "-" + cal.get(Calendar.HOUR_OF_DAY);
-                
+
                 StopDetail detail;
                 if (hourMap.containsKey(key)) {
                     detail = hourMap.get(key);
@@ -499,11 +554,11 @@ public class TwinCalcStopServiceImpl implements ITwinCalcStopService {
                     detail.setTimes(0);
                 }
                 resultList.add(detail);
-                
+
                 cal.add(Calendar.HOUR_OF_DAY, 1);  // 增加1小时
             }
         }
-        
+
         return resultList;
     }
 }