feature(REQ-7125) - 调整发送待办和 IM 消息时,携带当前节点的签法
This commit is contained in:
parent
5e2bd3de75
commit
62e64c5ae8
@ -1,5 +1,6 @@
|
||||
package cn.axzo.workflow.core.engine.cmd;
|
||||
|
||||
import cn.axzo.workflow.common.enums.BpmnFlowNodeMode;
|
||||
import cn.axzo.workflow.common.exception.WorkflowEngineException;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnNoticeConf;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||
@ -11,11 +12,14 @@ import cn.axzo.workflow.core.engine.event.MessagePushEventType;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.flowable.bpmn.model.FlowElement;
|
||||
import org.flowable.bpmn.model.Process;
|
||||
import org.flowable.bpmn.model.UserTask;
|
||||
import org.flowable.common.engine.api.delegate.event.FlowableEventDispatcher;
|
||||
import org.flowable.common.engine.impl.interceptor.CommandContext;
|
||||
import org.flowable.engine.RuntimeService;
|
||||
import org.flowable.engine.TaskService;
|
||||
import org.flowable.engine.impl.bpmn.behavior.MultiInstanceActivityBehavior;
|
||||
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
|
||||
import org.flowable.engine.impl.util.CommandContextUtil;
|
||||
import org.flowable.engine.impl.util.ProcessDefinitionUtil;
|
||||
@ -37,7 +41,10 @@ import java.util.stream.Collectors;
|
||||
import static cn.axzo.workflow.common.code.BpmnInstanceRespCode.PROCESS_INSTANCE_CANT_REMIND;
|
||||
import static cn.axzo.workflow.common.code.BpmnTaskRespCode.REMIND_TASK_TOO_MANY;
|
||||
import static cn.axzo.workflow.common.code.BpmnTaskRespCode.TASK_REMIND_ERROR_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.AND_SIGN_EXPRESSION;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_TASK_RELATION_ASSIGNEE_INFO;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.AND;
|
||||
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.OR;
|
||||
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getActivitySignature;
|
||||
|
||||
/**
|
||||
@ -122,6 +129,21 @@ public class CustomRemindTaskCmd extends AbstractCommand<Void> implements Serial
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
FlowElement flowElement = process.getFlowElement(taskDefinitionKey);
|
||||
BpmnFlowNodeMode nodeMode;
|
||||
if (flowElement instanceof UserTask) {
|
||||
UserTask userTask = (UserTask) flowElement;
|
||||
if (userTask.getBehavior() instanceof MultiInstanceActivityBehavior) {
|
||||
MultiInstanceActivityBehavior behavior =
|
||||
(MultiInstanceActivityBehavior) userTask.getBehavior();
|
||||
nodeMode = Objects.equals(AND_SIGN_EXPRESSION, behavior.getCompletionCondition()) ? AND : OR;
|
||||
} else {
|
||||
nodeMode = BpmnFlowNodeMode.AND;
|
||||
}
|
||||
} else {
|
||||
nodeMode = BpmnFlowNodeMode.AND;
|
||||
}
|
||||
|
||||
|
||||
// 过滤出未审批的任何,用选择的方式去发送消息
|
||||
remindTypes.forEach(type -> {
|
||||
@ -130,8 +152,7 @@ public class CustomRemindTaskCmd extends AbstractCommand<Void> implements Serial
|
||||
MessagePushEventImpl event = MessagePushEventBuilder.createEvent(MessagePushEventType.valueOf(type),
|
||||
Lists.newArrayList(assigner), noticeConfig.orElse(null), processInstance.getProcessInstanceId(),
|
||||
processInstance.getProcessDefinitionKey(), processInstance.getTenantId(), task.getId(),
|
||||
getActivitySignature(process.getFlowElement(taskDefinitionKey)),
|
||||
refreshProperties.getImTemplateCode(), terminalType);
|
||||
nodeMode, getActivitySignature(flowElement), refreshProperties.getImTemplateCode(), terminalType);
|
||||
eventDispatcher.dispatchEvent(event, processEngineConfiguration.getEngineCfgKey());
|
||||
});
|
||||
});
|
||||
|
||||
@ -30,11 +30,11 @@ public class MessagePushEventBuilder {
|
||||
public static MessagePushEventImpl createEvent(MessagePushEventType type, List<BpmnTaskDelegateAssigner> assigners,
|
||||
BpmnNoticeConf noticeConf, String processInstanceId, String processDefinitionKey,
|
||||
String tenantId, String taskId, Boolean activitySignature) {
|
||||
return createEvent(type, assigners, noticeConf, processInstanceId, processDefinitionKey, tenantId, taskId, activitySignature, null, null);
|
||||
return createEvent(type, assigners, noticeConf, processInstanceId, processDefinitionKey, tenantId, taskId, null, activitySignature, null, null);
|
||||
}
|
||||
public static MessagePushEventImpl createEvent(MessagePushEventType type, List<BpmnTaskDelegateAssigner> assigners,
|
||||
BpmnNoticeConf noticeConf, String processInstanceId, String processDefinitionKey,
|
||||
String tenantId, String taskId, Boolean activitySignature, String imTemplateCode, String terminalType) {
|
||||
String tenantId, String taskId, BpmnFlowNodeMode nodeMode, Boolean activitySignature, String imTemplateCode, String terminalType) {
|
||||
switch (type) {
|
||||
case NOTICE:
|
||||
return createNoticeEvent(assigners, noticeConf, processInstanceId, processDefinitionKey, tenantId, taskId, activitySignature);
|
||||
@ -49,7 +49,7 @@ public class MessagePushEventBuilder {
|
||||
case SMS:
|
||||
return createSmsEvent(assigners, noticeConf, processInstanceId, processDefinitionKey, tenantId, taskId, activitySignature);
|
||||
case IM:
|
||||
return createImEvent(assigners, imTemplateCode, processInstanceId, terminalType);
|
||||
return createImEvent(assigners, imTemplateCode, processInstanceId, nodeMode, terminalType);
|
||||
default:
|
||||
throw new WorkflowEngineException(MES_PUSH_OBJECT_BUILD_ERROR);
|
||||
}
|
||||
@ -132,7 +132,10 @@ public class MessagePushEventBuilder {
|
||||
public static MessagePushEventImpl createImEvent(List<BpmnTaskDelegateAssigner> assigners,
|
||||
String imTemplateCode,
|
||||
String processInstanceId,
|
||||
BpmnFlowNodeMode nodeMode,
|
||||
String terminalType) {
|
||||
return new MessagePushEventImpl(IM, assigners, imTemplateCode, processInstanceId, terminalType);
|
||||
MessagePushEventImpl newEvent = new MessagePushEventImpl(IM, assigners, imTemplateCode, processInstanceId, terminalType);
|
||||
newEvent.setNodeMode(nodeMode);
|
||||
return newEvent;
|
||||
}
|
||||
}
|
||||
|
||||
@ -377,6 +377,7 @@ public class RocketMqMessagePushEventListener extends AbstractBpmnEventListener<
|
||||
if (Objects.nonNull(event.getNoticeConfig().getCarbonCopy())) {
|
||||
MessagePushDTO dto = build(event.getNoticeConfig().getSms().getSmsId(),
|
||||
PROCESS_PUSH_SMS, event, collectionVariable(event), event.getActivitySignature());
|
||||
dto.setNodeMode(event.getNodeMode());
|
||||
sendMessageQueue(dto, PROCESS_PUSH_SMS);
|
||||
}
|
||||
log.info("RocketMqMessagePushEventListener#onSms...end, msgTemplateId: {}, receivePerson: {}, processInstanceId: {}",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user