定时任务参数配置化
This commit is contained in:
parent
0cbfc146bc
commit
43c803080f
@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>cn.axzo.framework</groupId>
|
||||
<artifactId>common-common</artifactId>
|
||||
<version>1.0.2</version>
|
||||
<version>1.0.3</version>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
@ -18,6 +18,9 @@
|
||||
<slf4j-api.version>1.7.5</slf4j-api.version>
|
||||
<lombok.version>1.18.18</lombok.version>
|
||||
<fastjson.version>1.2.47</fastjson.version>
|
||||
<joda-time.version>2.10.6</joda-time.version>
|
||||
<hutool-all.version>5.5.7</hutool-all.version>
|
||||
<jackson-databind.version>2.10.2</jackson-databind.version>
|
||||
<apm-toolkit-trace.version>6.5.0</apm-toolkit-trace.version>
|
||||
<javax.servlet-api.version>3.0.1</javax.servlet-api.version>
|
||||
<spring-context.version>4.3.19.RELEASE</spring-context.version>
|
||||
@ -56,18 +59,35 @@
|
||||
<version>${hibernate.validator.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<version>${hutool-all.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
<version>${spring-context.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>joda-time</groupId>
|
||||
<artifactId>joda-time</artifactId>
|
||||
<version>${joda-time.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<version>${javax.servlet-api.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
<version>${jackson-databind.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-webmvc</artifactId>
|
||||
|
||||
@ -22,4 +22,16 @@ public class Constants {
|
||||
/** 心跳 URI */
|
||||
public static final String HEARTBEAT_URI = "/checkDeath";
|
||||
|
||||
/** 秒 */
|
||||
public static final String SECONDS = "SECONDS";
|
||||
|
||||
/** 分钟 */
|
||||
public static final String MINUTES = "MINUTES";
|
||||
|
||||
/** 小时 */
|
||||
public static final String HOURS = "HOURS";
|
||||
|
||||
/** 天 */
|
||||
public static final String DAYS = "DAYS";
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
package cn.azxo.framework.common.model;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*
|
||||
* @author zhaoyong_sh
|
||||
* @see JobPageRequest
|
||||
* @since 2021-05-19 16:11
|
||||
*/
|
||||
@Data
|
||||
public class JobPageRequest {
|
||||
|
||||
private String referenceNo;
|
||||
|
||||
private int pageSize;
|
||||
|
||||
private Date startTime;
|
||||
|
||||
private Date endTime;
|
||||
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
package cn.azxo.framework.common.model;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 定时任务参数模型
|
||||
*
|
||||
* @author zhaoyong_sh
|
||||
* @see JobParamModel
|
||||
* @since 2021-05-19 15:57
|
||||
*/
|
||||
@Data
|
||||
public class JobParamModel {
|
||||
|
||||
/** 引用号,订单领域可以理解为订单号 */
|
||||
private String referenceNo;
|
||||
|
||||
/** 基准时间(结束时间) yyyy-MM-dd HH:mm:ss */
|
||||
private String basicTime;
|
||||
|
||||
/** 向前偏移量 */
|
||||
private Integer forwardOffset;
|
||||
|
||||
/** 向前偏移单位 */
|
||||
private String forwardOffsetUnit;
|
||||
|
||||
/** 向后偏移量 */
|
||||
private Integer backwardOffset;
|
||||
|
||||
/** 向后偏移单位 */
|
||||
private String backwardOffsetUnit;
|
||||
|
||||
/** 是否为全闭区间时间段 */
|
||||
private boolean wholeClosedRange;
|
||||
|
||||
/** 分页数 */
|
||||
private int pageSize = 500;
|
||||
|
||||
}
|
||||
@ -0,0 +1,142 @@
|
||||
package cn.azxo.framework.common.service;
|
||||
|
||||
import cn.azxo.framework.common.constatns.Constants;
|
||||
import cn.azxo.framework.common.model.JobPageRequest;
|
||||
import cn.azxo.framework.common.model.JobParamModel;
|
||||
import cn.azxo.framework.common.utils.DateUtils;
|
||||
import cn.azxo.framework.common.utils.StringUtils;
|
||||
import cn.hutool.core.date.DateField;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 定时任务参数解析器
|
||||
*
|
||||
* @author zhaoyong_sh
|
||||
* @see JobParamResolver
|
||||
* @since 2021-05-19 16:29
|
||||
*/
|
||||
public class JobParamResolver {
|
||||
|
||||
private final static ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
private static final Map<String, DateField> dateFieldMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
dateFieldMap.put(Constants.SECONDS, DateField.SECOND);
|
||||
dateFieldMap.put(Constants.MINUTES, DateField.MINUTE);
|
||||
dateFieldMap.put(Constants.HOURS, DateField.HOUR_OF_DAY);
|
||||
dateFieldMap.put(Constants.DAYS, DateField.DAY_OF_YEAR);
|
||||
|
||||
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||
}
|
||||
|
||||
public JobPageRequest resolver(String param) {
|
||||
JobParamModel paramModel = getJobParamModel(param);
|
||||
JobPageRequest request = new JobPageRequest();
|
||||
if(StringUtils.isNotBlank(paramModel.getReferenceNo())){
|
||||
request.setReferenceNo(paramModel.getReferenceNo());
|
||||
return request;
|
||||
}
|
||||
// 获取基准时间
|
||||
Date basicTime = getBasicTime(paramModel);
|
||||
|
||||
// 获取开始时间
|
||||
Date startTime = getStartTime(basicTime, paramModel);
|
||||
|
||||
// 获取结束时间
|
||||
Date endTime = getEndTime(basicTime, paramModel);
|
||||
|
||||
// 设置开始与结束时间
|
||||
if(paramModel.isWholeClosedRange()) {
|
||||
request.setStartTime(DateUtil.beginOfDay(startTime));
|
||||
request.setEndTime(DateUtil.endOfDay(endTime));
|
||||
} else {
|
||||
request.setStartTime(startTime);
|
||||
request.setEndTime(endTime);
|
||||
}
|
||||
|
||||
// 设置查询页大小
|
||||
request.setPageSize(paramModel.getPageSize());
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
private JobParamModel getJobParamModel(String param){
|
||||
if(StringUtils.isBlank(param)){
|
||||
return new JobParamModel();
|
||||
}
|
||||
try {
|
||||
return objectMapper.readValue(param, JobParamModel.class);
|
||||
} catch (Exception e) {
|
||||
return new JobParamModel();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取基准时间
|
||||
* @param paramModel
|
||||
* @return
|
||||
*/
|
||||
private Date getBasicTime(JobParamModel paramModel) {
|
||||
String basicTime = paramModel.getBasicTime();
|
||||
if(StringUtils.isBlank(basicTime)) {
|
||||
return new Date();
|
||||
}
|
||||
try {
|
||||
return DateUtils.parseY14S(paramModel.getBasicTime());
|
||||
} catch (Exception e) {
|
||||
return new Date();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取开始时间
|
||||
* @param basicTime
|
||||
* @param paramModel
|
||||
* @return
|
||||
*/
|
||||
private Date getStartTime(Date basicTime, JobParamModel paramModel) {
|
||||
Date oneDayBefore = DateUtils.plusHour(basicTime, -24);
|
||||
Integer forwardOffset = paramModel.getForwardOffset();
|
||||
if(forwardOffset == null) {
|
||||
return oneDayBefore;
|
||||
}
|
||||
String forwardOffsetUnit = paramModel.getForwardOffsetUnit();
|
||||
DateField dateField = dateFieldMap.get(forwardOffsetUnit);
|
||||
if(dateField == null) {
|
||||
return oneDayBefore;
|
||||
}
|
||||
return DateUtil.offset(basicTime, dateField, -forwardOffset);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取结束时间
|
||||
* @param basicTime
|
||||
* @param paramModel
|
||||
* @return
|
||||
*/
|
||||
private Date getEndTime(Date basicTime, JobParamModel paramModel) {
|
||||
Integer backwardOffset = paramModel.getBackwardOffset();
|
||||
if(backwardOffset == null) {
|
||||
return basicTime;
|
||||
}
|
||||
String backwardOffsetUnit = paramModel.getBackwardOffsetUnit();
|
||||
DateField dateField = dateFieldMap.get(backwardOffsetUnit);
|
||||
if(dateField == null) {
|
||||
return basicTime;
|
||||
}
|
||||
return DateUtil.offset(basicTime, dateField, backwardOffset);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,57 @@
|
||||
package cn.azxo.framework.common.utils;
|
||||
|
||||
import org.joda.time.DateTime;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 日期处理类
|
||||
*
|
||||
* @author zhaoyong_sh
|
||||
* @see DateUtils
|
||||
* @since 2021-04-01 14:20
|
||||
*/
|
||||
public abstract class DateUtils {
|
||||
|
||||
public static final String STANDARD_TIME = "yyyy-MM-dd HH:mm:ss";
|
||||
|
||||
/**
|
||||
* 当前时间添加小时
|
||||
* @param hour
|
||||
* @return
|
||||
*/
|
||||
public static Date plusHour(int hour) {
|
||||
DateTime dateTime = DateTime.now();
|
||||
DateTime afterPlus = dateTime.plusHours(hour);
|
||||
return afterPlus.toDate();
|
||||
}
|
||||
|
||||
/**
|
||||
* 指定时间添加小时
|
||||
* @param date
|
||||
* @param hour
|
||||
* @return
|
||||
*/
|
||||
public static Date plusHour(Date date, int hour) {
|
||||
DateTime dateTime = new DateTime(date);
|
||||
DateTime afterPlus = dateTime.plusHours(hour);
|
||||
return afterPlus.toDate();
|
||||
}
|
||||
|
||||
public static Date parseY14S(String pattern){
|
||||
SimpleDateFormat sdf = new SimpleDateFormat(STANDARD_TIME);
|
||||
try {
|
||||
return sdf.parse(pattern);
|
||||
} catch (ParseException e) {
|
||||
throw new RuntimeException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public static String formatY14S(Date date) {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat(STANDARD_TIME);
|
||||
return sdf.format(date);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user