From 9d54c5b5b873c0ff323125b5a2c28664e7621331 Mon Sep 17 00:00:00 2001 From: dhb52 Date: Fri, 10 May 2024 00:45:09 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=AE=80=E5=8C=96DateTypeEnum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/web/model/enums/DateTypeEnum.java | 215 +++++++----------- 1 file changed, 83 insertions(+), 132 deletions(-) diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/enums/DateTypeEnum.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/enums/DateTypeEnum.java index 5f7ae088..0e9afecc 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/enums/DateTypeEnum.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/enums/DateTypeEnum.java @@ -1,19 +1,18 @@ package com.aizuda.snailjob.server.web.model.enums; -import com.aizuda.snailjob.server.web.model.response.DashboardLineResponseVO; +import cn.hutool.core.date.LocalDateTimeUtil; +import com.aizuda.snailjob.common.core.util.StreamUtils; import com.aizuda.snailjob.server.web.model.response.DashboardLineResponseVO; import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.util.List; import java.util.Map; -import java.util.Objects; +import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; -import java.util.stream.Collectors; /** * @author: byteblogs @@ -23,162 +22,114 @@ public enum DateTypeEnum { /** * 天(按小时) */ - DAY(dashboardLineResponseVOList -> { - Map dashboardLineResponseVOMap = dashboardLineResponseVOList.stream().collect(Collectors.toMap(DashboardLineResponseVO::getCreateDt, i -> i)); - for (int i = 0; i <= LocalDateTime.now().with(TemporalAdjusters.lastDayOfMonth()).getHour(); i++) { - - String format = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).plusHours(i).format(DateTimeFormatter.ofPattern("HH")); - DashboardLineResponseVO dashboardLineResponseVO = dashboardLineResponseVOMap.get(format); - if (Objects.isNull(dashboardLineResponseVO)) { - dashboardLineResponseVO = new DashboardLineResponseVO() - .setTotal(0L) - .setTotalNum(0L) - .setFail(0L) - .setFailNum(0L) - .setMaxCountNum(0L) - .setRunningNum(0L) - .setSuccess(0L) - .setSuccessNum(0L) - .setSuspendNum(0L) - .setStop(0L) - .setCancel(0L) - .setCreateDt(format); - dashboardLineResponseVOList.add(dashboardLineResponseVO); + DAY( + voList -> { + Map responseVoMap = StreamUtils.toIdentityMap(voList, + DashboardLineResponseVO::getCreateDt); + int hourNow = LocalDateTime.now().getHour(); + for (int hourOffset = 0; hourOffset <= hourNow; hourOffset++) { + String createDt = LocalDateTime.now().plusHours(hourOffset).format(DateTimeFormatter.ofPattern("HH")); + if (!responseVoMap.containsKey(createDt)) { + voList.add(buildZeroedVoWithCreateDt(createDt)); + } } - } - }, (startTime) -> { - return Objects.isNull(startTime) ? - LocalDateTime.of(LocalDate.now(), LocalTime.MIN.withNano(0)) : - LocalDateTime.of(startTime.toLocalDate(), LocalTime.MIN.withNano(0)); - }, (endTime) -> { - return Objects.isNull(endTime) ? - LocalDateTime.of(LocalDate.now(), LocalTime.MAX.withNano(0)) : - LocalDateTime.of(endTime.toLocalDate(), LocalTime.MAX.withNano(0)); - }), + }, + (startTime) -> LocalDateTimeUtil.beginOfDay(Optional.ofNullable(startTime).orElse(LocalDateTime.now())), + (endTime) -> LocalDateTimeUtil.endOfDay(Optional.ofNullable(endTime).orElse(LocalDateTime.now())) + ), + /** * 周 */ - WEEK(dashboardLineResponseVOList -> { - Map dispatchQuantityResponseVOMap = dashboardLineResponseVOList.stream().collect(Collectors.toMap(DashboardLineResponseVO::getCreateDt, i -> i)); - for (int i = 0; i < 7; i++) { - - String format = LocalDateTime.of(LocalDate.now().minusDays(i), LocalTime.MIN).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); - DashboardLineResponseVO dashboardLineResponseVO = dispatchQuantityResponseVOMap.get(format); - if (Objects.isNull(dashboardLineResponseVO)) { - dashboardLineResponseVO = new DashboardLineResponseVO() - .setTotal(0L) - .setTotalNum(0L) - .setFail(0L) - .setFailNum(0L) - .setMaxCountNum(0L) - .setRunningNum(0L) - .setSuccess(0L) - .setSuccessNum(0L) - .setSuspendNum(0L) - .setStop(0L) - .setCancel(0L) - .setCreateDt(format); - dashboardLineResponseVOList.add(dashboardLineResponseVO); + WEEK( + voList -> { + Map responseVoMap = StreamUtils.toIdentityMap( + voList, DashboardLineResponseVO::getCreateDt); + for (int dayOffset = 0; dayOffset < 7; dayOffset++) { + String createDt = LocalDateTime.now().minusDays(dayOffset).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + if (!responseVoMap.containsKey(createDt)) { + voList.add(buildZeroedVoWithCreateDt(createDt)); + } } - } - }, (startTime) -> { - return Objects.isNull(startTime) ? - LocalDateTime.of(LocalDate.now().minusDays(7), LocalTime.MIN.withNano(0)) : - LocalDateTime.of(startTime.toLocalDate().minusDays(7), LocalTime.MIN.withNano(0)); - }, (endTime) -> { - return Objects.isNull(endTime) ? - LocalDateTime.of(LocalDate.now(), LocalTime.MAX.withNano(0)) : - LocalDateTime.of(endTime.toLocalDate(), LocalTime.MAX.withNano(0)); - }), + }, + (startTime) -> LocalDateTimeUtil.beginOfDay(Optional.ofNullable(startTime).orElse(LocalDateTime.now()).minusDays(7)), + (endTime) -> LocalDateTimeUtil.endOfDay(Optional.ofNullable(endTime).orElse(LocalDateTime.now())) + ), /** * 月 */ - MONTH(dashboardLineResponseVOList -> { - Map dispatchQuantityResponseVOMap = dashboardLineResponseVOList.stream().collect(Collectors.toMap(DashboardLineResponseVO::getCreateDt, i -> i)); - for (int i = 0; i < LocalDateTime.now().with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth(); i++) { - - String format = LocalDateTime.of(LocalDate.now().minusDays(i), LocalTime.MIN).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); - DashboardLineResponseVO dashboardLineResponseVO = dispatchQuantityResponseVOMap.get(format); - if (Objects.isNull(dashboardLineResponseVO)) { - dashboardLineResponseVO = new DashboardLineResponseVO() - .setTotal(0L) - .setTotalNum(0L) - .setFail(0L) - .setFailNum(0L) - .setMaxCountNum(0L) - .setRunningNum(0L) - .setSuccess(0L) - .setSuccessNum(0L) - .setSuspendNum(0L) - .setStop(0L) - .setCancel(0L) - .setCreateDt(format); - dashboardLineResponseVOList.add(dashboardLineResponseVO); + MONTH( + voList -> { + Map responseVoMap = StreamUtils.toIdentityMap( + voList, DashboardLineResponseVO::getCreateDt); + int lastDayOfMonth = LocalDateTime.now().with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth(); + for (int dayOffset = 0; dayOffset < lastDayOfMonth; dayOffset++) { + String createDt = LocalDate.now().minusDays(dayOffset).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + if (!responseVoMap.containsKey(createDt)) { + voList.add(buildZeroedVoWithCreateDt(createDt)); + } } - } - }, (startTime) -> { - return Objects.isNull(startTime) ? - LocalDateTime.of(LocalDate.now().minusMonths(1), LocalTime.MIN.withNano(0)) : - LocalDateTime.of(startTime.toLocalDate().minusMonths(1), LocalTime.MIN.withNano(0)); - }, (endTime) -> { - return Objects.isNull(endTime) ? - LocalDateTime.of(LocalDate.now(), LocalTime.MAX.withNano(0)) : - LocalDateTime.of(endTime.toLocalDate(), LocalTime.MAX.withNano(0)); - }), + }, + (startTime) -> LocalDateTimeUtil.beginOfDay(Optional.ofNullable(startTime).orElse(LocalDateTime.now()).minusMonths(1)), + (endTime) -> LocalDateTimeUtil.endOfDay(Optional.ofNullable(endTime).orElse(LocalDateTime.now())) + ), /** * 年 */ - YEAR(dashboardLineResponseVOList -> { - Map dispatchQuantityResponseVOMap = dashboardLineResponseVOList.stream().collect(Collectors.toMap(DashboardLineResponseVO::getCreateDt, i -> i)); - for (int i = 0; i < 12; i++) { - - String format = LocalDateTime.of(LocalDate.now().minusMonths(i), LocalTime.MIN).format(DateTimeFormatter.ofPattern("yyyy-MM")); - DashboardLineResponseVO dashboardLineResponseVO = dispatchQuantityResponseVOMap.get(format); - if (Objects.isNull(dashboardLineResponseVO)) { - dashboardLineResponseVO = new DashboardLineResponseVO() - .setTotal(0L) - .setTotalNum(0L) - .setFail(0L) - .setFailNum(0L) - .setMaxCountNum(0L) - .setRunningNum(0L) - .setSuccess(0L) - .setSuccessNum(0L) - .setSuspendNum(0L) - .setStop(0L) - .setCancel(0L) - .setCreateDt(format); - dashboardLineResponseVOList.add(dashboardLineResponseVO); + YEAR( + voList -> { + Map responseVoMap = StreamUtils.toIdentityMap( + voList, DashboardLineResponseVO::getCreateDt); + for (int monthOffset = 0; monthOffset < 12; monthOffset++) { + String createDt = LocalDateTime.now().minusMonths(monthOffset).format(DateTimeFormatter.ofPattern("yyyy-MM")); + if (!responseVoMap.containsKey(createDt)) { + voList.add(buildZeroedVoWithCreateDt(createDt)); + } } - } - }, (startTime) -> { - return LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN.withNano(0)); - }, (endTime) -> { - return LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX.withNano(0)); - }), + }, + (startTime) -> LocalDateTimeUtil.beginOfDay(LocalDateTime.now().with(TemporalAdjusters.firstDayOfYear())), + (endTime) -> LocalDateTimeUtil.endOfDay(LocalDateTime.now().with(TemporalAdjusters.lastDayOfYear())) + ), /** * 其他类型 */ - OTHERS(dashboardLineResponseVOList -> { - }, (startTime) -> { - return LocalDateTime.of(startTime.toLocalDate(), LocalTime.MIN.withNano(0)); - }, (endTime) -> { - return LocalDateTime.of(endTime.toLocalDate(), LocalTime.MAX.withNano(0)); - }); + OTHERS( + voList -> { + }, + (startTime) -> LocalDateTimeUtil.beginOfDay(startTime), + (endTime) -> LocalDateTimeUtil.endOfDay(endTime)); private Consumer> consumer; private Function startTime; private Function endTime; - DateTypeEnum(Consumer> listConsumer, Function startTime, Function endTime) { - this.consumer = listConsumer; + DateTypeEnum(Consumer> consumer, + Function startTime, + Function endTime) { + this.consumer = consumer; this.startTime = startTime; this.endTime = endTime; } + private static DashboardLineResponseVO buildZeroedVoWithCreateDt(String createDt) { + return new DashboardLineResponseVO() + .setTotal(0L) + .setTotalNum(0L) + .setFail(0L) + .setFailNum(0L) + .setMaxCountNum(0L) + .setRunningNum(0L) + .setSuccess(0L) + .setSuccessNum(0L) + .setSuspendNum(0L) + .setStop(0L) + .setCancel(0L) + .setCreateDt(createDt); + } + public Function getStartTime() { return startTime; }