Browse Source

feat: 新增任务执行计划日历功能实现(针对已有任务)

master
yinhuaiwei 1 month ago
parent
commit
4cb8d7415d
8 changed files with 271 additions and 0 deletions
  1. +71
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/calender/controller/CalenderController.java
  2. +44
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/calender/domain/DailyTaskStatsDTO.java
  3. +29
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/calender/domain/MonthlyTaskStatsDTO.java
  4. +39
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/calender/enums/TaskStateEnum.java
  5. +14
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/CalenderService.java
  6. +35
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/impl/CalenderServiceImpl.java
  7. +8
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/mapper/PatrolTaskStatusMapper.java
  8. +31
    -0
      inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskStatusMapper.xml

+ 71
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/calender/controller/CalenderController.java View File

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

+ 44
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/calender/domain/DailyTaskStatsDTO.java View File

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

+ 29
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/calender/domain/MonthlyTaskStatsDTO.java View File

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

+ 39
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/calender/enums/TaskStateEnum.java View File

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

+ 14
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/CalenderService.java View File

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

+ 35
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/calender/service/impl/CalenderServiceImpl.java View File

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

+ 8
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/taskstatus/mapper/PatrolTaskStatusMapper.java View File

@ -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<PatrolTaskStatus> selectPatrolTaskStatusListByTaskPatrolledIds(@Param("taskPatrolledIds") List<String> taskPatrolledIds);
List<MonthlyTaskStatsDTO> countMonthlyStatsByYear(Integer year);
List<DailyTaskStatsDTO> selectDailyStatsByYearAndMonth(@Param("year") Integer year, @Param("month") Integer month);
List<DailyTaskStatsDTO> selectDailyStatsByYearAndMonthAndDay(@Param("year") Integer year, @Param("month") Integer month, @Param("day") Integer day);
}

+ 31
- 0
inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskStatusMapper.xml View File

@ -218,6 +218,37 @@
</foreach>
</select>
<select id="selectDailyStatsByYearAndMonth" resultType="com.inspect.calender.domain.DailyTaskStatsDTO">
SELECT task_patrolled_id as id, task_name as name, task_state as taskState, start_time as startTime, end_time as endTime
FROM patrol_task_status
WHERE YEAR(create_time) = #{year} AND MONTH(create_time) = #{month} AND task_state IN (1,2,5)
ORDER BY create_time
</select>
<select id="selectDailyStatsByYearAndMonthAndDay"
resultType="com.inspect.calender.domain.DailyTaskStatsDTO">
SELECT task_patrolled_id as id, task_name as name, task_state as taskState, start_time as startTime, end_time as endTime
FROM patrol_task_status
WHERE YEAR(create_time) = #{year} AND MONTH(create_time) = #{month} AND DAY(create_time) = #{day} AND task_state IN (1,2,5)
ORDER BY create_time
</select>
<select id="countMonthlyStatsByYear" resultType="com.inspect.calender.domain.MonthlyTaskStatsDTO" parameterType="Integer">
SELECT m.month AS month,
COALESCE(SUM(CASE WHEN t.task_state = 1 THEN 1 ELSE 0 END), 0) AS executed,
COALESCE(SUM(CASE WHEN t.task_state = 2 THEN 1 ELSE 0 END), 0) AS executing,
COALESCE(SUM(CASE WHEN t.task_state = 5 THEN 1 ELSE 0 END), 0) AS pending
FROM (
SELECT 1 AS month UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12
) m
LEFT JOIN patrol_task_status t
ON m.month = MONTH(t.create_time)
AND YEAR(t.create_time) = #{year}
GROUP BY m.month
ORDER BY m.month
</select>
<insert id="insertPatrolTaskStatus" parameterType="PatrolTaskStatus" useGeneratedKeys="true" keyProperty="lineId">
insert into patrol_task_status
<trim prefix="(" suffix=")" suffixOverrides=",">


Loading…
Cancel
Save