支持自实现Quartz任务类

This commit is contained in:
AlanScipio
2024-02-20 16:47:32 +08:00
parent e4a49e6b1c
commit bba1c8465d
48 changed files with 4005 additions and 884 deletions

View File

@@ -0,0 +1,31 @@
package com.ruoyi.common.services;
import com.ruoyi.common.services.constants.JobLogStatus;
import com.ruoyi.common.services.domain.JobDataLog;
/**
* 定时任务数据日志服务接口
*
* @author Alan Scipio
* created on 2024/2/20
*/
public interface IJobDataLogService {
/**
* 添加日志
*/
void addLog(JobDataLog log);
default void addLog(JobLogStatus status, String logType, String message) {
JobDataLog log = new JobDataLog();
log.setStatus(status.getCode() + "");
log.setLogType(logType);
log.setMessage(message);
addLog(log);
}
default void addLog(JobLogStatus status, String message) {
addLog(status, null, message);
}
}

View File

@@ -0,0 +1,44 @@
package com.ruoyi.common.services;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.uuid.snowflake.SnowFlakeIdGenerator;
import com.ruoyi.common.services.domain.JobDataLog;
import com.ruoyi.common.services.mapper.JobDataLogMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
/**
* 定时任务数据日志服务接口
*
* @author Alan Scipio
* created on 2024/2/20
*/
@Service
public class JobDataLogServiceImpl implements IJobDataLogService {
@Resource
private JobDataLogMapper jobDataLogMapper;
@Override
public void addLog(JobDataLog log) {
if (StringUtils.isBlank(log.getMessage())) {
throw new IllegalArgumentException("message cannot be blank");
}
if (StringUtils.isBlank(log.getStatus())) {
throw new IllegalArgumentException("status cannot be blank");
}
if (log.getStatus().length() > 1) {
throw new IllegalArgumentException("status length must be 1");
}
if (log.getLogId() == null) {
log.setLogId(SnowFlakeIdGenerator.nextIdLong());
}
if (log.getJobClass() == null) {
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
StackTraceElement caller = stackTraceElements[2];
log.setJobClass(caller.getClassName());
log.setJobMethod(caller.getMethodName());
}
jobDataLogMapper.insertSelective(log);
}
}

View File

@@ -0,0 +1,24 @@
package com.ruoyi.common.services.constants;
import com.ruoyi.common.core.constant.IEnum;
import lombok.Getter;
/**
* @author Alan Scipio
* created on 2024/2/20
*/
@Getter
public enum JobLogStatus implements IEnum {
SUCCESS(0, "正常执行"),
ERROR(1, "异常");
private final int code;
private final String name;
JobLogStatus(int code, String name) {
this.code = code;
this.name = name;
}
}

View File

