feature(REQ-7125) - 调整发送待办和 IM 消息时,携带当前节点的签法

This commit is contained in:
wangli 2026-03-12 15:12:31 +08:00
parent 5e2bd3de75
commit 62e64c5ae8
3 changed files with 31 additions and 6 deletions

View File

@ -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());
});
});

View File

@ -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;
}
}

View File

@ -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: {}",