修改任务彻底实现,查询表单数据不使用任务上的流程变量,单独去查流程变量
2个文件已修改
105 ■■■■ 已修改文件
business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/resources/mapper/ProjectProcessMapper.xml 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
@@ -1445,7 +1445,6 @@
    public AjaxResult currentFlowTaskForm(String taskId) {
        // 流程变量
        List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery()
                .includeProcessVariables()
                .finished()
                .taskId(taskId)
                .orderByHistoricTaskInstanceStartTime()
@@ -1455,7 +1454,19 @@
            return AjaxResult.error("未找到该任务信息");
        }
        HistoricTaskInstance historicTaskInstance = hisTaskList.get(0);
        Map<String, Object> parameters = historicTaskInstance.getProcessVariables();
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().includeProcessVariables().processInstanceId(historicTaskInstance.getProcessInstanceId()).singleResult();
        Map<String, Object> parameters = new HashMap<>();
        if (Objects.nonNull(processInstance)) {
            parameters = processInstance.getProcessVariables();
        } else {
            // 如果为空,表明流程已经结束
            HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().processInstanceId(historicTaskInstance.getProcessInstanceId()).singleResult();
            if (Objects.isNull(historicProcessInstance)) {
                throw new RuntimeException("流程不存在");
            }
            parameters = historicProcessInstance.getProcessVariables();
        }
        String processInsId = historicTaskInstance.getProcessInstanceId();
        List<FormDetailVO> beforeNodes = this.getBeforeNodeForm(parameters,
                historicTaskInstance.getFormKey(),
@@ -1504,36 +1515,55 @@
    @Override
    public AjaxResult flowTaskForm(String taskId) throws Exception {
        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
        // 流程变量
        Map<String, Object> parameters = new HashMap<>();
        List<FormDetailVO> beforeNodes = new ArrayList<>();
        // 1. 获取到变量信息,因为任务可能是运行中的也可能是历史任务
        String processInsId = "";
        List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery()
                .includeProcessVariables()
                .finished()
                .taskId(taskId)
                .orderByHistoricTaskInstanceStartTime()
                .desc()
                .list();
        if (CollectionUtils.isNotEmpty(hisTaskList) && Objects.nonNull(hisTaskList.get(0))) {
            parameters = hisTaskList.get(0).getProcessVariables();
            processInsId = hisTaskList.get(0).getProcessInstanceId();
            beforeNodes = this.getBeforeNodeForm(parameters,
                    hisTaskList.get(0).getFormKey(),
                    hisTaskList.get(0).getName(),
                    hisTaskList.get(0).getProcessDefinitionId(),
                    hisTaskList.get(0).getTaskDefinitionKey(),
                    Boolean.FALSE, Boolean.TRUE);
        String processDefId = "";
        String formKey = "";
        String taskName = "";
        String taskDefKey = "";
        if (Objects.isNull(task)) {
            List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery()
                    .finished()
                    .taskId(taskId)
                    .orderByHistoricTaskInstanceStartTime()
                    .desc()
                    .list();
            if (CollectionUtils.isEmpty(hisTaskList) || Objects.isNull(hisTaskList.get(0))) {
                return AjaxResult.error("任务不存在");
            }
            HistoricTaskInstance hisTask = hisTaskList.get(0);
            processInsId = hisTask.getProcessInstanceId();
            processDefId = hisTask.getProcessDefinitionId();
            formKey = hisTask.getFormKey();
            taskName = hisTask.getName();
            taskDefKey = hisTask.getTaskDefinitionKey();
        } else {
            parameters = taskService.getVariables(taskId);
            processInsId = task.getProcessInstanceId();
            beforeNodes = this.getBeforeNodeForm(parameters,
                    task.getFormKey(),
                    task.getName(),
                    task.getProcessDefinitionId(),
                    task.getTaskDefinitionKey(),
                    Boolean.FALSE, Boolean.TRUE);
            processDefId = task.getProcessDefinitionId();
            formKey = task.getFormKey();
            taskName = task.getName();
            taskDefKey = task.getTaskDefinitionKey();
        }
        // 2. 获取流程变量
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().includeProcessVariables().processInstanceId(processInsId).singleResult();
        Map<String, Object> parameters = new HashMap<>();
        if (Objects.nonNull(processInstance)) {
            parameters = processInstance.getProcessVariables();
        } else {
            // 如果为空,表明流程已经结束
            HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().processInstanceId(processInsId).singleResult();
            if (Objects.isNull(historicProcessInstance)) {
                throw new RuntimeException("流程不存在");
            }
            parameters = historicProcessInstance.getProcessVariables();
        }
        List<FormDetailVO> beforeNodes = new ArrayList<>();
        beforeNodes = this.getBeforeNodeForm(parameters,
                formKey,
                taskName,
                processDefId,
                taskDefKey,
                Boolean.TRUE, Boolean.TRUE);
        // 判断前置任务是不是和当前任务为同一个executeId
        // 判断当前任务是否被挂起中
        String finalProcessInsId = processInsId;
business/src/main/resources/mapper/ProjectProcessMapper.xml
@@ -179,11 +179,26 @@
        SELECT TPP.process_ins_id FROM t_project_engineering TPE INNER JOIN t_project_process TPP ON TPE.id = TPP.project_id AND TPE.deleted = 0 AND TPP.project_type = 'ENGINEERING'
    </select>
    <select id="getHisByteId" resultType="com.ycl.domain.vo.FlowableVarVO">
    <resultMap id="flowableVarVOResultMap" type="com.ycl.domain.vo.FlowableVarVO">
        <id property="ID_" column="ID_"/>
        <result property="PROC_INST_ID_" column="PROC_INST_ID_"/>
        <result property="EXECUTION_ID_" column="EXECUTION_ID_"/>
        <result property="NAME_" column="NAME_"/>
        <result property="VAR_TYPE_" column="VAR_TYPE_"/>
        <result property="BYTEARRAY_ID_" column="BYTEARRAY_ID_"/>
        <result property="DOUBLE_" column="DOUBLE_"/>
        <result property="LONG_" column="LONG_"/>
        <result property="TEXT_" column="TEXT_"/>
        <result property="TEXT2_" column="TEXT2_"/>
        <result property="CREATE_TIME_" column="CREATE_TIME_"/>
        <result property="LAST_UPDATED_TIME_" column="LAST_UPDATED_TIME_"/>
    </resultMap>
    <select id="getHisByteId" resultMap="flowableVarVOResultMap">
        SELECT ID_, PROC_INST_ID_, EXECUTION_ID_, NAME_, VAR_TYPE_, BYTEARRAY_ID_ FROM act_hi_varinst WHERE PROC_INST_ID_ = #{processInsId} AND NAME_ = #{keyName}
    </select>
    <select id="getRuByteId" resultType="com.ycl.domain.vo.FlowableVarVO">
    <select id="getRuByteId" resultMap="flowableVarVOResultMap">
        SELECT ID_, PROC_INST_ID_, EXECUTION_ID_, NAME_, TYPE_ as VAR_TYPE_, BYTEARRAY_ID_ FROM act_ru_variable WHERE PROC_INST_ID_ = #{processInsId} AND NAME_ = #{keyName}
    </select>