malei05 1 dienu atpakaļ
vecāks
revīzija
30006a4a11

+ 112 - 0
src/main/java/net/yyc/quartz/entity/JobBriefing.java

@@ -0,0 +1,112 @@
+package net.yyc.quartz.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 每日简报数据模型
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class JobBriefing {
+
+    /**
+     * 报告日期
+     */
+    private LocalDate reportDate;
+
+    /**
+     * 任务统计列表
+     */
+    private List<JobStatInfo> jobStats;
+
+    /**
+     * 错过执行的任务列表
+     */
+    private List<MissedJobInfo> missedJobs;
+
+    /**
+     * 生成时间
+     */
+    private LocalDateTime generatedAt;
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class JobStatInfo {
+        /**
+         * 任务ID
+         */
+        private Integer jobId;
+
+        /**
+         * 任务名称
+         */
+        private String jobName;
+
+        /**
+         * 任务组
+         */
+        private String jobGroup;
+
+        /**
+         * 执行次数
+         */
+        private int execCount;
+
+        /**
+         * 成功次数
+         */
+        private int successCount;
+
+        /**
+         * 失败次数
+         */
+        private int failCount;
+
+        /**
+         * 成功率
+         */
+        private double successRate;
+
+        /**
+         * 平均执行时间(ms)
+         */
+        private long avgExecuteTime;
+
+        /**
+         * 最后执行时间
+         */
+        private String lastExecuteTime;
+
+        /**
+         * 最后执行状态
+         */
+        private String lastExecStatus;
+
+        /**
+         * 异常信息(如果有)
+         */
+        private String exceptionInfo;
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class MissedJobInfo {
+        private String jobName;
+        private String jobGroup;
+        private String nextExecuteTime;
+        private String remark;
+    }
+}

+ 47 - 0
src/main/java/net/yyc/quartz/mapper/JobBriefingMapper.java

@@ -0,0 +1,47 @@
+package net.yyc.quartz.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 简报数据访问接口
+ */
+@Mapper
+public interface JobBriefingMapper {
+
+    /**
+     * 按任务ID统计执行情况
+     */
+    List<Map<String, Object>> selectJobStatSummary(@Param("startTime") LocalDateTime startTime,
+                                                    @Param("endTime") LocalDateTime endTime);
+
+    /**
+     * 查询失败任务列表
+     */
+    List<Map<String, Object>> selectFailedJobs(@Param("startTime") LocalDateTime startTime,
+                                                @Param("endTime") LocalDateTime endTime,
+                                                @Param("limit") int limit);
+
+    /**
+     * 查询Top N最慢任务
+     */
+    List<Map<String, Object>> selectTopSlowJobs(@Param("startTime") LocalDateTime startTime,
+                                                  @Param("endTime") LocalDateTime endTime,
+                                                  @Param("limit") int limit);
+
+    /**
+     * 查询指定日期有执行记录的任务ID列表
+     */
+    List<Integer> selectExecutedJobIds(@Param("startTime") LocalDateTime startTime,
+                                        @Param("endTime") LocalDateTime endTime);
+
+    /**
+     * 查询任务最新一条执行记录
+     */
+    Map<String, Object> selectLastExecLog(@Param("jobId") Integer jobId,
+                                           @Param("endTime") LocalDateTime endTime);
+}

+ 71 - 0
src/main/resources/mapper/JobBriefingMapper.xml

@@ -0,0 +1,71 @@
+<?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="net.yyc.quartz.mapper.JobBriefingMapper">
+
+    <!-- 按任务ID统计执行情况 -->
+    <select id="selectJobStatSummary" resultType="map">
+        SELECT
+            job_id,
+            job_name,
+            job_group,
+            COUNT(*) as execCount,
+            SUM(CASE WHEN job_log_status = '0' THEN 1 ELSE 0 END) as successCount,
+            SUM(CASE WHEN job_log_status = '1' THEN 1 ELSE 0 END) as failCount,
+            AVG(CAST(execute_time AS SIGNED)) as avgExecuteTime,
+            MAX(create_time) as lastExecuteTime
+        FROM sys_job_log
+        WHERE create_time BETWEEN #{startTime} AND #{endTime}
+        GROUP BY job_id, job_name, job_group
+    </select>
+
+    <!-- 查询失败任务列表 -->
+    <select id="selectFailedJobs" resultType="map">
+        SELECT
+            job_name,
+            job_group,
+            execute_time,
+            exception_info,
+            create_time
+        FROM sys_job_log
+        WHERE create_time BETWEEN #{startTime} AND #{endTime}
+            AND job_log_status = '1'
+        ORDER BY create_time DESC
+        LIMIT #{limit}
+    </select>
+
+    <!-- 查询Top N最慢任务 -->
+    <select id="selectTopSlowJobs" resultType="map">
+        SELECT
+            job_name,
+            job_group,
+            execute_time
+        FROM sys_job_log
+        WHERE create_time BETWEEN #{startTime} AND #{endTime}
+            AND execute_time IS NOT NULL
+            AND execute_time != ''
+        ORDER BY CAST(execute_time AS SIGNED) DESC
+        LIMIT #{limit}
+    </select>
+
+    <!-- 查询指定日期有执行记录的任务ID -->
+    <select id="selectExecutedJobIds" resultType="java.lang.Integer">
+        SELECT DISTINCT job_id
+        FROM sys_job_log
+        WHERE create_time BETWEEN #{startTime} AND #{endTime}
+    </select>
+
+    <!-- 查询任务最新一条执行记录 -->
+    <select id="selectLastExecLog" resultType="map">
+        SELECT
+            job_log_status,
+            exception_info,
+            create_time
+        FROM sys_job_log
+        WHERE job_id = #{jobId}
+          AND create_time &lt;= #{endTime}
+        ORDER BY create_time DESC
+        LIMIT 1
+    </select>
+
+</mapper>