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/java/com/ycl/service/impl/FlowTaskServiceImpl.java |   86 +++++++++++++++++++++++++++++--------------
 1 files changed, 58 insertions(+), 28 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;

--
Gitblit v1.8.0