Forráskód Böngészése

限电记录查询优化,限制只能查询15天数据,检修计划去掉检修记录按钮

fanxiaoyu 2 hónapja
szülő
commit
2673a12d23

+ 86 - 20
cpp-admin/src/main/java/com/cpp/web/service/electricityRestriction/impl/ElectricityRestrictionServiceImpl.java

@@ -13,6 +13,11 @@ import org.springframework.stereotype.Service;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -25,16 +30,17 @@ public class ElectricityRestrictionServiceImpl implements ElectricityRestriction
 
     private final ElectricFieldService electricFieldService;
 
-    private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+    private  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
 
-    private final static SimpleDateFormat formatDate = new SimpleDateFormat("HH:mm");
+    private  SimpleDateFormat formatDate = new SimpleDateFormat("HH:mm");
 
     @Override
     public List getElectricityRestriction(Date startTime, Date endTime, String stationCode) {
         List<ElectricField> electricFieldList;
         List<ElectricityRestrictionDto> list = new ArrayList<>();
+        System.out.println(System.currentTimeMillis());
         List<PowerStationStatusData> powerStationStatusDataList = powerStationStatusDataService.findByTimeBetweenAndStationCode(startTime, new Date(endTime.getTime() + 1000L), stationCode);
-
+        System.out.println(System.currentTimeMillis());
         if (null == stationCode) {
             electricFieldList = electricFieldService.list();
             for (ElectricField electricField : electricFieldList) {
@@ -59,18 +65,47 @@ public class ElectricityRestrictionServiceImpl implements ElectricityRestriction
      */
     public List<ElectricityRestrictionDto> get(List<PowerStationStatusData> powerStationStatusDataList, Date startTime, Date endTime, String stationCode) {
         List<ElectricityRestrictionDto> list = new ArrayList<>();
-        if (null != powerStationStatusDataList && powerStationStatusDataList.size() > 0) {
+
+        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");
+        // 使用toMap收集器进行分组,特别处理0点数据
+        Map<String, List<PowerStationStatusData>> groupMap = powerStationStatusDataList.stream()
+                .collect(Collectors.toMap(
+                        t -> {
+                            LocalDateTime dateTime = t.getTime().toInstant()
+                                    .atZone(ZoneId.systemDefault())
+                                    .toLocalDateTime();
+                            // 如果时间是0点,我们计算前一天的日期
+                            if (dateTime.toLocalTime().equals(LocalTime.MIDNIGHT)) {
+                                LocalDate previousDate = dateTime.toLocalDate().minusDays(1);
+                                return dateFormatter.format(previousDate);
+                            }
+                            // 对于非0点数据,直接使用当天的日期
+                            return dateFormatter.format(dateTime.toLocalDate());
+                        },
+                        Collections::singletonList,
+                        (list1, list2) -> {
+                            List<PowerStationStatusData> combined = new ArrayList<>(list1);
+                            combined.addAll(list2);
+                            return combined;
+                        }
+                ));
+
+        if (null != groupMap && groupMap.size() > 0) {
+
             List<String> dayList = DateTimeUtil.getDatesInRange(startTime, endTime);
             for (String s : dayList) {
-                List<PowerStationStatusData> collectList = powerStationStatusDataList.stream().filter(f -> dateFormat.format(f.getTime()).equals(s) && !formatDate.format(f.getTime()).equals("00:00")).collect(Collectors.toList());
-                // 判断下一天00:00数据是否限电
-                List<PowerStationStatusData> dataList = powerStationStatusDataList.stream().filter(f -> f.getTime().getTime() == DateTimeUtil.getDayStartTime(startTime.getTime() + 24 * 60 * 60 * 1000L).getTime()).collect(Collectors.toList());
-                if (dataList.size() > 0) {
-                    PowerStationStatusData powerStationStatusData = new PowerStationStatusData();
-                    powerStationStatusData = dataList.get(0);
-                    powerStationStatusData.setTime(new Date(startTime.getTime() + 24 * 60 * 60 * 1000L - 60*1000L));
-                    collectList.add(powerStationStatusData);
-                }
+                if (groupMap.get(s) != null){
+
+                List<PowerStationStatusData> collectList = groupMap.get(s);
+//                // 判断下一天00:00数据是否限电
+//                List<PowerStationStatusData> dataList = powerStationStatusDataList.stream().filter(f -> f.getTime().getTime() == DateTimeUtil.getDayStartTime(startTime.getTime() + 24 * 60 * 60 * 1000L).getTime()).collect(Collectors.toList());
+//                if (dataList.size() > 0) {
+//                    PowerStationStatusData powerStationStatusData = new PowerStationStatusData();
+//                    powerStationStatusData = dataList.get(0);
+//                    powerStationStatusData.setTime(new Date(startTime.getTime() + 24 * 60 * 60 * 1000L - 60 * 1000L));
+//                    collectList.add(powerStationStatusData);
+//                }
                 if (collectList.size() > 0) {
                     ElectricityRestrictionDto electricityRestrictionDto = new ElectricityRestrictionDto();
                     // 总限电量
@@ -86,6 +121,7 @@ public class ElectricityRestrictionServiceImpl implements ElectricityRestriction
                     list.add(electricityRestrictionDto);
                 }
             }
+            }
         }
         return list;
     }
@@ -111,10 +147,10 @@ public class ElectricityRestrictionServiceImpl implements ElectricityRestriction
         for (int i = 0; i < list.size(); i++) {
             Date calculateTime = list.get(i).getTime();
             Date finalTime;
-            if (formatDate.format(list.get(i).getTime()).equals("23:59")){
-                finalTime= new Date(list.get(i).getTime().getTime() - 4 * 60 * 1000l);
-            }else {
-                finalTime = new Date(list.get(i).getTime().getTime() - 5 * 60 * 1000l);
+            if (formatDate.format(calculateTime).equals("23:59")) {
+                finalTime = new Date(calculateTime.getTime() - 4 * 60 * 1000l);
+            } else {
+                finalTime = new Date(calculateTime.getTime() - 5 * 60 * 1000l);
             }
 
             if (null == prevDate) {
@@ -127,7 +163,7 @@ public class ElectricityRestrictionServiceImpl implements ElectricityRestriction
                     result.append(formatDate.format(finalTime) + "~");
                 }
             } else {
-                if ( formatDate.format(calculateTime).equals("23:59")?DateTimeUtil.isMinutesDifference(calculateTime, prevDate, 4L) :DateTimeUtil.isMinutesDifference(calculateTime, prevDate, 5L)) {
+                if (formatDate.format(calculateTime).equals("23:59") ? DateTimeUtil.isMinutesDifference(calculateTime, prevDate, 4L) : DateTimeUtil.isMinutesDifference(calculateTime, prevDate, 5L)) {
                     prevDate = calculateTime;
                     if (i == list.size() - 1) {
                         result.append(formatDate.format(calculateTime) + ";");
@@ -145,10 +181,16 @@ public class ElectricityRestrictionServiceImpl implements ElectricityRestriction
                 }
             }
         }
-        return result.toString();
-    }
+        String modifiedTimePeriods = result.toString();
+        if (judge(result.toString())){
+            int lastIndex = result.toString().lastIndexOf("00:00");
+            int endIndex = (lastIndex + 4 < result.toString().length() && result.toString().charAt(lastIndex + 4) == ';') ? lastIndex + 5 : result.toString().length();
 
+            modifiedTimePeriods = result.toString().substring(0, lastIndex) + "23:59" + (endIndex > lastIndex + 4 ? result.toString().substring(endIndex) : "");
 
+        }
+        return modifiedTimePeriods;
+    }
     @Data
     public class ElectricityRestrictionDto {
         // 日期
@@ -162,4 +204,28 @@ public class ElectricityRestrictionServiceImpl implements ElectricityRestriction
         // 场站编号
         private String stationCode;
     }
+
+    /**
+     *  判断限电结果是否以00:00结尾
+     * @param result
+     * @return
+     */
+    public boolean judge(String result){
+        boolean flag = false;
+
+        String[] spiltOne = result.split(";");
+        if (spiltOne.length > 1){
+            String[] spiltTwo = spiltOne[spiltOne.length-1].split("~");
+            if (spiltTwo[1].equals("00:00")){
+                flag = true;
+            }
+        }else {
+            String[] spiltTwo = spiltOne[0].split("~");
+            if (spiltTwo[1].equals("00:00")){
+                flag = true;
+            }
+        }
+
+        return  flag;
+    }
 }

+ 8 - 1
cpp-admin/src/main/java/com/cpp/web/service/overhaulplan/impl/OverhaulPlanRecordsServiceImpl.java

@@ -2,6 +2,8 @@ package com.cpp.web.service.overhaulplan.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cpp.common.core.domain.entity.SysDictData;
+import com.cpp.common.utils.DictUtils;
 import com.cpp.common.utils.spring.SpringUtils;
 import com.cpp.web.domain.BaseForecastEntity;
 import com.cpp.web.domain.datafactory.enums.FileTypeEnum;
@@ -96,7 +98,12 @@ public class OverhaulPlanRecordsServiceImpl extends ServiceImpl<OverhaulPlanReco
         for (OverhaulPlanRecords overhaulPlanRecords : overhaulPlanRecordsList) {
             PlanAndRecordDto planAndRecordDto = new PlanAndRecordDto();
             planAndRecordDto.setStationCode(overhaulPlanRecords.getStationCode());
-            planAndRecordDto.setForecastModel(overhaulPlanRecords.getForecastModel());
+            // 将存入字典键值改为字典标签
+            for (SysDictData sysDictData : DictUtils.getDictCache("forecast_model")) {
+                if (overhaulPlanRecords.getForecastModel().equals(sysDictData.getDictValue())) {
+                    planAndRecordDto.setForecastModel(sysDictData.getDictLabel());
+                }
+            }
             planAndRecordDto.setForecastType(overhaulPlanRecords.getForecastType());
             planAndRecordDto.setDetails(overhaulPlanRecords.getDetails());
             planAndRecordDto.setCreateTime(overhaulPlanRecords.getCreateTime());

+ 3 - 3
cpp-ui/src/views/maintenancerelated/overhaulplan/index.vue

@@ -26,9 +26,9 @@
         <el-button type="primary" size="small" style="margin-left: 5px" icon="el-icon-search"
                    @click="queryByStationCode">查询
         </el-button>
-        <el-button type="primary" size="small" style="margin-left: 5px" icon="el-icon-search"
-                   @click="showAllRecords">检修记录
-        </el-button>
+<!--        <el-button type="primary" size="small" style="margin-left: 5px" icon="el-icon-search"-->
+<!--                   @click="showAllRecords">检修记录-->
+<!--        </el-button>-->
       </el-form-item>
     </el-form>
     <div style="padding-top: 10px">

+ 7 - 3
cpp-ui/src/views/statistics/electricityRestriction/index.vue

@@ -113,18 +113,22 @@ export default {
       })
     },
     queryByStationCode() {
-      this.loading = true
       let startTime = Math.round(this.dateTime[0])
       let endTime = Math.round(this.dateTime[1])
       if (endTime <= startTime) {
-        this.$message.warning("开始时间不能大于结束时间")
-        return
+        return this.$message.warning("开始时间不能大于结束时间")
+
+      }
+      if (endTime - startTime > 60 * 60 * 24 * 1000 * 15) {
+        return this.$message.warning("查询数据不能超过15天!")
       }
+
       const param = {
         "stationCode": this.stationCode,
         "startTime": startTime,
         "endTime": endTime,
       }
+      this.loading = true
       this.$axios.get('/electricityRestriction/getData', {params: param}).then(response => {
         this.tableData = response.data
         this.total = this.tableData.length