添加任务状态获取接口

This commit is contained in:
2026-07-24 16:54:29 +08:00
parent 759656d180
commit 71290ccf9b
8 changed files with 166 additions and 1 deletions
@@ -129,7 +129,6 @@ public class SysFileController implements SysFileApi {
@PathVariable Boolean refresh
) {
return sysFileService.getStats(refresh);
// return Result.ok(List.of());
}
}
@@ -9,12 +9,16 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import xtools.app.sys.model.dto.req.SysTaskPageReq;
import xtools.app.sys.model.dto.req.SysTaskStatsReq;
import xtools.app.sys.model.dto.resp.SysTaskResp;
import xtools.app.sys.model.dto.resp.SysTaskStatsResp;
import xtools.app.sys.service.SysTaskService;
import xtools.boot.api.model.dto.Result;
import xtools.boot.api.model.dto.page.PageReq;
import xtools.boot.api.model.dto.page.PageResp;
import java.util.List;
/**
* <p>Title : SysTaskController</p>
* <p>Description : 系统任务 Controller</p>
@@ -38,4 +42,16 @@ public class SysTaskController {
return sysTaskService.page(pageReq);
}
/**
* 获取统计信息
*
* @param req 统计请求(时间范围)
* @return 统计信息
*/
@Operation(summary = "获取统计信息")
@PostMapping("stats")
public Result<List<SysTaskStatsResp>> getStats(@RequestBody @Valid SysTaskStatsReq req) {
return sysTaskService.getStats(req);
}
}
@@ -2,8 +2,13 @@ package xtools.app.sys.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import xtools.app.sys.model.dto.resp.SysTaskStatsResp;
import xtools.app.sys.model.entity.SysTask;
import java.time.Instant;
import java.util.List;
/**
* <p>Title : SysTaskMapper</p>
* <p>Description : 系统任务 Mapper 接口</p>
@@ -16,4 +21,16 @@ import xtools.app.sys.model.entity.SysTask;
@Mapper
public interface SysTaskMapper extends BaseMapper<SysTask> {
/**
* 按天统计任务数量(成功/失败/进行中)
*
* @param startTime 开始时间(包含)
* @param endTime 结束时间(包含)
* @return 每日统计列表
*/
List<SysTaskStatsResp> selectStats(
@Param("startTime") Instant startTime,
@Param("endTime") Instant endTime
);
}
@@ -0,0 +1,35 @@
package xtools.app.sys.model.dto.req;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.Instant;
/**
* <p>Title : SysTaskStatsReq</p>
* <p>Description : SysTaskStatsReq</p>
* <p>Company : org.xujun</p>
*
* @author : xujun
* @version : 1.0.0
* @date : 2026-01-30 19:15:03
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SysTaskStatsReq implements Serializable {
/**
* 创建时间范围[开始时间(包含),结束时间(包含)],不能为空且需同时包含开,结束时间
*/
@NotNull(message = "时间范围不能为空")
@Size(min = 2, message = "时间范围需要包含开始和结束时间")
@Schema(description = "创建时间范围(包含两端)", example = "['2026-07-17 00:00:00', '2026-07-24 23:59:59']")
private Instant[] gmtCreateRange;
}
@@ -0,0 +1,43 @@
package xtools.app.sys.model.dto.resp;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.Instant;
/**
* <p>Title : SysTaskStatsResp</p>
* <p>Description : 系统任务每日统计响应对象</p>
* <p>Company : org.xujun</p>
*
* @author : xujun
* @version : 1.0.0
* @date : 2026-07-24
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SysTaskStatsResp implements Serializable {
/** 当天(Instant,当天 0 点) */
@Schema(description = "当天(Instant,当天 0 点)")
private Instant day;
/** 成功数 */
@Schema(description = "成功数")
private Long successCount;
/** 失败数 */
@Schema(description = "失败数")
private Long failCount;
/** 进行中数 */
@Schema(description = "进行中数")
private Long ingCount;
}
@@ -1,12 +1,16 @@
package xtools.app.sys.service;
import xtools.app.sys.model.dto.req.SysTaskPageReq;
import xtools.app.sys.model.dto.req.SysTaskStatsReq;
import xtools.app.sys.model.dto.resp.SysTaskResp;
import xtools.app.sys.model.dto.resp.SysTaskStatsResp;
import xtools.boot.api.model.dto.Result;
import xtools.boot.api.model.dto.page.PageReq;
import xtools.boot.api.model.dto.page.PageResp;
import xtools.boot.task.model.dto.TaskInfo;
import java.util.List;
/**
* <p>Title : SysTaskService</p>
* <p>Description : 系统任务 Service</p>
@@ -33,4 +37,12 @@ public interface SysTaskService {
*/
void save(TaskInfo taskInfo);
/**
* 获取统计信息
*
* @param req 统计请求(时间范围)
* @return 统计信息
*/
Result<List<SysTaskStatsResp>> getStats(SysTaskStatsReq req);
}
@@ -10,7 +10,9 @@ import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import xtools.app.sys.convert.SysTaskConvert;
import xtools.app.sys.model.dto.req.SysTaskPageReq;
import xtools.app.sys.model.dto.req.SysTaskStatsReq;
import xtools.app.sys.model.dto.resp.SysTaskResp;
import xtools.app.sys.model.dto.resp.SysTaskStatsResp;
import xtools.app.sys.model.entity.SysTask;
import xtools.app.sys.service.SysTaskService;
import xtools.app.sys.service.base.SysTaskBaseService;
@@ -30,6 +32,7 @@ import xtools.core.StringUtils;
import xtools.core.enums.LogLevel;
import java.time.Instant;
import java.util.List;
import java.util.Objects;
/**
@@ -210,4 +213,27 @@ public class SysTaskServiceImpl implements SysTaskService, BaseParams {
return Objects.isNull(data) ? null : data.getId();
}
/**
* 获取统计信息
*
* @param req 统计请求(时间范围)
* @return 统计信息
*/
@Override
public Result<List<SysTaskStatsResp>> getStats(SysTaskStatsReq req) {
Instant[] range = req.getGmtCreateRange();
if (Objects.isNull(range) || range.length != CP_NUM2) {
throw new BizWarning("时间范围不能为空且需要包含开始和结束时间");
}
// 判断开始时间不能大于结束时间
Instant startTime = range[CP_NUM0];
Instant endTime = range[CP_NUM1];
if (startTime.isAfter(endTime)) {
throw new BizWarning("开始时间不能大于结束时间");
}
// 按天统计任务数量(成功/失败/进行中)
List<SysTaskStatsResp> list = sysTaskBaseService.getBaseMapper().selectStats(startTime, endTime);
return Result.ok(list);
}
}
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xtools.app.sys.mapper.SysTaskMapper">
<!-- 按天统计任务数量(成功/失败/进行中) -->
<select id="selectStats" resultType="xtools.app.sys.model.dto.resp.SysTaskStatsResp">
SELECT DATE(gmt_create) AS day,
COUNT(CASE WHEN status = 1 THEN 1 END) AS successCount,
COUNT(CASE WHEN status = 2 THEN 1 END) AS failCount,
COUNT(CASE WHEN status = 0 THEN 1 END) AS ingCount
FROM sys_task
WHERE gmt_create BETWEEN #{startTime} AND #{endTime}
GROUP BY DATE(gmt_create)
ORDER BY day
</select>
</mapper>