以下是将Activiti任务从旧流程迁移到新流程的Java迁移的步骤: 1. 获取旧流程中的所有任务 ```java List<Task> oldTasks = taskService.createTaskQuery().processDefinitionKey(oldProcessDefinitionKey).list(); ``` 2. 遍历旧任务列表,将每个任务的流程变量复制到新任务中 ```java for (Task oldTask : oldTasks) { Task newTask = taskService.newTask(); newTask.setName(oldTask.getName()); newTask.setAssignee(oldTask.getAssignee()); newTask.setProcessDefinitionKey(newProcessDefinitionKey); newTask.setProcessInstanceId(newProcessInstanceId); newTask.setParentTaskId(newParentTaskId); newTask.setTaskDefinitionKey(oldTask.getTaskDefinitionKey()); newTask.setPriority(oldTask.getPriority()); newTask.setDescription(oldTask.getDescription()); newTask.setDueDate(oldTask.getDueDate()); newTask.setCategory(oldTask.getCategory()); newTask.setFormKey(oldTask.getFormKey()); newTask.setOwner(oldTask.getOwner()); newTask.setTenantId(oldTask.getTenantId()); newTask.setCreateTime(oldTask.getCreateTime()); newTask.setExecutionId(newExecutionId); newTask.setSuspended(oldTask.isSuspended()); newTask.setTaskLocalVariables(oldTask.getTaskLocalVariables()); newTask.setProcessVariables(oldTask.getProcessVariables()); taskService.saveTask(newTask); } ``` 3. 删除旧任务 ```java for (Task oldTask : oldTasks) { taskService.deleteTask(oldTask.getId(), true); } ``` 4. 更新新流程的流程变量 ```java Map<String, Object> variables = new HashMap<>(); variables.put("oldProcessInstanceId", oldProcessInstanceId); variables.put("oldTasks", oldTasks); runtimeService.setVariables(newProcessInstanceId, variables); ``` 5. 完成新任务 ```java for (Task newTask : newTasks) { taskService.complete(newTask.getId()); } ``` 这些步骤将旧流程中的任务复制到新流程中,并将流程变量从旧任务复制到新任务中。然后删除旧任务,并更新新流程的流程变量。最后,完成新任务。