add 添加初始化配置数据(demo使用,不用可删除)

This commit is contained in:
gssong 2024-04-08 21:30:36 +08:00
parent 6ad126cf64
commit 040ecb2532
2 changed files with 24 additions and 114 deletions

View File

@ -1,114 +0,0 @@
package org.dromara.workflow.flowable.cmd;
import org.flowable.bpmn.BpmnAutoLayout;
import org.flowable.bpmn.model.*;
import org.flowable.bpmn.model.Process;
import org.flowable.common.engine.impl.interceptor.Command;
import org.flowable.common.engine.impl.interceptor.CommandContext;
import org.flowable.engine.impl.cmd.AbstractDynamicInjectionCmd;
import org.flowable.engine.impl.dynamic.BaseDynamicSubProcessInjectUtil;
import org.flowable.engine.impl.dynamic.DynamicUserTaskBuilder;
import org.flowable.engine.impl.persistence.entity.DeploymentEntity;
import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntity;
import java.util.List;
import java.util.Map;
public class CustomInjectUserTaskCmd extends AbstractDynamicInjectionCmd implements Command<Void> {
private final FlowElement currentElement;
private final String processInstanceId;
private final DynamicUserTaskBuilder dynamicUserTaskBuilder;
public CustomInjectUserTaskCmd(String processInstanceId, DynamicUserTaskBuilder dynamicUserTaskBuilder, FlowElement currentElement) {
this.currentElement = currentElement;
this.processInstanceId = processInstanceId;
this.dynamicUserTaskBuilder = dynamicUserTaskBuilder;
}
@Override
protected void updateBpmnProcess(CommandContext commandContext, Process process, BpmnModel bpmnModel, ProcessDefinitionEntity originalProcessDefinitionEntity, DeploymentEntity newDeploymentEntity) {
if (!(this.currentElement instanceof UserTask currentUserTask)) {
return;
}
if (currentUserTask.getOutgoingFlows().isEmpty() || currentUserTask.getOutgoingFlows().size() > 1) {
return;
}
SequenceFlow currentOutgoingFlow = currentUserTask.getOutgoingFlows().get(0);
FlowElement targetFlowElement = currentOutgoingFlow.getTargetFlowElement();
//创建新的任务节点和两条连线
UserTask newUserTask = createUserTask(process);
SequenceFlow newSequenceFlow1 = new SequenceFlow(currentUserTask.getId(), newUserTask.getId());
newSequenceFlow1.setId(dynamicUserTaskBuilder.nextFlowId(process.getFlowElementMap()));
SequenceFlow newSequenceFlow2 = new SequenceFlow(newUserTask.getId(), targetFlowElement.getId());
newSequenceFlow2.setId(dynamicUserTaskBuilder.nextFlowId(process.getFlowElementMap()));
//添加到流程
process.addFlowElement(newUserTask);
process.addFlowElement(newSequenceFlow1);
process.addFlowElement(newSequenceFlow2);
process.removeFlowElement(currentOutgoingFlow.getId());
//获取开始节点
StartEvent startEvent = process.findFlowElementsOfType(StartEvent.class, false).get(0);
//绘制新的流程图
GraphicInfo elementGraphicInfo = bpmnModel.getGraphicInfo(currentUserTask.getId());
if (elementGraphicInfo != null) {
double yDiff = 0;
double xDiff = 80;
if (elementGraphicInfo.getY() < 173) {
yDiff = 173 - elementGraphicInfo.getY();
elementGraphicInfo.setY(173);
}
Map<String, GraphicInfo> locationMap = bpmnModel.getLocationMap();
for (String locationId : locationMap.keySet()) {
if (startEvent.getId().equals(locationId)) {
continue;
}
GraphicInfo locationGraphicInfo = locationMap.get(locationId);
locationGraphicInfo.setX(locationGraphicInfo.getX() + xDiff);
locationGraphicInfo.setY(locationGraphicInfo.getY() + yDiff);
}
Map<String, List<GraphicInfo>> flowLocationMap = bpmnModel.getFlowLocationMap();
for (String flowId : flowLocationMap.keySet()) {
List<GraphicInfo> flowGraphicInfoList = flowLocationMap.get(flowId);
for (GraphicInfo flowGraphicInfo : flowGraphicInfoList) {
flowGraphicInfo.setX(flowGraphicInfo.getX() + xDiff);
flowGraphicInfo.setY(flowGraphicInfo.getY() + yDiff);
}
}
//移除当前流程连线
bpmnModel.removeFlowGraphicInfoList(currentOutgoingFlow.getId());
//重新绘制
new BpmnAutoLayout(bpmnModel).execute();
}
BaseDynamicSubProcessInjectUtil.processFlowElements(commandContext, process, bpmnModel, originalProcessDefinitionEntity, newDeploymentEntity);
}
@Override
protected void updateExecutions(CommandContext commandContext, ProcessDefinitionEntity processDefinitionEntity, ExecutionEntity processInstance, List<ExecutionEntity> childExecutions) {
}
private UserTask createUserTask(Process process) {
UserTask userTask = new UserTask();
if (dynamicUserTaskBuilder.getId() != null) {
userTask.setId(dynamicUserTaskBuilder.getId());
} else {
userTask.setId(dynamicUserTaskBuilder.nextTaskId(process.getFlowElementMap()));
}
dynamicUserTaskBuilder.setDynamicTaskId(userTask.getId());
userTask.setName(dynamicUserTaskBuilder.getName());
userTask.setAssignee(dynamicUserTaskBuilder.getAssignee());
return userTask;
}
@Override
public Void execute(CommandContext commandContext) {
createDerivedProcessDefinitionForProcessInstance(commandContext, processInstanceId);
return null;
}
}

