From 4cb8d7415d620c784592de951be156a78a915cb6 Mon Sep 17 00:00:00 2001 From: yinhuaiwei Date: Tue, 23 Dec 2025 10:38:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E8=AE=A1=E5=88=92=E6=97=A5=E5=8E=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=AE=9E=E7=8E=B0(=E9=92=88=E5=AF=B9=E5=B7=B2?= =?UTF-8?q?=E6=9C=89=E4=BB=BB=E5=8A=A1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CalenderController.java | 71 +++++++++++++++++++ .../calender/domain/DailyTaskStatsDTO.java | 44 ++++++++++++ .../calender/domain/MonthlyTaskStatsDTO.java | 29 ++++++++ .../inspect/calender/enums/TaskStateEnum.java | 39 ++++++++++ .../calender/service/CalenderService.java | 14 ++++ .../service/impl/CalenderServiceImpl.java | 35 +++++++++ .../mapper/PatrolTaskStatusMapper.java | 8 +++ .../mapper/task/PatrolTaskStatusMapper.xml | 31 ++++++++ 8 files changed, 271 insertions(+) create mode 100644 inspect-main/inspect-main-task/src/main/java/com/inspect/calender/controller/CalenderController.java create mode 100644 inspect-main/inspect-main-task/src/main/java/com/inspect/calender/domain/DailyTaskStatsDTO.java create mode 100644 inspect-main/inspect-main-task/src/main/java/com/inspect/calender/domain/MonthlyTaskStatsDTO.java create mode 100644 inspect-main/inspect-main-task/src/main/java/com/inspect/calender/enums/TaskStateEnum.java create mode 100644 inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/CalenderService.java create mode 100644 inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/impl/CalenderServiceImpl.java diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/controller/CalenderController.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/controller/CalenderController.java new file mode 100644 index 0000000..56c58cb --- /dev/null +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/controller/CalenderController.java @@ -0,0 +1,71 @@ +package com.inspect.calender.controller; + +import com.inspect.calender.domain.DailyTaskStatsDTO; +import com.inspect.calender.domain.MonthlyTaskStatsDTO; +import com.inspect.calender.service.CalenderService; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +@Slf4j +@RestController +@RequestMapping("/calender") +public class CalenderController { + @Resource + private CalenderService calenderService; + + @ApiOperation("获取指定年份的月度信息") + @GetMapping("/year") + public List getMonthlyTaskStats(@RequestParam Integer year) { + log.info("获取指定年份的信息, year: {}", year); + if (year == null || year < 1900 || year > 2100) { + throw new IllegalArgumentException("无效的年份"); + } + List list = calenderService.getMonthlyStatsByYear(year); + log.info("获取指定年份的信息成功, year: {}, list: {}", year, list); + return list; + } + + @ApiOperation("获取指定月份的日度信息") + @GetMapping("/month") + public List getDailyTaskStats(@RequestParam Integer year, @RequestParam Integer month) { + log.info("获取指定年月份的信息, year: {},month:{}", year, month); + if (year == null || year < 1900 || year > 2100) { + throw new IllegalArgumentException("无效的年份"); + } + + if (month == null || month < 1 || month > 12) { + throw new IllegalArgumentException("无效的月份"); + } + + List list = calenderService.getDailyStatsByYearAndMonth(year, month); + log.info("获取指定年月份的信息成功, year: {}, month: {}, list: {}", year,month, list); + return list; + } + + @GetMapping("/day") + public List getDailyTaskStats(@RequestParam Integer year, @RequestParam Integer month, @RequestParam Integer day) { + log.info("获取指定日期的信息, year: {},month:{},day:{}", year, month, day); + if (year == null || year < 1900 || year > 2100) { + throw new IllegalArgumentException("无效的年份"); + } + + if (month == null || month < 1 || month > 12) { + throw new IllegalArgumentException("无效的月份"); + } + + if (day == null || day < 1 || day > 31) { + throw new IllegalArgumentException("无效的日期"); + } + + List list = calenderService.getDailyStatsByYearAndMonthAndDay(year, month, day); + log.info("获取指定日期的信息成功, year: {}, month: {}, list: {}", year,month, list); + return list; + } +} diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/domain/DailyTaskStatsDTO.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/domain/DailyTaskStatsDTO.java new file mode 100644 index 0000000..c0b4a36 --- /dev/null +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/domain/DailyTaskStatsDTO.java @@ -0,0 +1,44 @@ +package com.inspect.calender.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.inspect.calender.enums.TaskStateEnum; +import lombok.*; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class DailyTaskStatsDTO { + @JsonIgnore + private Integer taskState; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime startTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime endTime; + + private String id; + private String name; + private String status; + private String start; + private String end; + + public void formatTimeAndStatus() { + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + this.status = TaskStateEnum.getByCode(this.taskState); + + // 开始时间拆分 + if (startTime != null) { + this.start = startTime.format(dateFormatter); + } + + // 结束时间拆分 + if (endTime != null) { + this.end = endTime.format(dateFormatter); + } + } +} diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/domain/MonthlyTaskStatsDTO.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/domain/MonthlyTaskStatsDTO.java new file mode 100644 index 0000000..d397bb8 --- /dev/null +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/domain/MonthlyTaskStatsDTO.java @@ -0,0 +1,29 @@ +package com.inspect.calender.domain; + +import lombok.Data; + +/** + * 按年统计任务数量DTO + */ +@Data +public class MonthlyTaskStatsDTO { + // 1-12 + private Integer month; + // status = 1 已执行 + private Long executed; + // status = 2 正在执行 + private Long executing; + // status = 3 未执行 + private Long pending; + // 当月总任务数 + private Long total; + + // 全参构造 + public MonthlyTaskStatsDTO(Integer month, Long executed, Long executing, Long pending) { + this.month = month; + this.executed = executed != null ? executed : 0L; + this.executing = executing != null ? executing : 0L; + this.pending = pending != null ? pending : 0L; + this.total = this.executed + this.executing + this.pending; + } +} diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/enums/TaskStateEnum.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/enums/TaskStateEnum.java new file mode 100644 index 0000000..774a606 --- /dev/null +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/enums/TaskStateEnum.java @@ -0,0 +1,39 @@ +package com.inspect.calender.enums; + +import lombok.Getter; + +/** + * 任务状态枚举类 + */ +@Getter +public enum TaskStateEnum { + // 已执行 + EXECUTED(1, "executed"), + // 执行中 + EXECUTING(2, "executing"), + // 已暂停 + PAUSED(3, "paused"), + // 已终止 + TERMINATE(4, "terminate"), + // 待执行 + PENDING(5, "pending"), + // 已超期 + EXCEEDED(6, "exceeded"); + + private final int code; + private final String status; + + TaskStateEnum(int code, String status) { + this.code = code; + this.status = status; + } + + public static String getByCode(int code) { + for (TaskStateEnum value : values()) { + if (value.code == code) { + return value.status; + } + } + return null; + } +} diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/CalenderService.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/CalenderService.java new file mode 100644 index 0000000..62b5965 --- /dev/null +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/CalenderService.java @@ -0,0 +1,14 @@ +package com.inspect.calender.service; + +import com.inspect.calender.domain.DailyTaskStatsDTO; +import com.inspect.calender.domain.MonthlyTaskStatsDTO; + +import java.util.List; + +public interface CalenderService { + List getMonthlyStatsByYear(Integer year); + + List getDailyStatsByYearAndMonth(Integer year, Integer month); + + List getDailyStatsByYearAndMonthAndDay(Integer year, Integer month, Integer day); +} diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/impl/CalenderServiceImpl.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/impl/CalenderServiceImpl.java new file mode 100644 index 0000000..0bf243f --- /dev/null +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/impl/CalenderServiceImpl.java @@ -0,0 +1,35 @@ +package com.inspect.calender.service.impl; + +import com.inspect.calender.domain.DailyTaskStatsDTO; +import com.inspect.calender.domain.MonthlyTaskStatsDTO; +import com.inspect.calender.service.CalenderService; +import com.inspect.taskstatus.mapper.PatrolTaskStatusMapper; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class CalenderServiceImpl implements CalenderService { + @Resource + private PatrolTaskStatusMapper patrolTaskStatusMapper; + + @Override + public List getMonthlyStatsByYear(Integer year) { + return patrolTaskStatusMapper.countMonthlyStatsByYear(year); + } + + @Override + public List getDailyStatsByYearAndMonth(Integer year, Integer month) { + List list = patrolTaskStatusMapper.selectDailyStatsByYearAndMonth(year, month); + list.forEach(DailyTaskStatsDTO::formatTimeAndStatus); + return list; + } + + @Override + public List getDailyStatsByYearAndMonthAndDay(Integer year, Integer month, Integer day) { + List list = patrolTaskStatusMapper.selectDailyStatsByYearAndMonthAndDay(year, month, day); + list.forEach(DailyTaskStatsDTO::formatTimeAndStatus); + return list; + } +} diff --git a/inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/mapper/PatrolTaskStatusMapper.java b/inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/mapper/PatrolTaskStatusMapper.java index 3101992..48d0920 100644 --- a/inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/mapper/PatrolTaskStatusMapper.java +++ b/inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/mapper/PatrolTaskStatusMapper.java @@ -1,5 +1,7 @@ package com.inspect.taskstatus.mapper; +import com.inspect.calender.domain.DailyTaskStatsDTO; +import com.inspect.calender.domain.MonthlyTaskStatsDTO; import com.inspect.taskstatus.domain.PatrolTaskStatus; import com.inspect.taskstatus.domain.TaskCount; import org.apache.ibatis.annotations.Mapper; @@ -38,4 +40,10 @@ public interface PatrolTaskStatusMapper { int deletePatrolTaskStatusByLineIds(Long[] lineIds); List selectPatrolTaskStatusListByTaskPatrolledIds(@Param("taskPatrolledIds") List taskPatrolledIds); + + List countMonthlyStatsByYear(Integer year); + + List selectDailyStatsByYearAndMonth(@Param("year") Integer year, @Param("month") Integer month); + + List selectDailyStatsByYearAndMonthAndDay(@Param("year") Integer year, @Param("month") Integer month, @Param("day") Integer day); } diff --git a/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskStatusMapper.xml b/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskStatusMapper.xml index 096581a..c4aa764 100644 --- a/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskStatusMapper.xml +++ b/inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskStatusMapper.xml @@ -218,6 +218,37 @@ + + + + + + insert into patrol_task_status