package com.south.utils;
import com.south.data.vo.TaskScheduleModel;
public class CronUtil {
public static String createCronExpression(TaskScheduleModel taskScheduleModel){
StringBuffer cronExp = new StringBuffer("");
if(null == taskScheduleModel.getJobType()) {
System.out.println("執行週期未配置" );
}
if (null != taskScheduleModel.getSecond()
&& null == taskScheduleModel.getMinute()
&& null == taskScheduleModel.getHour()){
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.getSecond()
&& null != taskScheduleModel.getMinute()
&& null == taskScheduleModel.getHour()){
if (taskScheduleModel.getJobType().intValue() == 4) {
cronExp.append("* ");
cronExp.append("0/").append(taskScheduleModel.getMinute());
cronExp.append(" ");
cronExp.append("* ");
cronExp.append("* ");
cronExp.append("* ");
cronExp.append("?");
}
}
if (null != taskScheduleModel.getSecond()
&& null != taskScheduleModel.getMinute()
&& null != taskScheduleModel.getHour()) {
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(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.south.data.vo;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.ApiModel;
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> {
Integer jobType;
Integer[] dayOfWeeks;
Integer[] dayOfMonths;
Integer second;
Integer minute;
Integer hour;
}