| | |
| | | import org.flowable.engine.HistoryService; |
| | | import org.flowable.engine.TaskService; |
| | | import org.flowable.engine.history.HistoricProcessInstance; |
| | | import org.flowable.engine.task.Comment; |
| | | import org.flowable.task.api.Task; |
| | | import org.flowable.task.api.TaskQuery; |
| | | import org.flowable.task.api.history.HistoricTaskInstance; |
| | | import org.springblade.core.secure.utils.AuthUtil; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springblade.core.tool.utils.*; |
| | | |
| | | import org.springblade.mdm.basesetting.machine.MachineService; |
| | | import org.springblade.mdm.flow.entity.MdmFlowProcess; |
| | | import org.springblade.mdm.flow.util.MdmFlowCache; |
| | | import org.springblade.mdm.flow.vo.FlowVO; |
| | | import org.springblade.system.feign.IUserClient; |
| | | import org.springblade.system.pojo.entity.User; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.util.Collections; |
| | | import java.util.Date; |
| | | import java.util.LinkedList; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 流程业务实现类 |
| | |
| | | |
| | | private final TaskService taskService; |
| | | private final HistoryService historyService; |
| | | private final IUserClient userClient; |
| | | |
| | | |
| | | public IPage<FlowVO> selectTodoPage(IPage<FlowVO> page, LocalDate createTimeBegin, LocalDate createTimeEnd, String keyword) { |
| | | /** |
| | | * 查询我的流程(个人待办列表) |
| | | * @param page |
| | | * @param createTimeBegin |
| | | * @param createTimeEnd |
| | | * @param keyword |
| | | * @return |
| | | */ |
| | | public IPage<FlowVO> selectTodoPage(IPage<FlowVO> page, LocalDateTime createTimeBegin, LocalDateTime createTimeEnd, String keyword) { |
| | | //String taskUser = TaskUtil.getTaskUser(); |
| | | String userId = "" + AuthUtil.getUserId(); |
| | | List<FlowVO> flowList = new LinkedList<>(); |
| | |
| | | TaskQuery todoQuery = taskService.createTaskQuery().taskAssignee(userId).active().includeProcessVariables(); |
| | | if (Func.isNotEmpty(createTimeBegin)) { |
| | | todoQuery.taskCreatedAfter(DateUtil.toDate(createTimeBegin)); |
| | | //如果查询实例的开始时间:todoQuery.taskInProgressStartDueAfter() |
| | | |
| | | ////如果查询实例的开始时间:只能用以下这个,先查出实例id来 |
| | | //todoQuery.processInstanceIdIn() |
| | | } |
| | | if (Func.isNotEmpty(createTimeEnd)) { |
| | | todoQuery.taskCreatedBefore(DateUtil.toDate(createTimeEnd)); |
| | | |
| | | //todoQuery.taskInProgressStartTimeBefore(DateUtil.toDate(createTimeEnd)); |
| | | } |
| | | if (Func.isNotEmpty(keyword)) { |
| | | addKeywordCondition(todoQuery, keyword); |
| | |
| | | // 构建列表数据 |
| | | FlowVO bladeFlow = new FlowVO(); |
| | | buildFlowTaskList(bladeFlow, flowList, todoQuery);//FlowEngineConstant.STATUS_TODO , "todo" |
| | | |
| | | flowList.forEach(flowVO -> { |
| | | if(flowVO.getVariables().containsKey("machineCode")){ |
| | | //Machine machinemachineService.getByCode((String)flowVO.getVariables().get("machineCode")) |
| | | } |
| | | }); |
| | | // 计算总数 |
| | | long count = todoQuery.count(); |
| | | // 设置页数 |
| | |
| | | if (bladeFlow.getEndDate() != null) { |
| | | taskQuery.taskCreatedBefore(bladeFlow.getEndDate()); |
| | | } |
| | | |
| | | List<Task> tasks = taskQuery.list(); |
| | | tasks.forEach(task -> { |
| | | FlowVO flow = new FlowVO(); |
| | |
| | | |
| | | flow.setProcessDefinitionId(task.getProcessDefinitionId()); |
| | | |
| | | |
| | | //flow.setProcessDefinitionKey(processDefinition.getKey()); |
| | | //flow.setProcessDefinitionVersion(processDefinition.getVersion()); |
| | | flow.setProcessInstanceId(task.getProcessInstanceId()); |
| | | |
| | | // 查询流程实例创建时间 |
| | | HistoricProcessInstance historicProcess = historyService.createHistoricProcessInstanceQuery() |
| | | .processInstanceId(task.getProcessInstanceId()) |
| | | .singleResult(); |
| | | flow.setProcessCreateTime(historicProcess.getStartTime()); |
| | | |
| | | R<User> ru = userClient.userInfoById(Long.valueOf(historicProcess.getStartUserId())); |
| | | if(ru.isSuccess()) { |
| | | flow.setStartUserName(ru.getData().getName()); |
| | | } |
| | | ; |
| | | List<Comment> comments = lastStepComments(task);//taskService.getTaskComments(task.getId()); |
| | | if(!comments.isEmpty()){ |
| | | flow.setComment(comments.get(0).getFullMessage()); |
| | | } |
| | | |
| | | MdmFlowProcess processDefinition = MdmFlowCache.getProcessDefinition(task.getProcessDefinitionId()); |
| | | |
| | |
| | | }); |
| | | } |
| | | |
| | | List<Comment> lastStepComments(Task currentTask){ |
| | | List<HistoricTaskInstance> previousTasks = historyService.createHistoricActivityInstanceQuery() |
| | | .processInstanceId(currentTask.getProcessInstanceId()) |
| | | .activityType("userTask") // 直接查询用户任务类型 |
| | | .orderByHistoricActivityInstanceEndTime() |
| | | .desc() |
| | | .list() |
| | | .stream() |
| | | .filter(activity -> !activity.getActivityId().equals(currentTask.getTaskDefinitionKey())) |
| | | .map(activity -> historyService.createHistoricTaskInstanceQuery() |
| | | .taskDefinitionKey(activity.getActivityId()) |
| | | .processInstanceId(activity.getProcessInstanceId()) |
| | | .orderByHistoricTaskInstanceEndTime() |
| | | .desc() |
| | | .list() |
| | | ) |
| | | .flatMap(List::stream) |
| | | .toList(); |
| | | List<Comment> comments; |
| | | if (!previousTasks.isEmpty()) { |
| | | return taskService.getTaskComments(previousTasks.get(0).getId()); |
| | | |
| | | }else{ |
| | | return Collections.emptyList(); |
| | | } |
| | | } |
| | | /** |
| | | * 获取历史流程 |
| | | * |
| | |
| | | page.setRecords(flowList); |
| | | return page; |
| | | } |
| | | |
| | | /** |
| | | * 流程查询 功能 的分页 |
| | | * @param page |
| | | * @param createTimeBegin |
| | | * @param createTimeEnd |
| | | * @param assigneeName |
| | | * @param keyword |
| | | * @return |
| | | */ |
| | | public IPage<FlowVO> selectSearchPage(IPage<FlowVO> page, LocalDate createTimeBegin, LocalDate createTimeEnd, String keyword) { |
| | | |
| | | List<FlowVO> flowList = new LinkedList<>(); |
| | | Date now = new Date(); |
| | | TaskQuery taskQuery = taskService.createTaskQuery().active().includeProcessVariables(); |
| | | if(Func.isNotEmpty(createTimeBegin)) { |
| | | taskQuery.taskCreatedAfter(DateUtil.toDate(createTimeBegin)); |
| | | } |
| | | if(Func.isNotEmpty(createTimeEnd)) { |
| | | taskQuery.taskCreatedBefore(DateUtil.toDate(createTimeEnd.plusDays(1))); |
| | | } |
| | | |
| | | addKeywordCondition(taskQuery, keyword); |
| | | |
| | | taskQuery.orderByTaskCreateTime().desc(); |
| | | |
| | | // 构建列表数据 |
| | | FlowVO bladeFlow = new FlowVO(); |
| | | buildFlowTaskList(bladeFlow, flowList, taskQuery);//FlowEngineConstant.STATUS_TODO |
| | | |
| | | // 计算总数 |
| | | long count = taskQuery.count(); |
| | | // 设置页数 |
| | | page.setSize(count); |
| | | // 设置总数 |
| | | page.setTotal(count); |
| | | // 设置数据 |
| | | page.setRecords(flowList); |
| | | return page; |
| | | } |
| | | } |