|
|
|
@ -71,7 +71,7 @@ public class JobMainTask { |
|
|
|
private String BIG_FILE_POINT = "BIG_FILE_POINT"; |
|
|
|
private String API_CONTROL_PRESET = "/api/v1/control/preset"; |
|
|
|
|
|
|
|
private static Map<String, Integer> execRecordCounterMap = new HashMap<>(); |
|
|
|
private static int execRecordCounter = 0; |
|
|
|
|
|
|
|
@Value("${liveSIPB.url}") |
|
|
|
private String liveIVS_URL; |
|
|
|
@ -164,7 +164,7 @@ public class JobMainTask { |
|
|
|
week = intervalExecuteTime[i]; |
|
|
|
time = cycleExecuteTimes[i].replaceAll(StringUtils.COLON, StringUtils.EMPTY); |
|
|
|
if (day == Integer.parseInt(week) && task.getCycleExecuteTime() != null) { |
|
|
|
// redisService.setCacheObject(RedisConst.TASK_PATROL_ID_EX + task.getDevNo() + "_" + task.getTaskCode() + "_" + sdf.format(d) + time, task); |
|
|
|
redisService.setCacheObject(RedisConst.TASK_PATROL_ID_EX + task.getDevNo() + "_" + task.getTaskCode() + "_" + sdf.format(d) + time, task); |
|
|
|
} |
|
|
|
} |
|
|
|
} else if (StringUtils.isNotEmpty(task.getCycleWeek())) { |
|
|
|
@ -174,7 +174,7 @@ public class JobMainTask { |
|
|
|
week = intervalExecuteTime[i]; |
|
|
|
time = cycleExecuteTimes[i].replaceAll(StringUtils.COLON, StringUtils.EMPTY); |
|
|
|
if (currentWeek.equals(week)) { |
|
|
|
// redisService.setCacheObject(RedisConst.TASK_PATROL_ID_EX + task.getDevNo() + "_" + task.getTaskCode() + "_" + sdf.format(d) + time, task); |
|
|
|
redisService.setCacheObject(RedisConst.TASK_PATROL_ID_EX + task.getDevNo() + "_" + task.getTaskCode() + "_" + sdf.format(d) + time, task); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -188,7 +188,7 @@ public class JobMainTask { |
|
|
|
} |
|
|
|
|
|
|
|
time = hour + minute + cycleExecuteTime[2]; |
|
|
|
// redisService.setCacheObject(RedisConst.TASK_PATROL_ID_EX + task.getDevNo() + "_" + task.getTaskCode() + "_" + sdf.format(d) + time, task); |
|
|
|
redisService.setCacheObject(RedisConst.TASK_PATROL_ID_EX + task.getDevNo() + "_" + task.getTaskCode() + "_" + sdf.format(d) + time, task); |
|
|
|
} |
|
|
|
} else if ("2".equals(task.getIntervalType())) { |
|
|
|
for (j = 0; j < task.getIntervalNumber(); ++j) { |
|
|
|
@ -196,7 +196,7 @@ public class JobMainTask { |
|
|
|
intervalExecuteTime[0] = String.valueOf(Integer.parseInt(intervalExecuteTime[0]) + 1); |
|
|
|
} |
|
|
|
|
|
|
|
// redisService.setCacheObject(RedisConst.TASK_PATROL_ID_EX + task.getDevNo() + "_" + task.getTaskCode() + "_" + sdf.format(d) + time, task); |
|
|
|
redisService.setCacheObject(RedisConst.TASK_PATROL_ID_EX + task.getDevNo() + "_" + task.getTaskCode() + "_" + sdf.format(d) + time, task); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -893,37 +893,37 @@ public class JobMainTask { |
|
|
|
// return value; |
|
|
|
// } |
|
|
|
|
|
|
|
private void resetTaskTimerClock(String taskPatrolId) { |
|
|
|
redisService.setCacheObjectOfTask(RedisConst.TASK_TIMER_CLOCK, taskPatrolId, System.currentTimeMillis()); |
|
|
|
private void resetTaskTimerClock() { |
|
|
|
redisService.setCacheObject(RedisConst.TASK_TIMER_CLOCK, System.currentTimeMillis()); |
|
|
|
} |
|
|
|
|
|
|
|
private void resetExecRecordCounter(String taskPatrolId) { |
|
|
|
execRecordCounterMap.put(taskPatrolId, 0); |
|
|
|
private void resetExecRecordCounter() { |
|
|
|
execRecordCounter = 0; |
|
|
|
} |
|
|
|
|
|
|
|
synchronized private void taskStartInitialize(String taskPatrolId) { |
|
|
|
resetTaskTimerClock(taskPatrolId); |
|
|
|
resetExecRecordCounter(taskPatrolId); |
|
|
|
synchronized private void taskStartInitialize() { |
|
|
|
resetTaskTimerClock(); |
|
|
|
resetExecRecordCounter(); |
|
|
|
} |
|
|
|
|
|
|
|
synchronized private void resetRecordCounter(String taskPatrolId) { |
|
|
|
resetExecRecordCounter(taskPatrolId); |
|
|
|
redisService.setCacheObjectOfTask(RedisConst.TASK_RECORD_CNT, taskPatrolId, 0); |
|
|
|
synchronized private void resetRecordCounter() { |
|
|
|
resetExecRecordCounter(); |
|
|
|
redisService.setCacheObject(RedisConst.TASK_RECORD_CNT, 0); |
|
|
|
} |
|
|
|
|
|
|
|
synchronized private void resetRedisCurrentCode(String taskPatrolId) { |
|
|
|
final String taskCode = redisService.getCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskPatrolId); |
|
|
|
synchronized private void resetRedisCurrentCode() { |
|
|
|
final String taskCode = redisService.getCacheObject(RedisConst.TASK_CURRENT_CODE); |
|
|
|
if (StringUtils.isNotEmpty(taskCode)) { |
|
|
|
redisService.deleteObject(taskCode); |
|
|
|
} |
|
|
|
redisService.deleteObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskPatrolId); |
|
|
|
redisService.deleteObject(RedisConst.TASK_CURRENT_CODE); |
|
|
|
} |
|
|
|
|
|
|
|
synchronized private void calcExecCostTime(final String oldPatrolId) { |
|
|
|
Long startTime = redisService.getCacheObjectOfTask(RedisConst.TASK_TIMER_CLOCK, oldPatrolId); |
|
|
|
Long startTime = redisService.getCacheObject(RedisConst.TASK_TIMER_CLOCK); |
|
|
|
if (startTime != null) { |
|
|
|
log.info(Color.MAGENTA + "[JOB] TASK: [{}], COST: [{} ms]" + Color.END, oldPatrolId, System.currentTimeMillis() - startTime); |
|
|
|
redisService.setCacheObjectOfTask(RedisConst.TASK_TIMER_CLOCK, oldPatrolId, 0L); |
|
|
|
redisService.setCacheObject(RedisConst.TASK_TIMER_CLOCK, 0L); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -934,9 +934,7 @@ public class JobMainTask { |
|
|
|
final int finish = execRecord.getFinishNumber(); |
|
|
|
log.info(Color.GREEN + "[JOB] cursor:{}, finish:{}, total:{}, patrolId:{}" + Color.END, cursor, finish, total, taskPatrolId); |
|
|
|
if (cursor == total) { |
|
|
|
Integer execRecordCounter = execRecordCounterMap.get(taskPatrolId); |
|
|
|
execRecordCounter++; |
|
|
|
execRecordCounterMap.put(taskPatrolId, execRecordCounter); |
|
|
|
execRecord.setEndTime(new Date()); |
|
|
|
if (finish == total) { // record下的点全部执行成功 |
|
|
|
//仅仅靠一个record成功执行不能代表所有的record都执行成功,只能设置该record执行成功标记 |
|
|
|
@ -954,19 +952,19 @@ public class JobMainTask { |
|
|
|
totalProgress, |
|
|
|
TaskStatus.DONE.getCode() |
|
|
|
); |
|
|
|
final Integer redisRecCnt = redisService.getCacheObjectOfTask(RedisConst.TASK_RECORD_CNT, taskPatrolId); |
|
|
|
final Integer redisRecCnt = redisService.getCacheObject(RedisConst.TASK_RECORD_CNT); |
|
|
|
log.info(Color.MAGENTA + "RECORD ROUND, patrolId: {}, recordCounter: {}, redisRecCnt: {}" + Color.END, taskPatrolId, execRecordCounter, redisRecCnt); |
|
|
|
if (execRecordCounter == redisRecCnt) { // 最后一个record |
|
|
|
resetRecordCounter(taskPatrolId); |
|
|
|
final String repeatCode = redisService.getCacheObjectOfTask(RedisConst.TASK_REPEAT_CODE, taskPatrolId); |
|
|
|
resetRecordCounter(); |
|
|
|
final String repeatCode = redisService.getCacheObject(RedisConst.TASK_REPEAT_CODE); |
|
|
|
if (StringUtils.isEmpty(repeatCode)) { |
|
|
|
//所有的records都完美的执行成功, 要把redis标记清除,不然以后的任务如何执行? |
|
|
|
resetRedisCurrentCode(taskPatrolId); |
|
|
|
resetRedisCurrentCode(); |
|
|
|
} |
|
|
|
|
|
|
|
String redisImmediatelyExecTaskTime = redisService.getCacheObjectOfTask(RedisConst.IMMEDIATELY_EXEC_TASK_TIME, taskPatrolId); |
|
|
|
String redisImmediatelyExecTaskTime = redisService.getCacheObject(RedisConst.IMMEDIATELY_EXEC_TASK_TIME); |
|
|
|
if (!StringUtils.isEmpty(redisImmediatelyExecTaskTime)) { |
|
|
|
redisService.deleteObjectOfTask(RedisConst.IMMEDIATELY_EXEC_TASK_TIME, taskPatrolId); |
|
|
|
redisService.deleteObject(RedisConst.IMMEDIATELY_EXEC_TASK_TIME); |
|
|
|
} |
|
|
|
calcExecCostTime(execRecord.getOldTaskPatrolId()); |
|
|
|
} |
|
|
|
@ -976,17 +974,17 @@ public class JobMainTask { |
|
|
|
times--; |
|
|
|
execRecord.setRebootTimes(times); |
|
|
|
execRecord.setCursorNumber(0); |
|
|
|
final int redisRecCnt = redisService.getCacheObjectOfTask(RedisConst.TASK_RECORD_CNT, taskPatrolId); |
|
|
|
final int redisRecCnt = redisService.getCacheObject(RedisConst.TASK_RECORD_CNT); |
|
|
|
log.info(Color.MAGENTA + "[JOB] TIMES > 0, taskPatrolId: {}, execRecordCounter: {}, redisRecCnt: {}" + Color.END, taskPatrolId, execRecordCounter, redisRecCnt); |
|
|
|
if (execRecordCounter == redisRecCnt) {//最后一个record, 复位 |
|
|
|
resetRecordCounter(taskPatrolId); |
|
|
|
resetRecordCounter(); |
|
|
|
calcExecCostTime(execRecord.getOldTaskPatrolId()); |
|
|
|
} |
|
|
|
final String repeatCode = redisService.getCacheObjectOfTask(RedisConst.TASK_REPEAT_CODE, taskPatrolId); |
|
|
|
final String repeatCode = redisService.getCacheObject(RedisConst.TASK_REPEAT_CODE); |
|
|
|
if (StringUtils.isEmpty(repeatCode)) { |
|
|
|
log.info(Color.MAGENTA + "[JOB] SET REPEAT FLAG patrolId: {}" + Color.END, taskPatrolId); |
|
|
|
String taskRepeatCode = redisService.getCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskPatrolId); |
|
|
|
redisService.setCacheObjectOfTask(RedisConst.TASK_REPEAT_CODE, taskPatrolId, taskRepeatCode); |
|
|
|
String taskRepeatCode = redisService.getCacheObject(RedisConst.TASK_CURRENT_CODE); |
|
|
|
redisService.setCacheObject(RedisConst.TASK_REPEAT_CODE, taskRepeatCode); |
|
|
|
} |
|
|
|
} else if (times == 0) {//一个record的尝试次数为0,其它的record正在执行中 |
|
|
|
//设置本record的执行状态为终止 |
|
|
|
@ -1003,11 +1001,11 @@ public class JobMainTask { |
|
|
|
TaskStatus.DONE.getCode() |
|
|
|
); |
|
|
|
//在不知道其它record是否执行完毕的情况下,不能把TASK_CURRENT_CODE锁删除 |
|
|
|
final int redisRecCnt = redisService.getCacheObjectOfTask(RedisConst.TASK_RECORD_CNT, execRecord.getTaskPatrolId()); |
|
|
|
final int redisRecCnt = redisService.getCacheObject(RedisConst.TASK_RECORD_CNT); |
|
|
|
log.info(Color.MAGENTA + "[JOB] TIMES 0, execRecordCounter: {}, redisRecCnt: {}" + Color.END, execRecordCounter, redisRecCnt); |
|
|
|
if (execRecordCounter == redisRecCnt) { |
|
|
|
resetRecordCounter(execRecord.getTaskPatrolId()); |
|
|
|
resetRedisCurrentCode(taskPatrolId); |
|
|
|
resetRecordCounter(); |
|
|
|
resetRedisCurrentCode(); |
|
|
|
calcExecCostTime(execRecord.getOldTaskPatrolId()); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -1071,6 +1069,7 @@ public class JobMainTask { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
@SuppressWarnings({"unused"}) |
|
|
|
private void prePointExceSilenceControl(PatrolTask task, List<PatrolTaskInfo> patrolTaskInfoList, SimpleDateFormat sdf) { |
|
|
|
if (patrolTaskInfoList != null && !patrolTaskInfoList.isEmpty()) { |
|
|
|
PatrolTaskInfo patrolTaskInfo = patrolTaskInfoList.get(0); |
|
|
|
@ -1386,22 +1385,22 @@ public class JobMainTask { |
|
|
|
|
|
|
|
@PostMapping({"/immediatelyExecTask"}) |
|
|
|
public void immediatelyExecTask(@RequestBody PatrolTask patrolTask) { |
|
|
|
String taskCode = redisService.getCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, patrolTask.getTaskId().toString()); |
|
|
|
// if (StringUtils.isNotEmpty(taskCode)) { |
|
|
|
// log.info(Color.CYAN + "[JOB] TASK SLOT IS TAKEN BY: {}" + Color.END, taskCode); |
|
|
|
// return; |
|
|
|
// } |
|
|
|
String taskCode = redisService.getCacheObject(RedisConst.TASK_CURRENT_CODE); |
|
|
|
if (StringUtils.isNotEmpty(taskCode)) { |
|
|
|
log.info(Color.CYAN + "[JOB] TASK SLOT IS TAKEN BY: {}" + Color.END, taskCode); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
PatrolTaskInfo patrolTaskInfo = new PatrolTaskInfo(); |
|
|
|
List<PatrolTask> patrolTaskList = new ArrayList<>(); |
|
|
|
patrolTaskList.add(patrolTask); |
|
|
|
List<PatrolTask> cameraPatrolTasks = new ArrayList<>(); |
|
|
|
assembleVideoTask(patrolTaskList, cameraPatrolTasks); |
|
|
|
String redisImmediatelyExecTaskTime = redisService.getCacheObjectOfTask(RedisConst.IMMEDIATELY_EXEC_TASK_TIME, patrolTask.getTaskCode()); |
|
|
|
// if (redisImmediatelyExecTaskTime != null) { |
|
|
|
// log.info(Color.RED + "[JOB IMMEDIATE] IMMEDIATELY_EXEC_TASK_TIME TASK TAKEN :{}" + Color.END, redisImmediatelyExecTaskTime); |
|
|
|
// return; |
|
|
|
// } |
|
|
|
String redisImmediatelyExecTaskTime = redisService.getCacheObject(RedisConst.IMMEDIATELY_EXEC_TASK_TIME); |
|
|
|
if (redisImmediatelyExecTaskTime != null) { |
|
|
|
log.info(Color.RED + "[JOB IMMEDIATE] IMMEDIATELY_EXEC_TASK_TIME TASK TAKEN :{}" + Color.END, redisImmediatelyExecTaskTime); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (shaoXinBigModel.isSwitchStatus()) { |
|
|
|
log.info("[BIG] Temporary gathering, close bigSwitch in nacos"); |
|
|
|
@ -1409,15 +1408,14 @@ public class JobMainTask { |
|
|
|
} |
|
|
|
|
|
|
|
String immediatelyExecTaskTime = DateUtils.parseDateToStr(DateUtils.yyyyMMddHHmmss, new Date()); |
|
|
|
redisService.setCacheObjectOfTask(RedisConst.IMMEDIATELY_EXEC_TASK_TIME, patrolTask.getTaskCode(), immediatelyExecTaskTime); |
|
|
|
log.info(Color.CYAN + "[JOB IMMEDIATE] TASK_CURRENT_CODE: {}, value: {}" + Color.END, RedisConst.TASK_CURRENT_CODE + patrolTask.getTaskCode(), RedisConst.TASK_CODE + patrolTask.getTaskCode() + StringUtils.AT + immediatelyExecTaskTime); |
|
|
|
redisService.setCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, patrolTask.getTaskCode(), RedisConst.TASK_CODE + patrolTask.getTaskCode() + StringUtils.AT + immediatelyExecTaskTime); |
|
|
|
taskStartInitialize(patrolTask.getTaskCode()); |
|
|
|
redisService.setCacheObject(RedisConst.IMMEDIATELY_EXEC_TASK_TIME, immediatelyExecTaskTime); |
|
|
|
log.info(Color.CYAN + "[JOB IMMEDIATE] TASK_CURRENT_CODE: {}, value: {}" + Color.END, RedisConst.TASK_CURRENT_CODE, RedisConst.TASK_CODE + patrolTask.getTaskCode() + StringUtils.AT + immediatelyExecTaskTime); |
|
|
|
redisService.setCacheObject(RedisConst.TASK_CURRENT_CODE, RedisConst.TASK_CODE + patrolTask.getTaskCode() + StringUtils.AT + immediatelyExecTaskTime); |
|
|
|
taskStartInitialize(); |
|
|
|
log.info(Color.CYAN + "[JOB IMMEDIATE] TASK REC CNT: {}" + Color.END, cameraPatrolTasks.size()); |
|
|
|
setRedisRecordCount(patrolTask.getTaskCode(), cameraPatrolTasks.size()); |
|
|
|
setRedisRecordCount(cameraPatrolTasks.size()); |
|
|
|
for (PatrolTask task : cameraPatrolTasks) { |
|
|
|
List<PatrolTaskInfo> taskInfos = getInfosByRecord(PatrolTaskExecRecord.builder().devNo(task.getDevNo()).taskId(task.getTaskId()).build()); |
|
|
|
|
|
|
|
PatrolTaskExecRecord patrolTaskExecRecord = new PatrolTaskExecRecord(); |
|
|
|
Date time = task.getFixedStartTime(); |
|
|
|
String timeStr = time == null ? immediatelyExecTaskTime : DateUtils.parseDateToStr(DateUtils.yyyyMMddHHmmss, time); |
|
|
|
@ -1459,7 +1457,6 @@ public class JobMainTask { |
|
|
|
.devType("2") |
|
|
|
.build()); |
|
|
|
return patrolTaskInfoMaintainAreaRemove(patrolTaskInfoList); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
log.error("[JOB] getInfosByTaskCode exception: {}", e.getMessage()); |
|
|
|
return patrolTaskInfoList; |
|
|
|
@ -1480,21 +1477,21 @@ public class JobMainTask { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void incrementRedisRecordCounter(String patrolTaskCode) { |
|
|
|
Integer redisRecCnt = redisService.getCacheObjectOfTask(RedisConst.TASK_RECORD_CNT, patrolTaskCode); |
|
|
|
private void incrementRedisRecordCounter() { |
|
|
|
Integer redisRecCnt = redisService.getCacheObject(RedisConst.TASK_RECORD_CNT); |
|
|
|
if (redisRecCnt == null) { |
|
|
|
redisRecCnt = 1; |
|
|
|
redisService.setCacheObjectOfTask(RedisConst.TASK_RECORD_CNT, patrolTaskCode, redisRecCnt); |
|
|
|
redisService.setCacheObject(RedisConst.TASK_RECORD_CNT, redisRecCnt); |
|
|
|
} else { |
|
|
|
redisRecCnt++; |
|
|
|
redisService.setCacheObjectOfTask(RedisConst.TASK_RECORD_CNT, patrolTaskCode, redisRecCnt); |
|
|
|
redisService.setCacheObject(RedisConst.TASK_RECORD_CNT, redisRecCnt); |
|
|
|
} |
|
|
|
|
|
|
|
log.info(Color.GREEN + "[JOB] redisRecCnt: {}" + Color.END, redisRecCnt); |
|
|
|
} |
|
|
|
|
|
|
|
private void setRedisRecordCount(String patrolTaskCode, final int size) { |
|
|
|
redisService.setCacheObjectOfTask(RedisConst.TASK_RECORD_CNT, patrolTaskCode, size); |
|
|
|
private void setRedisRecordCount(final int size) { |
|
|
|
redisService.setCacheObject(RedisConst.TASK_RECORD_CNT, size); |
|
|
|
} |
|
|
|
|
|
|
|
private String getTaskPatrolId(final PatrolTask patrolTask) { |
|
|
|
@ -1508,10 +1505,10 @@ public class JobMainTask { |
|
|
|
} |
|
|
|
|
|
|
|
public void execEveryDayTask(List<PatrolTask> patrolTaskList) { |
|
|
|
setRedisRecordCount(patrolTaskList.size()); |
|
|
|
for (PatrolTask patrolTask : patrolTaskList) { |
|
|
|
List<PatrolTaskInfo> taskInfos = getInfosByRecord(PatrolTaskExecRecord.builder().devNo(patrolTask.getDevNo()).taskId(patrolTask.getTaskId()).build()); |
|
|
|
final String taskPatrolId = getTaskPatrolId(patrolTask); |
|
|
|
setRedisRecordCount(taskPatrolId,patrolTaskList.size()); |
|
|
|
final String oldTaskPatrolId = getOldTaskPatrolId(patrolTask); |
|
|
|
log.info(Color.GREEN + "[JOB] NEW EXEC RECORD: {}, OLD: {}" + Color.END, taskPatrolId, oldTaskPatrolId); |
|
|
|
PatrolTaskExecRecord patrolTaskExecRecord = PatrolTaskExecRecord.builder() |
|
|
|
@ -1567,7 +1564,7 @@ public class JobMainTask { |
|
|
|
int times = execRecord.getRebootTimes(); |
|
|
|
if (finish < total) { |
|
|
|
log.info(Color.GREEN + "[JOB] REPEAT EXEC RECORD: id: {}, finish: {}, total: {}, times: {}, progress: {}" + Color.END, execRecord.getTaskPatrolId(), finish, total, times, execRecord.getTaskProgress()); |
|
|
|
incrementRedisRecordCounter(taskPatrolId); |
|
|
|
incrementRedisRecordCounter(); |
|
|
|
threadPool.submit(() -> { |
|
|
|
log.info(Color.MAGENTA + "[JOB] REPEAT START devNo: {}, taskId: {}" + Color.END, execRecord.getDevNo(), execRecord.getTaskId()); |
|
|
|
prePointExecImmediate(execRecord); |
|
|
|
@ -1674,7 +1671,6 @@ public class JobMainTask { |
|
|
|
} |
|
|
|
|
|
|
|
log.info("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!resList size: {}", resList.size()); |
|
|
|
|
|
|
|
return resList; |
|
|
|
} |
|
|
|
|
|
|
|
@ -1876,50 +1872,80 @@ public class JobMainTask { |
|
|
|
return nf.format(decimalFormatNum * 100.0F); |
|
|
|
} |
|
|
|
|
|
|
|
private boolean isTaskSlotEmpty(String taskCode) { |
|
|
|
String taskCurrentCode = redisService.getCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode); |
|
|
|
String taskRepeatCode = redisService.getCacheObjectOfTask(RedisConst.TASK_REPEAT_CODE, taskCode); //repeat空了就不执行 |
|
|
|
Integer redisRecCnt = redisService.getCacheObjectOfTask(RedisConst.TASK_RECORD_CNT, taskCode); |
|
|
|
@SuppressWarnings({"unused"}) |
|
|
|
public void execEveryDayTask() { |
|
|
|
if (isTaskSlotEmpty()) { |
|
|
|
Collection<String> redisKeys = redisService.keys(RedisConst.TASK_CODE_EX); |
|
|
|
for (String redisKey : redisKeys) { |
|
|
|
String[] keywords = StringUtils.split(redisKey, StringUtils.AT); |
|
|
|
if (keywords.length == 3) { |
|
|
|
String taskCode = keywords[1]; |
|
|
|
String fixedStartTime = keywords[2]; |
|
|
|
long currentDays = TimeUnit.MILLISECONDS.toDays(System.currentTimeMillis()); |
|
|
|
long fixedDays = TimeUnit.MILLISECONDS.toDays(DateUtils.parse(DateUtils.yyyyMMddHHmmss2, fixedStartTime).getTime()); |
|
|
|
long currentMinutes = TimeUnit.MILLISECONDS.toMinutes(System.currentTimeMillis()); |
|
|
|
long fixedStartMinutes = TimeUnit.MILLISECONDS.toMinutes(DateUtils.parse(DateUtils.yyyyMMddHHmmss2, fixedStartTime).getTime()); |
|
|
|
if (currentDays == fixedDays && currentMinutes >= fixedStartMinutes) { |
|
|
|
//if ("1220".equals(taskCode)) |
|
|
|
{ |
|
|
|
//log.info("[GABRIEL] key: {}, curMin: {}, fixedMin:{}\n , curDay: {}, fixedDay:{}!", key, currentMinutes, fixedStartMinutes, currentDays, fixedDays); |
|
|
|
extractRedisTask(redisKey); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
// log.info(Color.YELLOW + "[JOB] CUR: [{}] IS TAKEN, REPEAT: {}, redisRecCnt: {}" + Color.END, |
|
|
|
// redisService.getCacheObject(RedisConst.TASK_CURRENT_CODE), |
|
|
|
// redisService.getCacheObject(RedisConst.TASK_REPEAT_CODE), |
|
|
|
// redisService.getCacheObject(RedisConst.TASK_RECORD_CNT)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private boolean isTaskSlotEmpty() { |
|
|
|
String taskCurrentCode = redisService.getCacheObject(RedisConst.TASK_CURRENT_CODE); |
|
|
|
String taskRepeatCode = redisService.getCacheObject(RedisConst.TASK_REPEAT_CODE); //repeat空了就不执行 |
|
|
|
Integer redisRecCnt = redisService.getCacheObject(RedisConst.TASK_RECORD_CNT); |
|
|
|
log.info(Color.YELLOW + "[JOB] TASK_CURRENT_CODE@: [{}] TAKEN, TASK_REPEAT_CODE@: {}, TASK_RECORD_CNT: {}" + Color.END, taskCurrentCode, taskRepeatCode, redisRecCnt); |
|
|
|
return StringUtils.isEmpty(taskCurrentCode) || |
|
|
|
!StringUtils.isEmpty(taskCurrentCode) && !StringUtils.isEmpty(taskRepeatCode) && (redisRecCnt == null || redisRecCnt == 0); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
private boolean isTaskRunning(String taskCode) { |
|
|
|
final String taskCurrentCode = redisService.getCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode); |
|
|
|
private boolean isTaskRunning() { |
|
|
|
final String taskCurrentCode = redisService.getCacheObject(RedisConst.TASK_CURRENT_CODE); |
|
|
|
return StringUtils.isNotEmpty(taskCurrentCode); |
|
|
|
} |
|
|
|
|
|
|
|
private boolean isTaskRepeatPending(String taskCode) { |
|
|
|
final String taskCurrentCode = redisService.getCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode); |
|
|
|
final String taskRepeatCode = redisService.getCacheObjectOfTask(RedisConst.TASK_REPEAT_CODE, taskCode); |
|
|
|
private boolean isTaskRepeatPending() { |
|
|
|
final String taskCurrentCode = redisService.getCacheObject(RedisConst.TASK_CURRENT_CODE); |
|
|
|
final String taskRepeatCode = redisService.getCacheObject(RedisConst.TASK_REPEAT_CODE); |
|
|
|
return StringUtils.isNotEmpty(taskCurrentCode) |
|
|
|
&& StringUtils.isNotEmpty(taskRepeatCode) |
|
|
|
&& taskCurrentCode.equals(taskRepeatCode); |
|
|
|
} |
|
|
|
|
|
|
|
private void clearRepeatTask(String taskCode) { |
|
|
|
redisService.deleteObjectOfTask(RedisConst.TASK_REPEAT_CODE, taskCode); |
|
|
|
private void clearRepeatTask() { |
|
|
|
redisService.deleteObject(RedisConst.TASK_REPEAT_CODE); |
|
|
|
} |
|
|
|
|
|
|
|
synchronized private void extractRedisTask(String taskCode, String redisKey) { |
|
|
|
if (!isTaskRunning(taskCode)) {/*执行新任务*/ |
|
|
|
synchronized private void extractRedisTask(String redisKey) { |
|
|
|
if (!isTaskRunning()) {/*执行新任务*/ |
|
|
|
List<PatrolTask> patrolTaskList = JSON.parseArray(redisService.getCacheObject(redisKey), PatrolTask.class); |
|
|
|
if (patrolTaskList != null && !patrolTaskList.isEmpty()) { |
|
|
|
log.info(Color.GREEN + "[JOB] ADD NEW TASK [{}], TASK LIST SIZE: {}" + Color.END, redisKey, patrolTaskList.size()); |
|
|
|
redisService.setCacheObjectOfTask(RedisConst.TASK_CURRENT_CODE, taskCode, redisKey); |
|
|
|
taskStartInitialize(patrolTaskList.get(0).getTaskCode()); |
|
|
|
redisService.setCacheObject(RedisConst.TASK_CURRENT_CODE, redisKey); |
|
|
|
taskStartInitialize(); |
|
|
|
execEveryDayTask(patrolTaskList); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (isTaskRunning(taskCode) && isTaskRepeatPending(taskCode)) {/*执行需要再次执行的任务*/ |
|
|
|
clearRepeatTask(taskCode); |
|
|
|
if (isTaskRunning() && isTaskRepeatPending()) {/*执行需要再次执行的任务*/ |
|
|
|
clearRepeatTask(); |
|
|
|
log.info(Color.GREEN + "[JOB] REPEAT TASK [{}]" + Color.END, redisKey); |
|
|
|
List<PatrolTask> patrolTaskList = JSON.parseArray(redisService.getCacheObject(redisKey), PatrolTask.class); |
|
|
|
if (patrolTaskList != null && !patrolTaskList.isEmpty()) { |
|
|
|
taskStartInitialize(patrolTaskList.get(0).getTaskCode()); |
|
|
|
taskStartInitialize(); |
|
|
|
execRepeatDayTask(patrolTaskList); |
|
|
|
} |
|
|
|
} |
|
|
|
|