| | |
| | | import com.ycl.mapper.ProcessCodingMapper; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.common.engine.impl.el.FixedValue; |
| | | import org.flowable.engine.HistoryService; |
| | | import org.flowable.engine.delegate.TaskListener; |
| | | import org.flowable.task.api.history.HistoricTaskInstance; |
| | | import org.flowable.task.service.delegate.DelegateTask; |
| | |
| | | |
| | | /** |
| | | * 任务监听器 |
| | | * |
| | | * <p> |
| | | * create(创建):在任务被创建且所有的任务属性设置完成后才触发 |
| | | * assignment(指派):在任务被分配给某个办理人之后触发 |
| | | * complete(完成):在配置了监听器的上一个任务完成时触发 |
| | |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class FlowableOverTimeListener extends FlowServiceFactory implements TaskListener { |
| | | public class FlowableOverTimeListener implements TaskListener { |
| | | /** |
| | | * 黄码时间 |
| | | */ |
| | |
| | | log.info("触发超时监听器:{}", delegateTask); |
| | | //Flowable的bean自己管理的需要手动获取 |
| | | ProcessCodingMapper processCodingMapper = SpringUtils.getBean(ProcessCodingMapper.class); |
| | | HistoryService historyService = SpringUtils.getBean(HistoryService.class); |
| | | //任务id |
| | | String taskId = delegateTask.getId(); |
| | | //流程实例id |
| | |
| | | processCoding.setTaskId(taskId); |
| | | processCoding.setProcessInsId(processInstanceId); |
| | | processCoding.setTaskDefKey(delegateTask.getTaskDefinitionKey()); |
| | | //涉及到驳回,需要查一下这个节点是否已经添加过了,如果添加过就不进行后续操作 |
| | | List<ProcessCoding> processCodings = processCodingMapper.selectList(new QueryWrapper<ProcessCoding>() |
| | | .eq("process_ins_id", processInstanceId) |
| | | .eq("task_def_key", delegateTask.getTaskDefinitionKey())); |
| | | if (CollectionUtils.isEmpty(processCodings)) { |
| | | processCoding.setStatus(GREEN); |
| | | if (yellowTime != null && yellowTime.getValue(delegateTask) != null) { |
| | | processCoding.setYellowTime(Integer.parseInt(yellowTime.getValue(delegateTask).toString())); |
| | | } |
| | | if (redTime != null && redTime.getValue(delegateTask) != null) { |
| | | processCoding.setRedTime(Integer.parseInt(redTime.getValue(delegateTask).toString())); |
| | | } |
| | | if (startTaskId != null && startTaskId.getValue(delegateTask) != null) { |
| | | String taskDefKey = startTaskId.getValue(delegateTask).toString(); |
| | | //通过流程实例id和节点定义id找到对应taskId |
| | | if (delegateTask.getTaskDefinitionKey().equals(taskDefKey)) { |
| | | //当前节点为开始计时节点 |
| | | processCoding.setStartTaskId(delegateTask.getId()); |
| | | } else { |
| | | //开始节点从历史节点查询 取多条中最早的一条 |
| | | List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery() |
| | | .processInstanceId(processInstanceId) |
| | | .taskDefinitionKey(delegateTask.getTaskDefinitionKey()) |
| | | .orderByHistoricTaskInstanceStartTime() |
| | | .asc() |
| | | .list(); |
| | | if (!CollectionUtils.isEmpty(list)) { |
| | | HistoricTaskInstance hisTask = list.get(0); |
| | | processCoding.setStartTaskId(hisTask.getId()); |
| | | } |
| | | } |
| | | } |
| | | processCodingMapper.insert(processCoding); |
| | | log.info("添加节点到定时器"); |
| | | processCoding.setStatus(GREEN); |
| | | if (yellowTime != null && yellowTime.getValue(delegateTask) != null) { |
| | | processCoding.setYellowTime(Integer.parseInt(yellowTime.getValue(delegateTask).toString())); |
| | | } |
| | | if (redTime != null && redTime.getValue(delegateTask) != null) { |
| | | processCoding.setRedTime(Integer.parseInt(redTime.getValue(delegateTask).toString())); |
| | | } |
| | | //设置开始节点 |
| | | if (startTaskId != null && startTaskId.getValue(delegateTask) != null) { |
| | | String taskDefKey = startTaskId.getValue(delegateTask).toString(); |
| | | //开始节点从历史节点查询 取多条中最早的一条 |
| | | List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery() |
| | | .processInstanceId(processInstanceId) |
| | | .taskDefinitionKey(taskDefKey) |
| | | .orderByHistoricTaskInstanceStartTime() |
| | | .asc() |
| | | .list(); |
| | | if (!CollectionUtils.isEmpty(list)) { |
| | | HistoricTaskInstance hisTask = list.get(0); |
| | | processCoding.setStartTaskId(hisTask.getId()); |
| | | } else { |
| | | //如果为空,说明流程首次走到taskDefKey节点 |
| | | processCoding.setStartTaskId(delegateTask.getId()); |
| | | } |
| | | } |
| | | processCodingMapper.insert(processCoding); |
| | | log.info("添加节点到定时器"); |
| | | } |
| | | } |