update - 处理消息推送的事件中的变量集合
This commit is contained in:
parent
bb776fd0f2
commit
5eb4fbd5b9
@ -107,4 +107,18 @@ public interface BpmnConstants {
|
|||||||
* 全局的停用/下架等状态描述
|
* 全局的停用/下架等状态描述
|
||||||
*/
|
*/
|
||||||
Integer DISABLED = 0;
|
Integer DISABLED = 0;
|
||||||
|
|
||||||
|
//=============== 消息推送时的变量集合中 key 的命名 =================
|
||||||
|
String VAR_INITIATOR_USER_NAME = "initiatorUserName";
|
||||||
|
String VAR_PROCESS_INSTANCE_NAME = "processInstanceName";
|
||||||
|
String VAR_PROCESS_INSTANCE_ID = "processInstanceId";
|
||||||
|
String VAR_PROCESS_START_TIME = "processStartTime";
|
||||||
|
String VAR_PROCESS_END_TIME = "processEndTime";
|
||||||
|
String VAR_BUSINESS_NAME = "businessName";
|
||||||
|
|
||||||
|
String VAR_TASK_USER_NAME = "taskUserName";
|
||||||
|
String VAR_ACTIVITY_NAME = "activityName";
|
||||||
|
String VAR_TASK_START_TIME = "taskStartTime";
|
||||||
|
String VAR_PROCESS_RESULT = "processResult";
|
||||||
|
String VAR_OPERATOR_TYPE = "operatorType";
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,7 +11,5 @@ public interface MetaInfoConstants {
|
|||||||
String MODEL_TYPE = "modelType";
|
String MODEL_TYPE = "modelType";
|
||||||
String MODEL_TYPE_PROCESS = "MODEL_PROCESS";
|
String MODEL_TYPE_PROCESS = "MODEL_PROCESS";
|
||||||
String MODEL_TYPE_FORM = "MODEL_FORM";
|
String MODEL_TYPE_FORM = "MODEL_FORM";
|
||||||
|
|
||||||
|
|
||||||
String MODEL_DESCRIPTION = "modelDescription";
|
String MODEL_DESCRIPTION = "modelDescription";
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,6 +27,18 @@ public class MessagePushEventImpl implements MessagePushEvent {
|
|||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用该对象时需遵守,如果是 task 级的,一定要传 taskId, 其他参数则都是必传
|
||||||
|
* <p>
|
||||||
|
* 该对象的消费场景会对 taskId 做条件判断
|
||||||
|
*
|
||||||
|
* @param type
|
||||||
|
* @param assigner
|
||||||
|
* @param noticeConfig
|
||||||
|
* @param processInstanceId
|
||||||
|
* @param tenantId
|
||||||
|
* @param taskId
|
||||||
|
*/
|
||||||
public MessagePushEventImpl(FlowableEventType type, BpmnTaskDelegateAssigner assigner,
|
public MessagePushEventImpl(FlowableEventType type, BpmnTaskDelegateAssigner assigner,
|
||||||
BpmnNoticeConf noticeConfig, String processInstanceId, String tenantId, String taskId) {
|
BpmnNoticeConf noticeConfig, String processInstanceId, String tenantId, String taskId) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
|
|||||||
@ -10,9 +10,6 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.flowable.common.engine.api.delegate.event.FlowableEngineEvent;
|
import org.flowable.common.engine.api.delegate.event.FlowableEngineEvent;
|
||||||
import org.flowable.engine.delegate.event.FlowableActivityCancelledEvent;
|
import org.flowable.engine.delegate.event.FlowableActivityCancelledEvent;
|
||||||
import org.flowable.engine.delegate.event.FlowableActivityEvent;
|
import org.flowable.engine.delegate.event.FlowableActivityEvent;
|
||||||
import org.flowable.engine.delegate.event.FlowableMultiInstanceActivityCancelledEvent;
|
|
||||||
import org.flowable.engine.delegate.event.FlowableMultiInstanceActivityCompletedEvent;
|
|
||||||
import org.flowable.engine.delegate.event.FlowableMultiInstanceActivityEvent;
|
|
||||||
import org.springframework.core.Ordered;
|
import org.springframework.core.Ordered;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@ -52,11 +49,6 @@ public class RocketMqBpmActivityEventListener implements BpmnActivityEventListen
|
|||||||
FlowableActivityEvent flowableEvent = (FlowableActivityEvent) event;
|
FlowableActivityEvent flowableEvent = (FlowableActivityEvent) event;
|
||||||
dto.setActivityId(flowableEvent.getActivityId());
|
dto.setActivityId(flowableEvent.getActivityId());
|
||||||
dto.setActivityName(flowableEvent.getActivityName());
|
dto.setActivityName(flowableEvent.getActivityName());
|
||||||
|
|
||||||
} else if (event instanceof FlowableMultiInstanceActivityEvent) {
|
|
||||||
FlowableMultiInstanceActivityEvent flowableEvent = (FlowableMultiInstanceActivityEvent) event;
|
|
||||||
dto.setActivityId(flowableEvent.getActivityId());
|
|
||||||
dto.setActivityName(flowableEvent.getActivityName());
|
|
||||||
}
|
}
|
||||||
log.info("RocketMqBpmActivityEventListener#onStarted MQ.Data: {}", JSON.toJSONString(dto));
|
log.info("RocketMqBpmActivityEventListener#onStarted MQ.Data: {}", JSON.toJSONString(dto));
|
||||||
sendMessageQueue(dto, PROCESS_ACTIVITY_STARTED);
|
sendMessageQueue(dto, PROCESS_ACTIVITY_STARTED);
|
||||||
@ -77,11 +69,6 @@ public class RocketMqBpmActivityEventListener implements BpmnActivityEventListen
|
|||||||
FlowableActivityEvent flowableEvent = (FlowableActivityEvent) event;
|
FlowableActivityEvent flowableEvent = (FlowableActivityEvent) event;
|
||||||
dto.setActivityId(flowableEvent.getActivityId());
|
dto.setActivityId(flowableEvent.getActivityId());
|
||||||
dto.setActivityName(flowableEvent.getActivityName());
|
dto.setActivityName(flowableEvent.getActivityName());
|
||||||
} else if (event instanceof FlowableMultiInstanceActivityCompletedEvent) {
|
|
||||||
FlowableMultiInstanceActivityCompletedEvent flowableEvent =
|
|
||||||
(FlowableMultiInstanceActivityCompletedEvent) event;
|
|
||||||
dto.setActivityId(flowableEvent.getActivityId());
|
|
||||||
dto.setActivityName(flowableEvent.getActivityName());
|
|
||||||
}
|
}
|
||||||
log.info("RocketMqBpmActivityEventListener#onCompleted MQ.Data: {}", JSON.toJSONString(dto));
|
log.info("RocketMqBpmActivityEventListener#onCompleted MQ.Data: {}", JSON.toJSONString(dto));
|
||||||
sendMessageQueue(dto, PROCESS_ACTIVITY_COMPLETED);
|
sendMessageQueue(dto, PROCESS_ACTIVITY_COMPLETED);
|
||||||
@ -102,11 +89,6 @@ public class RocketMqBpmActivityEventListener implements BpmnActivityEventListen
|
|||||||
FlowableActivityCancelledEvent flowableEvent = (FlowableActivityCancelledEvent) event;
|
FlowableActivityCancelledEvent flowableEvent = (FlowableActivityCancelledEvent) event;
|
||||||
dto.setActivityId(flowableEvent.getActivityId());
|
dto.setActivityId(flowableEvent.getActivityId());
|
||||||
dto.setActivityName(flowableEvent.getActivityName());
|
dto.setActivityName(flowableEvent.getActivityName());
|
||||||
} else if (event instanceof FlowableMultiInstanceActivityCancelledEvent) {
|
|
||||||
FlowableMultiInstanceActivityCancelledEvent flowableEvent =
|
|
||||||
(FlowableMultiInstanceActivityCancelledEvent) event;
|
|
||||||
dto.setActivityId(flowableEvent.getActivityId());
|
|
||||||
dto.setActivityName(flowableEvent.getActivityName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("RocketMqBpmActivityEventListener#onCancelled MQ.Data: {}", JSON.toJSONString(dto));
|
log.info("RocketMqBpmActivityEventListener#onCancelled MQ.Data: {}", JSON.toJSONString(dto));
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import cn.axzo.framework.rocketmq.Event;
|
|||||||
import cn.axzo.framework.rocketmq.EventProducer;
|
import cn.axzo.framework.rocketmq.EventProducer;
|
||||||
import cn.axzo.workflow.common.enums.MessagePushEventEnum;
|
import cn.axzo.workflow.common.enums.MessagePushEventEnum;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceQueryDTO;
|
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceQueryDTO;
|
||||||
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||||
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO;
|
import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO;
|
||||||
import cn.axzo.workflow.common.model.response.mq.MessagePushDTO;
|
import cn.axzo.workflow.common.model.response.mq.MessagePushDTO;
|
||||||
import cn.axzo.workflow.core.engine.event.MessagePushEvent;
|
import cn.axzo.workflow.core.engine.event.MessagePushEvent;
|
||||||
@ -12,12 +13,33 @@ import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
|
|||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.flowable.engine.HistoryService;
|
||||||
|
import org.flowable.task.api.history.HistoricTaskInstance;
|
||||||
import org.springframework.core.Ordered;
|
import org.springframework.core.Ordered;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR;
|
||||||
|
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_TASK_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT;
|
||||||
|
import static cn.axzo.workflow.common.constant.BpmnConstants.VAR_ACTIVITY_NAME;
|
||||||
|
import static cn.axzo.workflow.common.constant.BpmnConstants.VAR_BUSINESS_NAME;
|
||||||
|
import static cn.axzo.workflow.common.constant.BpmnConstants.VAR_INITIATOR_USER_NAME;
|
||||||
|
import static cn.axzo.workflow.common.constant.BpmnConstants.VAR_OPERATOR_TYPE;
|
||||||
|
import static cn.axzo.workflow.common.constant.BpmnConstants.VAR_PROCESS_END_TIME;
|
||||||
|
import static cn.axzo.workflow.common.constant.BpmnConstants.VAR_PROCESS_INSTANCE_ID;
|
||||||
|
import static cn.axzo.workflow.common.constant.BpmnConstants.VAR_PROCESS_INSTANCE_NAME;
|
||||||
|
import static cn.axzo.workflow.common.constant.BpmnConstants.VAR_PROCESS_RESULT;
|
||||||
|
import static cn.axzo.workflow.common.constant.BpmnConstants.VAR_PROCESS_START_TIME;
|
||||||
|
import static cn.axzo.workflow.common.constant.BpmnConstants.VAR_TASK_START_TIME;
|
||||||
|
import static cn.axzo.workflow.common.constant.BpmnConstants.VAR_TASK_USER_NAME;
|
||||||
import static cn.axzo.workflow.common.enums.MessagePushEventEnum.PROCESS_PUSH_NOTICE;
|
import static cn.axzo.workflow.common.enums.MessagePushEventEnum.PROCESS_PUSH_NOTICE;
|
||||||
import static cn.axzo.workflow.common.enums.MessagePushEventEnum.PROCESS_PUSH_PENDING;
|
import static cn.axzo.workflow.common.enums.MessagePushEventEnum.PROCESS_PUSH_PENDING;
|
||||||
import static cn.axzo.workflow.common.enums.MessagePushEventEnum.PROCESS_PUSH_SMS;
|
import static cn.axzo.workflow.common.enums.MessagePushEventEnum.PROCESS_PUSH_SMS;
|
||||||
@ -35,15 +57,15 @@ public class MessagePushEventListener implements BpmnMessagePushEventListener, O
|
|||||||
|
|
||||||
private final EventProducer<?> eventProducer;
|
private final EventProducer<?> eventProducer;
|
||||||
private final BpmnProcessInstanceService processInstanceService;
|
private final BpmnProcessInstanceService processInstanceService;
|
||||||
|
private final HistoryService historyService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onNotice(MessagePushEvent event) {
|
public void onNotice(MessagePushEvent event) {
|
||||||
if (Objects.isNull(event.getNoticeConfig()) || !StringUtils.hasLength(event.getNoticeConfig().getNoticeMessageId()) || Objects.isNull(event.getAssigner())) {
|
if (Objects.isNull(event.getNoticeConfig()) || !StringUtils.hasLength(event.getNoticeConfig().getNoticeMessageId()) || Objects.isNull(event.getAssigner())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BpmnProcessInstanceVO processInstanceVO = getBpmnProcessInstanceVO(event);
|
MessagePushDTO dto = build(event.getNoticeConfig().getNoticeMessageId(), PROCESS_PUSH_NOTICE, event,
|
||||||
MessagePushDTO dto = build(event.getNoticeConfig().getNoticeMessageId(), PROCESS_PUSH_NOTICE,
|
collectionVariable(event));
|
||||||
processInstanceVO, event);
|
|
||||||
log.info("MessagePushEventListener#onNotice MQ.Data: {}", JSON.toJSONString(dto));
|
log.info("MessagePushEventListener#onNotice MQ.Data: {}", JSON.toJSONString(dto));
|
||||||
sendMessageQueue(dto, PROCESS_PUSH_NOTICE);
|
sendMessageQueue(dto, PROCESS_PUSH_NOTICE);
|
||||||
}
|
}
|
||||||
@ -54,9 +76,8 @@ public class MessagePushEventListener implements BpmnMessagePushEventListener, O
|
|||||||
if (Objects.isNull(event.getNoticeConfig()) || !StringUtils.hasLength(event.getNoticeConfig().getPendingMessageId()) || Objects.isNull(event.getAssigner())) {
|
if (Objects.isNull(event.getNoticeConfig()) || !StringUtils.hasLength(event.getNoticeConfig().getPendingMessageId()) || Objects.isNull(event.getAssigner())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BpmnProcessInstanceVO processInstanceVO = getBpmnProcessInstanceVO(event);
|
MessagePushDTO dto = build(event.getNoticeConfig().getNoticeMessageId(), PROCESS_PUSH_PENDING, event,
|
||||||
MessagePushDTO dto = build(event.getNoticeConfig().getNoticeMessageId(), PROCESS_PUSH_PENDING,
|
collectionVariable(event));
|
||||||
processInstanceVO, event);
|
|
||||||
log.info("MessagePushEventListener#onPending MQ.Data: {}", JSON.toJSONString(dto));
|
log.info("MessagePushEventListener#onPending MQ.Data: {}", JSON.toJSONString(dto));
|
||||||
sendMessageQueue(dto, PROCESS_PUSH_PENDING);
|
sendMessageQueue(dto, PROCESS_PUSH_PENDING);
|
||||||
}
|
}
|
||||||
@ -66,28 +87,68 @@ public class MessagePushEventListener implements BpmnMessagePushEventListener, O
|
|||||||
if (Objects.isNull(event.getNoticeConfig()) || !StringUtils.hasLength(event.getNoticeConfig().getSmsId()) || Objects.isNull(event.getAssigner())) {
|
if (Objects.isNull(event.getNoticeConfig()) || !StringUtils.hasLength(event.getNoticeConfig().getSmsId()) || Objects.isNull(event.getAssigner())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BpmnProcessInstanceVO processInstanceVO = getBpmnProcessInstanceVO(event);
|
MessagePushDTO dto = build(event.getNoticeConfig().getNoticeMessageId(), PROCESS_PUSH_SMS, event,
|
||||||
MessagePushDTO dto = build(event.getNoticeConfig().getNoticeMessageId(), PROCESS_PUSH_SMS,
|
collectionVariable(event));
|
||||||
processInstanceVO, event);
|
|
||||||
log.info("MessagePushEventListener#onSms MQ.Data: {}", JSON.toJSONString(dto));
|
log.info("MessagePushEventListener#onSms MQ.Data: {}", JSON.toJSONString(dto));
|
||||||
sendMessageQueue(dto, PROCESS_PUSH_SMS);
|
sendMessageQueue(dto, PROCESS_PUSH_SMS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map<String, Object> collectionVariable(MessagePushEvent event) {
|
||||||
|
Map<String, Object> variables = new HashMap<>();
|
||||||
|
|
||||||
|
BpmnProcessInstanceVO processInstance = getBpmnProcessInstanceVO(event);
|
||||||
|
Map<String, Object> originVariables = processInstance.getVariables();
|
||||||
|
BpmnTaskDelegateAssigner initiator = (BpmnTaskDelegateAssigner) originVariables.getOrDefault(INTERNAL_INITIATOR,
|
||||||
|
new BpmnTaskDelegateAssigner());
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
|
variables.put(VAR_INITIATOR_USER_NAME, initiator.getAssignerName());
|
||||||
|
variables.put(VAR_PROCESS_INSTANCE_NAME, processInstance.getName());
|
||||||
|
variables.put(VAR_PROCESS_INSTANCE_ID, processInstance.getId());
|
||||||
|
variables.put(VAR_PROCESS_START_TIME, sdf.format(processInstance.getCreateAt()));
|
||||||
|
variables.put(VAR_PROCESS_END_TIME, sdf.format(processInstance.getEndTime()));
|
||||||
|
variables.put(VAR_PROCESS_RESULT, processInstance.getResult().getDesc());
|
||||||
|
// 业务名称
|
||||||
|
variables.put(VAR_BUSINESS_NAME, "");
|
||||||
|
|
||||||
|
if (!StringUtils.hasLength(event.getTaskId())) {
|
||||||
|
return variables;
|
||||||
|
}
|
||||||
|
List<HistoricTaskInstance> tasks =
|
||||||
|
historyService.createHistoricTaskInstanceQuery().taskId(event.getTaskId()).list();
|
||||||
|
if (CollectionUtils.isEmpty(tasks)) {
|
||||||
|
return variables;
|
||||||
|
}
|
||||||
|
// 应该只有 1 个, 但是为了防止有多个, 这里只取第一个
|
||||||
|
List<BpmnTaskDelegateAssigner> assigners =
|
||||||
|
(List<BpmnTaskDelegateAssigner>) originVariables.getOrDefault(INTERNAL_TASK_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + tasks.get(0).getTaskDefinitionKey(), Collections.emptyList());
|
||||||
|
assigners.stream().filter(i -> Objects.equals(i.buildAssigneeId(), tasks.get(0).getAssignee())).findAny()
|
||||||
|
.ifPresent(i -> {
|
||||||
|
variables.put(VAR_TASK_USER_NAME, i.getAssignerName());
|
||||||
|
});
|
||||||
|
variables.put(VAR_ACTIVITY_NAME, tasks.get(0).getName());
|
||||||
|
variables.put(VAR_TASK_START_TIME, sdf.format(tasks.get(0).getCreateTime()));
|
||||||
|
// TODO 操作类型 同意、驳回、加签、评论、转交等
|
||||||
|
variables.put(VAR_OPERATOR_TYPE, "");
|
||||||
|
return variables;
|
||||||
|
}
|
||||||
|
|
||||||
private BpmnProcessInstanceVO getBpmnProcessInstanceVO(MessagePushEvent event) {
|
private BpmnProcessInstanceVO getBpmnProcessInstanceVO(MessagePushEvent event) {
|
||||||
BpmnProcessInstanceQueryDTO queryDTO = new BpmnProcessInstanceQueryDTO();
|
BpmnProcessInstanceQueryDTO queryDTO = new BpmnProcessInstanceQueryDTO();
|
||||||
queryDTO.setProcessInstanceId(event.getProcessInstanceId());
|
queryDTO.setProcessInstanceId(event.getProcessInstanceId());
|
||||||
queryDTO.setTenantId(event.getTenantId());
|
queryDTO.setTenantId(event.getTenantId());
|
||||||
queryDTO.setHasVariable(true);
|
queryDTO.setHasVariable(true);
|
||||||
BpmnProcessInstanceVO processInstanceVO = processInstanceService.getProcessInstanceVO(queryDTO);
|
return processInstanceService.getProcessInstanceVO(queryDTO);
|
||||||
return processInstanceVO;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessagePushDTO build(String templateId, MessagePushEventEnum type, BpmnProcessInstanceVO instance,
|
public MessagePushDTO build(String templateId, MessagePushEventEnum type, MessagePushEvent event, Map<String,
|
||||||
MessagePushEvent event) {
|
Object> variables) {
|
||||||
return new MessagePushDTO()
|
return new MessagePushDTO()
|
||||||
|
.setId(event.getProcessInstanceId())
|
||||||
.setType(type)
|
.setType(type)
|
||||||
.setTemplateId(templateId)
|
.setTemplateId(templateId)
|
||||||
.setReceivePerson(event.getAssigner());
|
.setReceivePerson(event.getAssigner())
|
||||||
|
.setVariables(variables);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendMessageQueue(MessagePushDTO dto, MessagePushEventEnum eventEnum) {
|
public void sendMessageQueue(MessagePushDTO dto, MessagePushEventEnum eventEnum) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user