| @ -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<MonthlyTaskStatsDTO> getMonthlyTaskStats(@RequestParam Integer year) { | |||||
| log.info("获取指定年份的信息, year: {}", year); | |||||
| if (year == null || year < 1900 || year > 2100) { | |||||
| throw new IllegalArgumentException("无效的年份"); | |||||
| } | |||||
| List<MonthlyTaskStatsDTO> list = calenderService.getMonthlyStatsByYear(year); | |||||
| log.info("获取指定年份的信息成功, year: {}, list: {}", year, list); | |||||
| return list; | |||||
| } | |||||
| @ApiOperation("获取指定月份的日度信息") | |||||
| @GetMapping("/month") | |||||
| public List<DailyTaskStatsDTO> 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<DailyTaskStatsDTO> list = calenderService.getDailyStatsByYearAndMonth(year, month); | |||||
| log.info("获取指定年月份的信息成功, year: {}, month: {}, list: {}", year,month, list); | |||||
| return list; | |||||
| } | |||||
| @GetMapping("/day") | |||||
| public List<DailyTaskStatsDTO> 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<DailyTaskStatsDTO> list = calenderService.getDailyStatsByYearAndMonthAndDay(year, month, day); | |||||
| log.info("获取指定日期的信息成功, year: {}, month: {}, list: {}", year,month, list); | |||||
| return list; | |||||
| } | |||||
| } | |||||
| @ -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); | |||||
| } | |||||
| } | |||||
| } | |||||
| @ -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; | |||||
| } | |||||
| } | |||||
| @ -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; | |||||
| } | |||||
| } | |||||
| @ -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<MonthlyTaskStatsDTO> getMonthlyStatsByYear(Integer year); | |||||
| List<DailyTaskStatsDTO> getDailyStatsByYearAndMonth(Integer year, Integer month); | |||||
| List<DailyTaskStatsDTO> getDailyStatsByYearAndMonthAndDay(Integer year, Integer month, Integer day); | |||||
| } | |||||
| @ -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<MonthlyTaskStatsDTO> getMonthlyStatsByYear(Integer year) { | |||||
| return patrolTaskStatusMapper.countMonthlyStatsByYear(year); | |||||
| } | |||||
| @Override | |||||
| public List<DailyTaskStatsDTO> getDailyStatsByYearAndMonth(Integer year, Integer month) { | |||||
| List<DailyTaskStatsDTO> list = patrolTaskStatusMapper.selectDailyStatsByYearAndMonth(year, month); | |||||
| list.forEach(DailyTaskStatsDTO::formatTimeAndStatus); | |||||
| return list; | |||||
| } | |||||
| @Override | |||||
| public List<DailyTaskStatsDTO> getDailyStatsByYearAndMonthAndDay(Integer year, Integer month, Integer day) { | |||||
| List<DailyTaskStatsDTO> list = patrolTaskStatusMapper.selectDailyStatsByYearAndMonthAndDay(year, month, day); | |||||
| list.forEach(DailyTaskStatsDTO::formatTimeAndStatus); | |||||
| return list; | |||||
| } | |||||
| } | |||||