update - 添加调用二方 Api 的耗时统计与记录;标准化日志中的操作描述
This commit is contained in:
parent
d1ceb80431
commit
27fd38fc06
@ -5,13 +5,9 @@ public enum BpmnFlowNodeMode {
|
||||
GENERAL("GENERAL", "普通节点"),
|
||||
OR("OR", "或签节点"),
|
||||
AND("AND", "会签节点"),
|
||||
BUSINESS("BUSINESS", "业务节点"),
|
||||
BUSINESS_BIZ_SPECIFY("BUSINESS_BIZ_SPECIFY", "业务节点(指定)"),
|
||||
AUTO_PASSED("AUTO_PASSED", "自动通过"),
|
||||
AUTO_REJECTED("AUTO_REJECTED", "自动驳回"),
|
||||
COPY("COPY", "抄送节点"),
|
||||
COMMENT("COMMENT", "评论节点"),
|
||||
DUMMY("DUMMY", "机器人节点"),
|
||||
AUTO_REJECTED("AUTO_REJECTED", "自动拒绝"),
|
||||
BUSINESS_BIZ_SPECIFY("BUSINESS_BIZ_SPECIFY", "业务指定审批人"),
|
||||
;
|
||||
|
||||
private String type;
|
||||
|
||||
@ -7,15 +7,17 @@ import java.util.Objects;
|
||||
public enum BpmnFlowNodeType {
|
||||
|
||||
//0 发起人 1审批 2抄送 3条件 4路由
|
||||
NODE_STARTER("NODE_STARTER", "发起人节点"), // ROOT
|
||||
NODE_EXCLUSIVE_GATEWAY("NODE_EXCLUSIVE_GATEWAY", "排它网关"), // CONDITIONS
|
||||
NODE_CONDITION("NODE_CONDITION", "条件节点 - 隶属于排它网关"), // CONDITION
|
||||
NODE_STARTER("NODE_STARTER", "发起人节点"),
|
||||
NODE_EXCLUSIVE_GATEWAY("NODE_EXCLUSIVE_GATEWAY", "排它网关"),
|
||||
NODE_CONDITION("NODE_CONDITION", "条件节点 - 隶属于排它网关"),
|
||||
NODE_PARALLEL_GATEWAY("NODE_PARALLEL_GATEWAY", "并行网关"),
|
||||
NODE_PARALLEL("NODE_PARALLEL", "并行节点 - 隶属于并行网关"),
|
||||
NODE_TASK("NODE_TASK", "审核节点"), // APPROVAL
|
||||
NODE_TASK("NODE_TASK", "审核节点"),
|
||||
NODE_BUSINESS("NODE_BUSINESS", "业务节点"),
|
||||
NODE_CARBON_COPY("NODE_CARBON_COPY", "抄送节点"),
|
||||
NODE_TRIGGER("NODE_TRIGGER", "触发器节点"),
|
||||
NODE_ROBOT("NODE_ROBOT", "机器人节点"),
|
||||
NODE_COMMENT("NODE_COMMENT", "评论节点"),
|
||||
NODE_EMPTY("NODE_EMPTY", "空节点"),
|
||||
;
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package cn.axzo.workflow.common.model.response.bpmn.process;
|
||||
|
||||
import cn.axzo.workflow.common.enums.BpmnFlowNodeMode;
|
||||
import cn.axzo.workflow.common.enums.BpmnFlowNodeType;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonConf;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||
import lombok.Data;
|
||||
@ -27,10 +28,13 @@ public class ProcessNodeDetailVO {
|
||||
* 节点名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 节点类型
|
||||
*/
|
||||
private BpmnFlowNodeType nodeType;
|
||||
/**
|
||||
* 审批节点处理模式
|
||||
*/
|
||||
private BpmnFlowNodeMode nodeMode;
|
||||
|
||||
/**
|
||||
|
||||
@ -10,7 +10,7 @@ import org.flowable.engine.delegate.DelegateExecution;
|
||||
*/
|
||||
public interface ApproverScopeProcessor {
|
||||
|
||||
default ApproverScopeDTO select(UserTask userTask, DelegateExecution execution) {
|
||||
default ApproverScopeDTO build(UserTask userTask, DelegateExecution execution) {
|
||||
return ApproverScopeDTO.builder().build();
|
||||
}
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.BIZ_ORG_RELATION;
|
||||
public class EntWorkspaceProcessor implements ApproverScopeProcessor {
|
||||
|
||||
@Override
|
||||
public ApproverScopeDTO select(UserTask userTask, DelegateExecution execution) {
|
||||
public ApproverScopeDTO build(UserTask userTask, DelegateExecution execution) {
|
||||
// 获取组织信息
|
||||
CooperationOrgDTO orgDTO = (CooperationOrgDTO) execution.getVariables().get(BIZ_ORG_RELATION);
|
||||
ApproverScopeDTO build = ApproverScopeDTO.builder().build();
|
||||
|
||||
@ -26,7 +26,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_ACTIVITY_R
|
||||
public class PreTaskUserProcessor implements ApproverScopeProcessor {
|
||||
|
||||
@Override
|
||||
public ApproverScopeDTO select(UserTask userTask, DelegateExecution execution) {
|
||||
public ApproverScopeDTO build(UserTask userTask, DelegateExecution execution) {
|
||||
Optional<UserTask> preUserTaskOpt = BpmnMetaParserHelper.getPreNode(userTask, execution, null);
|
||||
if (!preUserTaskOpt.isPresent()) {
|
||||
log.info("the current node has no pre node, skip");
|
||||
|
||||
@ -24,7 +24,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.BIZ_ORG_RELATION;
|
||||
public class ProjectWorkspaceProcessor implements ApproverScopeProcessor {
|
||||
|
||||
@Override
|
||||
public ApproverScopeDTO select(UserTask userTask, DelegateExecution execution) {
|
||||
public ApproverScopeDTO build(UserTask userTask, DelegateExecution execution) {
|
||||
// 发起项目部
|
||||
CooperationOrgDTO orgDTO =(CooperationOrgDTO) execution.getVariables().get(BIZ_ORG_RELATION);
|
||||
if (Objects.isNull(orgDTO)) {
|
||||
|
||||
@ -17,6 +17,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.flowable.bpmn.model.Process;
|
||||
import org.flowable.bpmn.model.UserTask;
|
||||
import org.flowable.common.engine.api.delegate.event.FlowableEventDispatcher;
|
||||
import org.flowable.engine.TaskService;
|
||||
import org.flowable.engine.delegate.DelegateExecution;
|
||||
import org.flowable.engine.delegate.ExecutionListener;
|
||||
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
|
||||
@ -38,6 +39,7 @@ import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.BPM_ALLOW_SKIP_USER_TASK;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_OPERATION_DESC;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.DUMMY_ASSIGNEE;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.DUMMY_ASSIGNEE_TYPE;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.FLOW_SERVER_VERSION_121;
|
||||
@ -67,6 +69,8 @@ public class EngineExecutionStartListener implements ExecutionListener {
|
||||
private ObjectProvider<BpmnTaskDelegate> bpmTaskDelegate;
|
||||
@Resource
|
||||
private List<BpmnTaskAssigneeSelector> selectors;
|
||||
@Resource
|
||||
private TaskService taskService;
|
||||
|
||||
@Value("${workflow.mock:false}")
|
||||
private Boolean mock;
|
||||
@ -113,6 +117,8 @@ public class EngineExecutionStartListener implements ExecutionListener {
|
||||
|
||||
execution.setVariable(INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + currentActivityId, Lists.newArrayList(dummyApprover));
|
||||
|
||||
taskService.addComment(userTask.getId(), execution.getProcessInstanceId(),
|
||||
COMMENT_TYPE_OPERATION_DESC, "业务指定审批人");
|
||||
// 触发事件
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration =
|
||||
CommandContextUtil.getProcessEngineConfiguration();
|
||||
|
||||
@ -81,6 +81,9 @@ import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.AUTO_PASSED;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.AUTO_REJECTED;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.BUSINESS_BIZ_SPECIFY;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.OR;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_BUSINESS;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_CARBON_COPY;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_TASK;
|
||||
import static cn.axzo.workflow.core.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_ID_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.core.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.core.common.code.BpmnProcessDefinitionRespCode.PROCESS_DEFINITION_ID_NOT_EXISTS;
|
||||
@ -562,7 +565,8 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
UserTask userTask = (UserTask) i;
|
||||
node.setId(userTask.getId())
|
||||
.setName(userTask.getName())
|
||||
.setFormKey(userTask.getFormKey());
|
||||
.setFormKey(userTask.getFormKey())
|
||||
.setNodeType(NODE_TASK);
|
||||
|
||||
getApprovalMethod(userTask).ifPresent(approvalMethod -> {
|
||||
switch (approvalMethod) {
|
||||
@ -598,12 +602,14 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
ReceiveTask receiveTask = (ReceiveTask) i;
|
||||
node.setId(receiveTask.getId())
|
||||
.setName(receiveTask.getName());
|
||||
node.setNodeMode(BpmnFlowNodeMode.BUSINESS);
|
||||
node.setNodeType(NODE_BUSINESS);
|
||||
node.setNodeMode(BpmnFlowNodeMode.GENERAL);
|
||||
} else {
|
||||
ServiceTask serviceTask = (ServiceTask) i;
|
||||
node.setId(serviceTask.getId())
|
||||
.setName(serviceTask.getName());
|
||||
node.setNodeMode(BpmnFlowNodeMode.COPY);
|
||||
node.setNodeType(NODE_CARBON_COPY);
|
||||
node.setNodeMode(BpmnFlowNodeMode.GENERAL);
|
||||
}
|
||||
resultList.add(node);
|
||||
});
|
||||
|
||||
@ -85,7 +85,6 @@ import java.util.stream.Collectors;
|
||||
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_ADVICE;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_OPERATION_DESC;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.DUMMY_ASSIGNEE_ID;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_TASK_RELATION_ASSIGNEE_INFO;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.OLD_INTERNAL_TASK_RELATION_ASSIGNEE_INFO_SNAPSHOT;
|
||||
@ -362,13 +361,6 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService {
|
||||
vo.setEndTime(i.getTime());
|
||||
});
|
||||
|
||||
|
||||
// 处理"业务指定审批人" 特殊的日志
|
||||
if (Objects.equals(DUMMY_ASSIGNEE_ID, vo.getAssignee())) {
|
||||
vo.setOperationDesc("业务指定审批人");
|
||||
}
|
||||
|
||||
|
||||
List<Attachment> attachments = attachmentByTaskIdMap.getOrDefault(vo.getTaskId(), Collections.emptyList());
|
||||
vo.setAttachments(attachmentConverter.toVos(attachments));
|
||||
|
||||
|
||||
@ -17,6 +17,7 @@ import org.flowable.engine.delegate.DelegateExecution;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.util.StopWatch;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@ -50,7 +51,7 @@ public abstract class AbstractBpmnTaskAssigneeSelector implements BpmnTaskAssign
|
||||
ApproverScopeProcessor processor =
|
||||
applicationContext.getBean(approverScopeEnum.getProcessor(),
|
||||
ApproverScopeProcessor.class);
|
||||
ApproverScopeDTO scopeDto = processor.select(userTask, execution);
|
||||
ApproverScopeDTO scopeDto = processor.build(userTask, execution);
|
||||
try {
|
||||
return invokeService(userTask, execution, scopeDto);
|
||||
} catch (Throwable t) {
|
||||
@ -71,9 +72,12 @@ public abstract class AbstractBpmnTaskAssigneeSelector implements BpmnTaskAssign
|
||||
}
|
||||
|
||||
protected final <T> T parseApiResult(Supplier<ApiResult<T>> supplier, String operatorDesc, Object... param) {
|
||||
log.info(operatorDesc + "-Param: " + JSONUtil.toJsonStr(param));
|
||||
StopWatch stopWatch = new StopWatch(operatorDesc);
|
||||
log.info("{}-Param: {}", operatorDesc, JSONUtil.toJsonStr(param));
|
||||
stopWatch.start();
|
||||
ApiResult<T> result = supplier.get();
|
||||
log.info(operatorDesc + "-Result: " + JSONUtil.toJsonStr(result));
|
||||
stopWatch.stop();
|
||||
log.info("{}-Cost:{}, Result: {}", operatorDesc, stopWatch.shortSummary(), JSONUtil.toJsonStr(result));
|
||||
Assert.notNull(result, "服务调用异常");
|
||||
// 200自定义处理
|
||||
if (HttpStatus.HTTP_OK != result.getCode()) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user