diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LogCount.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LogCount.java new file mode 100644 index 0000000..e456b08 --- /dev/null +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/LogCount.java @@ -0,0 +1,25 @@ +package com.ruoyi.flyingbook.domain; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 【请填写功能名称】对象 event_log + * + * @author ruoyi + * @date 2023-03-15 + */ +@Data +public class LogCount implements Serializable { + private static final long serialVersionUID = 1L; + + private Date startTime; + + private Date endTime; + + private String name; + + private Integer count; +} diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/EventLogMapper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/EventLogMapper.java index d3b133a..2092116 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/EventLogMapper.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/mapper/EventLogMapper.java @@ -2,6 +2,7 @@ package com.ruoyi.flyingbook.mapper; import com.ruoyi.flyingbook.domain.EventLog; +import com.ruoyi.flyingbook.domain.LogCount; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -62,4 +63,6 @@ public interface EventLogMapper * @return 结果 */ public int deleteEventLogByIds(Long[] ids); + + public List countByType(LogCount eventLog); } diff --git a/ruoyi-flyingbook/src/main/resources/mapper/EventLogMapper.xml b/ruoyi-flyingbook/src/main/resources/mapper/EventLogMapper.xml index 2014f0a..061de78 100644 --- a/ruoyi-flyingbook/src/main/resources/mapper/EventLogMapper.xml +++ b/ruoyi-flyingbook/src/main/resources/mapper/EventLogMapper.xml @@ -123,4 +123,19 @@ #{id} + + \ No newline at end of file diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/MailInfoController.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/MailInfoController.java index 3dcbe7d..32e096a 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/MailInfoController.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/MailInfoController.java @@ -2,6 +2,7 @@ package com.ruoyi.quartz.controller; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.quartz.task.MailSyncTask; +import com.ruoyi.quartz.task.MonitorJobTask; import com.ruoyi.quartz.task.ScheduledRemindersTask; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -17,6 +18,8 @@ public class MailInfoController extends BaseController { private MailSyncTask mailSyncTask; @Autowired private ScheduledRemindersTask scheduledRemindersTask; + @Autowired + private MonitorJobTask monitorJobTask; @PostMapping("/syncEmail") public void syncEmail(Boolean readFlag) { @@ -25,7 +28,8 @@ public class MailInfoController extends BaseController { @PostMapping("/scheduledReminders") public void scheduledReminders() { - scheduledRemindersTask.scheduledReminders(); + monitorJobTask.monitor(); +// scheduledRemindersTask.scheduledReminders(); } } diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/JobLogCount.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/JobLogCount.java new file mode 100644 index 0000000..7b14dcf --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/JobLogCount.java @@ -0,0 +1,21 @@ +package com.ruoyi.quartz.domain; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 定时任务调度日志表 sys_job_log + * + * @author ruoyi + */ +@Data +public class JobLogCount implements Serializable +{ + private static final long serialVersionUID = 1L; + + + private String jobName; + + private Integer count; +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java index 727d916..29a3cbf 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java @@ -1,6 +1,8 @@ package com.ruoyi.quartz.mapper; import java.util.List; + +import com.ruoyi.quartz.domain.JobLogCount; import com.ruoyi.quartz.domain.SysJobLog; /** @@ -61,4 +63,8 @@ public interface SysJobLogMapper * 清空任务日志 */ public void cleanJobLog(); + /** + * 清空任务日志 + */ + public List countJobLogByName(SysJobLog jobLog); } diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MonitorJobTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MonitorJobTask.java new file mode 100644 index 0000000..a4b92bf --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MonitorJobTask.java @@ -0,0 +1,100 @@ +package com.ruoyi.quartz.task; + +import com.ruoyi.common.enums.EventOperateType; +import com.ruoyi.flyingbook.LarkHelper.LarkRobotHelper; +import com.ruoyi.flyingbook.domain.LogCount; +import com.ruoyi.flyingbook.mapper.EventLogMapper; +import com.ruoyi.flyingbook.mapper.EventMapper; +import com.ruoyi.flyingbook.service.IEventLogService; +import com.ruoyi.flyingbook.service.IEventService; +import com.ruoyi.quartz.domain.JobLogCount; +import com.ruoyi.quartz.domain.SysJobLog; +import com.ruoyi.quartz.mapper.SysJobLogMapper; +import com.ruoyi.quartz.service.ISysJobService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 定时任务监控 + * + * @author ruoyi + */ +@Slf4j +@Component("monitorJobTask") +public class MonitorJobTask { + + @Autowired + private SysJobLogMapper jobLogMapper; + @Autowired + private EventLogMapper eventLogMapper; + @Autowired + private LarkRobotHelper larkRobotHelper; + + @Value("${lark.robot.group}") + private String robotGroup; + + public void monitor() { + log.info("scheduledRemindersTask start"); + Date todayStartTime = this.getTodayStartTime(); + Date endTime = new Date(); + Map jobLogMap = getJobLogCountMap(todayStartTime,endTime); + Map eventLogCountMap = getEventLogCountMap(todayStartTime,endTime); + Map map = this.getMap(); + StringBuilder sb = new StringBuilder(); + for (Map.Entry entry : map.entrySet()) { + Integer jobCount = jobLogMap.get(entry.getKey()); + sb.append(entry.getKey()).append("\r\n"); + if (jobCount != null && jobCount > 0){ + Integer eventLogCount = eventLogCountMap.getOrDefault(entry.getValue(),0); + sb.append(String.format("执行成功%s条",eventLogCount)); + }else { + sb.append("执行失败"); + } + sb.append("\r\n"); + } + larkRobotHelper.sendMessageByBot(robotGroup,sb.toString()); + log.info("scheduledRemindersTask end"); + } + + private Date getTodayStartTime(){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + return calendar.getTime(); + } + + private Map getJobLogCountMap(Date startDate,Date endDate){ + SysJobLog sysJobLog = new SysJobLog(); + sysJobLog.setStartTime(startDate); + sysJobLog.setStopTime(endDate); + List jobLogCounts = jobLogMapper.countJobLogByName(sysJobLog); + return jobLogCounts.stream() + .collect(Collectors.toMap(JobLogCount::getJobName, JobLogCount::getCount, (k1, k2) -> k1)); + } + + private Map getEventLogCountMap(Date startDate,Date endDate){ + LogCount logCount = new LogCount(); + logCount.setStartTime(startDate); + logCount.setEndTime(endDate); + List logCountList = eventLogMapper.countByType(logCount); + return logCountList.stream() + .collect(Collectors.toMap(LogCount::getName, LogCount::getCount, (k1, k2) -> k1)); + } + + + private Map getMap(){ + Map map = new HashMap<>(); + map.put("邮箱信息同步到飞书-新",EventOperateType.SYNC_MAIL.getCode()); + map.put("飞书定时提醒-新", EventOperateType.SCHEDULE_REMINDER.getCode()); + return map; + } + + +} diff --git a/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml index e608e42..22521dd 100644 --- a/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml +++ b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml @@ -1,93 +1,120 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - - - select job_log_id, job_name, job_group, invoke_target, job_message, status, exception_info, create_time - from sys_job_log + + + + + + + + + + + + + select job_log_id, + job_name, + job_group, + invoke_target, + job_message, + status, + exception_info, + create_time + from sys_job_log - - - - - - - - - delete from sys_job_log where job_log_id = #{jobLogId} - - - - delete from sys_job_log where job_log_id in - - #{jobLogId} - - - - + + + + + + + + + + + delete + from sys_job_log + where job_log_id = #{jobLogId} + + + + delete from sys_job_log where job_log_id in + + #{jobLogId} + + + + truncate table sys_job_log - - - insert into sys_job_log( - job_log_id, - job_name, - job_group, - invoke_target, - job_message, - status, - exception_info, - create_time - )values( - #{jobLogId}, - #{jobName}, - #{jobGroup}, - #{invokeTarget}, - #{jobMessage}, - #{status}, - #{exceptionInfo}, - sysdate() - ) - + + + insert into sys_job_log( + job_log_id, + job_name, + job_group, + invoke_target, + job_message, + status, + exception_info, + create_time + )values( + #{jobLogId}, + #{jobName}, + #{jobGroup}, + #{invokeTarget}, + #{jobMessage}, + #{status}, + #{exceptionInfo}, + sysdate() + ) + \ No newline at end of file