xiangpei
2024-12-10 5cd0e50ccbc6e10dd4e488d8b4106e82fb676521
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -12,6 +12,7 @@
import com.ycl.common.core.domain.entity.SysRole;
import com.ycl.common.core.domain.entity.SysUser;
import com.ycl.common.enums.FlowComment;
import com.ycl.common.enums.business.HandlerTypeEnum;
import com.ycl.common.enums.business.TaskStatusEnum;
import com.ycl.common.utils.SecurityUtils;
import com.ycl.constant.TaskTypeConstant;
@@ -28,6 +29,7 @@
import com.ycl.domain.form.ProjectProcessForm;
import com.ycl.domain.vo.ProjectProcessVO;
import com.ycl.domain.query.ProjectProcessQuery;
import com.ycl.service.common.TaskCommonService;
import com.ycl.system.service.ISysDeptService;
import com.ycl.system.service.ISysRoleService;
import com.ycl.system.service.ISysUserService;
@@ -52,6 +54,7 @@
import org.springframework.beans.BeanUtils;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
@@ -76,6 +79,7 @@
    private final ISysUserService sysUserService;
    private final ISysRoleService sysRoleService;
    private final ISysDeptService sysDeptService;
    private final TaskCommonService taskCommonService;
    /**
     * 分页查询
@@ -111,14 +115,16 @@
        if (Objects.nonNull(pp.getProcessInsId())) {
            HistoricProcessInstance historicProcessInstance =
                    historyService.createHistoricProcessInstanceQuery().processInstanceId(pp.getProcessInsId()).singleResult();
            // 删除之前流程的数据
            if (historicProcessInstance.getEndTime() != null) {
                historyService.deleteHistoricProcessInstance(historicProcessInstance.getId());
            } else {
                // 删除流程实例
                runtimeService.deleteProcessInstance(pp.getProcessInsId(), "");
                // 删除历史流程实例
                historyService.deleteHistoricProcessInstance(pp.getProcessInsId());
            if (Objects.nonNull(historicProcessInstance)) {
                // 删除之前流程的数据
                if (historicProcessInstance.getEndTime() != null) {
                    historyService.deleteHistoricProcessInstance(historicProcessInstance.getId());
                } else {
                    // 删除流程实例
                    runtimeService.deleteProcessInstance(pp.getProcessInsId(), "");
                    // 删除历史流程实例
                    historyService.deleteHistoricProcessInstance(pp.getProcessInsId());
                }
            }
        }
        String processInsId = this.startPro(form.getProjectId(), form.getProcessDefId());
@@ -201,7 +207,7 @@
        taskStatistics.setTodoTaskNum(this.getTodoTaskNum(projectProcess.getProcessInsId()));
        taskStatistics.setRemainingTaskNum(this.getRemainingTaskNum(processDefId, projectProcess.getProcessInsId()));
//        taskStatistics.setCurrentTask(this.getCurrentNodeTaskList(projectProcess.getProcessInstanceId()));
        taskStatistics.setRemainingTaskNum(this.getNotFinishedTaskNum(projectProcess.getProcessInsId()));
        taskStatistics.setRemainingTaskNum(this.getRemainingTaskNum(projectProcess.getProcessDefId(), projectProcess.getProcessInsId()));
        detail.setStatistics(taskStatistics);
        Result result = Result.ok();
@@ -286,6 +292,7 @@
            for (IdentityLink identityLink : identityLinksForTask) {
                // 绑定的是用户,查出用户姓名、部门
                if (StringUtils.isNotBlank(identityLink.getUserId())) {
                    taskVO.setHandlerType(HandlerTypeEnum.USER);
                    SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
                    if (Objects.nonNull(sysUser)) {
                        taskVO.setHandlerId(sysUser.getUserId());
@@ -298,6 +305,7 @@
                    // 绑定的是角色或者部门
                } else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
                    if (identityLink.getGroupId().startsWith("dept")) {   // 部门的id是加了前缀的如:dept:1
                        taskVO.setHandlerType(HandlerTypeEnum.DEPT);
                        String[] split = identityLink.getGroupId().split(":");
                        if (split.length > 1) {
                            // 部门
@@ -310,6 +318,7 @@
                            }
                        }
                    } else {
                        taskVO.setHandlerType(HandlerTypeEnum.ROLE);
                        SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
                        if (Objects.nonNull(role)) {
                            taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId()));
@@ -332,6 +341,26 @@
                .eq(ProjectProcess::getProcessDefId, query.getProcessDefId())
                .list();
        return Result.ok().data(list);
    }
    @Override
    public Result taskIsAuditing(String processDefinitionId, String taskId) {
        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
        Collection<Process> processes = bpmnModel.getProcesses();
        Boolean needAuditing = Boolean.FALSE;
        for (Process process : processes) {
            Collection<FlowElement> flowElements = process.getFlowElements();
            for (FlowElement flowElement : flowElements) {
                if (flowElement instanceof UserTask && flowElement.getId().equals(task.getTaskDefinitionKey())) {
                    UserTask userTask = (UserTask) flowElement;
                    needAuditing = taskCommonService.checkTaskNeedAuditing(userTask.getExtensionElements().get("properties"));
                    break;
                }
            }
        }
        return Result.ok().data(needAuditing);
    }
    /**
@@ -387,6 +416,7 @@
            for (IdentityLink identityLink : identityLinksForTask) {
                // 绑定的是用户,查出用户姓名、部门
                if (StringUtils.isNotBlank(identityLink.getUserId())) {
                    taskVO.setHandlerType(HandlerTypeEnum.USER);
                    SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
                    if (Objects.nonNull(sysUser)) {
                        taskVO.setHandlerId(sysUser.getUserId());
@@ -399,6 +429,7 @@
                    // 绑定的是角色或者部门
                } else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
                    if (identityLink.getGroupId().startsWith("dept")) {   // 部门的id是加了前缀的如:dept:1
                        taskVO.setHandlerType(HandlerTypeEnum.DEPT);
                        String[] split = identityLink.getGroupId().split(":");
                        if (split.length > 1) {
                            // 部门
@@ -411,6 +442,7 @@
                            }
                        }
                    } else {
                        taskVO.setHandlerType(HandlerTypeEnum.ROLE);
                        SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
                        if (Objects.nonNull(role)) {
                            taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId()));
@@ -440,7 +472,6 @@
        int startNum = pageSize * (pageNum - 1);
        int endNum = startNum + pageSize;
        List<UserTask> allUserTaskElement = this.getAllUserTaskElement(processDefinitionId);
        result.total(allUserTaskElement.size());
        if (startNum >= allUserTaskElement.size()) {
            // 如果起始索引超出了列表的大小,返回一个空列表
            return new ArrayList<>();
@@ -449,6 +480,7 @@
            // 模拟模糊查询
            allUserTaskElement = allUserTaskElement.stream().filter(taskEl -> taskEl.getName().contains(taskName)).collect(Collectors.toList());
        }
        result.total(allUserTaskElement.size());
        int end = Math.min(endNum, allUserTaskElement.size());
        List<UserTask> userTasks = allUserTaskElement.subList(startNum, end);
        // 查出流程
@@ -472,6 +504,7 @@
                if (Objects.isNull(historicTask)) {
                    // 未开始的任务,其关联的用户组这些都可以从UserTask中拿到,因为本身未开始的任务是没有task的,所以这里直接查
                    if (StringUtils.isNotBlank(userTask.getAssignee())) {
                        vo.setHandlerType(HandlerTypeEnum.USER);
                        SysUser sysUser = sysUserService.selectUserById(Long.parseLong(userTask.getAssignee()));
                        if (Objects.nonNull(sysUser)) {
                            vo.setHandlerId(sysUser.getUserId());
@@ -482,6 +515,7 @@
                    } else if (CollectionUtil.isNotEmpty(userTask.getCandidateGroups())) {
                        String groupId = userTask.getCandidateGroups().get(0);
                        if (groupId.startsWith("dept")) {   // 部门的id是加了前缀的如:dept:1
                            vo.setHandlerType(HandlerTypeEnum.DEPT);
                            String[] split = groupId.split(":");
                            if (split.length > 1) {
                                // 部门
@@ -494,6 +528,7 @@
                                }
                            }
                        } else {
                            vo.setHandlerType(HandlerTypeEnum.ROLE);
                            SysRole role = sysRoleService.selectRoleById(Long.parseLong(groupId));
                            if (Objects.nonNull(role)) {
                                vo.setHandlerUnitId(Long.parseLong(groupId));
@@ -547,7 +582,7 @@
        int startNum = pageSize * (pageNum - 1);
        int endNum = startNum + pageSize;
        List<UserTask> allUserTaskElement = this.getAllUserTaskElement(processDefinitionId);
        result.total(allUserTaskElement.size());
        if (startNum >= allUserTaskElement.size()) {
            // 如果起始索引超出了列表的大小,返回一个空列表
            return new ArrayList<>();
@@ -556,6 +591,7 @@
            // 模拟模糊查询
            allUserTaskElement = allUserTaskElement.stream().filter(taskEl -> taskEl.getName().contains(taskName)).collect(Collectors.toList());
        }
        result.total(allUserTaskElement.size());
        int end = Math.min(endNum, allUserTaskElement.size());
        List<UserTask> userTasks = allUserTaskElement.subList(startNum, end);
        // 查出流程
@@ -579,6 +615,7 @@
                if (Objects.isNull(historicTask)) {
                    // 未开始的任务,其关联的用户组这些都可以从UserTask中拿到,因为本身未开始的任务是没有task的,所以这里直接查
                    if (StringUtils.isNotBlank(userTask.getAssignee())) {
                        vo.setHandlerType(HandlerTypeEnum.USER);
                        SysUser sysUser = sysUserService.selectUserById(Long.parseLong(userTask.getAssignee()));
                        if (Objects.nonNull(sysUser)) {
                            vo.setHandlerId(sysUser.getUserId());
@@ -589,6 +626,7 @@
                    } else if (CollectionUtil.isNotEmpty(userTask.getCandidateGroups())) {
                        String groupId = userTask.getCandidateGroups().get(0);
                        if (groupId.startsWith("dept")) {   // 部门的id是加了前缀的如:dept:1
                            vo.setHandlerType(HandlerTypeEnum.DEPT);
                            String[] split = groupId.split(":");
                            if (split.length > 1) {
                                // 部门
@@ -601,6 +639,7 @@
                                }
                            }
                        } else {
                            vo.setHandlerType(HandlerTypeEnum.ROLE);
                            SysRole role = sysRoleService.selectRoleById(Long.parseLong(groupId));
                            if (Objects.nonNull(role)) {
                                vo.setHandlerUnitId(Long.parseLong(groupId));
@@ -680,6 +719,7 @@
                if (StringUtils.isNotBlank(identityLink.getUserId())) {
                    SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
                    if (Objects.nonNull(sysUser)) {
                        taskVO.setHandlerType(HandlerTypeEnum.USER);
                        taskVO.setHandlerId(sysUser.getUserId());
                        if (Objects.nonNull(sysUser.getDept())) {
                            taskVO.setHandlerUnitId(sysUser.getDept().getDeptId());
@@ -690,6 +730,7 @@
                    // 绑定的是角色或者是部门,需要根据id判断
                } else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
                    if (identityLink.getGroupId().startsWith("dept")) {   // 部门的id是加了前缀的如:dept:1
                        taskVO.setHandlerType(HandlerTypeEnum.DEPT);
                        String[] split = identityLink.getGroupId().split(":");
                        if (split.length > 1) {
                            // 部门
@@ -702,6 +743,7 @@
                            }
                        }
                    } else {
                        taskVO.setHandlerType(HandlerTypeEnum.ROLE);
                        SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
                        if (Objects.nonNull(role)) {
                            taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId()));
@@ -716,6 +758,7 @@
            for (IdentityLinkInfo identityLink : identityLinkInfos) {
                // 绑定的是用户,查出用户姓名、部门
                if (StringUtils.isNotBlank(identityLink.getUserId())) {
                    taskVO.setHandlerType(HandlerTypeEnum.USER);
                    SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId()));
                    if (Objects.nonNull(sysUser)) {
//                        taskVO.setHandlerId(sysUser.getUserId());
@@ -728,6 +771,7 @@
                    // 绑定的是角色,查出角色名称
                } else if (StringUtils.isNotBlank(identityLink.getGroupId())) {
                    if (identityLink.getGroupId().startsWith("dept")) {
                        taskVO.setHandlerType(HandlerTypeEnum.DEPT);
                        String[] split = identityLink.getGroupId().split(":");
                        if (split.length > 1) {
                            // 部门
@@ -737,13 +781,15 @@
                                taskVO.setHandlerUnitName(dept.getDeptName());
                            }
                        }
                    }
                    SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
                    if (Objects.nonNull(role)) {
                        taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId()));
                        taskVO.setHandlerUnitName("由拥有角色:【" + role.getRoleName() + "】的人处理");
                    } else {
                        taskVO.setHandlerType(HandlerTypeEnum.ROLE);
                        SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId()));
                        if (Objects.nonNull(role)) {
                            taskVO.setHandlerUnitId(Long.parseLong(identityLink.getGroupId()));
                            taskVO.setHandlerUnitName("由拥有角色:【" + role.getRoleName() + "】的人处理");
//                        taskVO.setHandlerName(role.getRoleName());
//                        taskVO.setHandlerId(null);
                        }
                    }
                }
            }
@@ -794,16 +840,6 @@
     */
    private Long getTotalTaskNum(String processDefinitionId) {
        return Long.valueOf(this.getAllUserTaskElement(processDefinitionId).size());
    }
    /**
     * 获取流程剩余未完成的任务数
     *
     * @param processInstanceId
     * @return
     */
    private Long getNotFinishedTaskNum(String processInstanceId) {
        return historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).processUnfinished().count();
    }
    /**