| | |
| | | import com.ycl.mapper.ProjectProcessMapper; |
| | | import com.ycl.service.ProcessCodingService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.flowable.task.api.Task; |
| | | import org.flowable.task.api.TaskInfo; |
| | | import org.flowable.task.api.history.HistoricTaskInstance; |
| | |
| | | String taskId = task.getId(); |
| | | ProcessCoding processCoding = taskMap.get(taskId); |
| | | if (processCoding == null) { |
| | | //不需要监控的任务节点直接改为绿色 |
| | | //不需要监控的任务节点项目码直接改为绿色 |
| | | List<String> processInsIds = map.get(GREEN); |
| | | processInsIds.add(task.getProcessInstanceId()); |
| | | continue; |
| | | } |
| | | //判断是否超时 |
| | | //判断赋码统一用秒作为单位 |
| | | Date startTime = startTaskMap.get(processCoding.getStartTaskId()); |
| | | Integer yellowTime = processCoding.getYellowTime(); |
| | | Integer redTime = processCoding.getRedTime(); |
| | | if (startTime == null) continue; |
| | | // long durationDay = (now.getTime() - startTime.getTime()) / (1000 * 60 * 60 * 24); |
| | | long durationDay = (now.getTime() - startTime.getTime()) / (1000 * 60); |
| | | String status = GREEN; // 默认状态为绿色 |
| | | if (redTime != null && durationDay >= redTime) { |
| | | status = RED; // 如果超过红色时间阈值,则状态为红色 |
| | | } else if (yellowTime != null && durationDay >= yellowTime) { |
| | | status = YELLOW; // 否则,如果超过黄色时间阈值,则状态为黄色 |
| | | try { |
| | | Long redTime = getTime(processCoding.getRedTime()); |
| | | Long yellowTime = getTime(processCoding.getYellowTime()); |
| | | Long overtime = getTime(processCoding.getOvertime()); |
| | | if (startTime == null) continue; |
| | | //节点处理时间 |
| | | long durationDay = (now.getTime() - startTime.getTime()) / 1000; |
| | | String status = GREEN; // 默认状态为绿色 |
| | | if (redTime != null && redTime !=0 && durationDay >= redTime) { |
| | | status = RED; // 如果超过红色时间阈值,则状态为红色 |
| | | } else if (yellowTime != null && yellowTime !=0 && durationDay >= yellowTime) { |
| | | status = YELLOW; // 否则,如果超过黄色时间阈值,则状态为黄色 |
| | | } |
| | | //处理办理期限 |
| | | String overtimeStatus = NORMAL; |
| | | if (overtime != null && overtime !=0 && durationDay >= overtime) { |
| | | overtimeStatus = OVERTIME; // 如果超过办理期限 |
| | | } |
| | | else if (overtime != null && overtime != 0 && durationDay >= (overtime - 12 * 60 * 60)) { |
| | | overtimeStatus = WILLOVERTIME; // 如果临期(固定超时前12小时为临期) |
| | | } |
| | | // else if (overtime != null && overtime != 0 && durationDay >= (overtime - 60)) { |
| | | // overtimeStatus = WILLOVERTIME; // 如果临期(固定超时前12小时为临期) |
| | | // } |
| | | List<String> processInsIds = map.get(status); |
| | | processInsIds.add(task.getProcessInstanceId()); |
| | | |
| | | processCoding.setStatus(status); |
| | | processCoding.setOvertimeStatus(overtimeStatus); |
| | | list.add(processCoding); |
| | | } catch (Exception e) { |
| | | log.error(e.getMessage(),"赋码时间格式有误"); |
| | | } |
| | | List<String> processInsIds = map.get(status); |
| | | processInsIds.add(task.getProcessInstanceId()); |
| | | processCoding.setStatus(status); |
| | | list.add(processCoding); |
| | | } |
| | | //更新项目码 |
| | | map.forEach((key, value) -> updateProjectCoding(value, key)); |
| | |
| | | log.info("结束赋码"); |
| | | } |
| | | |
| | | private Long getTime(String timeStr) { |
| | | Long time = null; |
| | | if (StringUtils.isNotBlank(timeStr)) { |
| | | String[] timeArr = timeStr.split("-"); |
| | | // 解析天数和小时数 |
| | | int days = Integer.parseInt(timeArr[0]); |
| | | int hours = 0; |
| | | if (timeArr.length > 1) { |
| | | hours = Integer.parseInt(timeArr[1]); |
| | | } |
| | | time = (days * 24L + hours) * 3600L; |
| | | // //分-秒 |
| | | // time= (days * 60L) + hours; |
| | | } |
| | | return time; |
| | | } |
| | | |
| | | private Map<String, Date> getStartTaskList(List<ProcessCoding> processCodingList) { |
| | | //查出任务计时起始节点集合 |
| | | List<String> startTaskIds = processCodingList.stream().map(ProcessCoding::getStartTaskId).collect(Collectors.toList()); |