Parcourir la source

增加修复数字和穿透不匹配的接口

Levi.u il y a 4 ans
Parent
commit
f96fd122fe

+ 18 - 0
src/main/java/com/ebei/screen/common/util/ParkUtils.java

@@ -25,6 +25,7 @@ import org.springframework.stereotype.Component;
 
 import java.time.Duration;
 import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -503,5 +504,22 @@ public class ParkUtils {
         String format = String.format("%02d", timeIndex);
         return dataList.stream().filter(x -> (x.get("homra") == null ? "" : x.get("homra").toString()).equals(format)).collect(Collectors.toList());
     }
+
+    /**
+     * 获取指定时间到今天的所有日期id
+     *
+     * @param date
+     * @return
+     */
+    public static List<String> getDateIds(String date) {
+        List<String> list = new ArrayList<>();
+        LocalDateTime parse = LocalDateTimeUtil.parse(date, DatePattern.PURE_DATE_PATTERN);
+        list.add(LocalDateTimeUtil.format(parse, DatePattern.PURE_DATE_PATTERN));
+        Duration between = LocalDateTimeUtil.between(parse, LocalDateTime.now());
+        for (int i = 1; i <= between.toDays(); i++) {
+            list.add(LocalDateTimeUtil.format(LocalDateTimeUtil.offset(parse, i, ChronoUnit.DAYS), DatePattern.PURE_DATE_PATTERN));
+        }
+        return list;
+    }
 }
 

+ 6 - 0
src/main/java/com/ebei/screen/controller/park/ParkSystemController.java

@@ -179,4 +179,10 @@ public class ParkSystemController {
         return parkSystemService.exceptionAnalysisByPage(params);
     }
 
+    @ApiOperation("根据集合名称修复所有指定日期后的数字")
+    @PostMapping("/fixDate/{collection}/{date}")
+    public ResponseBean fixDate(@PathVariable String collection, @PathVariable String date) {
+        return parkSystemService.fixDate(collection, date);
+    }
+
 }

+ 9 - 0
src/main/java/com/ebei/screen/service/ParkSystemService.java

@@ -194,4 +194,13 @@ public interface ParkSystemService {
      * @return
      */
     ResponseBean exceptionAnalysisByPage(ExceptionTrendReq params);
+
+    /**
+     * 根据集合名称修复所有指定日期后的数字
+     *
+     * @param collection
+     * @param date
+     * @return
+     */
+    ResponseBean fixDate(String collection, String date);
 }

+ 49 - 0
src/main/java/com/ebei/screen/service/impl/ParkSystemServiceImpl.java

@@ -654,6 +654,55 @@ public class ParkSystemServiceImpl implements ParkSystemService {
         return ResponseBuilder.ok(PageBean.<Map>builder().total(resStream.get().count()).row(resultsList).build());
     }
 
+    /**
+     * 根据集合名称修复所有指定日期后的数字
+     *
+     * @param collection
+     * @param date
+     * @return
+     */
+    @Override
+    public ResponseBean fixDate(String collection, String date) {
+        List<String> dateIds = ParkUtils.getDateIds(date);
+        List<String> list = new ArrayList<>();
+        dateIds.forEach(dateId -> {
+            List<String> parkCodeList = ParkUtils.getParkCodeList();
+            parkCodeList.forEach(parkCode -> {
+                // 修复业务数据
+                Map dayMap = mongoTemplate.findById(parkCode + "_" + dateId, Map.class, collection);
+                if (MapUtil.isNotEmpty(dayMap)) {
+                    list.add(parkCode + "_" + dateId);
+                    Query query = new Query();
+                    query.addCriteria(Criteria.where("_id").is(parkCode + "_" + dateId));
+                    Update update = new Update();
+                    List<Map> hourList = (List<Map>) dayMap.get("data");
+                    AtomicReference<Integer> countNum = new AtomicReference<>(0);
+                    hourList.forEach(hourMap -> {
+                        List<Map> dataList = (List<Map>) hourMap.get("data");
+                        if (CollUtil.isNotEmpty(dataList)) {
+                            countNum.set(countNum.get() + dataList.size());
+                        }
+                        hourMap.put("count", dataList.size());
+                    });
+                    update.set("count", countNum.get());
+                    update.set("data", dayMap.get("data"));
+                    mongoTemplate.upsert(query, update, collection);
+                }
+                // 修复异常数字
+                Map dayMapException = mongoTemplate.findById(parkCode + "_" + dateId, Map.class, "parkException");
+                if (MapUtil.isNotEmpty(dayMapException)) {
+                    Query query = new Query();
+                    query.addCriteria(Criteria.where("_id").is(parkCode + "_" + dateId));
+                    Update update = new Update();
+                    Map<String, List> exceptionMap = (Map<String, List>) dayMapException.get("data");
+                    exceptionMap.keySet().forEach(key -> update.set(key + "Count", exceptionMap.get(key).size()));
+                    mongoTemplate.upsert(query, update, "parkException");
+                }
+            });
+        });
+        return ResponseBuilder.ok("修复车场完成", list);
+    }
+
     /**
      * 不同收费方式停车统计
      *