feat(REQ-2924) - 完整测试单条分支路线各种节点的日志生成数据
This commit is contained in:
parent
27a640048a
commit
f221b53c3d
@ -62,6 +62,7 @@ public class CustomServiceTaskDelegateExpressionActivityBehavior extends Service
|
||||
task.setPropagatedStageInstanceId(execution.getPropagatedStageInstanceId());
|
||||
task.setName(serviceTask.getName());
|
||||
TaskHelper.insertTask(task, (ExecutionEntity) execution, true, false);
|
||||
log.error("ServiceTask execute taskId: {}", task.getId());
|
||||
|
||||
// 添加 taskInst 扩展表数据
|
||||
FlowableEventDispatcher eventDispatcher = processEngineConfiguration.getEventDispatcher();
|
||||
@ -81,6 +82,7 @@ public class CustomServiceTaskDelegateExpressionActivityBehavior extends Service
|
||||
org.flowable.engine.TaskService taskService = processEngineConfiguration.getTaskService();
|
||||
TaskEntity serviceTask = (TaskEntity) taskService.createTaskQuery().taskId(task.getId())
|
||||
.taskDefinitionKey(execution.getCurrentActivityId()).singleResult();
|
||||
log.error("ServiceTask leave taskId: {}", serviceTask.getId());
|
||||
if (Objects.nonNull(serviceTask)) {
|
||||
// 用于新版日志
|
||||
serviceTask.setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + serviceTask.getId(), APPROVED.getStatus());
|
||||
|
||||
@ -80,13 +80,13 @@ public class CustomTaskHelper {
|
||||
return;
|
||||
}
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration =
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
Map<String, Object> executionVariables = new HashMap<>();
|
||||
executionVariables.put("assigneeName", newTaskAssignee.buildAssigneeId());
|
||||
|
||||
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
|
||||
Execution subExecution = runtimeService.addMultiInstanceExecution(originTask.getTaskDefinitionKey(),
|
||||
originTask.getProcessInstanceId(), executionVariables);
|
||||
originTask.getProcessInstanceId(), executionVariables);
|
||||
|
||||
setParentTaskId(originTask, subExecution);
|
||||
}
|
||||
@ -96,19 +96,19 @@ public class CustomTaskHelper {
|
||||
return;
|
||||
}
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration =
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
|
||||
runtimeService.deleteMultiInstanceExecution(originTask.getExecutionId(), false);
|
||||
}
|
||||
|
||||
private static void setParentTaskId(TaskEntity originTask, Execution subExecution) {
|
||||
CommandContextUtil.getEntityCache().findInCache(TaskEntity.class).stream()
|
||||
.filter(i -> Objects.equals(i.getExecutionId(), subExecution.getId()))
|
||||
.findAny().ifPresent(i -> i.setParentTaskId(originTask.getId()));
|
||||
.filter(i -> Objects.equals(i.getExecutionId(), subExecution.getId()))
|
||||
.findAny().ifPresent(i -> i.setParentTaskId(originTask.getId()));
|
||||
|
||||
CommandContextUtil.getEntityCache().findInCache(HistoricTaskInstanceEntity.class).stream()
|
||||
.filter(i -> Objects.equals(i.getExecutionId(), subExecution.getId()))
|
||||
.findAny().ifPresent(i -> i.setParentTaskId(originTask.getId()));
|
||||
.filter(i -> Objects.equals(i.getExecutionId(), subExecution.getId()))
|
||||
.findAny().ifPresent(i -> i.setParentTaskId(originTask.getId()));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -121,7 +121,7 @@ public class CustomTaskHelper {
|
||||
public static void validTask(HistoricTaskInstance historicTaskInstance, TaskEntity taskEntity,
|
||||
BpmnTaskDelegateAssigner originTaskAssigner, List<BpmnFlowNodeType> nodeTypes) {
|
||||
if (Objects.nonNull(historicTaskInstance) &&
|
||||
(Objects.nonNull(historicTaskInstance.getEndTime()) || Objects.isNull(taskEntity))) {
|
||||
(Objects.nonNull(historicTaskInstance.getEndTime()) || Objects.isNull(taskEntity))) {
|
||||
throw new WorkflowEngineException(TASK_HAS_BEEN_COMPLETE);
|
||||
}
|
||||
|
||||
@ -171,14 +171,14 @@ public class CustomTaskHelper {
|
||||
TaskEntity taskEntity,
|
||||
List<BpmnTaskDelegateAssigner> targetAssigneeList) {
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration =
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
|
||||
|
||||
// 这个节点下所有审批人快照
|
||||
String activityListSnapshot =
|
||||
INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + taskEntity.getTaskDefinitionKey();
|
||||
INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + taskEntity.getTaskDefinitionKey();
|
||||
List<BpmnTaskDelegateAssigner> taskAssignerListSnapshot =
|
||||
runtimeService.getVariable(taskEntity.getProcessInstanceId(), activityListSnapshot, List.class);
|
||||
runtimeService.getVariable(taskEntity.getProcessInstanceId(), activityListSnapshot, List.class);
|
||||
AtomicInteger existsCount = new AtomicInteger();
|
||||
taskAssignerListSnapshot.forEach(i -> {
|
||||
targetAssigneeList.forEach(j -> {
|
||||
@ -228,19 +228,19 @@ public class CustomTaskHelper {
|
||||
return;
|
||||
}
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration =
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
TaskService taskService = processEngineConfiguration.getTaskService();
|
||||
Authentication.setAuthenticatedUserId(assigner.buildAssigneeId());
|
||||
attachmentList.forEach(dto -> {
|
||||
Attachment attachment = taskService.createAttachment(dto.getType().getType(), taskId, processInstanceId,
|
||||
dto.getName(), dto.getDescription(), dto.getUrl());
|
||||
dto.getName(), dto.getDescription(), dto.getUrl());
|
||||
taskService.saveAttachment(attachment);
|
||||
});
|
||||
Authentication.setAuthenticatedUserId(null);
|
||||
}
|
||||
|
||||
public static void addComment(CommandContext commandContext, String taskId, String processInstanceId,
|
||||
String type, String message) {
|
||||
String type, String message) {
|
||||
TaskEntity task = new TaskEntityImpl();
|
||||
task.setId(taskId);
|
||||
task.setProcessInstanceId(processInstanceId);
|
||||
@ -256,7 +256,7 @@ public class CustomTaskHelper {
|
||||
return;
|
||||
}
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration =
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
|
||||
String userId = Authentication.getAuthenticatedUserId();
|
||||
CommentEntity comment = processEngineConfiguration.getCommentEntityManager().create();
|
||||
@ -276,13 +276,12 @@ public class CustomTaskHelper {
|
||||
comment.setFullMessage(message);
|
||||
|
||||
processEngineConfiguration.getCommentEntityManager().insert(comment);
|
||||
|
||||
task.setTransientVariable(type, message);
|
||||
task.setTransientVariableLocal(type, message);
|
||||
}
|
||||
|
||||
public static Attachment addAttachment(CommandContext commandContext, Task task, AttachmentDTO attachmentDto) {
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration =
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
AttachmentEntity attachment = processEngineConfiguration.getAttachmentEntityManager().create();
|
||||
attachment.setName(attachmentDto.getName());
|
||||
attachment.setProcessInstanceId(task.getProcessInstanceId());
|
||||
@ -298,11 +297,11 @@ public class CustomTaskHelper {
|
||||
ExecutionEntity processInstance = null;
|
||||
if (task.getProcessInstanceId() != null) {
|
||||
processInstance =
|
||||
processEngineConfiguration.getExecutionEntityManager().findById(task.getProcessInstanceId());
|
||||
processEngineConfiguration.getExecutionEntityManager().findById(task.getProcessInstanceId());
|
||||
}
|
||||
|
||||
processEngineConfiguration.getHistoryManager().createAttachmentComment((TaskEntity) task, processInstance,
|
||||
attachmentDto.getName(), true);
|
||||
attachmentDto.getName(), true);
|
||||
|
||||
return attachment;
|
||||
}
|
||||
@ -321,15 +320,15 @@ public class CustomTaskHelper {
|
||||
* @return
|
||||
*/
|
||||
public static Task createVirtualTask(CommandContext commandContext, ExtAxHiTaskInstService extAxHiTaskInstService
|
||||
, String processInstanceId, String nodeName, String taskDefinitionKey, String advice,
|
||||
, String processInstanceId, String nodeName, String taskDefinitionKey, String advice,
|
||||
BpmnTaskDelegateAssigner assigner,
|
||||
String extTaskInstStatus, AddComment addComment) {
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration =
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
HistoryService historyService = processEngineConfiguration.getHistoryService();
|
||||
|
||||
HistoricProcessInstance processInstance =
|
||||
historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
|
||||
historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
|
||||
|
||||
TaskService taskService = processEngineConfiguration.getTaskService();
|
||||
IdGenerator idGenerator = processEngineConfiguration.getIdGenerator();
|
||||
@ -346,12 +345,12 @@ public class CustomTaskHelper {
|
||||
|
||||
if (Objects.nonNull(assigner)) {
|
||||
CommandContextUtil.getEntityCache().findInCache(TaskEntity.class).stream()
|
||||
.filter(i -> Objects.equals(i.getId(), task.getId())).findAny()
|
||||
.ifPresent(i -> i.setAssignee(assigner.buildAssigneeId()));
|
||||
.filter(i -> Objects.equals(i.getId(), task.getId())).findAny()
|
||||
.ifPresent(i -> i.setAssignee(assigner.buildAssigneeId()));
|
||||
|
||||
CommandContextUtil.getEntityCache().findInCache(HistoricTaskInstanceEntity.class).stream()
|
||||
.filter(i -> Objects.equals(i.getId(), task.getId())).findAny()
|
||||
.ifPresent(i -> i.setAssignee(assigner.buildAssigneeId()));
|
||||
.filter(i -> Objects.equals(i.getId(), task.getId())).findAny()
|
||||
.ifPresent(i -> i.setAssignee(assigner.buildAssigneeId()));
|
||||
}
|
||||
|
||||
// 添加审批意见
|
||||
@ -360,7 +359,7 @@ public class CustomTaskHelper {
|
||||
addComment(commandContext, task, addComment);
|
||||
|
||||
CustomTaskHelper.createExtTaskInst(extAxHiTaskInstService, task.getProcessInstanceId(), task.getId(),
|
||||
task.getTaskDefinitionKey(), assigner, extTaskInstStatus);
|
||||
task.getTaskDefinitionKey(), assigner, extTaskInstStatus);
|
||||
task.setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + task.getId(), extTaskInstStatus);
|
||||
|
||||
// 保存任务
|
||||
@ -389,7 +388,6 @@ public class CustomTaskHelper {
|
||||
if (StringUtils.hasLength(comment)) {
|
||||
Authentication.setAuthenticatedUserId(userId);
|
||||
addComment(commandContext, task, COMMENT_TYPE_ADVICE, comment);
|
||||
task.setTransientVariable(COMMENT_TYPE_ADVICE + task.getId(), comment);
|
||||
Authentication.setAuthenticatedUserId(null);
|
||||
}
|
||||
}
|
||||
@ -417,10 +415,10 @@ public class CustomTaskHelper {
|
||||
return delegateAssigners;
|
||||
}
|
||||
return new ArrayList<>(delegateAssigners.stream()
|
||||
.filter(i -> StringUtils.hasText(i.getPersonId()))
|
||||
.filter(i -> !Objects.equals(i.getPersonId(), "null"))
|
||||
.collect(Collectors.toMap(BpmnTaskDelegateAssigner::getPersonId, Function.identity(), (s, t) -> s))
|
||||
.values());
|
||||
.filter(i -> StringUtils.hasText(i.getPersonId()))
|
||||
.filter(i -> !Objects.equals(i.getPersonId(), "null"))
|
||||
.collect(Collectors.toMap(BpmnTaskDelegateAssigner::getPersonId, Function.identity(), (s, t) -> s))
|
||||
.values());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -447,27 +445,27 @@ public class CustomTaskHelper {
|
||||
|
||||
List<BpmnTaskDelegateAssigner> result = new ArrayList<>();
|
||||
List<HistoricTaskInstance> taskInstances = historyService.createHistoricTaskInstanceQuery()
|
||||
.processInstanceId(processInstanceId)
|
||||
.orderByHistoricTaskInstanceStartTime()
|
||||
.desc().list();
|
||||
.processInstanceId(processInstanceId)
|
||||
.orderByHistoricTaskInstanceStartTime()
|
||||
.desc().list();
|
||||
List<BpmnHistoricTaskInstanceVO> vos = historicTaskInstanceConverter.toVosSkipSystemOperation(taskInstances,
|
||||
serviceVersion);
|
||||
serviceVersion);
|
||||
|
||||
Map<String, HistoricVariableInstance> variableInstanceMap =
|
||||
// 不能使用框架提供的历史变量 API 查询,有 BUG
|
||||
historyService.createNativeHistoricVariableInstanceQuery()
|
||||
.sql("select * from ACT_HI_VARINST t where t.proc_inst_id_= #{processInstanceId}")
|
||||
.parameter("processInstanceId", processInstanceId)
|
||||
.list().stream()
|
||||
.collect(Collectors.toMap(HistoricVariableInstance::getVariableName,
|
||||
Function.identity(), (s, t) -> s));
|
||||
// 不能使用框架提供的历史变量 API 查询,有 BUG
|
||||
historyService.createNativeHistoricVariableInstanceQuery()
|
||||
.sql("select * from ACT_HI_VARINST t where t.proc_inst_id_= #{processInstanceId}")
|
||||
.parameter("processInstanceId", processInstanceId)
|
||||
.list().stream()
|
||||
.collect(Collectors.toMap(HistoricVariableInstance::getVariableName,
|
||||
Function.identity(), (s, t) -> s));
|
||||
vos.forEach(vo -> {
|
||||
HistoricVariableInstance assginerSnapshot =
|
||||
variableInstanceMap.getOrDefault(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + vo.getTaskId(),
|
||||
null);
|
||||
variableInstanceMap.getOrDefault(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + vo.getTaskId(),
|
||||
null);
|
||||
if (Objects.isNull(assginerSnapshot)) {
|
||||
assginerSnapshot =
|
||||
variableInstanceMap.getOrDefault(OLD_INTERNAL_TASK_RELATION_ASSIGNEE_INFO_SNAPSHOT + vo.getTaskId(), null);
|
||||
variableInstanceMap.getOrDefault(OLD_INTERNAL_TASK_RELATION_ASSIGNEE_INFO_SNAPSHOT + vo.getTaskId(), null);
|
||||
}
|
||||
if (Objects.nonNull(assginerSnapshot)) {
|
||||
BpmnTaskDelegateAssigner assigner = BpmnTaskDelegateAssigner.toObjectCompatible(assginerSnapshot.getValue());
|
||||
@ -483,27 +481,27 @@ public class CustomTaskHelper {
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
Process process = ProcessDefinitionUtil.getProcess(processDefinitionId);
|
||||
List<String> taskDefinitionKeys = process.getFlowElements().stream()
|
||||
.filter(i -> Objects.equals(BpmnMetaParserHelper.getNodeType(i).orElse(null), BpmnFlowNodeType.NODE_CARBON_COPY))
|
||||
.map(FlowElement::getId)
|
||||
.collect(Collectors.toList());
|
||||
.filter(i -> Objects.equals(BpmnMetaParserHelper.getNodeType(i).orElse(null), BpmnFlowNodeType.NODE_CARBON_COPY))
|
||||
.map(FlowElement::getId)
|
||||
.collect(Collectors.toList());
|
||||
if (CollectionUtils.isEmpty(taskDefinitionKeys)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
List<HistoricVariableInstance> variableInstances = processEngineConfiguration.getHistoryService().createHistoricVariableInstanceQuery()
|
||||
.variableNameLike(INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT)
|
||||
.processInstanceId(processInstanceId)
|
||||
.list();
|
||||
.variableNameLike(INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT)
|
||||
.processInstanceId(processInstanceId)
|
||||
.list();
|
||||
if (CollectionUtils.isEmpty(variableInstances)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
List<BpmnTaskDelegateAssigner> result = new ArrayList<>();
|
||||
taskDefinitionKeys.forEach(j -> {
|
||||
variableInstances.stream()
|
||||
.filter(i -> Objects.equals(i.getVariableName(), INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + j))
|
||||
.findFirst().ifPresent(i -> {
|
||||
result.addAll((List<BpmnTaskDelegateAssigner>) i.getValue());
|
||||
});
|
||||
.filter(i -> Objects.equals(i.getVariableName(), INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + j))
|
||||
.findFirst().ifPresent(i -> {
|
||||
result.addAll((List<BpmnTaskDelegateAssigner>) i.getValue());
|
||||
});
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -108,12 +108,12 @@ public class TaskEntityEventHandle implements EntityEventHandle<TaskEntity> {
|
||||
update.setStatus(APPROVED.getStatus());
|
||||
} else {
|
||||
|
||||
Object advice = taskEntity.getTransientVariable(COMMENT_TYPE_ADVICE);
|
||||
Object advice = taskEntity.getTransientVariableLocal(COMMENT_TYPE_ADVICE);
|
||||
if (Objects.nonNull(advice) && StringUtils.hasText(advice.toString())) {
|
||||
log.info("COMMENT_TYPE_ADVICE: {}", advice);
|
||||
update.setAdvice(advice.toString());
|
||||
}
|
||||
Object operationDesc = taskEntity.getTransientVariable(COMMENT_TYPE_OPERATION_DESC);
|
||||
Object operationDesc = taskEntity.getTransientVariableLocal(COMMENT_TYPE_OPERATION_DESC);
|
||||
if (Objects.nonNull(operationDesc) && StringUtils.hasText(operationDesc.toString())) {
|
||||
log.info("COMMENT_TYPE_OPERATION_DESC: {}", operationDesc);
|
||||
update.setOperationDesc(Objects.nonNull(assignee) ? assignee.getAssignerName() + operationDesc : operationDesc.toString());
|
||||
|
||||
@ -1061,7 +1061,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
.orElse(variables.getOrDefault(OLD_INTERNAL_INITIATOR, null))))
|
||||
.tenantId(historicProcessInstance.getTenantId())
|
||||
.agented((Boolean) Optional.ofNullable(variables.get(INTERNAL_PROCESS_AGENT)).orElse(false))
|
||||
.taskDetails(genericTaskLogVos(historicProcessInstance.getId(), logs, forecasting, dto.getEncrypt()))
|
||||
.taskDetails(genericTaskLogVos(historicProcessInstance.getId(), logs, forecasting, dto))
|
||||
.defaultButtonConf(getButtonConfig(bpmnModel.getMainProcess()).orElse(new BpmnButtonConf()))
|
||||
.supportBatchOperation(getProcessApproveConf(bpmnModel.getMainProcess()).orElse(new BpmnApproveConf()).getSupportBatchOperation())
|
||||
.userAgreeSignature(getProcessApproveConf(bpmnModel.getMainProcess()).orElse(new BpmnApproveConf()).getUserAgreeSignature())
|
||||
@ -1199,17 +1199,17 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
private List<BpmnTaskInstanceLogVO> genericTaskLogVos(String processInstanceId,
|
||||
List<ExtAxProcessLog> logs,
|
||||
List<ProcessNodeDetailVO> forecasting,
|
||||
Boolean encrypt) {
|
||||
BpmnProcessInstanceLogQueryDTO dto) {
|
||||
List<BpmnTaskInstanceLogVO> tasks = new ArrayList<>();
|
||||
Map<String, List<Attachment>> attachmentByTaskMap =
|
||||
taskService.getProcessInstanceAttachments(processInstanceId).stream()
|
||||
.collect(Collectors.groupingBy(Attachment::getTaskId));
|
||||
// 已完成的和进行中的
|
||||
getHistoricTasks(logs, tasks, attachmentByTaskMap);
|
||||
getHistoricTasks(logs, tasks, attachmentByTaskMap, dto.getVisitor());
|
||||
// 未来节点
|
||||
getFutureTasks(forecasting, tasks);
|
||||
// 处理是否加密
|
||||
handleEncrypt(encrypt, tasks);
|
||||
handleEncrypt(dto.getEncrypt(), tasks);
|
||||
return tasks;
|
||||
}
|
||||
|
||||
@ -1249,7 +1249,10 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
});
|
||||
}
|
||||
|
||||
private void getHistoricTasks(List<ExtAxProcessLog> logs, List<BpmnTaskInstanceLogVO> tasks, Map<String, List<Attachment>> attachmentByTaskMap) {
|
||||
private void getHistoricTasks(List<ExtAxProcessLog> logs,
|
||||
List<BpmnTaskInstanceLogVO> tasks,
|
||||
Map<String, List<Attachment>> attachmentByTaskMap,
|
||||
BpmnTaskDelegateAssigner visitor) {
|
||||
ListUtils.emptyIfNull(logs).forEach(e -> {
|
||||
Optional<BpmnTaskInstanceLogVO> processingTask = tasks.stream().filter(i -> Objects.equals(PROCESSING, i.getResult()))
|
||||
.filter(i -> Objects.equals(i.getTaskDefinitionKey(), e.getActivityId())).findAny();
|
||||
@ -1258,7 +1261,9 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
// 多实例的情况,需要合并节点
|
||||
processingTask.ifPresent(i -> {
|
||||
List<BpmnTaskDelegateAssigner> assigners = new ArrayList<>(ListUtils.emptyIfNull(i.getForecastAssignees()));
|
||||
assigners.add(i.getAssigneeSnapshot());
|
||||
if(CollectionUtils.isEmpty(assigners)) {
|
||||
assigners.add(i.getAssigneeSnapshot());
|
||||
}
|
||||
assigners.add(BpmnTaskDelegateAssigner.toObjectCompatible(CollectionUtils.isEmpty(ListUtils.emptyIfNull(e.getAssigneeFull())) ? null : e.getAssigneeFull().get(0)));
|
||||
switch (i.getNodeMode()) {
|
||||
case AND:
|
||||
@ -1273,6 +1278,9 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
}
|
||||
i.setAssigneeSnapshot(null);
|
||||
i.setForecastAssignees(assigners);
|
||||
// 根据当前登录人重设聚合后的节点 taskId
|
||||
assigners.stream().filter(user-> Objects.equals(user.getPersonId(), visitor.getPersonId())).findFirst()
|
||||
.ifPresent(user-> i.setTaskId(e.getTaskId()));
|
||||
});
|
||||
} else {
|
||||
tasks.add(BpmnTaskInstanceLogVO.builder()
|
||||
|
||||
@ -0,0 +1,62 @@
|
||||
package cn.axzo.workflow.server.controller.web;
|
||||
|
||||
import cn.axzo.karma.client.feign.FlowSupportApi;
|
||||
import cn.axzo.karma.client.model.request.PersonProfileQueryReq;
|
||||
import cn.axzo.karma.client.model.response.PersonProfileResp;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||
import cn.axzo.workflow.server.common.util.RpcExternalUtil;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 公共的获取 BpmnTask
|
||||
*
|
||||
* @author wangli
|
||||
* @since 2024-09-09 16:51
|
||||
*/
|
||||
public abstract class BasicPopulateAvatarController {
|
||||
|
||||
@Resource
|
||||
protected FlowSupportApi flowSupportApi;
|
||||
|
||||
/**
|
||||
* 为一个人填充头像
|
||||
*
|
||||
* @param assigner
|
||||
*/
|
||||
protected final void populateUsersAvatar(BpmnTaskDelegateAssigner assigner) {
|
||||
if (Objects.isNull(assigner)) {
|
||||
return;
|
||||
}
|
||||
populateUsersAvatar(Lists.newArrayList(assigner));
|
||||
}
|
||||
|
||||
/**
|
||||
* 为一个集合的人填充头像
|
||||
*
|
||||
* @param assigners
|
||||
*/
|
||||
protected final void populateUsersAvatar(List<BpmnTaskDelegateAssigner> assigners) {
|
||||
List<Long> personIds = assigners.stream().filter(e -> !StringUtils.hasText(e.getAvatar()) && StringUtils.hasText(e.getPersonId()))
|
||||
.map(BpmnTaskDelegateAssigner::getPersonId)
|
||||
.map(Long::parseLong)
|
||||
.distinct().collect(Collectors.toList());
|
||||
Map<Long, String> personMap = RpcExternalUtil.rpcApiResultProcessor(() -> flowSupportApi.listPersons(PersonProfileQueryReq.builder().personIds(personIds).build()),
|
||||
"查询档案信息", "cn.axzo.karma.client.feign.FlowSupportApi.listPersons", personIds).stream()
|
||||
.collect(Collectors.toMap(PersonProfileResp::getId, PersonProfileResp::getAvatarUrl));
|
||||
assigners.forEach(e -> {
|
||||
long personId = Long.parseLong(Optional.ofNullable(e.getPersonId()).orElse("-1"));
|
||||
if (personMap.containsKey(personId)) {
|
||||
e.setAvatar(personMap.getOrDefault(personId, ""));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,5 +1,8 @@
|
||||
package cn.axzo.workflow.server.controller.web.bpmn;
|
||||
|
||||
import cn.axzo.karma.client.feign.FlowSupportApi;
|
||||
import cn.axzo.karma.client.model.request.PersonProfileQueryReq;
|
||||
import cn.axzo.karma.client.model.response.PersonProfileResp;
|
||||
import cn.axzo.workflow.client.feign.bpmn.ProcessActivityApi;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivitySetAssigneeDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivityTriggerDTO;
|
||||
@ -8,10 +11,13 @@ import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
|
||||
import cn.axzo.workflow.core.service.BpmnProcessActivityService;
|
||||
import cn.axzo.workflow.server.common.annotation.ErrorReporter;
|
||||
import cn.axzo.workflow.server.common.annotation.RepeatSubmit;
|
||||
import cn.axzo.workflow.server.common.util.RpcExternalUtil;
|
||||
import cn.axzo.workflow.server.controller.web.BasicPopulateAvatarController;
|
||||
import cn.azxo.framework.common.model.CommonResponse;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
@ -24,6 +30,9 @@ import javax.annotation.Resource;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.axzo.workflow.core.common.code.BpmnTaskRespCode.ACTIVITY_BIZ_SET_ASSIGNEE_HAS_REPEAT;
|
||||
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.removeDuplicateByPersonId;
|
||||
@ -40,10 +49,12 @@ import static cn.azxo.framework.common.model.CommonResponse.success;
|
||||
@RestController
|
||||
@ErrorReporter
|
||||
@Validated
|
||||
public class BpmnProcessActivityController implements ProcessActivityApi {
|
||||
public class BpmnProcessActivityController extends BasicPopulateAvatarController implements ProcessActivityApi {
|
||||
|
||||
@Resource
|
||||
private BpmnProcessActivityService bpmnProcessActivityService;
|
||||
@Resource
|
||||
private FlowSupportApi flowSupportApi;
|
||||
|
||||
/**
|
||||
* 业务节点唤醒 旧版本使用的接口
|
||||
@ -101,6 +112,10 @@ public class BpmnProcessActivityController implements ProcessActivityApi {
|
||||
} else {
|
||||
dto.setAssigners(removeDuplicateByPersonId(dto.getAssigners()));
|
||||
}
|
||||
|
||||
//填充头像
|
||||
populateUsersAvatar(dto.getAssigners());
|
||||
|
||||
bpmnProcessActivityService.setAssignee(dto);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@ -31,6 +31,7 @@ import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
|
||||
import cn.axzo.workflow.server.common.annotation.ErrorReporter;
|
||||
import cn.axzo.workflow.server.common.annotation.RepeatSubmit;
|
||||
import cn.axzo.workflow.server.common.util.RpcExternalUtil;
|
||||
import cn.axzo.workflow.server.controller.web.BasicPopulateAvatarController;
|
||||
import cn.azxo.framework.common.model.CommonResponse;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
@ -70,7 +71,7 @@ import static cn.azxo.framework.common.model.CommonResponse.success;
|
||||
@RestController
|
||||
@ErrorReporter
|
||||
@Validated
|
||||
public class BpmnProcessInstanceController implements ProcessInstanceApi {
|
||||
public class BpmnProcessInstanceController extends BasicPopulateAvatarController implements ProcessInstanceApi {
|
||||
|
||||
@Resource
|
||||
private BpmnProcessInstanceService bpmnProcessInstanceService;
|
||||
@ -113,13 +114,8 @@ public class BpmnProcessInstanceController implements ProcessInstanceApi {
|
||||
@RepeatSubmit
|
||||
public CommonResponse<String> createProcessInstance(@Validated @RequestBody BpmnProcessInstanceCreateDTO dto) {
|
||||
log.info("发起审核createProcessInstance===>>>参数:{}", JSONUtil.toJsonStr(dto));
|
||||
long personId = Long.parseLong(Optional.ofNullable(dto.getInitiator().getPersonId()).orElse("-1"));
|
||||
Map<Long, String> personMap = RpcExternalUtil.rpcApiResultProcessor(() -> flowSupportApi.listPersons(PersonProfileQueryReq.builder().personId(personId).build()),
|
||||
"查询档案信息", "cn.axzo.karma.client.feign.FlowSupportApi.listPersons", personId).stream()
|
||||
.collect(Collectors.toMap(PersonProfileResp::getId, PersonProfileResp::getAvatarUrl));
|
||||
if (personMap.containsKey(personId)) {
|
||||
dto.getInitiator().setAvatar(personMap.getOrDefault(personId, ""));
|
||||
}
|
||||
// 填充头像
|
||||
populateUsersAvatar(dto.getInitiator());
|
||||
return success(bpmnProcessInstanceService.createProcessInstance(dto));
|
||||
}
|
||||
|
||||
|
||||
@ -29,6 +29,7 @@ import cn.axzo.workflow.core.service.BpmnProcessTaskService;
|
||||
import cn.axzo.workflow.server.common.annotation.ErrorReporter;
|
||||
import cn.axzo.workflow.server.common.annotation.RepeatSubmit;
|
||||
import cn.axzo.workflow.server.common.util.RpcExternalUtil;
|
||||
import cn.axzo.workflow.server.controller.web.BasicPopulateAvatarController;
|
||||
import cn.azxo.framework.common.model.CommonResponse;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
@ -64,7 +65,7 @@ import static cn.azxo.framework.common.model.CommonResponse.success;
|
||||
@RestController
|
||||
@ErrorReporter
|
||||
@Validated
|
||||
public class BpmnProcessTaskController implements ProcessTaskApi {
|
||||
public class BpmnProcessTaskController extends BasicPopulateAvatarController implements ProcessTaskApi {
|
||||
|
||||
@Resource
|
||||
private BpmnProcessTaskService bpmnProcessTaskService;
|
||||
@ -189,15 +190,8 @@ public class BpmnProcessTaskController implements ProcessTaskApi {
|
||||
@RepeatSubmit
|
||||
public CommonResponse<Boolean> transferTask(@Validated @RequestBody BpmnTaskTransferDTO dto) {
|
||||
log.info("转交任务 transferTask===>>>参数:{}", JSON.toJSONString(dto));
|
||||
|
||||
long personId = Long.parseLong(Optional.ofNullable(dto.getTargetAssigner().getPersonId()).orElse("-1"));
|
||||
Map<Long, String> personMap = RpcExternalUtil.rpcApiResultProcessor(() -> flowSupportApi.listPersons(PersonProfileQueryReq.builder().personId(personId).build()),
|
||||
"查询档案信息", "cn.axzo.karma.client.feign.FlowSupportApi.listPersons", personId).stream()
|
||||
.collect(Collectors.toMap(PersonProfileResp::getId, PersonProfileResp::getAvatarUrl));
|
||||
if (personMap.containsKey(personId)) {
|
||||
dto.getTargetAssigner().setAvatar(personMap.getOrDefault(personId, ""));
|
||||
}
|
||||
|
||||
// 填充头像
|
||||
populateUsersAvatar(dto.getTargetAssigner());
|
||||
bpmnProcessTaskService.transferTask(dto);
|
||||
return success(true);
|
||||
}
|
||||
@ -234,21 +228,8 @@ public class BpmnProcessTaskController implements ProcessTaskApi {
|
||||
@RepeatSubmit
|
||||
public CommonResponse<Boolean> countersignTask(@Validated @RequestBody BpmnTaskCountersignDTO countersignDTO) {
|
||||
log.info("加签任务 countersignTask===>>>参数:{}", JSON.toJSONString(countersignDTO));
|
||||
|
||||
List<Long> personIds = countersignDTO.getTargetAssignerList().stream().filter(e -> !StringUtils.hasText(e.getAvatar()) && StringUtils.hasText(e.getPersonId()))
|
||||
.map(BpmnTaskDelegateAssigner::getPersonId)
|
||||
.map(Long::parseLong)
|
||||
.distinct().collect(Collectors.toList());
|
||||
Map<Long, String> personMap = RpcExternalUtil.rpcApiResultProcessor(() -> flowSupportApi.listPersons(PersonProfileQueryReq.builder().personIds(personIds).build()),
|
||||
"查询档案信息", "cn.axzo.karma.client.feign.FlowSupportApi.listPersons", personIds).stream()
|
||||
.collect(Collectors.toMap(PersonProfileResp::getId, PersonProfileResp::getAvatarUrl));
|
||||
countersignDTO.getTargetAssignerList().forEach(e -> {
|
||||
long personId = Long.parseLong(Optional.ofNullable(e.getPersonId()).orElse("-1"));
|
||||
if (personMap.containsKey(personId)) {
|
||||
e.setAvatar(personMap.getOrDefault(personId, ""));
|
||||
}
|
||||
});
|
||||
|
||||
// 填充头像
|
||||
populateUsersAvatar(countersignDTO.getTargetAssignerList());
|
||||
bpmnProcessTaskService.countersignTask(countersignDTO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user