View File

@ -19,11 +19,13 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.domain.WfCategory;
import org.dromara.workflow.domain.WfDefinitionConfig;
import org.dromara.workflow.domain.WfNodeConfig;
import org.dromara.workflow.domain.bo.ProcessDefinitionBo;
import org.dromara.workflow.domain.bo.WfDefinitionConfigBo;
import org.dromara.workflow.domain.vo.ProcessDefinitionVo;
import org.dromara.workflow.domain.vo.WfDefinitionConfigVo;
import org.dromara.workflow.mapper.WfDefinitionConfigMapper;
import org.dromara.workflow.service.IActProcessDefinitionService;
import org.dromara.workflow.service.IWfCategoryService;
import org.dromara.workflow.service.IWfDefinitionConfigService;
@ -62,6 +64,7 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer
private final ProcessMigrationService processMigrationService;
private final IWfCategoryService wfCategoryService;
private final IWfDefinitionConfigService iWfDefinitionConfigService;
private final WfDefinitionConfigMapper wfDefinitionConfigMapper;
private final IWfNodeConfigService iWfNodeConfigService;
/**
@ -340,6 +343,8 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer
zipInputStream.close();
}
}
//初始化配置数据demo使用不用可删除
initWfDefConfig();
} else {
String originalFilename = file.getOriginalFilename();
String bpmnResourceSuffix = ResourceNameUtil.BPMN_RESOURCE_SUFFIXES[0];
@ -369,6 +374,25 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer
}
/**
* 初始化配置数据demo使用不用可删除
*/
private void initWfDefConfig() {
List<WfDefinitionConfig> wfDefinitionConfigs = wfDefinitionConfigMapper.selectList();
if (CollUtil.isEmpty(wfDefinitionConfigs)) {
ProcessDefinition processDefinition = QueryUtils.definitionQuery().processDefinitionKey("leave1").latestVersion().singleResult();
if (processDefinition != null) {
WfDefinitionConfigBo wfFormDefinition = new WfDefinitionConfigBo();
wfFormDefinition.setDefinitionId(processDefinition.getId());
wfFormDefinition.setProcessKey(processDefinition.getKey());
wfFormDefinition.setTableName("test_leave");
wfFormDefinition.setVersion(processDefinition.getVersion());
iWfDefinitionConfigService.saveOrUpdate(wfFormDefinition);
}
}
}
/**
* 设置表单内容
*