From 571ec3d3aef0ab51cc4e95f816082fbe0dc68456 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 08 四月 2025 18:11:09 +0800
Subject: [PATCH] 修改任务彻底实现,查询表单数据不使用任务上的流程变量,单独去查流程变量

---
 business/src/main/resources/mapper/ProjectProcessMapper.xml          |   19 ++++++++-
 business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java |   86 +++++++++++++++++++++++++++++--------------
 2 files changed, 75 insertions(+), 30 deletions(-)

diff --git a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
index bf9dcf8..a891ed1 100644
--- a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
+++ b/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);
         // 鍒ゆ柇鍓嶇疆浠诲姟鏄笉鏄拰褰撳墠浠诲姟涓哄悓涓�涓猠xecuteId
         // 鍒ゆ柇褰撳墠浠诲姟鏄惁琚寕璧蜂腑
         String finalProcessInsId = processInsId;
diff --git a/business/src/main/resources/mapper/ProjectProcessMapper.xml b/business/src/main/resources/mapper/ProjectProcessMapper.xml
index 2df3a94..b938fa6 100644
--- a/business/src/main/resources/mapper/ProjectProcessMapper.xml
+++ b/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>
 

--
Gitblit v1.8.0