From f581313d2ddcd43487d0c73ddb1ebc8a999cfcd6 Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Sat, 14 Jan 2023 20:46:11 +0800 Subject: [PATCH] =?UTF-8?q?0.0.2.0=20=E6=8E=92=E5=90=8D=E5=92=8C=E8=B0=83?= =?UTF-8?q?=E5=BA=A6=E9=9D=A2=E6=9D=BF=E6=B7=BB=E5=8A=A0=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E5=92=8C=E7=BB=84=E6=9D=A1=E4=BB=B6=E6=90=9C?= =?UTF-8?q?=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/Charts/Line.vue | 12 +- frontend/src/views/dashboard/Analysis.vue | 126 +++++++------ .../mybatis/mapper/RetryTaskLogMapper.java | 12 +- .../server/service/DashBoardService.java | 4 +- .../service/impl/DashBoardServiceImpl.java | 53 +++++- .../web/controller/DashBoardController.java | 17 +- .../server/web/model/enums/DateTypeEnum.java | 171 ++++++++++++++++++ .../resources/mapper/RetryTaskLogMapper.xml | 48 +++-- 8 files changed, 357 insertions(+), 86 deletions(-) create mode 100644 x-retry-server/src/main/java/com/x/retry/server/web/model/enums/DateTypeEnum.java diff --git a/frontend/src/components/Charts/Line.vue b/frontend/src/components/Charts/Line.vue index d4b1c744e..78fd75144 100644 --- a/frontend/src/components/Charts/Line.vue +++ b/frontend/src/components/Charts/Line.vue @@ -7,6 +7,7 @@ - diff --git a/x-retry-server/src/main/java/com/x/retry/server/persistence/mybatis/mapper/RetryTaskLogMapper.java b/x-retry-server/src/main/java/com/x/retry/server/persistence/mybatis/mapper/RetryTaskLogMapper.java index 551fcece3..da91ee6dc 100644 --- a/x-retry-server/src/main/java/com/x/retry/server/persistence/mybatis/mapper/RetryTaskLogMapper.java +++ b/x-retry-server/src/main/java/com/x/retry/server/persistence/mybatis/mapper/RetryTaskLogMapper.java @@ -7,6 +7,7 @@ import com.x.retry.server.web.model.response.DispatchQuantityResponseVO; import com.x.retry.server.web.model.response.SceneQuantityRankResponseVO; import org.apache.ibatis.annotations.Param; +import java.time.LocalDateTime; import java.util.List; public interface RetryTaskLogMapper extends BaseMapper { @@ -19,9 +20,16 @@ public interface RetryTaskLogMapper extends BaseMapper { long countTaskByRetryStatus(@Param("retryStatus") Integer retryStatus); - List rankSceneQuantity(@Param("groupName") String groupName); + List rankSceneQuantity(@Param("groupName") String groupName, + @Param("startTime")LocalDateTime startTime, + @Param("endTime")LocalDateTime endTime + ); List lineDispatchQuantity(@Param("groupName") String groupName, - @Param("retryStatus") Integer retryStatus); + @Param("retryStatus") Integer retryStatus, + @Param("type") String type, + @Param("startTime")LocalDateTime startTime, + @Param("endTime")LocalDateTime endTime + ); } diff --git a/x-retry-server/src/main/java/com/x/retry/server/service/DashBoardService.java b/x-retry-server/src/main/java/com/x/retry/server/service/DashBoardService.java index 08f69ca33..154f7099d 100644 --- a/x-retry-server/src/main/java/com/x/retry/server/service/DashBoardService.java +++ b/x-retry-server/src/main/java/com/x/retry/server/service/DashBoardService.java @@ -19,8 +19,8 @@ public interface DashBoardService { ActivePodQuantityResponseVO countActivePod(); - List rankSceneQuantity(String groupName); + List rankSceneQuantity(String groupName, String type, String startTime, String endTime); - List lineDispatchQuantity(String groupName); + List lineDispatchQuantity(String groupName, String type, String startTime, String endTime); } diff --git a/x-retry-server/src/main/java/com/x/retry/server/service/impl/DashBoardServiceImpl.java b/x-retry-server/src/main/java/com/x/retry/server/service/impl/DashBoardServiceImpl.java index dedf79e30..97cc60c36 100644 --- a/x-retry-server/src/main/java/com/x/retry/server/service/impl/DashBoardServiceImpl.java +++ b/x-retry-server/src/main/java/com/x/retry/server/service/impl/DashBoardServiceImpl.java @@ -8,15 +8,20 @@ import com.x.retry.server.persistence.mybatis.mapper.ServerNodeMapper; import com.x.retry.server.persistence.mybatis.po.RetryTaskLog; import com.x.retry.server.persistence.mybatis.po.ServerNode; import com.x.retry.server.service.DashBoardService; +import com.x.retry.server.web.model.enums.DateTypeEnum; import com.x.retry.server.web.model.response.ActivePodQuantityResponseVO; import com.x.retry.server.web.model.response.DispatchQuantityResponseVO; import com.x.retry.server.web.model.response.SceneQuantityRankResponseVO; import com.x.retry.server.web.model.response.TaskQuantityResponseVO; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Objects; @@ -79,20 +84,49 @@ public class DashBoardServiceImpl implements DashBoardService { } @Override - public List rankSceneQuantity(String groupName) { - return retryTaskLogMapper.rankSceneQuantity(groupName); + public List rankSceneQuantity(String groupName, String type, String startTime, String endTime) { + LocalDateTime startDateTime = LocalDateTime.now(); + if (StringUtils.isNotBlank(startTime)) { + startDateTime = LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + } + + LocalDateTime endDateTime = LocalDateTime.now(); + if (StringUtils.isNotBlank(endTime)) { + endDateTime = LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + } + + DateTypeEnum dateTypeEnum = DateTypeEnum.valueOf(type.toUpperCase()); + startDateTime = dateTypeEnum.getStartTime().apply(startDateTime); + endDateTime = dateTypeEnum.getEndTime().apply(endDateTime); + + return retryTaskLogMapper.rankSceneQuantity(groupName, startDateTime, endDateTime); } @Override - public List lineDispatchQuantity(String groupName) { + public List lineDispatchQuantity(String groupName, String type, String startTime, String endTime) { - List totalDispatchQuantityResponseList = retryTaskLogMapper.lineDispatchQuantity(groupName, null); + DateTypeEnum dateTypeEnum = DateTypeEnum.valueOf(type.toUpperCase()); - List successDispatchQuantityResponseList = retryTaskLogMapper.lineDispatchQuantity(groupName, RetryStatusEnum.FINISH.getLevel()); - Map dispatchQuantityResponseVOMap = successDispatchQuantityResponseList.stream().collect(Collectors.toMap(DispatchQuantityResponseVO::getCreateDt, i -> i)); + LocalDateTime startDateTime = LocalDateTime.now(); + if (StringUtils.isNotBlank(startTime)) { + startDateTime = LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + } + + LocalDateTime endDateTime = LocalDateTime.now(); + if (StringUtils.isNotBlank(endTime)) { + endDateTime = LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + } + + startDateTime = dateTypeEnum.getStartTime().apply(startDateTime); + endDateTime = dateTypeEnum.getEndTime().apply(endDateTime); + + List totalDispatchQuantityResponseList = retryTaskLogMapper.lineDispatchQuantity(groupName, null, type, startDateTime, endDateTime); + + List successDispatchQuantityResponseList = retryTaskLogMapper.lineDispatchQuantity(groupName, RetryStatusEnum.FINISH.getLevel(), type, startDateTime, endDateTime); + Map successDispatchQuantityResponseVOMap = successDispatchQuantityResponseList.stream().collect(Collectors.toMap(DispatchQuantityResponseVO::getCreateDt, i -> i)); for (DispatchQuantityResponseVO dispatchQuantityResponseVO : totalDispatchQuantityResponseList) { - DispatchQuantityResponseVO quantityResponseVO = dispatchQuantityResponseVOMap.get(dispatchQuantityResponseVO.getCreateDt()); + DispatchQuantityResponseVO quantityResponseVO = successDispatchQuantityResponseVOMap.get(dispatchQuantityResponseVO.getCreateDt()); if (Objects.isNull(dispatchQuantityResponseVO)) { dispatchQuantityResponseVO.setSuccess(0L); } else { @@ -103,6 +137,9 @@ public class DashBoardServiceImpl implements DashBoardService { } - return totalDispatchQuantityResponseList; + dateTypeEnum.getConsumer().accept(totalDispatchQuantityResponseList); + + return totalDispatchQuantityResponseList.stream().sorted(Comparator.comparing(DispatchQuantityResponseVO::getCreateDt)).collect(Collectors.toList()); } + } diff --git a/x-retry-server/src/main/java/com/x/retry/server/web/controller/DashBoardController.java b/x-retry-server/src/main/java/com/x/retry/server/web/controller/DashBoardController.java index c0e82d1a3..847abb2a9 100644 --- a/x-retry-server/src/main/java/com/x/retry/server/web/controller/DashBoardController.java +++ b/x-retry-server/src/main/java/com/x/retry/server/web/controller/DashBoardController.java @@ -46,14 +46,21 @@ public class DashBoardController { @LoginRequired @GetMapping("/scene/rank") public List rankSceneQuantity(@RequestParam(value = "groupName", required = false) - String groupName) { - return dashBoardService.rankSceneQuantity(groupName); + String groupName, + @RequestParam(value = "type") String type, + @RequestParam(value = "startTime", required = false) String startTime, + @RequestParam(value = "endTime", required = false) String endTime) { + return dashBoardService.rankSceneQuantity(groupName, type, startTime, endTime); } - @LoginRequired + // @LoginRequired @GetMapping("/dispatch/line") public List lineDispatchQuantity(@RequestParam(value = "groupName", required = false) - String groupName) { - return dashBoardService.lineDispatchQuantity(groupName); + String groupName, + @RequestParam(value = "type") String type, + @RequestParam(value = "startTime", required = false) String startTime, + @RequestParam(value = "endTime", required = false) String endTime + ) { + return dashBoardService.lineDispatchQuantity(groupName, type, startTime, endTime); } } diff --git a/x-retry-server/src/main/java/com/x/retry/server/web/model/enums/DateTypeEnum.java b/x-retry-server/src/main/java/com/x/retry/server/web/model/enums/DateTypeEnum.java new file mode 100644 index 000000000..5b727359e --- /dev/null +++ b/x-retry-server/src/main/java/com/x/retry/server/web/model/enums/DateTypeEnum.java @@ -0,0 +1,171 @@ +package com.x.retry.server.web.model.enums; + +import com.x.retry.server.web.model.response.DispatchQuantityResponseVO; + +import java.time.DayOfWeek; +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.function.Consumer; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author: byteblogs + * @date: 2020/1/19 20:36 + */ +public enum DateTypeEnum { + /** + * 天 + */ + DAY(dispatchQuantityResponseVOList -> { + Map dispatchQuantityResponseVOMap = dispatchQuantityResponseVOList.stream().collect(Collectors.toMap(DispatchQuantityResponseVO::getCreateDt, i -> i)); + for (int i = 0; i < 24; i++) { + + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH"); + String format = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).plusHours(i).format(dateTimeFormatter); + DispatchQuantityResponseVO dispatchQuantityResponseVO = dispatchQuantityResponseVOMap.get(format); + if (Objects.isNull(dispatchQuantityResponseVO)) { + dispatchQuantityResponseVO = new DispatchQuantityResponseVO(); + dispatchQuantityResponseVO.setFail(0L); + dispatchQuantityResponseVO.setSuccess(0L); + dispatchQuantityResponseVO.setCreateDt(format); + dispatchQuantityResponseVOList.add(dispatchQuantityResponseVO); + } + } + }, (startTime) -> { + return LocalDateTime.of(startTime.toLocalDate(), LocalTime.MIN); + }, (endTime) -> { + return LocalDateTime.of(endTime.toLocalDate(), LocalTime.MAX); + }), + /** + * 星期 + */ + WEEK(dispatchQuantityResponseVOList -> { + Map dispatchQuantityResponseVOMap = dispatchQuantityResponseVOList.stream().collect(Collectors.toMap(DispatchQuantityResponseVO::getCreateDt, i -> i)); + for (int i = 0; i < 7; i++) { + + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String format = LocalDateTime.of(LocalDate.now().with(DayOfWeek.of(1)), LocalTime.MIN).plusDays(i).format(dateTimeFormatter); + DispatchQuantityResponseVO dispatchQuantityResponseVO = dispatchQuantityResponseVOMap.get(format); + if (Objects.isNull(dispatchQuantityResponseVO)) { + dispatchQuantityResponseVO = new DispatchQuantityResponseVO(); + dispatchQuantityResponseVO.setFail(0L); + dispatchQuantityResponseVO.setSuccess(0L); + dispatchQuantityResponseVO.setCreateDt(format); + dispatchQuantityResponseVOList.add(dispatchQuantityResponseVO); + } + } + }, (startTime) -> { + return LocalDateTime.of(startTime.toLocalDate().with(DayOfWeek.of(1)), LocalTime.MIN); + }, (endTime) -> { + return LocalDateTime.of(endTime.toLocalDate().with(DayOfWeek.of(7)), LocalTime.MAX); + }), + + /** + * 月 + */ + MONTH(dispatchQuantityResponseVOList -> { + Map dispatchQuantityResponseVOMap = dispatchQuantityResponseVOList.stream().collect(Collectors.toMap(DispatchQuantityResponseVO::getCreateDt, i -> i)); + int curMonth = LocalDateTime.now().with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth(); + for (int i = 0; i < curMonth; i++) { + + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String format = LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN).plusDays(i).format(dateTimeFormatter); + DispatchQuantityResponseVO dispatchQuantityResponseVO = dispatchQuantityResponseVOMap.get(format); + if (Objects.isNull(dispatchQuantityResponseVO)) { + dispatchQuantityResponseVO = new DispatchQuantityResponseVO(); + dispatchQuantityResponseVO.setFail(0L); + dispatchQuantityResponseVO.setSuccess(0L); + dispatchQuantityResponseVO.setCreateDt(format); + dispatchQuantityResponseVOList.add(dispatchQuantityResponseVO); + } + } + }, (startTime) -> { + return LocalDateTime.of(startTime.toLocalDate().with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN); + }, (endTime) -> { + return LocalDateTime.of(endTime.toLocalDate().with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX); + }), + + /** + * 年 + */ + YEAR(dispatchQuantityResponseVOList -> { + Map dispatchQuantityResponseVOMap = dispatchQuantityResponseVOList.stream().collect(Collectors.toMap(DispatchQuantityResponseVO::getCreateDt, i -> i)); + for (int i = 0; i < 12; i++) { + + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM"); + String format = LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN).plusMonths(i).format(dateTimeFormatter); + DispatchQuantityResponseVO dispatchQuantityResponseVO = dispatchQuantityResponseVOMap.get(format); + if (Objects.isNull(dispatchQuantityResponseVO)) { + dispatchQuantityResponseVO = new DispatchQuantityResponseVO(); + dispatchQuantityResponseVO.setFail(0L); + dispatchQuantityResponseVO.setSuccess(0L); + dispatchQuantityResponseVO.setCreateDt(format); + dispatchQuantityResponseVOList.add(dispatchQuantityResponseVO); + } + } + }, (startTime) -> { + return LocalDateTime.of(startTime.toLocalDate().with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN); + }, (endTime) -> { + return LocalDateTime.of(endTime.toLocalDate().with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX); + }), + + /** + * 其他类型 + */ + OTHERS(dispatchQuantityResponseVOList -> { + Map dispatchQuantityResponseVOMap = dispatchQuantityResponseVOList.stream().collect(Collectors.toMap(DispatchQuantityResponseVO::getCreateDt, i -> i)); + for (int i = 0; i < 24; i++) { + + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd 00:00:00"); + String format = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).plusHours(i).format(dateTimeFormatter); + DispatchQuantityResponseVO dispatchQuantityResponseVO = dispatchQuantityResponseVOMap.get(format); + if (Objects.isNull(dispatchQuantityResponseVO)) { + dispatchQuantityResponseVO = new DispatchQuantityResponseVO(); + dispatchQuantityResponseVO.setFail(0L); + dispatchQuantityResponseVO.setSuccess(0L); + dispatchQuantityResponseVO.setCreateDt(format); + dispatchQuantityResponseVOList.add(dispatchQuantityResponseVO); + } + } + }, (startTime) -> { + if (Objects.isNull(startTime)) { + return LocalDateTime.now(); + } + return startTime; + }, (endTime) -> { + if (Objects.isNull(endTime)) { + return LocalDateTime.now(); + } + return endTime; + }); + + private Consumer> consumer; + private Function startTime; + private Function endTime; + + DateTypeEnum(Consumer> listConsumer, Function startTime, Function endTime) { + this.consumer = listConsumer; + this.startTime = startTime; + this.endTime = endTime; + + } + + public Function getStartTime() { + return startTime; + } + + public Function getEndTime() { + return endTime; + } + + public Consumer> getConsumer() { + return consumer; + } +} diff --git a/x-retry-server/src/main/resources/mapper/RetryTaskLogMapper.xml b/x-retry-server/src/main/resources/mapper/RetryTaskLogMapper.xml index 34aa13bde..c80ba8612 100644 --- a/x-retry-server/src/main/resources/mapper/RetryTaskLogMapper.xml +++ b/x-retry-server/src/main/resources/mapper/RetryTaskLogMapper.xml @@ -45,30 +45,52 @@ from ( select group_name, scene_name, biz_id, count(*) from retry_task_log - group by group_name, scene_name, biz_id) a group_name = #{groupName} + and create_dt >= #{startTime} and create_dt <= #{endTime} + group by group_name, scene_name, biz_id) a group by group_name, scene_name order by total desc;