xiangpei
2024-12-24 982e63b981079caaae2be3ad8bb11d29cf9cd97b
驳回使用自带驳回,对已完成流程查看流程推进的处理
2个文件已修改
69 ■■■■■ 已修改文件
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flowable/src/main/java/com/ycl/service/common/TaskCommonService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -483,6 +483,12 @@
        List<UserTask> userTasks = allUserTaskElement.subList(startNum, end);
        // 查出流程
        ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult();
        if (Objects.isNull(process)) {
            // 如果运行时找不到说明是已完成的流程,直接查历史任务
            List<CustomerTaskVO> vos = this.getFinishedProcessTaskInfo(userTasks, processInsId, processDefinitionId);
            result.data(vos);
            return vos;
        }
        // 判断任务状态
        List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> {
            CustomerTaskVO vo = new CustomerTaskVO();
@@ -573,6 +579,52 @@
    }
    /**
     * 查询已完成的流程的任务信息
     *
     * @param userTasks 任务节点列表
     * @param processInsId 流程实例id
     * @param processDefId 流程定义id
     * @return
     */
    private List<CustomerTaskVO> getFinishedProcessTaskInfo(List<UserTask> userTasks, String processInsId, String processDefId) {
        HistoricProcessInstance hisProcess = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInsId).singleResult();
        List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> {
            CustomerTaskVO vo = new CustomerTaskVO();
            vo.setProcessInsId(hisProcess.getId());
            vo.setProcessDefId(processDefId);
            vo.setDeployId(hisProcess.getDeploymentId());
            vo.setTaskName(userTask.getName());
            vo.setProcessName(hisProcess.getProcessDefinitionName());
            // 查多个是因为驳回后会查出两条及以上,取最新一条
            List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery()
                    .processInstanceId(hisProcess.getId())
                    .taskDefinitionKey(userTask.getId()).includeIdentityLinks()
                    .orderByHistoricTaskInstanceStartTime()
                    .desc()
                    .list();
            vo.setTaskStatus(TaskStatusEnum.FINISHED);
            // 如果是已完成的,信息需要单独赋值
            vo.setTaskId(hisTaskList.get(0).getId());
            vo.setExecutionId(hisTaskList.get(0).getExecutionId());
            vo.setCreateTime(hisTaskList.get(0).getStartTime());
            // 查询实际处理人
            long handlerUserId = Long.parseLong(hisTaskList.get(0).getAssignee());
            SysUser handlerUser = sysUserService.selectUserById(handlerUserId);
            if (Objects.nonNull(handlerUser)) {
                vo.setHandlerId(handlerUserId);
                vo.setHandlerName(handlerUser.getNickName());
            }
            vo.setTaskDefinitionKey(hisTaskList.get(0).getTaskDefinitionKey());
            this.setPromoterAndHandler(vo, hisTaskList.get(0).getIdentityLinks());
            return vo;
        }).collect(Collectors.toList());
        return vos;
    }
    /**
     * 查询剩余事项(未开始的任务)
     *
     * @param processDefinitionId
@@ -601,6 +653,12 @@
        List<UserTask> userTasks = allUserTaskElement.subList(startNum, end);
        // 查出流程
        ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult();
        if (Objects.isNull(process)) {
            // 如果流程已经完成,那么没有剩余事项了
            List<CustomerTaskVO> vos = new ArrayList<>(1);
            result.data(vos);
            return vos;
        }
        // 判断任务状态
        List<CustomerTaskVO> vos = userTasks.stream().map(userTask -> {
            CustomerTaskVO vo = new CustomerTaskVO();
@@ -681,6 +739,10 @@
        List<UserTask> allUserTaskElement = this.getAllUserTaskElement(processDefinitionId);
        // 查出流程
        ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult();
        if (Objects.isNull(process)) {
            // 运行时未找到流程,说明流程已经结束了
            return 0L;
        }
        long num = 0L;
        // 判断任务状态
        for (UserTask userTask : allUserTaskElement) {
flowable/src/main/java/com/ycl/service/common/TaskCommonService.java
@@ -2,7 +2,9 @@
import com.alibaba.fastjson2.JSONObject;
import com.ycl.common.constant.ProcessConstants;
import com.ycl.common.core.domain.entity.SysUser;
import com.ycl.common.enums.FlowComment;
import com.ycl.common.enums.business.TaskStatusEnum;
import com.ycl.domain.entity.SysForm;
import com.ycl.domain.vo.FormDetailVO;
import com.ycl.flow.FindNextNodeUtil;
@@ -14,6 +16,7 @@
import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.task.api.Task;
import org.flowable.task.api.history.HistoricTaskInstance;
@@ -290,6 +293,10 @@
        taskService.addComment(taskId, processInsId,  FlowComment.REJECT.getType(), msg1 + msg);
        // TODO 直接使用这个api好像有问题
        runtimeService.createChangeActivityStateBuilder().processInstanceId(processInsId).moveActivityIdTo(rejectTaskDefKey, rejectedTaskDefKey).changeState();
        runtimeService.createChangeActivityStateBuilder().processInstanceId(processInsId).moveExecutionToActivityId(rejectTaskDefKey, rejectedTaskDefKey).changeState();
    }
}