From 1c929141597ff5ccbc0d56725526141b396ccf7e Mon Sep 17 00:00:00 2001 From: liriming <1343021927@qq.com> Date: 星期四, 06 二月 2025 09:02:22 +0800 Subject: [PATCH] 添加清理数据定时任务 --- iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/init/JobCommandLineRunner.java | 38 + iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/utils/ScheduleJob.java | 7 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmItemResultJsonServiceImpl.java | 10 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAlarmMessageServiceImpl.java | 6 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/entity/ScheduleJobEntity.java | 58 + iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/MmPredictAlarmMessageDao.xml | 8 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dao/ScheduleJobLogDao.java | 17 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/config/ScheduleJobListConfig.java | 23 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleRecordDetailServiceImpl.java | 6 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/controller/admin/ScheduleJobController.java | 127 ++++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleRecordServiceImpl.java | 6 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/config/ScheduleJobListConfig.java | 27 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleSuggestServiceImpl.java | 7 iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/MmItemResultJsonDao.xml | 8 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/utils/ScheduleJob.java | 87 ++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dto/ScheduleJobLogDTO.java | 53 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/controller/package-info.java | 1 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/vo/ScheduleJobReqVO.java | 23 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanStScheduleSuggestTask.java | 46 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/utils/ScheduleUtils.java | 153 +++++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleSuggestDao.java | 5 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/utils/DateUtils.java | 292 +++++++++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanMmPredictAlarmMessageTask.java | 46 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictAlarmMessageService.java | 3 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmPredictAlarmMessageDao.java | 5 iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleRecordDetailDao.xml | 8 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmItemResultJsonDao.java | 4 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleRecordDetailService.java | 4 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmItemResultJsonService.java | 3 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/controller/admin/ScheduleJobLogController.java | 62 ++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleRecordService.java | 4 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleSuggestService.java | 4 iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleRecordDao.xml | 4 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/entity/ScheduleJobLogEntity.java | 59 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanItemResultJsonTask.java | 47 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/impl/ScheduleJobServiceImpl.java | 124 ++++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanScheduleRecordTask.java | 50 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/ITask.java | 25 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/impl/ScheduleJobLogServiceImpl.java | 54 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleRecordDetailDao.java | 4 iailab-module-model/iailab-module-model-biz/pom.xml | 5 iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleSuggestDao.xml | 8 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dto/ScheduleJobDTO.java | 62 ++ iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dao/ScheduleJobDao.java | 34 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/ScheduleJobService.java | 55 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleRecordDao.java | 4 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/config/ScheduleConfig.java | 58 + iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/ScheduleJobLogService.java | 28 48 files changed, 1,768 insertions(+), 4 deletions(-) diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/config/ScheduleJobListConfig.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/config/ScheduleJobListConfig.java new file mode 100644 index 0000000..d52df17 --- /dev/null +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/config/ScheduleJobListConfig.java @@ -0,0 +1,23 @@ +package com.iailab.module.data.job.config; + +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author lirm + * @Description + * @createTime 2025年02月06日 + */ +@Component +public class ScheduleJobListConfig { + public static List<String> scheduleJobList = new ArrayList<>(); + + public ScheduleJobListConfig() { + scheduleJobList.add("CleanItemResultJsonTask"); + scheduleJobList.add("CleanMmPredictAlarmMessageTask"); + scheduleJobList.add("CleanScheduleRecordTask"); + scheduleJobList.add("CleanStScheduleSuggestTask"); + } +} diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/utils/ScheduleJob.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/utils/ScheduleJob.java index bc3eaad..c4c5bbe 100644 --- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/utils/ScheduleJob.java +++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/job/utils/ScheduleJob.java @@ -4,6 +4,7 @@ import com.iailab.framework.common.exception.ExceptionUtils; import com.iailab.framework.common.util.spring.SpringContextUtils; import com.iailab.framework.tenant.core.context.TenantContextHolder; +import com.iailab.module.data.job.config.ScheduleJobListConfig; import com.iailab.module.data.job.entity.ScheduleJobEntity; import com.iailab.module.data.job.entity.ScheduleJobLogEntity; import com.iailab.module.data.job.service.ScheduleJobLogService; @@ -31,6 +32,12 @@ ScheduleJobEntity scheduleJob = (ScheduleJobEntity) context.getMergedJobDataMap(). get(ScheduleUtils.JOB_PARAM_KEY); + // 过滤定时任务 + if (ScheduleJobListConfig.scheduleJobList.contains(scheduleJob.getBeanName())) { + logger.info("过滤定时任务,BeanName=" + scheduleJob.getBeanName()); + return; + } + //设置当前租户 TenantContextHolder.setTenantId(scheduleJob.getTenantId()); Long tenantId = TenantContextHolder.getRequiredTenantId(); diff --git a/iailab-module-model/iailab-module-model-biz/pom.xml b/iailab-module-model/iailab-module-model-biz/pom.xml index 5f11ebd..ce7bdcb 100644 --- a/iailab-module-model/iailab-module-model-biz/pom.xml +++ b/iailab-module-model/iailab-module-model-biz/pom.xml @@ -158,6 +158,11 @@ <version>6.8.0</version> </dependency> + <dependency> + <groupId>org.quartz-scheduler</groupId> + <artifactId>quartz</artifactId> + <version>2.3.2</version> + </dependency> </dependencies> diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/utils/DateUtils.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/utils/DateUtils.java new file mode 100644 index 0000000..2d4fddc --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/utils/DateUtils.java @@ -0,0 +1,292 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + * <p> + * https://www.renren.io + * <p> + * 版权所有,侵权必究! + */ + +package com.iailab.module.model.common.utils; + +import org.apache.commons.lang3.StringUtils; +import org.joda.time.DateTime; +import org.joda.time.LocalDate; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * 日期处理 + * + * @author Mark sunlightcs@gmail.com + */ +public class DateUtils { + /** 时间格式(yyyy-MM-dd) */ + public final static String DATE_PATTERN = "yyyy-MM-dd"; + /** 时间格式(yyyy-MM-dd HH:mm:ss) */ + public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; + + public final static String DATE_TIME_PATTERN_MIN = "yyyy-MM-dd HH:mm"; + + public final static String TIME2_PATTERN = "mmss"; + + public final static String DATE_PATTERN_MON = "yyyy-MM"; + + public final static String DATE_PATTERN_YEAR = "yyyy"; + + /** + * 日期格式化 日期格式为:yyyy-MM-dd + * @param date 日期 + * @return 返回yyyy-MM-dd格式日期 + */ + public static String format(Date date) { + return format(date, DATE_PATTERN); + } + + /** + * 日期格式化 日期格式为:yyyy-MM-dd + * @param date 日期 + * @param pattern 格式,如:DateUtils.DATE_TIME_PATTERN + * @return 返回yyyy-MM-dd格式日期 + */ + public static String format(Date date, String pattern) { + if (date != null) { + SimpleDateFormat df = new SimpleDateFormat(pattern); + return df.format(date); + } + return null; + } + + /** + * 日期解析 + * @param date 日期 + * @param pattern 格式,如:DateUtils.DATE_TIME_PATTERN + * @return 返回Date + */ + public static Date parse(String date, String pattern) { + try { + return new SimpleDateFormat(pattern).parse(date); + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 字符串转换成日期 + * @param strDate 日期字符串 + * @param pattern 日期的格式,如:DateUtils.DATE_TIME_PATTERN + */ + public static Date stringToDate(String strDate, String pattern) { + if (StringUtils.isBlank(strDate)) { + return null; + } + + DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern); + return fmt.parseLocalDateTime(strDate).toDate(); + } + + /** + * 根据周数,获取开始日期、结束日期 + * @param week 周期 0本周,-1上周,-2上上周,1下周,2下下周 + * @return 返回date[0]开始日期、date[1]结束日期 + */ + public static Date[] getWeekStartAndEnd(int week) { + DateTime dateTime = new DateTime(); + LocalDate date = new LocalDate(dateTime.plusWeeks(week)); + + date = date.dayOfWeek().withMinimumValue(); + Date beginDate = date.toDate(); + Date endDate = date.plusDays(6).toDate(); + return new Date[]{beginDate, endDate}; + } + + /** + * 对日期的【秒】进行加/减 + * + * @param date 日期 + * @param seconds 秒数,负数为减 + * @return 加/减几秒后的日期 + */ + public static Date addDateSeconds(Date date, int seconds) { + DateTime dateTime = new DateTime(date); + return dateTime.plusSeconds(seconds).toDate(); + } + + /** + * 对日期的【分钟】进行加/减 + * + * @param date 日期 + * @param minutes 分钟数,负数为减 + * @return 加/减几分钟后的日期 + */ + public static Date addDateMinutes(Date date, int minutes) { + DateTime dateTime = new DateTime(date); + return dateTime.plusMinutes(minutes).toDate(); + } + + /** + * 对日期的【小时】进行加/减 + * + * @param date 日期 + * @param hours 小时数,负数为减 + * @return 加/减几小时后的日期 + */ + public static Date addDateHours(Date date, int hours) { + DateTime dateTime = new DateTime(date); + return dateTime.plusHours(hours).toDate(); + } + + /** + * 对日期的【天】进行加/减 + * + * @param date 日期 + * @param days 天数,负数为减 + * @return 加/减几天后的日期 + */ + public static Date addDateDays(Date date, int days) { + DateTime dateTime = new DateTime(date); + return dateTime.plusDays(days).toDate(); + } + + /** + * 对日期的【周】进行加/减 + * + * @param date 日期 + * @param weeks 周数,负数为减 + * @return 加/减几周后的日期 + */ + public static Date addDateWeeks(Date date, int weeks) { + DateTime dateTime = new DateTime(date); + return dateTime.plusWeeks(weeks).toDate(); + } + + /** + * 对日期的【月】进行加/减 + * + * @param date 日期 + * @param months 月数,负数为减 + * @return 加/减几月后的日期 + */ + public static Date addDateMonths(Date date, int months) { + DateTime dateTime = new DateTime(date); + return dateTime.plusMonths(months).toDate(); + } + + /** + * 对日期的【年】进行加/减 + * + * @param date 日期 + * @param years 年数,负数为减 + * @return 加/减几年后的日期 + */ + public static Date addDateYears(Date date, int years) { + DateTime dateTime = new DateTime(date); + return dateTime.plusYears(years).toDate(); + } + + public static List<String> getDays(Date startDate, Date endDate) { + List<String> days = new ArrayList<String>(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startDate); + + while (calendar.getTime().compareTo(endDate) < 0) { + days.add(DateUtils.format(calendar.getTime(), "yyyy-MM-dd")); + calendar.add(6, 1); + } + return days; + } + + public static Date getTime(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + return calendar.getTime(); + } + + public static List<String> getYearTime(Date startDate, Date endDate) { + List<String> days = new ArrayList<String>(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startDate); + + while (calendar.getTime().compareTo(endDate) <= 0) { + days.add(DateUtils.format(calendar.getTime(), DATE_PATTERN_YEAR)); + calendar.add(Calendar.YEAR, 1); + } + return days; + } + + public static List<String> getMonTime(Date startDate, Date endDate) { + List<String> days = new ArrayList<String>(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startDate); + + while (calendar.getTime().compareTo(endDate) <= 0) { + days.add(DateUtils.format(calendar.getTime(), DATE_PATTERN_MON)); + calendar.add(Calendar.MONTH, 1); + } + return days; + } + + public static List<String> getDayTime(Date startDate, Date endDate) { + List<String> days = new ArrayList<String>(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startDate); + + while (calendar.getTime().compareTo(endDate) <= 0) { + days.add(DateUtils.format(calendar.getTime(), DATE_PATTERN)); + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + return days; + } + + public static List<String> getDayTime(Date startDate, Date endDate, int seconds) { + List<String> days = new ArrayList<String>(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startDate); + while (calendar.getTime().compareTo(endDate) <= 0) { + days.add(DateUtils.format(calendar.getTime(), DATE_TIME_PATTERN)); + calendar.add(Calendar.SECOND, seconds); + } + return days; + } + + public static List<String> getClassTime(Date startDate, Date endDate) { + List<String> days = new ArrayList<String>(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startDate); + while (calendar.getTime().compareTo(endDate) <= 0) { + days.add(DateUtils.format(calendar.getTime(), DATE_PATTERN) + " 0点班"); + days.add(DateUtils.format(calendar.getTime(), DATE_PATTERN) + " 8点班"); + days.add(DateUtils.format(calendar.getTime(), DATE_PATTERN) + " 16点班"); + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + return days; + } + + + public static Map<String, Date> getIntervalDate(int days) { + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_YEAR, days); + calendar.set(Calendar.MILLISECOND, 0); + calendar.set(Calendar.SECOND, 0); + Date tEndDate = calendar.getTime(); + calendar.add(Calendar.HOUR_OF_DAY, -1); + Date tStartDate = calendar.getTime(); + Map<String, Date> tMap = new HashMap<String, Date>(2); + tMap.put("startdate", tStartDate); + tMap.put("enddate", tEndDate); + return tMap; + + } + + public static boolean isNotBlank(Date date) { + if (date == null) { + return false; + } + return true; + } + +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/config/ScheduleConfig.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/config/ScheduleConfig.java new file mode 100644 index 0000000..f5be213 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/config/ScheduleConfig.java @@ -0,0 +1,58 @@ +package com.iailab.module.model.job.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.quartz.SchedulerFactoryBean; + +import javax.sql.DataSource; +import java.util.Properties; + +/** + * 定时任务配置 + * + * @author Mark sunlightcs@gmail.com + */ +@Configuration +public class ScheduleConfig { + + @Bean + public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) { + SchedulerFactoryBean factory = new SchedulerFactoryBean(); + factory.setDataSource(dataSource); + + //quartz参数 + Properties prop = new Properties(); + prop.put("org.quartz.scheduler.instanceName", "IailabModelScheduler"); + prop.put("org.quartz.scheduler.instanceId", "AUTO"); + //线程池配置 + prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool"); + prop.put("org.quartz.threadPool.threadCount", "20"); + prop.put("org.quartz.threadPool.threadPriority", "5"); + //JobStore配置 + prop.put("org.quartz.jobStore.class", "org.springframework.scheduling.quartz.LocalDataSourceJobStore"); + //集群配置 + prop.put("org.quartz.jobStore.isClustered", "false"); + prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000"); + prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1"); + + prop.put("org.quartz.jobStore.misfireThreshold", "12000"); + prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); + prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); + + //PostgreSQL数据库,需要打开此注释 + //prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.PostgreSQLDelegate"); + + factory.setQuartzProperties(prop); + + factory.setSchedulerName("IailabModelScheduler"); + //延时启动 + factory.setStartupDelay(30); + factory.setApplicationContextSchedulerContextKey("applicationContextKey"); + //可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 + factory.setOverwriteExistingJobs(true); + //设置自动启动,默认为true + factory.setAutoStartup(true); + + return factory; + } +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/config/ScheduleJobListConfig.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/config/ScheduleJobListConfig.java new file mode 100644 index 0000000..b62cef0 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/config/ScheduleJobListConfig.java @@ -0,0 +1,27 @@ +package com.iailab.module.model.job.config; + +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author lirm + * @Description + * @createTime 2025年02月06日 + */ +@Component +public class ScheduleJobListConfig { + public static List<String> scheduleJobList = new ArrayList<>(); + + public ScheduleJobListConfig() { + scheduleJobList.add("DevCameraDahuaTask"); + scheduleJobList.add("DevCameraHikvisionTask"); + scheduleJobList.add("PointCollectTaskNet1h"); + scheduleJobList.add("PointCollectTaskNet10"); + scheduleJobList.add("PointCollectTaskNet30"); + scheduleJobList.add("PointCollectTaskNet60"); + scheduleJobList.add("PointCollectTaskNetKIO10"); + scheduleJobList.add("PointCollectTaskNetKIO60"); + } +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/controller/admin/ScheduleJobController.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/controller/admin/ScheduleJobController.java new file mode 100644 index 0000000..004631b --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/controller/admin/ScheduleJobController.java @@ -0,0 +1,127 @@ +package com.iailab.module.model.job.controller.admin; + +import com.iailab.framework.common.constant.Constant; +import com.iailab.framework.common.pojo.CommonResult; +import com.iailab.framework.common.pojo.PageResult; +import com.iailab.framework.common.util.object.BeanUtils; +import com.iailab.framework.common.util.validation.ValidationUtils; +import com.iailab.framework.common.validation.group.AddGroup; +import com.iailab.framework.common.validation.group.DefaultGroup; +import com.iailab.framework.common.validation.group.UpdateGroup; +import com.iailab.framework.tenant.core.context.TenantContextHolder; +import com.iailab.module.model.job.dto.ScheduleJobDTO; +import com.iailab.module.model.job.entity.ScheduleJobEntity; +import com.iailab.module.model.job.service.ScheduleJobService; +import com.iailab.module.model.job.vo.ScheduleJobReqVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +import static com.iailab.framework.common.pojo.CommonResult.success; + +/** + * 定时任务 + * + * @author Mark sunlightcs@gmail.com + */ +@RestController +@RequestMapping("/model/job/schedule") +@Tag(name = "定时任务") +public class ScheduleJobController { + @Resource + private ScheduleJobService scheduleJobService; + + @GetMapping("page") + @Operation(summary = "分页") + @Parameters({ + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true) , + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true) , + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段") , + @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)") , + @Parameter(name = "beanName", description = "beanName") + }) + @PreAuthorize("@ss.hasPermission('model:schedule:query')") + public CommonResult<PageResult<ScheduleJobDTO>> page(@Validated ScheduleJobReqVO reqVO){ + reqVO.setTenantId(TenantContextHolder.getTenantId()); + PageResult<ScheduleJobEntity> page = scheduleJobService.page(reqVO); + + return success(BeanUtils.toBean(page, ScheduleJobDTO.class)); + } + + @GetMapping("info") + @Operation(summary = "信息") + @PreAuthorize("@ss.hasPermission('model:schedule:query')") + public CommonResult<ScheduleJobDTO> info(@RequestParam("id") Long id){ + ScheduleJobDTO schedule = scheduleJobService.get(id); + + return new CommonResult<ScheduleJobDTO>().setData(schedule); + } + + @PostMapping("/create") + @Operation(summary = "保存") + @PreAuthorize("@ss.hasPermission('model:schedule:create')") + public CommonResult save(@RequestBody ScheduleJobDTO dto){ + ValidationUtils.validate(dto, AddGroup.class, DefaultGroup.class); + + scheduleJobService.save(dto); + + return new CommonResult(); + } + + @PutMapping("/update") + @Operation(summary = "修改") + @PreAuthorize("@ss.hasPermission('model:schedule:update')") + public CommonResult update(@RequestBody ScheduleJobDTO dto){ + ValidationUtils.validate(dto, UpdateGroup.class, DefaultGroup.class); + + scheduleJobService.update(dto); + + return new CommonResult(); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除") + @PreAuthorize("@ss.hasPermission('model:schedule:delete')") + public CommonResult delete(@RequestParam("id") Long id){ + scheduleJobService.deleteBatch(id); + + return new CommonResult(); + } + + @PutMapping("/run") + @Operation(summary = "立即执行") + public CommonResult run(@RequestParam("id") Long id){ + Long[] ids = new Long[1]; + ids[0] = id; + scheduleJobService.run(ids); + + return new CommonResult(); + } + + @PutMapping("/pause") + @Operation(summary = "暂停") + public CommonResult pause(@RequestParam("id") Long id){ + Long[] ids = new Long[1]; + ids[0] = id; + scheduleJobService.pause(ids); + + return new CommonResult(); + } + + @PutMapping("/resume") + @Operation(summary = "恢复") + public CommonResult resume(@RequestParam("id") Long id){ + Long[] ids = new Long[1]; + ids[0] = id; + scheduleJobService.resume(ids); + + return new CommonResult(); + } + +} \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/controller/admin/ScheduleJobLogController.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/controller/admin/ScheduleJobLogController.java new file mode 100644 index 0000000..6a0293d --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/controller/admin/ScheduleJobLogController.java @@ -0,0 +1,62 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + * + * https://www.renren.io + * + * 版权所有,侵权必究! + */ + +package com.iailab.module.model.job.controller.admin; + +import com.iailab.framework.common.constant.Constant; +import com.iailab.framework.common.page.PageData; +import com.iailab.framework.common.pojo.CommonResult; +import com.iailab.module.model.job.dto.ScheduleJobLogDTO; +import com.iailab.module.model.job.service.ScheduleJobLogService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Map; + +/** + * 定时任务日志 + * + * @author Mark sunlightcs@gmail.com + */ +@RestController +@RequestMapping("/sys/scheduleLog") +@Tag(name = "定时任务日志") +public class ScheduleJobLogController { + @Resource + private ScheduleJobLogService scheduleJobLogService; + + @GetMapping("page") + @Operation(summary = "分页") + @Parameters({ + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true) , + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true) , + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段") , + @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)") , + @Parameter(name = "jobId", description = "jobId") + }) + @PreAuthorize("@ss.hasPermission('sys:schedule:log')") + public CommonResult<PageData<ScheduleJobLogDTO>> page(@RequestParam Map<String, Object> params){ + PageData<ScheduleJobLogDTO> page = scheduleJobLogService.page(params); + + return new CommonResult<PageData<ScheduleJobLogDTO>>().setData(page); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + @PreAuthorize("@ss.hasPermission('sys:schedule:log')") + public CommonResult<ScheduleJobLogDTO> info(@PathVariable("id") Long id){ + ScheduleJobLogDTO log = scheduleJobLogService.get(id); + + return new CommonResult<ScheduleJobLogDTO>().setData(log); + } +} \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/controller/package-info.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/controller/package-info.java new file mode 100644 index 0000000..4f83d6e --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/controller/package-info.java @@ -0,0 +1 @@ +package com.iailab.module.model.job.controller; \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dao/ScheduleJobDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dao/ScheduleJobDao.java new file mode 100644 index 0000000..dd2a6fa --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dao/ScheduleJobDao.java @@ -0,0 +1,34 @@ +package com.iailab.module.model.job.dao; + +import com.baomidou.dynamic.datasource.annotation.Master; +import com.iailab.framework.common.pojo.PageResult; +import com.iailab.framework.mybatis.core.mapper.BaseMapperX; +import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.iailab.module.model.job.entity.ScheduleJobEntity; +import com.iailab.module.model.job.vo.ScheduleJobReqVO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Map; + +/** + * 定时任务 + * + * @author Mark sunlightcs@gmail.com + */ +@Master +@Mapper +public interface ScheduleJobDao extends BaseMapperX<ScheduleJobEntity> { + + default PageResult<ScheduleJobEntity> selectPage(ScheduleJobReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX<ScheduleJobEntity>() + .likeIfPresent(ScheduleJobEntity::getBeanName, reqVO.getBeanName()) + .eqIfPresent(ScheduleJobEntity::getTenantId, reqVO.getTenantId()) + .orderByDesc(ScheduleJobEntity::getCreateDate)); + + } + + /** + * 批量更新状态 + */ + int updateBatch(Map<String, Object> map); +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dao/ScheduleJobLogDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dao/ScheduleJobLogDao.java new file mode 100644 index 0000000..25ef781 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dao/ScheduleJobLogDao.java @@ -0,0 +1,17 @@ +package com.iailab.module.model.job.dao; + +import com.baomidou.dynamic.datasource.annotation.Master; +import com.iailab.framework.common.dao.BaseDao; +import com.iailab.module.model.job.entity.ScheduleJobLogEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * 定时任务日志 + * + * @author Mark sunlightcs@gmail.com + */ +@Master +@Mapper +public interface ScheduleJobLogDao extends BaseDao<ScheduleJobLogEntity> { + +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dto/ScheduleJobDTO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dto/ScheduleJobDTO.java new file mode 100644 index 0000000..810f3c3 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dto/ScheduleJobDTO.java @@ -0,0 +1,62 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + * + * https://www.renren.io + * + * 版权所有,侵权必究! + */ + +package com.iailab.module.model.job.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.iailab.framework.common.validation.group.AddGroup; +import com.iailab.framework.common.validation.group.DefaultGroup; +import com.iailab.framework.common.validation.group.UpdateGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Null; +import java.io.Serializable; +import java.util.Date; + +/** + * 定时任务 + * + * @author Mark sunlightcs@gmail.com + * @since 1.0.0 + */ +@Data +@Tag(name = "定时任务") +public class ScheduleJobDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(description = "id") + @Null(message="{id.null}", groups = AddGroup.class) + @NotNull(message="{id.require}", groups = UpdateGroup.class) + private Long id; + + @Schema(description = "spring bean名称") + @NotBlank(message = "{schedule.bean.require}", groups = DefaultGroup.class) + private String beanName; + + @Schema(description = "参数") + private String params; + + @Schema(description = "cron表达式") + @NotBlank(message = "{schedule.cron.require}", groups = DefaultGroup.class) + private String cronExpression; + + @Schema(description = "任务状态 0:暂停 1:正常") + private Integer status; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "创建时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Date createDate; + +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dto/ScheduleJobLogDTO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dto/ScheduleJobLogDTO.java new file mode 100644 index 0000000..adcd483 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/dto/ScheduleJobLogDTO.java @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + * + * https://www.renren.io + * + * 版权所有,侵权必究! + */ + +package com.iailab.module.model.job.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 定时任务日志 + * + * @author Mark sunlightcs@gmail.com + * @since 1.0.0 + */ +@Data +@Tag(name = "定时任务日志") +public class ScheduleJobLogDTO implements Serializable { + private static final long serialVersionUID = 1L; + + @Schema(description = "id") + private Long id; + + @Schema(description = "任务id") + private Long jobId; + + @Schema(description = "spring bean名称") + private String beanName; + + @Schema(description = "参数") + private String params; + + @Schema(description = "任务状态 0:失败 1:成功") + private Integer status; + + @Schema(description = "失败信息") + private String error; + + @Schema(description = "耗时(单位:毫秒)") + private Integer times; + + @Schema(description = "创建时间") + private Date createDate; + +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/entity/ScheduleJobEntity.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/entity/ScheduleJobEntity.java new file mode 100644 index 0000000..4639c92 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/entity/ScheduleJobEntity.java @@ -0,0 +1,58 @@ +package com.iailab.module.model.job.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.iailab.framework.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 定时任务 + * + * @author Mark sunlightcs@gmail.com + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("schedule_job") +public class ScheduleJobEntity extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * spring bean名称 + */ + private String beanName; + /** + * 参数 + */ + private String params; + /** + * cron表达式 + */ + private String cronExpression; + /** + * 任务状态 0:暂停 1:正常 + */ + private Integer status; + /** + * 备注 + */ + private String remark; + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long updater; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateDate; + + /** + * 多租户编号 + */ + private Long tenantId; +} \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/entity/ScheduleJobLogEntity.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/entity/ScheduleJobLogEntity.java new file mode 100644 index 0000000..276cf8e --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/entity/ScheduleJobLogEntity.java @@ -0,0 +1,59 @@ +package com.iailab.module.model.job.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 定时任务日志 + * + * @author Mark sunlightcs@gmail.com + */ +@Data +@TableName("schedule_job_log") +public class ScheduleJobLogEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId + private Long id; + /** + * 任务id + */ + private Long jobId; + /** + * spring bean名称 + */ + private String beanName; + /** + * 参数 + */ + private String params; + /** + * 任务状态 0:失败 1:成功 + */ + private Integer status; + /** + * 失败信息 + */ + private String error; + /** + * 耗时(单位:毫秒) + */ + private Integer times; + /** + * 创建时间 + */ + private Date createDate; + + /** + * 多租户编号 + */ + private Long tenantId; + +} \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/init/JobCommandLineRunner.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/init/JobCommandLineRunner.java new file mode 100644 index 0000000..3a68732 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/init/JobCommandLineRunner.java @@ -0,0 +1,38 @@ +package com.iailab.module.model.job.init; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.iailab.module.model.job.dao.ScheduleJobDao; +import com.iailab.module.model.job.entity.ScheduleJobEntity; +import com.iailab.module.model.job.utils.ScheduleUtils; +import org.quartz.CronTrigger; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; +import org.quartz.Scheduler; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 初始化定时任务数据 + */ +@Component +public class JobCommandLineRunner implements CommandLineRunner { + @Resource + private Scheduler scheduler; + @Resource + private ScheduleJobDao scheduleJobDao; + + @Override + public void run(String... args) { + List<ScheduleJobEntity> scheduleJobList = scheduleJobDao.selectList(new QueryWrapper<>()); + for(ScheduleJobEntity scheduleJob : scheduleJobList){ + CronTrigger cronTrigger = ScheduleUtils.getCronTrigger(scheduler, scheduleJob.getId()); + //如果不存在,则创建 + if(cronTrigger == null) { + ScheduleUtils.createScheduleJob(scheduler, scheduleJob); + }else { + ScheduleUtils.updateScheduleJob(scheduler, scheduleJob); + } + } + } +} \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/ScheduleJobLogService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/ScheduleJobLogService.java new file mode 100644 index 0000000..ff76432 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/ScheduleJobLogService.java @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + * + * https://www.renren.io + * + * 版权所有,侵权必究! + */ + +package com.iailab.module.model.job.service; + +import com.iailab.framework.common.page.PageData; +import com.iailab.framework.common.service.BaseService; +import com.iailab.module.model.job.dto.ScheduleJobLogDTO; +import com.iailab.module.model.job.entity.ScheduleJobLogEntity; + +import java.util.Map; + +/** + * 定时任务日志 + * + * @author Mark sunlightcs@gmail.com + */ +public interface ScheduleJobLogService extends BaseService<ScheduleJobLogEntity> { + + PageData<ScheduleJobLogDTO> page(Map<String, Object> params); + + ScheduleJobLogDTO get(Long id); +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/ScheduleJobService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/ScheduleJobService.java new file mode 100644 index 0000000..81bdeaa --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/ScheduleJobService.java @@ -0,0 +1,55 @@ +package com.iailab.module.model.job.service; + +import com.iailab.framework.common.pojo.PageResult; +import com.iailab.framework.common.service.BaseService; +import com.iailab.module.model.job.dto.ScheduleJobDTO; +import com.iailab.module.model.job.entity.ScheduleJobEntity; +import com.iailab.module.model.job.vo.ScheduleJobReqVO; + + +/** + * 定时任务 + * + * @author Mark sunlightcs@gmail.com + */ +public interface ScheduleJobService extends BaseService<ScheduleJobEntity> { + + PageResult<ScheduleJobEntity> page(ScheduleJobReqVO reqVO); + + ScheduleJobDTO get(Long id); + + /** + * 保存定时任务 + */ + void save(ScheduleJobDTO dto); + + /** + * 更新定时任务 + */ + void update(ScheduleJobDTO dto); + + /** + * 批量删除定时任务 + */ + void deleteBatch(Long id); + + /** + * 批量更新定时任务状态 + */ + int updateBatch(Long[] ids, int status); + + /** + * 立即执行 + */ + void run(Long[] ids); + + /** + * 暂停运行 + */ + void pause(Long[] ids); + + /** + * 恢复运行 + */ + void resume(Long[] ids); +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/impl/ScheduleJobLogServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/impl/ScheduleJobLogServiceImpl.java new file mode 100644 index 0000000..c341cbb --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/impl/ScheduleJobLogServiceImpl.java @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + * + * https://www.renren.io + * + * 版权所有,侵权必究! + */ + +package com.iailab.module.model.job.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.iailab.framework.common.constant.Constant; +import com.iailab.framework.common.page.PageData; +import com.iailab.framework.common.service.impl.BaseServiceImpl; +import com.iailab.framework.common.util.object.ConvertUtils; +import com.iailab.module.model.job.dao.ScheduleJobLogDao; +import com.iailab.module.model.job.dto.ScheduleJobLogDTO; +import com.iailab.module.model.job.entity.ScheduleJobLogEntity; +import com.iailab.module.model.job.service.ScheduleJobLogService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.Map; + +@Service +public class ScheduleJobLogServiceImpl extends BaseServiceImpl<ScheduleJobLogDao, ScheduleJobLogEntity> implements ScheduleJobLogService { + + @Override + public PageData<ScheduleJobLogDTO> page(Map<String, Object> params) { + IPage<ScheduleJobLogEntity> page = baseDao.selectPage( + getPage(params, Constant.CREATE_DATE, false), + getWrapper(params) + ); + return getPageData(page, ScheduleJobLogDTO.class); + } + + private QueryWrapper<ScheduleJobLogEntity> getWrapper(Map<String, Object> params){ + String jobId = (String)params.get("jobId"); + + QueryWrapper<ScheduleJobLogEntity> wrapper = new QueryWrapper<>(); + wrapper.eq(StringUtils.isNotBlank(jobId), "job_id", jobId); + + return wrapper; + } + + @Override + public ScheduleJobLogDTO get(Long id) { + ScheduleJobLogEntity entity = baseDao.selectById(id); + + return ConvertUtils.sourceToTarget(entity, ScheduleJobLogDTO.class); + } + +} \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/impl/ScheduleJobServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/impl/ScheduleJobServiceImpl.java new file mode 100644 index 0000000..3c31126 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/service/impl/ScheduleJobServiceImpl.java @@ -0,0 +1,124 @@ +package com.iailab.module.model.job.service.impl; + +import com.alibaba.cloud.commons.lang.StringUtils; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.iailab.framework.common.constant.Constant; +import com.iailab.framework.common.pojo.PageResult; +import com.iailab.framework.common.service.impl.BaseServiceImpl; +import com.iailab.framework.common.util.object.ConvertUtils; +import com.iailab.framework.security.core.util.SecurityFrameworkUtils; +import com.iailab.framework.tenant.core.context.TenantContextHolder; +import com.iailab.module.model.job.dao.ScheduleJobDao; +import com.iailab.module.model.job.dto.ScheduleJobDTO; +import com.iailab.module.model.job.entity.ScheduleJobEntity; +import com.iailab.module.model.job.service.ScheduleJobService; +import com.iailab.module.model.job.utils.ScheduleUtils; +import com.iailab.module.model.job.vo.ScheduleJobReqVO; +import org.quartz.Scheduler; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Service +public class ScheduleJobServiceImpl extends BaseServiceImpl<ScheduleJobDao, ScheduleJobEntity> implements ScheduleJobService { + @Resource + private Scheduler scheduler; + + @Override + public PageResult<ScheduleJobEntity> page(ScheduleJobReqVO reqVO) { + return baseDao.selectPage(reqVO); + } + + @Override + public ScheduleJobDTO get(Long id) { + ScheduleJobEntity entity = baseDao.selectById(id); + + return ConvertUtils.sourceToTarget(entity, ScheduleJobDTO.class); + } + + private QueryWrapper<ScheduleJobEntity> getWrapper(Map<String, Object> params){ + String beanName = (String)params.get("beanName"); + + QueryWrapper<ScheduleJobEntity> wrapper = new QueryWrapper<>(); + wrapper.like(StringUtils.isNotBlank(beanName), "bean_name", beanName); + + return wrapper; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(ScheduleJobDTO dto) { + Long tenantId = TenantContextHolder.getRequiredTenantId(); + ScheduleJobEntity entity = ConvertUtils.sourceToTarget(dto, ScheduleJobEntity.class); + entity.setId(System.currentTimeMillis()); + entity.setStatus(Constant.ScheduleStatus.NORMAL.getValue()); + entity.setTenantId(tenantId); + entity.setCreator(SecurityFrameworkUtils.getLoginUser().getId()); + entity.setCreateDate(new Date()); + this.insert(entity); + + ScheduleUtils.createScheduleJob(scheduler, entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(ScheduleJobDTO dto) { + Long tenantId = TenantContextHolder.getRequiredTenantId(); + ScheduleJobEntity entity = ConvertUtils.sourceToTarget(dto, ScheduleJobEntity.class); + entity.setUpdateDate(new Date()); + entity.setUpdater(SecurityFrameworkUtils.getLoginUser().getId()); + entity.setTenantId(tenantId); + ScheduleUtils.updateScheduleJob(scheduler, entity); + + this.updateById(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteBatch(Long id) { + ScheduleUtils.deleteScheduleJob(scheduler, id); + + baseDao.deleteById(id); + } + + @Override + public int updateBatch(Long[] ids, int status){ + Map<String, Object> map = new HashMap<>(2); + map.put("ids", ids); + map.put("status", status); + return baseDao.updateBatch(map); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void run(Long[] ids) { + for(Long id : ids){ + ScheduleUtils.run(scheduler, this.selectById(id)); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void pause(Long[] ids) { + for(Long id : ids){ + ScheduleUtils.pauseJob(scheduler, id); + } + + updateBatch(ids, Constant.ScheduleStatus.PAUSE.getValue()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void resume(Long[] ids) { + for(Long id : ids){ + ScheduleUtils.resumeJob(scheduler, id); + } + + updateBatch(ids, Constant.ScheduleStatus.NORMAL.getValue()); + } + +} \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanItemResultJsonTask.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanItemResultJsonTask.java new file mode 100644 index 0000000..dd0da10 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanItemResultJsonTask.java @@ -0,0 +1,47 @@ +package com.iailab.module.model.job.task; + +import com.iailab.module.model.common.utils.DateUtils; +import com.iailab.module.model.mcs.pre.service.MmItemResultJsonService; +import com.iailab.module.model.mcs.sche.service.StScheduleRecordDetailService; +import com.iailab.module.model.mcs.sche.service.StScheduleRecordService; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.Map; + +/** + * 清理预测json数据表 + * + * @author lirm + * @Description + * @createTime 2025年02月05日 + */ +@Component("cleanItemResultJsonTask") +public class CleanItemResultJsonTask implements ITask { + private Logger logger = LoggerFactory.getLogger(getClass()); + + + @Autowired + private MmItemResultJsonService mmItemResultJsonService; + + @Override + public void run(String params) { + logger.info("CleanItemResultJsonTask定时任务正在执行,参数为:{}",params ); + try { + int days = -40; + if (StringUtils.isNotBlank(params)) { + days = Math.abs(Integer.parseInt(params)) * -1; + } + Map<String, Date> tMap = DateUtils.getIntervalDate(days); + mmItemResultJsonService.cleanResultJson(tMap); + } catch (Exception ex) { + logger.error("CleanItemResultJsonTask运行异常"); + ex.printStackTrace(); + } + logger.info("CleanItemResultJsonTask运行完成"); + } +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanMmPredictAlarmMessageTask.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanMmPredictAlarmMessageTask.java new file mode 100644 index 0000000..71ac55f --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanMmPredictAlarmMessageTask.java @@ -0,0 +1,46 @@ +package com.iailab.module.model.job.task; + +import com.iailab.module.model.common.utils.DateUtils; +import com.iailab.module.model.mcs.pre.service.MmItemResultJsonService; +import com.iailab.module.model.mcs.pre.service.MmPredictAlarmMessageService; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.Map; + +/** + * 清理预警消息表 + * + * @author lirm + * @Description + * @createTime 2025年02月05日 + */ +@Component("cleanMmPredictAlarmMessageTask") +public class CleanMmPredictAlarmMessageTask implements ITask { + private Logger logger = LoggerFactory.getLogger(getClass()); + + + @Autowired + private MmPredictAlarmMessageService mmPredictAlarmMessageService; + + @Override + public void run(String params) { + logger.info("CleanMmPredictAlarmMessageTask定时任务正在执行,参数为:{}",params ); + try { + int days = -40; + if (StringUtils.isNotBlank(params)) { + days = Math.abs(Integer.parseInt(params)) * -1; + } + Map<String, Date> tMap = DateUtils.getIntervalDate(days); + mmPredictAlarmMessageService.cleanAlarmMessage(tMap); + } catch (Exception ex) { + logger.error("CleanMmPredictAlarmMessageTask运行异常"); + ex.printStackTrace(); + } + logger.info("CleanMmPredictAlarmMessageTask运行完成"); + } +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanScheduleRecordTask.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanScheduleRecordTask.java new file mode 100644 index 0000000..b3cce4c --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanScheduleRecordTask.java @@ -0,0 +1,50 @@ +package com.iailab.module.model.job.task; + +import com.iailab.module.model.common.utils.DateUtils; +import com.iailab.module.model.mcs.sche.service.StScheduleRecordDetailService; +import com.iailab.module.model.mcs.sche.service.StScheduleRecordService; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.Map; + +/** + * 清理调度记录表 + * + * @author lirm + * @Description + * @createTime 2025年02月05日 + */ +@Component("cleanScheduleRecordTask") +public class CleanScheduleRecordTask implements ITask { + private Logger logger = LoggerFactory.getLogger(getClass()); + + + @Autowired + private StScheduleRecordService stScheduleRecordService; + + @Autowired + private StScheduleRecordDetailService stScheduleRecordDetailService; + + @Override + public void run(String params) { + logger.info("CleanScheduleRecordTask定时任务正在执行,参数为:{}",params ); + try { + int days = -40; + if (StringUtils.isNotBlank(params)) { + days = Math.abs(Integer.parseInt(params)) * -1; + } + Map<String, Date> tMap = DateUtils.getIntervalDate(days); + stScheduleRecordService.cleanScheduleRecord(tMap); + stScheduleRecordDetailService.cleanScheduleRecordDetail(tMap); + } catch (Exception ex) { + logger.error("CleanScheduleRecordTask运行异常"); + ex.printStackTrace(); + } + logger.info("CleanScheduleRecordTask运行完成"); + } +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanStScheduleSuggestTask.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanStScheduleSuggestTask.java new file mode 100644 index 0000000..bbc2009 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/CleanStScheduleSuggestTask.java @@ -0,0 +1,46 @@ +package com.iailab.module.model.job.task; + +import com.iailab.module.model.common.utils.DateUtils; +import com.iailab.module.model.mcs.pre.service.MmPredictAlarmMessageService; +import com.iailab.module.model.mcs.sche.service.StScheduleSuggestService; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.Map; + +/** + * 清理调度建议表 + * + * @author lirm + * @Description + * @createTime 2025年02月05日 + */ +@Component("cleanStScheduleSuggestTask") +public class CleanStScheduleSuggestTask implements ITask { + private Logger logger = LoggerFactory.getLogger(getClass()); + + + @Autowired + private StScheduleSuggestService stScheduleSuggestService; + + @Override + public void run(String params) { + logger.info("CleanStScheduleSuggestTask定时任务正在执行,参数为:{}",params ); + try { + int days = -40; + if (StringUtils.isNotBlank(params)) { + days = Math.abs(Integer.parseInt(params)) * -1; + } + Map<String, Date> tMap = DateUtils.getIntervalDate(days); + stScheduleSuggestService.cleanScheduleSuggest(tMap); + } catch (Exception ex) { + logger.error("CleanStScheduleSuggestTask运行异常"); + ex.printStackTrace(); + } + logger.info("CleanStScheduleSuggestTask运行完成"); + } +} diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/ITask.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/ITask.java new file mode 100644 index 0000000..516317b --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/task/ITask.java @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + * + * https://www.renren.io + * + * 版权所有,侵权必究! + */ + +package com.iailab.module.model.job.task; + +/** + * 定时任务接口,所有定时任务都要实现该接口 + * + * @author Mark sunlightcs@gmail.com + * @since 1.0.0 + */ +public interface ITask { + + /** + * 执行定时任务接口 + * + * @param params 参数,多参数使用JSON数据 + */ + void run(String params); +} \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/utils/ScheduleJob.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/utils/ScheduleJob.java new file mode 100644 index 0000000..f75962b --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/utils/ScheduleJob.java @@ -0,0 +1,87 @@ +package com.iailab.module.model.job.utils; + +import com.iailab.framework.common.constant.Constant; +import com.iailab.framework.common.exception.ExceptionUtils; +import com.iailab.framework.common.util.spring.SpringContextUtils; +import com.iailab.framework.tenant.core.context.TenantContextHolder; +import com.iailab.module.model.job.config.ScheduleJobListConfig; +import com.iailab.module.model.job.entity.ScheduleJobEntity; +import com.iailab.module.model.job.entity.ScheduleJobLogEntity; +import com.iailab.module.model.job.service.ScheduleJobLogService; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.quartz.QuartzJobBean; + +import java.lang.reflect.Method; +import java.util.Date; + + +/** + * 定时任务 + * + * @author Mark sunlightcs@gmail.com + */ +@DisallowConcurrentExecution +public class ScheduleJob extends QuartzJobBean { + private Logger logger = LoggerFactory.getLogger(getClass()); + + @Override + protected void executeInternal(JobExecutionContext context) { + ScheduleJobEntity scheduleJob = (ScheduleJobEntity) context.getMergedJobDataMap(). + get(ScheduleUtils.JOB_PARAM_KEY); + + // 过滤定时任务 + if (ScheduleJobListConfig.scheduleJobList.contains(scheduleJob.getBeanName())) { + logger.info("过滤定时任务,BeanName=" + scheduleJob.getBeanName()); + return; + } + + //设置当前租户 + TenantContextHolder.setTenantId(scheduleJob.getTenantId()); + Long tenantId = TenantContextHolder.getRequiredTenantId(); + + //数据库保存执行记录 + ScheduleJobLogEntity log = new ScheduleJobLogEntity(); + log.setId(System.currentTimeMillis()); + log.setJobId(scheduleJob.getId()); + log.setBeanName(scheduleJob.getBeanName()); + log.setParams(scheduleJob.getParams()); + log.setCreateDate(new Date()); + log.setTenantId(tenantId); + + //任务开始时间 + long startTime = System.currentTimeMillis(); + + try { + //执行任务 + logger.info("任务准备执行,任务ID:{}", scheduleJob.getId()); + Object target = SpringContextUtils.getBean(scheduleJob.getBeanName()); + Method method = target.getClass().getDeclaredMethod("run", String.class); + method.invoke(target, scheduleJob.getParams()); + + //任务执行总时长 + long times = System.currentTimeMillis() - startTime; + log.setTimes((int)times); + //任务状态 + log.setStatus(Constant.SUCCESS); + + logger.info("任务执行完毕,任务ID:{} 总共耗时:{} 毫秒", scheduleJob.getId(), times); + } catch (Exception e) { + logger.error("任务执行失败,任务ID:{}", scheduleJob.getId(), e); + + //任务执行总时长 + long times = System.currentTimeMillis() - startTime; + log.setTimes((int)times); + + //任务状态 + log.setStatus(Constant.FAIL); + log.setError(ExceptionUtils.getErrorStackTrace(e)); + }finally { + //获取spring bean + ScheduleJobLogService scheduleJobLogService = SpringContextUtils.getBean(ScheduleJobLogService.class); + //scheduleJobLogService.insert(log); + } + } +} \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/utils/ScheduleUtils.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/utils/ScheduleUtils.java new file mode 100644 index 0000000..e61a5be --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/utils/ScheduleUtils.java @@ -0,0 +1,153 @@ +package com.iailab.module.model.job.utils; + +import com.iailab.framework.common.constant.Constant; +import com.iailab.framework.common.enums.ErrorCode; +import com.iailab.framework.common.exception.ServerException; +import com.iailab.module.model.job.entity.ScheduleJobEntity; +import org.quartz.*; + +/** + * 定时任务工具类 + * + * @author Mark sunlightcs@gmail.com + */ +public class ScheduleUtils { + private final static String JOB_NAME = "TASK_"; + /** + * 任务调度参数key + */ + public static final String JOB_PARAM_KEY = "JOB_PARAM_KEY"; + + /** + * 获取触发器key + */ + public static TriggerKey getTriggerKey(Long jobId) { + return TriggerKey.triggerKey(JOB_NAME + jobId); + } + + /** + * 获取jobKey + */ + public static JobKey getJobKey(Long jobId) { + return JobKey.jobKey(JOB_NAME + jobId); + } + + /** + * 获取表达式触发器 + */ + public static CronTrigger getCronTrigger(Scheduler scheduler, Long jobId) { + try { + return (CronTrigger) scheduler.getTrigger(getTriggerKey(jobId)); + } catch (SchedulerException e) { + throw new ServerException(ErrorCode.JOB_ERROR, e.getMessage()); + } + } + + /** + * 创建定时任务 + */ + public static void createScheduleJob(Scheduler scheduler, ScheduleJobEntity scheduleJob) { + try { + //构建job信息 + JobDetail jobDetail = JobBuilder.newJob(ScheduleJob.class).withIdentity(getJobKey(scheduleJob.getId())).build(); + + //表达式调度构建器 + CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression()) + .withMisfireHandlingInstructionDoNothing(); + + //按新的cronExpression表达式构建一个新的trigger + CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(scheduleJob.getId())).withSchedule(scheduleBuilder).build(); + + //放入参数,运行时的方法可以获取 + jobDetail.getJobDataMap().put(JOB_PARAM_KEY, scheduleJob); + + scheduler.scheduleJob(jobDetail, trigger); + + //暂停任务 + if(scheduleJob.getStatus() == Constant.ScheduleStatus.PAUSE.getValue()){ + pauseJob(scheduler, scheduleJob.getId()); + } + } catch (SchedulerException e) { + throw new ServerException(ErrorCode.JOB_ERROR, e.getMessage()); + } + } + + /** + * 更新定时任务 + */ + public static void updateScheduleJob(Scheduler scheduler, ScheduleJobEntity scheduleJob) { + try { + TriggerKey triggerKey = getTriggerKey(scheduleJob.getId()); + + //表达式调度构建器 + CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression()) + .withMisfireHandlingInstructionDoNothing(); + + CronTrigger trigger = getCronTrigger(scheduler, scheduleJob.getId()); + + //按新的cronExpression表达式重新构建trigger + trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build(); + + //参数 + trigger.getJobDataMap().put(JOB_PARAM_KEY, scheduleJob); + + scheduler.rescheduleJob(triggerKey, trigger); + + //暂停任务 + if(scheduleJob.getStatus() == Constant.ScheduleStatus.PAUSE.getValue()){ + pauseJob(scheduler, scheduleJob.getId()); + } + + } catch (SchedulerException e) { + throw new ServerException(ErrorCode.JOB_ERROR, e.getMessage()); + } + } + + /** + * 立即执行任务 + */ + public static void run(Scheduler scheduler, ScheduleJobEntity scheduleJob) { + try { + //参数 + JobDataMap dataMap = new JobDataMap(); + dataMap.put(JOB_PARAM_KEY, scheduleJob); + + scheduler.triggerJob(getJobKey(scheduleJob.getId()), dataMap); + } catch (SchedulerException e) { + throw new ServerException(ErrorCode.JOB_ERROR, e.getMessage()); + } + } + + /** + * 暂停任务 + */ + public static void pauseJob(Scheduler scheduler, Long jobId) { + try { + scheduler.pauseJob(getJobKey(jobId)); + } catch (SchedulerException e) { + throw new ServerException(ErrorCode.JOB_ERROR, e.getMessage()); + } + } + + /** + * 恢复任务 + */ + public static void resumeJob(Scheduler scheduler, Long jobId) { + try { + scheduler.resumeJob(getJobKey(jobId)); + } catch (SchedulerException e) { + throw new ServerException(ErrorCode.JOB_ERROR, e.getMessage()); + } + } + + /** + * 删除定时任务 + */ + public static void deleteScheduleJob(Scheduler scheduler, Long jobId) { + try { + scheduler.deleteJob(getJobKey(jobId)); + } catch (SchedulerException e) { + throw new ServerException(ErrorCode.JOB_ERROR, e.getMessage()); + } + } +} \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/vo/ScheduleJobReqVO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/vo/ScheduleJobReqVO.java new file mode 100644 index 0000000..0e68e83 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/job/vo/ScheduleJobReqVO.java @@ -0,0 +1,23 @@ +package com.iailab.module.model.job.vo; + +import com.iailab.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * @author PanZhibao + * @Description + * @createTime 2024年08月23日 + */ +@Schema(description = "数据平台 - 定时任务分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ScheduleJobReqVO extends PageParam { + + private String beanName; + + private Long tenantId; +} \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmItemResultJsonDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmItemResultJsonDao.java index a7386b9..40be248 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmItemResultJsonDao.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmItemResultJsonDao.java @@ -5,6 +5,9 @@ import com.iailab.module.model.mcs.pre.entity.MmItemResultJsonEntity; import org.apache.ibatis.annotations.Mapper; +import java.util.Date; +import java.util.Map; + /** * @author PanZhibao * @Description @@ -13,4 +16,5 @@ @TenantDS @Mapper public interface MmItemResultJsonDao extends BaseMapperX<MmItemResultJsonEntity> { + void cleanResultJson(Map<String, Date> tMap); } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmPredictAlarmMessageDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmPredictAlarmMessageDao.java index 4fb7078..66a63d4 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmPredictAlarmMessageDao.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dao/MmPredictAlarmMessageDao.java @@ -8,6 +8,9 @@ import com.iailab.module.model.mcs.pre.vo.MmPredictAlarmMessagePageReqVO; import org.apache.ibatis.annotations.Mapper; +import java.util.Date; +import java.util.Map; + /** * @author PanZhibao * @Description @@ -27,4 +30,6 @@ .leIfPresent(MmPredictAlarmMessageEntity::getAlarmTime, reqVO.getEndTime()) .orderByDesc(MmPredictAlarmMessageEntity::getCreateTime)); } + + void cleanAlarmMessage(Map<String, Date> tMap); } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmItemResultJsonService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmItemResultJsonService.java index dbee2e4..5df7b12 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmItemResultJsonService.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmItemResultJsonService.java @@ -5,6 +5,7 @@ import java.util.Date; import java.util.List; +import java.util.Map; /** * @author PanZhibao @@ -16,4 +17,6 @@ List<Object[]> getData(String outputId, Date predictTime, String timeFormat); void insert(List<MmItemResultJsonEntity> resultJsonList); + + void cleanResultJson(Map<String, Date> tMap); } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictAlarmMessageService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictAlarmMessageService.java index e809416..fc02943 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictAlarmMessageService.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmPredictAlarmMessageService.java @@ -8,6 +8,7 @@ import java.util.Date; import java.util.List; +import java.util.Map; /** * @author PanZhibao @@ -29,4 +30,6 @@ void update(MmPredictAlarmMessageSaveReqVO reqVO); void delete(String id); + + void cleanAlarmMessage(Map<String, Date> tMap); } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmItemResultJsonServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmItemResultJsonServiceImpl.java index 7f7a424..d2d988f 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmItemResultJsonServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmItemResultJsonServiceImpl.java @@ -11,10 +11,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; +import java.util.*; /** * @author PanZhibao @@ -53,4 +50,9 @@ public void insert(List<MmItemResultJsonEntity> resultJsonList) { baseDao.insertBatch(resultJsonList); } + + @Override + public void cleanResultJson(Map<String, Date> tMap) { + baseDao.cleanResultJson(tMap); + } } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAlarmMessageServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAlarmMessageServiceImpl.java index 33790c6..f181254 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAlarmMessageServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmPredictAlarmMessageServiceImpl.java @@ -14,6 +14,7 @@ import java.util.Date; import java.util.List; +import java.util.Map; import java.util.UUID; /** @@ -71,4 +72,9 @@ public void delete(String id) { baseDao.deleteById(id); } + + @Override + public void cleanAlarmMessage(Map<String, Date> tMap) { + baseDao.cleanAlarmMessage(tMap); + } } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleRecordDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleRecordDao.java index 7655577..806fe22 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleRecordDao.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleRecordDao.java @@ -10,7 +10,9 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.Date; import java.util.List; +import java.util.Map; /** * @author PanZhibao @@ -31,4 +33,6 @@ } List<StScheduleRecordVO> getLastScheduleResult(@Param("scheduleCode") String scheduleCode, @Param("limit") Integer limit); + + void cleanScheduleRecord(Map<String, Date> tMap); } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleRecordDetailDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleRecordDetailDao.java index 8fc1694..1fe637e 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleRecordDetailDao.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleRecordDetailDao.java @@ -5,6 +5,9 @@ import com.iailab.module.model.mcs.sche.entity.StScheduleRecordDetailEntity; import org.apache.ibatis.annotations.Mapper; +import java.util.Date; +import java.util.Map; + /** * @author PanZhibao * @Description @@ -13,4 +16,5 @@ @TenantDS @Mapper public interface StScheduleRecordDetailDao extends BaseMapperX<StScheduleRecordDetailEntity> { + void cleanScheduleRecordDetail(Map<String, Date> tMap); } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleSuggestDao.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleSuggestDao.java index ea81414..fe62a48 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleSuggestDao.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/dao/StScheduleSuggestDao.java @@ -8,6 +8,9 @@ import com.iailab.module.model.mcs.sche.vo.StScheduleSuggestPageReqVO; import org.apache.ibatis.annotations.Mapper; +import java.util.Date; +import java.util.Map; + /** * @author PanZhibao * @Description @@ -23,4 +26,6 @@ .likeIfPresent(StScheduleSuggestEntity::getScheduleObj, reqVO.getScheduleObj()) .orderByDesc(StScheduleSuggestEntity::getCreateTime)); } + + void cleanScheduleSuggest(Map<String, Date> tMap); } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleRecordDetailService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleRecordDetailService.java index 2566752..7e3c092 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleRecordDetailService.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleRecordDetailService.java @@ -4,7 +4,9 @@ import com.iailab.module.model.mcs.sche.entity.StScheduleRecordDetailEntity; import com.iailab.module.model.mdk.vo.ScheduleResultVO; +import java.util.Date; import java.util.List; +import java.util.Map; /** * @author PanZhibao @@ -16,4 +18,6 @@ void create(String recordId, ScheduleResultVO resultVO); List<StScheduleRecordDetailEntity> getByRecordId(String recordId); + + void cleanScheduleRecordDetail(Map<String, Date> tMap); } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleRecordService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleRecordService.java index c6ab60a..370f80a 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleRecordService.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleRecordService.java @@ -9,7 +9,9 @@ import com.iailab.module.model.mdk.vo.ScheduleResultVO; import org.apache.ibatis.annotations.Param; +import java.util.Date; import java.util.List; +import java.util.Map; /** * @author PanZhibao @@ -25,4 +27,6 @@ void create(ScheduleResultVO resultVO); List<StScheduleRecordVO> getLastScheduleResult(String scheduleCode, Integer limit); + + void cleanScheduleRecord(Map<String, Date> tMap); } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleSuggestService.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleSuggestService.java index 489487f..1c7b436 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleSuggestService.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/StScheduleSuggestService.java @@ -6,7 +6,9 @@ import com.iailab.module.model.mcs.sche.vo.StScheduleSuggestPageReqVO; import com.iailab.module.model.mcs.sche.vo.StScheduleSuggestSaveReqVO; +import java.util.Date; import java.util.List; +import java.util.Map; /** * @author PanZhibao @@ -26,4 +28,6 @@ StScheduleSuggestEntity getInfo(String id); List<StScheduleSuggestEntity> getList(String scheduleObj, Integer limit); + + void cleanScheduleSuggest(Map<String, Date> tMap); } diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleRecordDetailServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleRecordDetailServiceImpl.java index 8f68a9f..4029cb9 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleRecordDetailServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleRecordDetailServiceImpl.java @@ -10,6 +10,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.UUID; @@ -49,4 +50,9 @@ queryWrapper.orderByAsc("result_key"); return baseDao.selectList(queryWrapper); } + + @Override + public void cleanScheduleRecordDetail(Map<String, Date> tMap) { + baseDao.cleanScheduleRecordDetail(tMap); + } } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleRecordServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleRecordServiceImpl.java index caa952d..07be020 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleRecordServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleRecordServiceImpl.java @@ -20,6 +20,7 @@ import java.util.Date; import java.util.List; +import java.util.Map; import java.util.UUID; /** @@ -67,4 +68,9 @@ public List<StScheduleRecordVO> getLastScheduleResult(String scheduleCode, Integer limit) { return baseDao.getLastScheduleResult(scheduleCode,limit); } + + @Override + public void cleanScheduleRecord(Map<String, Date> tMap) { + baseDao.cleanScheduleRecord(tMap); + } } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleSuggestServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleSuggestServiceImpl.java index e23aa21..b0276da 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleSuggestServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/sche/service/impl/StScheduleSuggestServiceImpl.java @@ -12,7 +12,9 @@ import com.iailab.module.model.mcs.sche.vo.StScheduleSuggestSaveReqVO; import org.springframework.stereotype.Service; +import java.util.Date; import java.util.List; +import java.util.Map; import java.util.UUID; /** @@ -62,4 +64,9 @@ .last("limit " + limit); return baseDao.selectList(queryWrapper); } + + @Override + public void cleanScheduleSuggest(Map<String, Date> tMap) { + baseDao.cleanScheduleSuggest(tMap); + } } \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/MmItemResultJsonDao.xml b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/MmItemResultJsonDao.xml new file mode 100644 index 0000000..3269ec7 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/MmItemResultJsonDao.xml @@ -0,0 +1,8 @@ +<?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="com.iailab.module.model.mcs.pre.dao.MmItemResultJsonDao"> + <delete id="cleanResultJson"> + delete from t_mm_item_result_json + where predicttime between #{startdate} and #{enddate} + </delete> +</mapper> \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/MmPredictAlarmMessageDao.xml b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/MmPredictAlarmMessageDao.xml new file mode 100644 index 0000000..adef635 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/MmPredictAlarmMessageDao.xml @@ -0,0 +1,8 @@ +<?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="com.iailab.module.model.mcs.pre.dao.MmPredictAlarmMessageDao"> + <delete id="cleanAlarmMessage"> + delete from t_mm_predict_alarm_message + where alarm_time between #{startdate} and #{enddate} + </delete> +</mapper> \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleRecordDao.xml b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleRecordDao.xml index 3e75434..69e222f 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleRecordDao.xml +++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleRecordDao.xml @@ -1,6 +1,10 @@ <?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="com.iailab.module.model.mcs.sche.dao.StScheduleRecordDao"> + <delete id="cleanScheduleRecord"> + delete from t_st_schedule_record + where schedule_time between #{startdate} and #{enddate} + </delete> <select id="getLastScheduleResult" resultType="com.iailab.module.model.api.mdk.dto.StScheduleRecordVO"> SELECT t2.* FROM t_st_schedule_scheme t1 LEFT JOIN t_st_schedule_record t2 on t1.id = t2.scheme_id WHERE t1.`code` = #{scheduleCode} AND result_code = "100" diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleRecordDetailDao.xml b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleRecordDetailDao.xml new file mode 100644 index 0000000..4eb8b1b --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleRecordDetailDao.xml @@ -0,0 +1,8 @@ +<?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="com.iailab.module.model.mcs.sche.dao.StScheduleRecordDetailDao"> + <delete id="cleanScheduleRecordDetail"> + delete from t_st_schedule_record_detail + where schedule_time between #{startdate} and #{enddate} + </delete> +</mapper> \ No newline at end of file diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleSuggestDao.xml b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleSuggestDao.xml new file mode 100644 index 0000000..c8607f2 --- /dev/null +++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/mapper/mcs/StScheduleSuggestDao.xml @@ -0,0 +1,8 @@ +<?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="com.iailab.module.model.mcs.sche.dao.StScheduleSuggestDao"> + <delete id="cleanScheduleSuggest"> + delete from t_st_schedule_suggest + where schedule_time between #{startdate} and #{enddate} + </delete> +</mapper> \ No newline at end of file -- Gitblit v1.9.3