update - 处理转交/加签的节点下,在审批日志中展示的人和数量异常的问题

This commit is contained in:
wangli 2023-12-13 17:06:09 +08:00
parent 2f0a0dd84b
commit b336828207
3 changed files with 56 additions and 28 deletions

View File

@ -29,6 +29,7 @@ public interface BpmnConstants {
@Deprecated
String OLD_INTERNAL_TASK_RELATION_ASSIGNEE_INFO_SNAPSHOT = "[_ASSIGNEE_INFO_SNAPSHOT_]";
String INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT = "[_ACTIVITY_INFO_SNAPSHOT_]";
String INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_REALTIME = "[_ACTIVITY_INFO_REALTIME_]";
String COUNTERSIGN_REMAIN_ASSIGNER_LIST = "[_COUNTERSIGN_REMAIN_ASSIGNER_LIST_]";
String COUNTERSIGN_ORIGIN_ASSIGNER = "[_COUNTERSIGN_ORIGIN_ASSIGNER_]";

View File

@ -48,7 +48,7 @@ public class BpmnTaskCountersignDTO implements Serializable {
@ApiModelProperty(value = "加签任务转发给谁")
@NotNull(message = "加签任务接收人不能为空")
@NotEmpty(message = "加签任务接收人不能为空")
private List<BpmnTaskDelegateAssigner> targetAssignerList;
@ApiModelProperty(value = "加签任务原发起人")

View File

@ -428,6 +428,28 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService {
}
}
private void createSignSubTasksV2(BpmnTaskCountersignDTO countersignDTO, TaskEntity taskEntity) {
// 这个节点下所有审批人快照
String activityListSnapshot =
INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + taskEntity.getTaskDefinitionKey();
List<BpmnTaskDelegateAssigner> taskAssignerListSnapshot =
runtimeService.getVariable(taskEntity.getProcessInstanceId(),
activityListSnapshot, List.class);
taskAssignerListSnapshot.addAll(countersignDTO.getTargetAssignerList());
runtimeService.setVariable(taskEntity.getProcessInstanceId(), activityListSnapshot, taskAssignerListSnapshot);
log.info("正在进行加签任务:{},待加签人合并列表:{}", taskEntity.getId(), JSONUtil.toJsonStr(taskAssignerListSnapshot));
// 因为当前的审批人会帮他结束任务,以便生成加签日志, 所以在这里重新加入审批人
countersignDTO.getTargetAssignerList().add(countersignDTO.getOriginAssigner());
countersignDTO.getTargetAssignerList().forEach(assigner -> {
String parentTaskId = taskEntity.getParentTaskId();
if (!StringUtils.hasLength(parentTaskId)) {
parentTaskId = taskEntity.getId();
}
this.createSubTask(taskEntity, parentTaskId, assigner);
});
}
/**
* 创建子任务
*
@ -438,39 +460,42 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService {
protected void createSubTask(TaskEntity parentTask, String parentTaskId, BpmnTaskDelegateAssigner assigner) {
if (parentTask != null) {
//1.生成新的工作流子任务
// IdGenerator idGenerator = springProcessEngineConfiguration.getIdGenerator();
// task = (TaskEntity) taskService.newTask(idGenerator.getNextId());
// task.setCategory(parentTask.getCategory());
// task.setDescription(parentTask.getDescription());
// task.setTenantId(parentTask.getTenantId());
// task.setName(parentTask.getName());
// task.setAssignee(assigner.buildAssigneeId());
// task.setParentTaskId(parentTaskId);
// task.setProcessDefinitionId(parentTask.getProcessDefinitionId());
// task.setProcessInstanceId(parentTask.getProcessInstanceId());
// task.setTaskDefinitionKey(parentTask.getTaskDefinitionKey());
// task.setTaskDefinitionId(parentTask.getTaskDefinitionId());
// task.setPriority(parentTask.getPriority());
// task.setCreateTime(new Date());
// IdGenerator idGenerator = springProcessEngineConfiguration.getIdGenerator();
// task = (TaskEntity) taskService.newTask(idGenerator.getNextId());
// task.setCategory(parentTask.getCategory());
// task.setDescription(parentTask.getDescription());
// task.setTenantId(parentTask.getTenantId());
// task.setName(parentTask.getName());
// task.setAssignee(assigner.buildAssigneeId());
// task.setParentTaskId(parentTaskId);
// task.setProcessDefinitionId(parentTask.getProcessDefinitionId());
// task.setProcessInstanceId(parentTask.getProcessInstanceId());
// task.setTaskDefinitionKey(parentTask.getTaskDefinitionKey());
// task.setTaskDefinitionId(parentTask.getTaskDefinitionId());
// task.setPriority(parentTask.getPriority());
// task.setCreateTime(new Date());
Map<String, Object> executionVariables = new HashMap<>();
executionVariables.put("assigneeName", assigner.buildAssigneeId());
// Execution execution = runtimeService.executeActivityInAdhocSubProcess(parentTask.getExecutionId(), parentTask.getTaskDefinitionKey());
Execution subExecution = runtimeService.addMultiInstanceExecution(parentTask.getTaskDefinitionKey(), parentTask.getProcessInstanceId(), executionVariables);
// Execution execution = runtimeService.executeActivityInAdhocSubProcess(parentTask
// .getExecutionId(), parentTask.getTaskDefinitionKey());
Execution subExecution = runtimeService.addMultiInstanceExecution(parentTask.getTaskDefinitionKey(),
parentTask.getProcessInstanceId(), executionVariables);
Task subTask = taskService.createTaskQuery().executionId(subExecution.getId()).singleResult();
subTask.setParentTaskId(parentTaskId);
taskService.saveTask(subTask);
// ExecutionEntity concurrentExecution = CommandContextUtil.getExecutionEntityManager()
// .createChildExecution((ExecutionEntity) multiInstanceRootExecution);
// Execution subExecution = runtimeService.createExecutionQuery()
// .parentId(parentTask.getExecutionId()) // 将新执行实例设置为当前执行实例的子实例
// .activityId(parentTask.getTaskDefinitionKey()) // 指定活动ID
// .singleResult();
// task.setExecutionId(subExecution.getId());
// ExecutionEntity concurrentExecution = CommandContextUtil.getExecutionEntityManager()
// .createChildExecution((ExecutionEntity) multiInstanceRootExecution);
// Execution subExecution = runtimeService.createExecutionQuery()
// .parentId(parentTask.getExecutionId()) // 将新执行实例设置为当前执行实例的子实例
// .activityId(parentTask.getTaskDefinitionKey()) // 指定活动ID
// .singleResult();
// task.setExecutionId(subExecution.getId());
log.info("流程加签父任务:{},", parentTaskId);
// taskService.saveTask(task);
// taskService.saveTask(task);
// springProcessEngineConfiguration.getCommandExecutor().execute(new CustomEventAssignment(parentTask.getProcessDefinitionId(), parentTask.getTaskDefinitionKey(), task));
// springProcessEngineConfiguration.getCommandExecutor().execute(new CustomEventAssignment
// (parentTask.getProcessDefinitionId(), parentTask.getTaskDefinitionKey(), task));
}
}
@ -637,7 +662,9 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService {
BpmnTaskDelegateAssigner assigner = Objects.nonNull(assginerSnapshot) ?
(BpmnTaskDelegateAssigner) assginerSnapshot.getValue() : null;
vo.setAssignee(Objects.isNull(assigner) ? "" : assigner.getAssignee());
if (!Objects.equals(TASK_ASSIGNEE_SKIP_FLAT, vo.getAssignee())) {
vo.setAssignee(Objects.isNull(assigner) ? "" : assigner.getAssignee());
}
vo.setAssigneeSnapshot(assigner);
}
return vos;
@ -829,7 +856,7 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService {
//该父任务加签时会创建子任务用于分配给其他人加签
//目前多个子任务时会按照加签人的顺序依次进行加签操作
//例如 加签按顺序依次分配给ABC三人,需A任务进行完成后进行B任务再进行C任务
this.createSignSubTasks(dto, (TaskEntity) task);
this.createSignSubTasksV2(dto, (TaskEntity) task);
} else {
throw new WorkflowEngineException(TASK_APOSTILLE_NOT_SUPPORT);
}