| @ -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; | |||
| } | |||
| } | |||