package com.chinaentropy.intelligent.common.utils.cron;
public class CronUtil {
public static String createCronExpression(TaskScheduleModel taskScheduleModel){
StringBuffer cronExp = new StringBuffer("");
if(null == taskScheduleModel.getJobType()) {
System.out.println("执行周期未配置" );
}
if (null != taskScheduleModel.getSecond()){
if (taskScheduleModel.getJobType().intValue() == 0) {
cronExp.append("0/").append(taskScheduleModel.getSecond());
cronExp.append(" ");
cronExp.append("* ");
cronExp.append("* ");
cronExp.append("* ");
cronExp.append("* ");
cronExp.append("?");
}
}
if (null != taskScheduleModel.getMinute()){
if (taskScheduleModel.getJobType().intValue() == 4) {
cronExp.append("0 ");
cronExp.append("0/").append(taskScheduleModel.getMinute());
cronExp.append(" ");
cronExp.append("* ");
cronExp.append("* ");
cronExp.append("* ");
cronExp.append("?");
}
}
if (null != taskScheduleModel.getHour()){
if (taskScheduleModel.getJobType().intValue() == 5) {
cronExp.append("0 ");
cronExp.append("0 ");
cronExp.append("0/").append(taskScheduleModel.getHour());
cronExp.append(" ");
cronExp.append("* ");
cronExp.append("* ");
cronExp.append("?");
}
}
if (null != taskScheduleModel.getSecond()
&& null != taskScheduleModel.getMinute()
&& null != taskScheduleModel.getHour()
&& taskScheduleModel.getJobType().intValue() != 0
&& taskScheduleModel.getJobType().intValue() != 4
&& taskScheduleModel.getJobType().intValue() != 5) {
cronExp.append(taskScheduleModel.getSecond()).append(" ");
cronExp.append(taskScheduleModel.getMinute()).append(" ");
cronExp.append(taskScheduleModel.getHour()).append(" ");
if(taskScheduleModel.getJobType().intValue() == 1){
cronExp.append("* ");
cronExp.append("* ");
cronExp.append("?");
}
else if(taskScheduleModel.getJobType().intValue() == 3){
cronExp.append("? ");
cronExp.append("* ");
Integer[] weeks = taskScheduleModel.getDayOfWeeks();
for(int i = 0; i < weeks.length; i++){
if(i == 0){
cronExp.append(weeks[i]);
} else{
cronExp.append(",").append(weeks[i]);
}
}
}
else if(taskScheduleModel.getJobType().intValue() == 2){
Integer[] days = taskScheduleModel.getDayOfMonths();
for(int i = 0; i < days.length; i++){
if(i == 0){
cronExp.append(days[i]);
} else{
cronExp.append(",").append(days[i]);
}
}
cronExp.append(" * ");
cronExp.append("?");
}
}
else {
System.out.println("时或分或秒参数未配置" );
}
return cronExp.toString();
}
public static String createDescription(TaskScheduleModel taskScheduleModel){
StringBuffer description = new StringBuffer("");
if (null != taskScheduleModel.getSecond()
&& null != taskScheduleModel.getMinute()
&& null != taskScheduleModel.getHour()) {
if(taskScheduleModel.getJobType().intValue() == 1){
description.append("每天");
description.append(taskScheduleModel.getHour()).append("时");
description.append(taskScheduleModel.getMinute()).append("分");
description.append(taskScheduleModel.getSecond()).append("秒");
description.append("执行");
}
else if(taskScheduleModel.getJobType().intValue() == 3){
if(taskScheduleModel.getDayOfWeeks() != null && taskScheduleModel.getDayOfWeeks().length > 0) {
String days = "";
for(int i : taskScheduleModel.getDayOfWeeks()) {
days += "周" + i;
}
description.append("每周的").append(days).append(" ");
}
if (null != taskScheduleModel.getSecond()
&& null != taskScheduleModel.getMinute()
&& null != taskScheduleModel.getHour()) {
description.append(",");
description.append(taskScheduleModel.getHour()).append("时");
description.append(taskScheduleModel.getMinute()).append("分");
description.append(taskScheduleModel.getSecond()).append("秒");
}
description.append("执行");
}
else if(taskScheduleModel.getJobType().intValue() == 2){
if(taskScheduleModel.getDayOfMonths() != null && taskScheduleModel.getDayOfMonths().length > 0) {
String days = "";
for(int i : taskScheduleModel.getDayOfMonths()) {
days += i + "号";
}
description.append("每月的").append(days).append(" ");
}
description.append(taskScheduleModel.getHour()).append("时");
description.append(taskScheduleModel.getMinute()).append("分");
description.append(taskScheduleModel.getSecond()).append("秒");
description.append("执行");
}
}
return description.toString();
}
public static void main(String[] args) {
TaskScheduleModel taskScheduleModel = new TaskScheduleModel();
taskScheduleModel.setJobType(0);
taskScheduleModel.setSecond(30);
String cronExp = createCronExpression(taskScheduleModel);
System.out.println(cronExp);
taskScheduleModel.setJobType(4);
taskScheduleModel.setMinute(8);
String cronExpp = createCronExpression(taskScheduleModel);
System.out.println(cronExpp);
taskScheduleModel.setJobType(5);
taskScheduleModel.setHour(2);
String cronExppp = createCronExpression(taskScheduleModel);
System.out.println(cronExppp);
taskScheduleModel.setJobType(1);
Integer hour = 12;
Integer minute = 12;
Integer second = 12;
taskScheduleModel.setHour(hour);
taskScheduleModel.setMinute(minute);
taskScheduleModel.setSecond(second);
String cropExp = createCronExpression(taskScheduleModel);
System.out.println(cropExp + ":" + createDescription(taskScheduleModel));
taskScheduleModel.setJobType(3);
Integer[] dayOfWeeks = new Integer[3];
dayOfWeeks[0] = 1;
dayOfWeeks[1] = 2;
dayOfWeeks[2] = 3;
taskScheduleModel.setDayOfWeeks(dayOfWeeks);
cropExp = createCronExpression(taskScheduleModel);
System.out.println(cropExp + ":" + createDescription(taskScheduleModel));
taskScheduleModel.setJobType(2);
Integer[] dayOfMonths = new Integer[3];
dayOfMonths[0] = 1;
dayOfMonths[1] = 21;
dayOfMonths[2] = 13;
taskScheduleModel.setDayOfMonths(dayOfMonths);
cropExp = createCronExpression(taskScheduleModel);
System.out.println(cropExp + ":" + createDescription(taskScheduleModel));
}
}
package com.chinaentropy.intelligent.common.utils.cron;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
@ApiModel(description = "cron表达体")
@Getter
@Setter
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
public class TaskScheduleModel extends Model<TaskScheduleModel> {
@ApiModelProperty(value = "必填 所选作业类型(1=>每天,2=>每月,3=>每周, 0-> 每隔几秒,4-> 每隔几分钟,5 -> 每隔几小时")
Integer jobType;
@ApiModelProperty(value = "一周的哪几天")
Integer[] dayOfWeeks;
@ApiModelProperty(value = "一个月的哪几天")
Integer[] dayOfMonths;
@ApiModelProperty(value = "必填 秒")
Integer second;
@ApiModelProperty(value = "必填 分")
Integer minute;
@ApiModelProperty(value = "必填 时")
Integer hour;
}