Merge branch 'feature/hotfix-mqMegSize' into master-release

This commit is contained in:
wangli 2026-03-10 15:21:32 +08:00
commit 5e3d5265ae
9 changed files with 254 additions and 36 deletions

View File

@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Map;
/**
@ -14,7 +15,7 @@ import java.util.Map;
*/
@ApiModel("创建工作流实例同时携带表单的入参模型")
@Data
public class BpmnProcessInstanceCreateWithFormDTO {
public class BpmnProcessInstanceCreateWithFormDTO implements Serializable {
/**
* 审批使用了表单请一定注意传参

View File

@ -7,4 +7,6 @@ package cn.axzo.workflow.core.common.context;
* @since 2024/4/12 16:43
*/
public class ActivityOperationContext extends CommonContext<ActivityOperationContext> {
}

View File

@ -6,6 +6,7 @@ import cn.axzo.workflow.common.model.response.bpmn.process.BpmnProcessInstanceVO
import org.flowable.bpmn.model.Process;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.form.model.SimpleFormModel;
import org.springframework.util.StringUtils;
import java.util.Objects;
@ -27,6 +28,7 @@ public abstract class CommonContext<T> implements OperationContext {
private BpmnProcessDefinitionVO definitionVO;
private String processInstanceVersion;
private BpmnTaskDelegateAssigner lastOperationAssigner;
private SimpleFormModel formModel;
public ProcessInstance getProcessInstance(Supplier<ProcessInstance> supplier) {
if (Objects.isNull(processInstance)) {
@ -84,6 +86,13 @@ public abstract class CommonContext<T> implements OperationContext {
return processInstanceVersion;
}
public SimpleFormModel getFormModel(Supplier<SimpleFormModel> supplier) {
if (Objects.isNull(formModel)) {
return supplier.get();
}
return formModel;
}
@Override
@SuppressWarnings("unchecked")
public void setContext(OperationContext context) {

View File

@ -4,12 +4,14 @@ import cn.axzo.workflow.common.constant.BpmnConstants;
import cn.axzo.workflow.core.common.context.OperationContext;
import cn.hutool.json.JSONUtil;
import org.slf4j.MDC;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static cn.azxo.framework.common.constatns.Constants.CTX_LOG_ID_MDC;
@ -56,7 +58,7 @@ public abstract class AbstractBpmnEventListener<T extends OperationContext> impl
* @param originVariables
* @return
*/
public static Map<String, Object> removeBpmnConstantsVariables(Map<String, Object> originVariables) {
public static Map<String, Object> removeBpmnConstantsVariables(Map<String, Object> originVariables, Set<String> removeVariableKey) {
if (originVariables == null) return new HashMap<>();
// 定义需要移除的前缀列表
@ -66,6 +68,9 @@ public abstract class AbstractBpmnEventListener<T extends OperationContext> impl
BpmnConstants.TASK_COMPLETE_OPERATION_TYPE,
BpmnConstants.INTERNAL_TASK_RELATION_ASSIGNEE_LIST_INFO
);
if (!CollectionUtils.isEmpty(removeVariableKey)) {
removeVariableKey.forEach(originVariables::remove);
}
return originVariables.entrySet().stream()
.filter(entry -> entry.getKey() != null)

View File

@ -94,6 +94,7 @@ import cn.axzo.workflow.core.service.converter.BpmnProcessInstancePageItemConver
import cn.axzo.workflow.core.service.support.FlowNodeForecastService;
import cn.axzo.workflow.core.service.support.ProcessGraphicService;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.node.ArrayNode;
@ -467,6 +468,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
// TODO 该接口有个问题如果模型没有关联表单但是传入参数中含有表单变量则不能正确创建流程
@Override
public String createProcessInstance(BpmnProcessInstanceCreateDTO dto) {
BpmnProcessInstanceCreateDTO createParamDto = ObjectUtil.cloneByStream(dto);
BpmnProcessDefinitionVO definition = null;
if (!StringUtils.hasText(dto.getProcessDefinitionId())) {
definition = processDefinitionService.getActiveProcessDefinitionByKey(dto.getProcessDefinitionKey(), dto.getTenantId());
@ -548,7 +550,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
instanceBuilder.outcome(dto.getOutcome());
}
}
dto.getVariables().put(CREATE_INSTANCE_PARAMS, JSONUtil.toJsonStr(dto));
dto.getVariables().put(CREATE_INSTANCE_PARAMS, JSONUtil.toJsonStr(createParamDto));
instanceBuilder.variables(dto.getVariables());
ProcessInstance instance;
if (Boolean.TRUE.equals(dto.getAsync())) {

View File

@ -20,6 +20,9 @@ import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.form.api.FormInfo;
import org.flowable.form.api.FormRepositoryService;
import org.flowable.form.model.SimpleFormModel;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.core.Ordered;
@ -70,6 +73,8 @@ public class RocketMqBpmActivityEvent_100_Listener extends AbstractBpmnEventList
private EventProducer<?> eventProducer;
@Value("${sendMq:true}")
private Boolean sendMQ;
@Resource
private FormRepositoryService formRepositoryService;
@Override
public void onStart(DelegateExecution execution) {
@ -175,10 +180,29 @@ public class RocketMqBpmActivityEvent_100_Listener extends AbstractBpmnEventList
ProcessInstance processInstance = getContext().getProcessInstance(() ->
runtimeService.createProcessInstanceQuery().processInstanceId(execution.getProcessInstanceId())
.includeProcessVariables().singleResult());
SimpleFormModel formModel = getContext().getFormModel(() -> {
try {
if (!Objects.equals("gongrendanganqianshu", processInstance.getProcessDefinitionKey()) &&
!Objects.equals("jinengpeixun", processInstance.getProcessDefinitionKey()) &&
!Objects.equals("anquanjiaoyu", processInstance.getProcessDefinitionKey())) {
return new SimpleFormModel();
}
FormInfo formInfo = formRepositoryService.getFormModelByKey(processInstance.getProcessDefinitionKey(), processInstance.getTenantId(), true);
if (Objects.isNull(formInfo)) {
return new SimpleFormModel();
} else {
return (SimpleFormModel) formInfo.getFormModel();
}
} catch (Exception e) {
log.warn("没有找到对应业务 ID 的表单模型: {}", e.getMessage());
return new SimpleFormModel();
}
});
if (Objects.nonNull(processInstance)) {
dto.setProcessDefinitionKey(processInstance.getProcessDefinitionKey());
dto.setBusinessKey(processInstance.getBusinessKey());
dto.setVariables(removeBpmnConstantsVariables(processInstance.getProcessVariables()));
dto.setVariables(removeBpmnConstantsVariables(processInstance.getProcessVariables(), formModel.allFieldsAsMap().keySet()));
dto.setWorkflowEngineVersion(String.valueOf(processInstance.getProcessVariables()
.getOrDefault(WORKFLOW_ENGINE_VERSION, FLOW_SERVER_VERSION_121)));
} else {

View File

@ -27,6 +27,9 @@ import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.impl.util.CommandContextUtil;
import org.flowable.engine.impl.util.ProcessDefinitionUtil;
import org.flowable.form.api.FormInfo;
import org.flowable.form.api.FormRepositoryService;
import org.flowable.form.model.SimpleFormModel;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import org.springframework.beans.factory.annotation.Value;
@ -119,6 +122,8 @@ public class RocketMqMessagePushEventListener extends AbstractBpmnEventListener<
private String serviceVersion;
@Value("${workflow.noticeTemplateCode}")
private String noticeTemplateCode;
@Resource
private FormRepositoryService formRepositoryService;
private static final List<String> REMOVE_KEYS = Lists.newArrayList(
INTERNAL_INITIATOR,
@ -198,7 +203,7 @@ public class RocketMqMessagePushEventListener extends AbstractBpmnEventListener<
TaskEntity task = (TaskEntity) taskService.createTaskQuery().taskId(event.getTaskId()).singleResult();
Boolean supportUpgrade = (Boolean) task.getTransientVariablesLocal().getOrDefault(SUPPORT_UPGRADE_VARIABLE, false);
if (!supportUpgrade) {
buttons.removeIf(button-> Objects.equals(button.getBtnKey(), BPMN_UPGRADE.getBtnKey()));
buttons.removeIf(button -> Objects.equals(button.getBtnKey(), BPMN_UPGRADE.getBtnKey()));
}
dto.setButtons(buttons);
sendMessageQueue(dto, PROCESS_PUSH_PENDING);
@ -421,6 +426,26 @@ public class RocketMqMessagePushEventListener extends AbstractBpmnEventListener<
}
});
}
SimpleFormModel formModel = getContext().getFormModel(() -> {
try {
if (!Objects.equals("gongrendanganqianshu", processInstance.getProcessDefinitionKey()) &&
!Objects.equals("jinengpeixun", processInstance.getProcessDefinitionKey()) &&
!Objects.equals("anquanjiaoyu", processInstance.getProcessDefinitionKey())) {
return new SimpleFormModel();
}
FormInfo formInfo = formRepositoryService.getFormModelByKey(processInstance.getProcessDefinitionKey(), processInstance.getTenantId(), true);
if (Objects.isNull(formInfo)) {
return new SimpleFormModel();
} else {
return (SimpleFormModel) formInfo.getFormModel();
}
} catch (Exception e) {
log.warn("没有找到对应业务 ID 的表单模型: {}", e.getMessage());
return new SimpleFormModel();
}
});
formModel.allFieldsAsMap().keySet().forEach(originVariables::remove);
variables.putAll(originVariables);
return variables;
@ -449,7 +474,7 @@ public class RocketMqMessagePushEventListener extends AbstractBpmnEventListener<
.setTemplateId(templateId)
.setTaskId(event.getTaskId())
.setReceivePersons(event.getAssigners())
.setVariables(removeBpmnConstantsVariables(variables))
.setVariables(removeBpmnConstantsVariables(variables, null))
.setProcessApproveConf(event.getProcessApproveConfig())
.setActivitySignature(activitySignature)
.setTerminalType(terminalType);

View File

@ -19,6 +19,9 @@ import org.flowable.engine.delegate.event.FlowableProcessStartedEvent;
import org.flowable.engine.delegate.event.impl.FlowableProcessCancelledEventImpl;
import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
import org.flowable.engine.repository.Deployment;
import org.flowable.form.api.FormInfo;
import org.flowable.form.api.FormRepositoryService;
import org.flowable.form.model.SimpleFormModel;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.core.Ordered;
@ -64,6 +67,8 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
private RepositoryService repositoryService;
@Value("${sendMq:true}")
private Boolean sendMQ;
@Resource
private FormRepositoryService formRepositoryService;
@Override
public void onCreated(FlowableEngineEntityEvent event) {
@ -72,6 +77,26 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
.deploymentId(((ExecutionEntityImpl) event.getEntity()).getDeploymentId()).singleResult());
Process mainProcess = getContext().getProcess(() -> repositoryService.getBpmnModel(event.getProcessDefinitionId()).getMainProcess());
BpmnTaskDelegateAssigner initiator = getContext().getInitiator(() -> BpmnTaskDelegateAssigner.toObjectCompatible(((ExecutionEntityImpl) event.getEntity()).getVariable(INTERNAL_INITIATOR)));
SimpleFormModel formModel = getContext().getFormModel(() -> {
try {
String processDefinitionKey = ((ExecutionEntityImpl) event.getEntity()).getProcessDefinitionKey();
if (!Objects.equals("gongrendanganqianshu", processDefinitionKey) &&
!Objects.equals("jinengpeixun", processDefinitionKey) &&
!Objects.equals("anquanjiaoyu", processDefinitionKey)) {
return new SimpleFormModel();
}
FormInfo formInfo = formRepositoryService.getFormModelByKey(processDefinitionKey,
((ExecutionEntityImpl) event.getEntity()).getTenantId(), true);
if (Objects.isNull(formInfo)) {
return new SimpleFormModel();
} else {
return (SimpleFormModel) formInfo.getFormModel();
}
} catch (Exception e) {
log.warn("没有找到对应业务 ID 的表单模型: {}", e.getMessage());
return new SimpleFormModel();
}
});
ProcessInstanceDTO dto = new ProcessInstanceDTO()
.setType(PROCESS_INSTANCE_CREATED)
.setCategory(deployment.getKey())
@ -81,7 +106,7 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
.setProcessDefinitionKey(((ExecutionEntityImpl) event.getEntity()).getProcessDefinitionKey())
.setProcessDefinitionVersion(((ExecutionEntityImpl) event.getEntity()).getProcessDefinitionVersion())
.setInitiator(initiator)
.setVariables(removeBpmnConstantsVariables(((ExecutionEntityImpl) event.getEntity()).getVariables()))
.setVariables(removeBpmnConstantsVariables(((ExecutionEntityImpl) event.getEntity()).getVariables(), formModel.allFieldsAsMap().keySet()))
.setStartTime(((ExecutionEntityImpl) event.getEntity()).getStartTime())
.setTenantId(((ExecutionEntityImpl) event.getEntity()).getTenantId())
.setBusinessKey(((ExecutionEntityImpl) event.getEntity()).getBusinessKey())
@ -108,6 +133,26 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
BpmnTaskDelegateAssigner initiator = getContext().getInitiator(() -> BpmnTaskDelegateAssigner.toObjectCompatible(((ExecutionEntityImpl) event.getEntity())
.getVariable(INTERNAL_INITIATOR)));
SimpleFormModel formModel = getContext().getFormModel(() -> {
try {
String processDefinitionKey = ((ExecutionEntityImpl) event.getEntity()).getProcessDefinitionKey();
if (!Objects.equals("gongrendanganqianshu", processDefinitionKey) &&
!Objects.equals("jinengpeixun", processDefinitionKey) &&
!Objects.equals("anquanjiaoyu", processDefinitionKey)) {
return new SimpleFormModel();
}
FormInfo formInfo = formRepositoryService.getFormModelByKey(processDefinitionKey,
((ExecutionEntityImpl) event.getEntity()).getTenantId(), true);
if (Objects.isNull(formInfo)) {
return new SimpleFormModel();
} else {
return (SimpleFormModel) formInfo.getFormModel();
}
} catch (Exception e) {
log.warn("没有找到对应业务 ID 的表单模型: {}", e.getMessage());
return new SimpleFormModel();
}
});
ProcessInstanceDTO dto = new ProcessInstanceDTO()
.setType(PROCESS_INSTANCE_STARTED)
.setCategory(deployment.getKey())
@ -117,7 +162,7 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
.setProcessDefinitionKey(((ExecutionEntityImpl) event.getEntity()).getProcessDefinitionKey())
.setProcessDefinitionVersion(((ExecutionEntityImpl) event.getEntity()).getProcessDefinitionVersion())
.setInitiator(initiator)
.setVariables(removeBpmnConstantsVariables(((ExecutionEntityImpl) event.getEntity()).getVariables()))
.setVariables(removeBpmnConstantsVariables(((ExecutionEntityImpl) event.getEntity()).getVariables(), formModel.allFieldsAsMap().keySet()))
.setStartTime(((ExecutionEntityImpl) event.getEntity()).getStartTime())
.setTenantId(((ExecutionEntityImpl) event.getEntity()).getTenantId())
.setBusinessKey(((ExecutionEntityImpl) event.getEntity()).getProcessInstance().getBusinessKey())
@ -139,6 +184,26 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
Process mainProcess = getContext().getProcess(() -> repositoryService.getBpmnModel(event.getProcessDefinitionId()).getMainProcess());
BpmnTaskDelegateAssigner initiator = getContext().getInitiator(() -> BpmnTaskDelegateAssigner.toObjectCompatible(((FlowableProcessCancelledEventImpl) event)
.getExecution().getVariable(INTERNAL_INITIATOR)));
SimpleFormModel formModel = getContext().getFormModel(() -> {
try {
String processDefinitionKey = ((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getProcessDefinitionKey();
if (!Objects.equals("gongrendanganqianshu", processDefinitionKey) &&
!Objects.equals("jinengpeixun", processDefinitionKey) &&
!Objects.equals("anquanjiaoyu", processDefinitionKey)) {
return new SimpleFormModel();
}
FormInfo formInfo = formRepositoryService.getFormModelByKey(processDefinitionKey,
((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId(), true);
if (Objects.isNull(formInfo)) {
return new SimpleFormModel();
} else {
return (SimpleFormModel) formInfo.getFormModel();
}
} catch (Exception e) {
log.warn("没有找到对应业务 ID 的表单模型: {}", e.getMessage());
return new SimpleFormModel();
}
});
ProcessInstanceDTO dto = new ProcessInstanceDTO()
.setType(PROCESS_INSTANCE_CANCELLED)
@ -151,7 +216,7 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
.setInitiator(initiator)
.setLastOperationAssigner(getContext().getLastOperationAssigner(() -> BpmnTaskDelegateAssigner.toObjectCompatible(
runtimeService.getVariable(event.getProcessInstanceId(), CLOSE_PROCESS_ASSIGNER, BpmnTaskDelegateAssigner.class))))
.setVariables(removeBpmnConstantsVariables(((FlowableProcessCancelledEventImpl) event).getExecution().getVariables()))
.setVariables(removeBpmnConstantsVariables(((FlowableProcessCancelledEventImpl) event).getExecution().getVariables(), formModel.allFieldsAsMap().keySet()))
.setStartTime(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getStartTime())
.setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId())
.setBusinessKey(((FlowableProcessCancelledEventImpl) event).getExecution().getProcessInstanceBusinessKey())
@ -181,6 +246,26 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
BpmnTaskDelegateAssigner initiator = getContext().getInitiator(() -> BpmnTaskDelegateAssigner.toObjectCompatible(((FlowableProcessCancelledEventImpl) event)
.getExecution().getVariable(INTERNAL_INITIATOR)));
SimpleFormModel formModel = getContext().getFormModel(() -> {
try {
String processDefinitionKey = ((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getProcessDefinitionKey();
if (!Objects.equals("gongrendanganqianshu", processDefinitionKey) &&
!Objects.equals("jinengpeixun", processDefinitionKey) &&
!Objects.equals("anquanjiaoyu", processDefinitionKey)) {
return new SimpleFormModel();
}
FormInfo formInfo = formRepositoryService.getFormModelByKey(processDefinitionKey,
((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId(), true);
if (Objects.isNull(formInfo)) {
return new SimpleFormModel();
} else {
return (SimpleFormModel) formInfo.getFormModel();
}
} catch (Exception e) {
log.warn("没有找到对应业务 ID 的表单模型: {}", e.getMessage());
return new SimpleFormModel();
}
});
ProcessInstanceDTO dto = new ProcessInstanceDTO()
.setType(PROCESS_INSTANCE_REJECTED)
.setCategory(deployment.getKey())
@ -192,7 +277,7 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
.setInitiator(initiator)
.setLastOperationAssigner(getContext().getLastOperationAssigner(() -> BpmnTaskDelegateAssigner.toObjectCompatible(
runtimeService.getVariable(event.getProcessInstanceId(), CLOSE_PROCESS_ASSIGNER, BpmnTaskDelegateAssigner.class))))
.setVariables(removeBpmnConstantsVariables(((FlowableProcessCancelledEventImpl) event).getExecution().getVariables()))
.setVariables(removeBpmnConstantsVariables(((FlowableProcessCancelledEventImpl) event).getExecution().getVariables(), formModel.allFieldsAsMap().keySet()))
.setStartTime(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getStartTime())
.setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId())
.setBusinessKey(((FlowableProcessCancelledEventImpl) event).getExecution().getProcessInstanceBusinessKey())
@ -217,6 +302,26 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
BpmnTaskDelegateAssigner initiator = getContext().getInitiator(() -> BpmnTaskDelegateAssigner.toObjectCompatible(((FlowableProcessCancelledEventImpl) event)
.getExecution().getVariable(INTERNAL_INITIATOR)));
SimpleFormModel formModel = getContext().getFormModel(() -> {
try {
String processDefinitionKey = ((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getProcessDefinitionKey();
if (!Objects.equals("gongrendanganqianshu", processDefinitionKey) &&
!Objects.equals("jinengpeixun", processDefinitionKey) &&
!Objects.equals("anquanjiaoyu", processDefinitionKey)) {
return new SimpleFormModel();
}
FormInfo formInfo = formRepositoryService.getFormModelByKey(processDefinitionKey,
((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId(), true);
if (Objects.isNull(formInfo)) {
return new SimpleFormModel();
} else {
return (SimpleFormModel) formInfo.getFormModel();
}
} catch (Exception e) {
log.warn("没有找到对应业务 ID 的表单模型: {}", e.getMessage());
return new SimpleFormModel();
}
});
ProcessInstanceDTO dto = new ProcessInstanceDTO()
.setType(PROCESS_INSTANCE_ABORTED)
.setCategory(deployment.getKey())
@ -228,7 +333,7 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
.setInitiator(initiator)
.setLastOperationAssigner(getContext().getLastOperationAssigner(() -> BpmnTaskDelegateAssigner.toObjectCompatible(
runtimeService.getVariable(event.getProcessInstanceId(), CLOSE_PROCESS_ASSIGNER, BpmnTaskDelegateAssigner.class))))
.setVariables(removeBpmnConstantsVariables(((FlowableProcessCancelledEventImpl) event).getExecution().getVariables()))
.setVariables(removeBpmnConstantsVariables(((FlowableProcessCancelledEventImpl) event).getExecution().getVariables(), formModel.allFieldsAsMap().keySet()))
.setStartTime(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getStartTime())
.setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId())
.setBusinessKey(((FlowableProcessCancelledEventImpl) event).getExecution().getProcessInstanceBusinessKey())
@ -253,6 +358,26 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
BpmnTaskDelegateAssigner initiator = getContext().getInitiator(() -> BpmnTaskDelegateAssigner.toObjectCompatible(((ExecutionEntityImpl) event.getEntity())
.getVariable(INTERNAL_INITIATOR)));
SimpleFormModel formModel = getContext().getFormModel(() -> {
try {
String processDefinitionKey = ((ExecutionEntityImpl) event.getEntity()).getProcessDefinitionKey();
if (!Objects.equals("gongrendanganqianshu", processDefinitionKey) &&
!Objects.equals("jinengpeixun", processDefinitionKey) &&
!Objects.equals("anquanjiaoyu", processDefinitionKey)) {
return new SimpleFormModel();
}
FormInfo formInfo = formRepositoryService.getFormModelByKey(processDefinitionKey,
((ExecutionEntityImpl) event.getEntity()).getTenantId(), true);
if (Objects.isNull(formInfo)) {
return new SimpleFormModel();
} else {
return (SimpleFormModel) formInfo.getFormModel();
}
} catch (Exception e) {
log.warn("没有找到对应业务 ID 的表单模型: {}", e.getMessage());
return new SimpleFormModel();
}
});
ProcessInstanceDTO dto = new ProcessInstanceDTO()
.setType(PROCESS_INSTANCE_COMPLETED)
.setCategory(deployment.getKey())
@ -264,7 +389,7 @@ public class RocketMqBpmnProcessEventListener extends AbstractBpmnEventListener<
.setInitiator(initiator)
.setLastOperationAssigner(getContext().getLastOperationAssigner(() -> BpmnTaskDelegateAssigner.toObjectCompatible(
runtimeService.getVariable(event.getProcessInstanceId(), CLOSE_PROCESS_ASSIGNER, BpmnTaskDelegateAssigner.class))))
.setVariables(removeBpmnConstantsVariables(((ExecutionEntityImpl) event.getEntity()).getVariables()))
.setVariables(removeBpmnConstantsVariables(((ExecutionEntityImpl) event.getEntity()).getVariables(), formModel.allFieldsAsMap().keySet()))
.setStartTime(((ExecutionEntityImpl) event.getEntity()).getStartTime())
.setTenantId(((ExecutionEntityImpl) event.getEntity()).getTenantId())
.setBusinessKey(((ExecutionEntityImpl) event.getEntity()).getProcessInstanceBusinessKey())

View File

@ -18,6 +18,9 @@ import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.form.api.FormInfo;
import org.flowable.form.api.FormRepositoryService;
import org.flowable.form.model.SimpleFormModel;
import org.flowable.task.service.delegate.DelegateTask;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
@ -78,6 +81,8 @@ public class RocketMqBpmnTaskEvent_102_Listener extends AbstractBpmnEventListene
private RepositoryService repositoryService;
@Value("${sendMq:true}")
private Boolean sendMQ;
@Resource
private FormRepositoryService formRepositoryService;
@Override
public void onAssigned(DelegateTask delegateTask) {
@ -133,7 +138,7 @@ public class RocketMqBpmnTaskEvent_102_Listener extends AbstractBpmnEventListene
private Deployment getDeployment(String processInstanceId) {
ProcessInstance processInstance =
runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
return repositoryService.createDeploymentQuery().deploymentId(processInstance.getDeploymentId()).singleResult();
}
@ -142,26 +147,46 @@ public class RocketMqBpmnTaskEvent_102_Listener extends AbstractBpmnEventListene
//1.获取当前的流程实例
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(delegateTask.getProcessInstanceId()).singleResult();
String category = getDeployment(delegateTask.getProcessInstanceId()).getKey();
SimpleFormModel formModel = getContext().getFormModel(() -> {
try {
if (!Objects.equals("gongrendanganqianshu", processInstance.getProcessDefinitionKey()) &&
!Objects.equals("jinengpeixun", processInstance.getProcessDefinitionKey()) &&
!Objects.equals("anquanjiaoyu", processInstance.getProcessDefinitionKey())) {
return new SimpleFormModel();
}
FormInfo formInfo = formRepositoryService.getFormModelByKey(processInstance.getProcessDefinitionKey(), processInstance.getTenantId(), true);
if (Objects.isNull(formInfo)) {
return new SimpleFormModel();
} else {
return (SimpleFormModel) formInfo.getFormModel();
}
} catch (Exception e) {
log.warn("没有找到对应业务 ID 的表单模型: {}", e.getMessage());
return new SimpleFormModel();
}
});
ProcessTaskDTO dto = new ProcessTaskDTO()
.setType(type)
.setCategory(category)
.setProcessDefinitionKey(category)
.setProcessTaskId(delegateTask.getId())
.setProcessInstanceId(delegateTask.getProcessInstanceId())
.setCurrentElementKey(delegateTask.getTaskDefinitionKey())
.setCurrentElementName(delegateTask.getName())
.setProcessDefinitionId(delegateTask.getProcessDefinitionId())
.setInitiator(BpmnTaskDelegateAssigner.toObjectCompatible(delegateTask.getVariable(INTERNAL_INITIATOR)))
.setApprover(BpmnTaskDelegateAssigner.toObjectCompatible(
delegateTask.getVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId())))
.setVariables(removeBpmnConstantsVariables(delegateTask.getVariables()))
.setStartTime(delegateTask.getCreateTime())
.setTenantId(delegateTask.getTenantId())
.setBusinessKey(processInstance.getBusinessKey())
.setAdvice(delegateTask.getTransientVariableLocal(COMMENT_TYPE_ADVICE) == null ? null : (String) delegateTask.getTransientVariableLocal(COMMENT_TYPE_ADVICE));
.setType(type)
.setCategory(category)
.setProcessDefinitionKey(category)
.setProcessTaskId(delegateTask.getId())
.setProcessInstanceId(delegateTask.getProcessInstanceId())
.setCurrentElementKey(delegateTask.getTaskDefinitionKey())
.setCurrentElementName(delegateTask.getName())
.setProcessDefinitionId(delegateTask.getProcessDefinitionId())
.setInitiator(BpmnTaskDelegateAssigner.toObjectCompatible(delegateTask.getVariable(INTERNAL_INITIATOR)))
.setApprover(BpmnTaskDelegateAssigner.toObjectCompatible(
delegateTask.getVariable(INTERNAL_TASK_RELATION_ASSIGNEE_INFO + delegateTask.getId())))
.setVariables(removeBpmnConstantsVariables(delegateTask.getVariables(), formModel.allFieldsAsMap().keySet()))
.setStartTime(delegateTask.getCreateTime())
.setTenantId(delegateTask.getTenantId())
.setBusinessKey(processInstance.getBusinessKey())
.setAdvice(delegateTask.getTransientVariableLocal(COMMENT_TYPE_ADVICE) == null ? null : (String) delegateTask.getTransientVariableLocal(COMMENT_TYPE_ADVICE));
BpmnMetaParserHelper.getNoticeConfig(mainProcess).ifPresent(dto::setNoticeConf);
String version = (String) runtimeService.getVariable(delegateTask.getProcessInstanceId(),
WORKFLOW_ENGINE_VERSION);
WORKFLOW_ENGINE_VERSION);
if (Objects.isNull(version)) {
version = FLOW_SERVER_VERSION_121;
}
@ -192,12 +217,12 @@ public class RocketMqBpmnTaskEvent_102_Listener extends AbstractBpmnEventListene
}
}
eventProducer.send(Event.builder()
.shardingKey(dto.getProcessInstanceId())
.eventCode(eventEnum.getEventCode())
.targetId(dto.getProcessInstanceId())
.targetType(dto.getProcessDefinitionKey())
.data(dto)
.build(), header);
.shardingKey(dto.getProcessInstanceId())
.eventCode(eventEnum.getEventCode())
.targetId(dto.getProcessInstanceId())
.targetType(dto.getProcessDefinitionKey())
.data(dto)
.build(), header);
}