xiangpei
2024-11-29 de04015a9eaf4a9928a1cba6cdfceed03146a720
项目启动流程、变更流程逻辑调整
4个文件已修改
80 ■■■■■ 已修改文件
business/src/main/java/com/ycl/controller/ProjectProcessController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/ProjectProcessService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/resources/mapper/ProjectProcessMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/controller/ProjectProcessController.java
@@ -42,7 +42,7 @@
    @PostMapping("/set")
    @ApiOperation(value = "项目设置流程", notes = "项目设置流程")
    @ApiOperation(value = "项目变更流程", notes = "项目变更流程")
//    @PreAuthorize("@ss.hasPermi('projectProcess:set')")
    public Result projectSetProcess(@RequestBody @Validated ProjectProcessForm form) {
        return projectProcessService.projectSetProcess(form);
@@ -59,7 +59,7 @@
    @PostMapping("/start/{projectId}/{processDefId}")
    @ApiOperation(value = "启动流程", notes = "启动流程")
//    @PreAuthorize("@ss.hasPermi('projectProcess:start')")
    public Result startProcess(@PathVariable("projectId") String projectId, @PathVariable("processDefId") String processDefId) {
    public Result startProcess(@PathVariable("projectId") Long projectId, @PathVariable("processDefId") String processDefId) {
        return projectProcessService.startProcess(projectId, processDefId);
    }
business/src/main/java/com/ycl/service/ProjectProcessService.java
@@ -47,7 +47,7 @@
     * @param projectId  项目id,作为业务id存入activity表
     * @return
     */
    Result startProcess(String projectId, String processDefId);
    Result startProcess(Long projectId, String processDefId);
    /**
     * 查询任务列表
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -85,52 +85,69 @@
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result projectSetProcess(ProjectProcessForm form) {
        // 查询该项目是否已经绑定过流程了,检查绑定的流程是否在运行,在运行就删了
        ProjectProcess pp = new LambdaQueryChainWrapper<>(baseMapper)
                .eq(ProjectProcess::getProjectId, form.getProjectId())
                .one();
        if (Objects.nonNull(pp)) {
            // TODO 处理之前绑定过的流程数据
            new LambdaUpdateChainWrapper<>(baseMapper)
                    .eq(ProjectProcess::getProjectId, form.getProjectId())
                    .set(ProjectProcess::getProcessDefId, form.getProcessDefId())
                    .update();
        } else {
            ProjectProcess entity = ProjectProcessForm.getEntityByForm(form, null);
            baseMapper.insert(entity);
        if (Objects.isNull(pp)) {
            throw new RuntimeException("该项目未绑定流程");
        }
        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());
            }
        }
        String processInsId = this.startPro(form.getProjectId(), form.getProcessDefId());
        new LambdaUpdateChainWrapper<>(baseMapper)
                .eq(ProjectProcess::getProjectId, form.getProjectId())
                .set(ProjectProcess::getProcessDefId, form.getProcessDefId())
                .set(ProjectProcess::getProcessInsId, processInsId)
                .update();
        return Result.ok("流程变更成功");
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result startProcess(String projectId, String processDefId) {
    public Result startProcess(Long projectId, String processDefId) {
        String processInsId = this.startPro(projectId, processDefId);
        ProjectProcess entity = new ProjectProcess();
        entity.setProjectId(projectId);
        entity.setProcessDefId(processDefId);
        entity.setProcessInsId(processInsId);
        baseMapper.insert(entity);
        return Result.ok("流程启动成功");
    }
    /**
     * 启动流程
     *
     * @param projectId
     * @param processDefId
     * @return
     */
    private String startPro(Long projectId, String processDefId) {
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefId)
                .latestVersion().singleResult();
        if (Objects.nonNull(processDefinition) && processDefinition.isSuspended()) {
            return Result.error("该流程已被挂起,请先激活流程");
            throw new RuntimeException("该流程已被挂起,请先激活流程");
        }
        Map<String, Object> variables = new HashMap<>(2);
        // 设置流程发起人Id到流程中
        SysUser sysUser = SecurityUtils.getLoginUser().getUser();
        identityService.setAuthenticatedUserId(sysUser.getUserId().toString());
        variables.put(ProcessConstants.PROCESS_INITIATOR, sysUser.getUserId());
        ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefId, projectId, variables);
//        // 流程发起时 跳过发起人节点
//        // 给第一步申请人节点设置任务执行人和意见
//        Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
//        if (Objects.nonNull(task)) {
//            taskService.addComment(task.getId(), processInstance.getProcessInstanceId(), FlowComment.NORMAL.getType(), sysUser.getNickName() + "发起流程申请");
//            taskService.complete(task.getId(), variables);
//        }
        // 项目流程关联流程实例id
        new LambdaUpdateChainWrapper<>(baseMapper)
                .eq(ProjectProcess::getProjectId, projectId)
                .eq(ProjectProcess::getProcessDefId, processDefId)
                .set(ProjectProcess::getProcessInsId, processInstance.getProcessInstanceId())
                .update();
        return Result.ok("流程启动成功");
        ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefId, projectId + "", variables);
        return processInstance.getId();
    }
    /**
@@ -458,6 +475,7 @@
     * @param identityLinkInfos 如果是已完成的任务,用这个去取关联的用户/用户组
     */
    private void setPromoterAndHandler(CustomerTaskVO taskVO, List<? extends IdentityLinkInfo> identityLinkInfos) {
        // TODO 发起人是否应为上一节点的处理人
        // 流程发起人信息
        HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
                .processInstanceId(taskVO.getProcessInsId())
business/src/main/resources/mapper/ProjectProcessMapper.xml
@@ -38,6 +38,7 @@
        <result column="update_by" property="updateBy" />
        <result column="create_by" property="createBy" />
        <result column="process_def_id" property="processDefId" />
        <result column="process_ins_id" property="processInsId" />
<!--        <association property="id" column=""-->
    </resultMap>
@@ -59,7 +60,8 @@
    <select id="getPage" resultMap="BaseResultMap">
        SELECT
            PI.*,
            TPP.process_def_id
            TPP.process_def_id,
            TPP.process_ins_id
        FROM
            t_project_info PI
                LEFT JOIN t_project_process TPP ON TPP.project_id = PI.id AND TPP.deleted = 0 AND PI.deleted = 0