定时任务设置配置状态默认值时,调整为存在定时任务才设置定时任务【此修改修复主表通过insert直接生效,定时任务将主表实体的状态又置为无效的BUG】;

修改daily和weekly的触发器开始时间,如果任务已经过时,设置从下一个周期开始。
This commit is contained in:
段冬梅
2019-04-09 15:29:03 +08:00
parent aa25c49a87
commit 3be1c1a625
2 changed files with 44 additions and 3 deletions

View File

@@ -161,10 +161,11 @@ public class ScheduleUpdateInterceptor extends BaseInterceptor{
//整理需要 insert 的 schedule_cfg 的数据
List<ScheduleCfg> scheduleList = Lists.newArrayList();
for(BaseCfg<?> baseCfg : cfgList) {
baseCfg.setIsValid(0);//设置默认值
baseCfg.setIsAudit(0);//设置默认值
ScheduleCfg scList = copyScheduleCfgFromBaseCfg(baseCfg, tableName);
if(scList!=null){
//TODO 定时任务设置默认为isValid=0 isAudit=0需要考虑允许用户新增isValid=1 isAudit=1的配置下发
scList.setIsValid(0);//设置默认值
scList.setIsAudit(0);//设置默认值
scheduleList.add(scList);
}
}

View File

@@ -315,6 +315,34 @@ public class ScheduleCfgJob implements Job {
Date invalidTime = DateBuilder.todayAt(invalidList.get(0), invalidList.get(1), invalidList.get(2));
CalendarIntervalScheduleBuilder intervalBuilder = null;
if("EVERYDAY".equalsIgnoreCase(dayOrWeek)) {
//开始时间+2分钟
Calendar validStartCal=Calendar.getInstance();
validStartCal.setTime(validStartTime);
validStartCal.add(Calendar.MINUTE, 2);
long validStartTimes=validStartCal.getTime().getTime();
//结束时间+2分钟
Calendar invalidCal=Calendar.getInstance();
invalidCal.setTime(invalidTime);
invalidCal.add(Calendar.MINUTE, 2);
long invalidTimes=validStartCal.getTime().getTime();
long currentTimes=new Date().getTime();
//开始时间设置为今天已过时,则将开始时间加上周期
if((currentTimes-validStartTimes) > 0) {
Calendar validStartCalNew=Calendar.getInstance();
validStartCalNew.setTime(validStartTime);
validStartCalNew.add(Calendar.DAY_OF_MONTH, interval);
validStartTime=validStartCalNew.getTime();
}
//结束时间设置为今天已过时,则将开始时间加上周期
if((currentTimes-invalidTimes) > 0) {
Calendar invalidCalNew=Calendar.getInstance();
invalidCalNew.setTime(invalidTime);
invalidCalNew.add(Calendar.DAY_OF_MONTH, interval);
invalidTime=invalidCalNew.getTime();
}
intervalBuilder = CalendarIntervalScheduleBuilder.calendarIntervalSchedule().withIntervalInDays(interval);
//valid
JobDataMap dataMap = new JobDataMap();
@@ -329,6 +357,7 @@ public class ScheduleCfgJob implements Job {
.startAt(validStartTime)
.build();
triList.add(validTri);
//invalid
dataMap = new JobDataMap();
dataMap.put("isValid", false);
@@ -478,14 +507,25 @@ public class ScheduleCfgJob implements Job {
/**
* 查找最近的 星期几 ,包括今天
* 查找最近的 星期几 ,包括今天(如果今天的时间点已过,从明天开始算)
* @param date
* @param w 周一开始 1 -7
* @return
*/
public static Date closestAfterWeek(Date date,int w) {
//设置calC为开始时间+2分钟判断calC时间是否已过如果小于当前时间则直接从明天开始算
Calendar calC = Calendar.getInstance();
calC.setTime(date);
calC.add(Calendar.MINUTE, 2);
long currentDate=new Date().getTime();//当前时间
long weekStartDate=calC.getTime().getTime();//周任务开始时间+2分钟
Calendar cal = Calendar.getInstance();
cal.setTime(date);
//如果开始时间已过期,则从明天开始算
if((currentDate-weekStartDate) > 0) {
cal.add(Calendar.DAY_OF_MONTH, 1);
}
int i = cal.get(Calendar.DAY_OF_WEEK);//周日开始 1-7
i = (i==1)? 7: i-1;//转换为 周一到 周日 1-7
cal.add(Calendar.DAY_OF_MONTH, (i>w)?(7-(i-w)) : (w-i));