@@ -12,7 +12,7 @@ public enum SeqType implements IEnum {
UNIT_CD(1, "UNIT", "单位代码"),
GOODE_TYPE_CD(2, "GT", "商品类型代码"),
ITEM_TYPE_CD(2, "ITYPE", "商品类型代码"),
WHS_CD(3, "WHS", "仓库代码"),

View File

@@ -0,0 +1,166 @@
package com.ruoyi.common.services.domain;
import com.ruoyi.common.core.web.domain.BaseEntity;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* This class was generated by MyBatis Generator.
*
* <ul>
* <li> Table: sys_job_data_log </li>
* <li> Remarks: 定时任务数据日志表 </li>
* </ul>
*
* @author ryas
* created on 2024-02-20
*/
public class JobDataLog extends BaseEntity implements Serializable {
/**
* 任务数据日志ID
*/
private Long logId;
/**
* 执行开始时间
*/
private Date startTime;
/**
* 执行结束时间
*/
private Date endTime;
/**
* 日志内容
*/
private String message;
/**
* 日志类型
*/
private String logType;
/**
* 状态0正常执行 1异常
*/
private String status;
/**
* 任务执行类
*/
private String jobClass;
/**
* 任务执行方法名
*/
private String jobMethod;
@Serial
private static final long serialVersionUID = 1L;
public static JobDataLog of(Date startTime, Date endTime, String message, String logType, String status, String jobClass, String jobMethod) {
JobDataLog jobDataLog = new JobDataLog();
jobDataLog.setStartTime(startTime);
jobDataLog.setEndTime(endTime);
jobDataLog.setMessage(message);
jobDataLog.setLogType(logType);
jobDataLog.setStatus(status);
jobDataLog.setJobClass(jobClass);
jobDataLog.setJobMethod(jobMethod);
return jobDataLog;
}
public static JobDataLog of(Date startTime, Date endTime, String message, String logType, String status) {
return of(startTime, endTime, message, logType, status, null, null);
}
public static JobDataLog of(String message, String logType, String status) {
return of(null, null, message, logType, status);
}
public Long getLogId() {
return logId;
}
public void setLogId(Long logId) {
this.logId = logId;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message == null ? null : message.trim();
}
public String getLogType() {
return logType;
}
public void setLogType(String logType) {
this.logType = logType == null ? null : logType.trim();
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status == null ? null : status.trim();
}
public String getJobClass() {
return jobClass;
}
public void setJobClass(String jobClass) {
this.jobClass = jobClass == null ? null : jobClass.trim();
}
public String getJobMethod() {
return jobMethod;
}
public void setJobMethod(String jobMethod) {
this.jobMethod = jobMethod == null ? null : jobMethod.trim();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", logId=").append(logId);
sb.append(", startTime=").append(startTime);
sb.append(", endTime=").append(endTime);
sb.append(", message=").append(message);
sb.append(", logType=").append(logType);
sb.append(", status=").append(status);
sb.append(", jobClass=").append(jobClass);
sb.append(", jobMethod=").append(jobMethod);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}

View File

@@ -0,0 +1,108 @@
package com.ruoyi.common.services.mapper;
import org.mybatis.dynamic.sql.AliasableSqlTable;
import org.mybatis.dynamic.sql.SqlColumn;
import java.sql.JDBCType;
import java.util.Date;
public final class JobDataLogDynamicSqlSupport {
public static final JobDataLog jobDataLog = new JobDataLog();
/**
* 任务数据日志ID
*/
public static final SqlColumn<Long> logId = jobDataLog.logId;
/**
* 执行开始时间
*/
public static final SqlColumn<Date> startTime = jobDataLog.startTime;
/**
* 执行结束时间
*/
public static final SqlColumn<Date> endTime = jobDataLog.endTime;
/**
* 日志内容
*/
public static final SqlColumn<String> message = jobDataLog.message;
/**
* 日志类型
*/
public static final SqlColumn<String> logType = jobDataLog.logType;
/**
* 状态0正常执行 1异常
*/
public static final SqlColumn<String> status = jobDataLog.status;
/**
* 任务执行类
*/
public static final SqlColumn<String> jobClass = jobDataLog.jobClass;
/**
* 任务执行方法名
*/
public static final SqlColumn<String> jobMethod = jobDataLog.jobMethod;
/**
* 创建者
*/
public static final SqlColumn<String> createBy = jobDataLog.createBy;
/**
* 创建时间
*/
public static final SqlColumn<Date> createTime = jobDataLog.createTime;
/**
* 更新者
*/
public static final SqlColumn<String> updateBy = jobDataLog.updateBy;
/**
* 更新时间
*/
public static final SqlColumn<Date> updateTime = jobDataLog.updateTime;
/**
* 备注信息
*/
public static final SqlColumn<String> remark = jobDataLog.remark;
public static final class JobDataLog extends AliasableSqlTable<JobDataLog> {
public final SqlColumn<Long> logId = column("log_id", JDBCType.BIGINT);
public final SqlColumn<Date> startTime = column("start_time", JDBCType.TIMESTAMP);
public final SqlColumn<Date> endTime = column("end_time", JDBCType.TIMESTAMP);
public final SqlColumn<String> message = column("message", JDBCType.VARCHAR);
public final SqlColumn<String> logType = column("log_type", JDBCType.CHAR);
public final SqlColumn<String> status = column("status", JDBCType.CHAR);
public final SqlColumn<String> jobClass = column("job_class", JDBCType.VARCHAR);
public final SqlColumn<String> jobMethod = column("job_method", JDBCType.VARCHAR);
public final SqlColumn<String> createBy = column("create_by", JDBCType.VARCHAR);
public final SqlColumn<Date> createTime = column("create_time", JDBCType.TIMESTAMP);
public final SqlColumn<String> updateBy = column("update_by", JDBCType.VARCHAR);
public final SqlColumn<Date> updateTime = column("update_time", JDBCType.TIMESTAMP);
public final SqlColumn<String> remark = column("remark", JDBCType.VARCHAR);
public JobDataLog() {
super("sys_job_data_log", JobDataLog::new);
}
}
}

View File

@@ -0,0 +1,215 @@
package com.ruoyi.common.services.mapper;
import com.ruoyi.common.security.utils.SecurityUtilsExt;
import com.ruoyi.common.services.domain.JobDataLog;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.dynamic.sql.BasicColumn;
import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter;
import org.mybatis.dynamic.sql.select.CountDSLCompleter;
import org.mybatis.dynamic.sql.select.SelectDSLCompleter;
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
import org.mybatis.dynamic.sql.update.UpdateDSL;
import org.mybatis.dynamic.sql.update.UpdateDSLCompleter;
import org.mybatis.dynamic.sql.update.UpdateModel;
import org.mybatis.dynamic.sql.util.SqlProviderAdapter;
import org.mybatis.dynamic.sql.util.mybatis3.*;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import static com.ruoyi.common.services.mapper.JobDataLogDynamicSqlSupport.*;
import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo;
@Mapper
public interface JobDataLogMapper extends CommonCountMapper, CommonDeleteMapper, CommonInsertMapper<JobDataLog>, CommonUpdateMapper {
BasicColumn[] selectList = BasicColumn.columnList(logId, startTime, endTime, message, logType, status, jobClass, jobMethod, createBy, createTime, updateBy, updateTime, remark);
@SelectProvider(type=SqlProviderAdapter.class, method="select")
@Results(id="JobDataLogResult", value = {
@Result(column="log_id", property="logId", jdbcType=JdbcType.BIGINT, id=true),
@Result(column="start_time", property="startTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="end_time", property="endTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="message", property="message", jdbcType=JdbcType.VARCHAR),
@Result(column="log_type", property="logType", jdbcType=JdbcType.CHAR),
@Result(column="status", property="status", jdbcType=JdbcType.CHAR),
@Result(column="job_class", property="jobClass", jdbcType=JdbcType.VARCHAR),
@Result(column="job_method", property="jobMethod", jdbcType=JdbcType.VARCHAR),
@Result(column="create_by", property="createBy", jdbcType=JdbcType.VARCHAR),
@Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="update_by", property="updateBy", jdbcType=JdbcType.VARCHAR),
@Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="remark", property="remark", jdbcType=JdbcType.VARCHAR)
})
List<JobDataLog> selectMany(SelectStatementProvider selectStatement);
@SelectProvider(type=SqlProviderAdapter.class, method="select")
@ResultMap("JobDataLogResult")
Optional<JobDataLog> selectOne(SelectStatementProvider selectStatement);
default long count(CountDSLCompleter completer) {
return MyBatis3Utils.countFrom(this::count, jobDataLog, completer);
}
default int delete(DeleteDSLCompleter completer) {
return MyBatis3Utils.deleteFrom(this::delete, jobDataLog, completer);
}
default int deleteByPrimaryKey(Long logId_) {
return delete(c ->
c.where(logId, isEqualTo(logId_))
);
}
default int insert(JobDataLog row) {
row.setCommonForInsert(SecurityUtilsExt.getUserIdStr());
return MyBatis3Utils.insert(this::insert, row, jobDataLog, c ->
c.map(logId).toProperty("logId")
.map(startTime).toProperty("startTime")
.map(endTime).toProperty("endTime")
.map(message).toProperty("message")
.map(logType).toProperty("logType")
.map(status).toProperty("status")
.map(jobClass).toProperty("jobClass")
.map(jobMethod).toProperty("jobMethod")
.map(createBy).toProperty("createBy")
.map(createTime).toProperty("createTime")
.map(updateBy).toProperty("updateBy")
.map(updateTime).toProperty("updateTime")
.map(remark).toProperty("remark")
);
}
default int insertMultiple(Collection<JobDataLog> records) {
for (JobDataLog row : records) {
row.setCommonForInsert(SecurityUtilsExt.getUserIdStr());
}
return MyBatis3Utils.insertMultiple(this::insertMultiple, records, jobDataLog, c ->
c.map(logId).toProperty("logId")
.map(startTime).toProperty("startTime")
.map(endTime).toProperty("endTime")
.map(message).toProperty("message")
.map(logType).toProperty("logType")
.map(status).toProperty("status")
.map(jobClass).toProperty("jobClass")
.map(jobMethod).toProperty("jobMethod")
.map(createBy).toProperty("createBy")
.map(createTime).toProperty("createTime")
.map(updateBy).toProperty("updateBy")
.map(updateTime).toProperty("updateTime")
.map(remark).toProperty("remark")
);
}
default int insertSelective(JobDataLog row) {
row.setCommonForInsert(SecurityUtilsExt.getUserIdStr());
return MyBatis3Utils.insert(this::insert, row, jobDataLog, c ->
c.map(logId).toPropertyWhenPresent("logId", row::getLogId)
.map(startTime).toPropertyWhenPresent("startTime", row::getStartTime)
.map(endTime).toPropertyWhenPresent("endTime", row::getEndTime)
.map(message).toPropertyWhenPresent("message", row::getMessage)
.map(logType).toPropertyWhenPresent("logType", row::getLogType)
.map(status).toPropertyWhenPresent("status", row::getStatus)
.map(jobClass).toPropertyWhenPresent("jobClass", row::getJobClass)
.map(jobMethod).toPropertyWhenPresent("jobMethod", row::getJobMethod)
.map(createBy).toPropertyWhenPresent("createBy", row::getCreateBy)
.map(createTime).toPropertyWhenPresent("createTime", row::getCreateTime)
.map(updateBy).toPropertyWhenPresent("updateBy", row::getUpdateBy)
.map(updateTime).toPropertyWhenPresent("updateTime", row::getUpdateTime)
.map(remark).toPropertyWhenPresent("remark", row::getRemark)
);
}
default Optional<JobDataLog> selectOne(SelectDSLCompleter completer) {
return MyBatis3Utils.selectOne(this::selectOne, selectList, jobDataLog, completer);
}
default List<JobDataLog> select(SelectDSLCompleter completer) {
return MyBatis3Utils.selectList(this::selectMany, selectList, jobDataLog, completer);
}
default List<JobDataLog> selectDistinct(SelectDSLCompleter completer) {
return MyBatis3Utils.selectDistinct(this::selectMany, selectList, jobDataLog, completer);
}
default Optional<JobDataLog> selectByPrimaryKey(Long logId_) {
return selectOne(c ->
c.where(logId, isEqualTo(logId_))
);
}
default int update(UpdateDSLCompleter completer) {
return MyBatis3Utils.update(this::update, jobDataLog, completer);
}
static UpdateDSL<UpdateModel> updateAllColumns(JobDataLog row, UpdateDSL<UpdateModel> dsl) {
return dsl.set(logId).equalTo(row::getLogId)
.set(startTime).equalTo(row::getStartTime)
.set(endTime).equalTo(row::getEndTime)
.set(message).equalTo(row::getMessage)
.set(logType).equalTo(row::getLogType)
.set(status).equalTo(row::getStatus)
.set(jobClass).equalTo(row::getJobClass)
.set(jobMethod).equalTo(row::getJobMethod)
.set(createBy).equalTo(row::getCreateBy)
.set(createTime).equalTo(row::getCreateTime)
.set(updateBy).equalTo(row::getUpdateBy)
.set(updateTime).equalTo(row::getUpdateTime)
.set(remark).equalTo(row::getRemark);
}
static UpdateDSL<UpdateModel> updateSelectiveColumns(JobDataLog row, UpdateDSL<UpdateModel> dsl) {
row.setCommonForUpdate(SecurityUtilsExt.getUserIdStr());
return dsl.set(logId).equalToWhenPresent(row::getLogId)
.set(startTime).equalToWhenPresent(row::getStartTime)
.set(endTime).equalToWhenPresent(row::getEndTime)
.set(message).equalToWhenPresent(row::getMessage)
.set(logType).equalToWhenPresent(row::getLogType)
.set(status).equalToWhenPresent(row::getStatus)
.set(jobClass).equalToWhenPresent(row::getJobClass)
.set(jobMethod).equalToWhenPresent(row::getJobMethod)
.set(createBy).equalToWhenPresent(row::getCreateBy)
.set(createTime).equalToWhenPresent(row::getCreateTime)
.set(updateBy).equalToWhenPresent(row::getUpdateBy)
.set(updateTime).equalToWhenPresent(row::getUpdateTime)
.set(remark).equalToWhenPresent(row::getRemark);
}
default int updateByPrimaryKey(JobDataLog row) {
return update(c ->
c.set(startTime).equalTo(row::getStartTime)
.set(endTime).equalTo(row::getEndTime)
.set(message).equalTo(row::getMessage)
.set(logType).equalTo(row::getLogType)
.set(status).equalTo(row::getStatus)
.set(jobClass).equalTo(row::getJobClass)
.set(jobMethod).equalTo(row::getJobMethod)
.set(createBy).equalTo(row::getCreateBy)
.set(createTime).equalTo(row::getCreateTime)
.set(updateBy).equalTo(row::getUpdateBy)
.set(updateTime).equalTo(row::getUpdateTime)
.set(remark).equalTo(row::getRemark)
.where(logId, isEqualTo(row::getLogId))
);
}
default int updateByPrimaryKeySelective(JobDataLog row) {
row.setCommonForUpdate(SecurityUtilsExt.getUserIdStr());
return update(c ->
c.set(startTime).equalToWhenPresent(row::getStartTime)
.set(endTime).equalToWhenPresent(row::getEndTime)
.set(message).equalToWhenPresent(row::getMessage)
.set(logType).equalToWhenPresent(row::getLogType)
.set(status).equalToWhenPresent(row::getStatus)
.set(jobClass).equalToWhenPresent(row::getJobClass)
.set(jobMethod).equalToWhenPresent(row::getJobMethod)
.set(createBy).equalToWhenPresent(row::getCreateBy)
.set(createTime).equalToWhenPresent(row::getCreateTime)
.set(updateBy).equalToWhenPresent(row::getUpdateBy)
.set(updateTime).equalToWhenPresent(row::getUpdateTime)
.set(remark).equalToWhenPresent(row::getRemark)
.where(logId, isEqualTo(row::getLogId))
);
}
}