update 删除节点(完成)

This commit is contained in:
lijiarao
2023-10-13 10:35:36 +08:00
parent 648b3b549f
commit 14fa96f4f3
@@ -141,6 +141,7 @@ public class ProcessModelNodeService extends ServiceImpl<ProcessModelNodeMapper,
//把新增的节点同步到数据库 //把新增的节点同步到数据库
LambdaUpdateWrapper<ProcessModelNode> updateFlow = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<ProcessModelNode> updateFlow = new LambdaUpdateWrapper<>();
updateFlow.eq(ProcessModelNode::getModelId,modelId);
updateFlow.eq(ProcessModelNode::getXmlNodeId,flowOrigin2.getXmlNodeId()); updateFlow.eq(ProcessModelNode::getXmlNodeId,flowOrigin2.getXmlNodeId());
updateFlow.set(ProcessModelNode::getXmlTargetRef,userTaskId); updateFlow.set(ProcessModelNode::getXmlTargetRef,userTaskId);
processModelNodeMapper.update(null,updateFlow); processModelNodeMapper.update(null,updateFlow);
@@ -176,12 +177,6 @@ public class ProcessModelNodeService extends ServiceImpl<ProcessModelNodeMapper,
throw new JeroBootException("只能删除自定义新增的审批节点"); throw new JeroBootException("只能删除自定义新增的审批节点");
} }
processModelNodeLambdaQueryWrapper.clear(); processModelNodeLambdaQueryWrapper.clear();
//查找指向当前节点的线
processModelNodeLambdaQueryWrapper.eq(ProcessModelNode::getXmlTargetRef, xmlNodeId)
.isNull(ProcessModelNode::getNodeName)
.eq(ProcessModelNode::getModelId, modelId);
ProcessModelNode flowTarget = processModelNodeMapper.selectOne(processModelNodeLambdaQueryWrapper);
processModelNodeLambdaQueryWrapper.clear();
//查找节点的流出线 //查找节点的流出线
processModelNodeLambdaQueryWrapper.eq(ProcessModelNode::getXmlSourceRef, xmlNodeId) processModelNodeLambdaQueryWrapper.eq(ProcessModelNode::getXmlSourceRef, xmlNodeId)
.eq(ProcessModelNode::getModelId, modelId); .eq(ProcessModelNode::getModelId, modelId);
@@ -193,61 +188,74 @@ public class ProcessModelNodeService extends ServiceImpl<ProcessModelNodeMapper,
.eq(ProcessModelNode::getModelId, modelId); .eq(ProcessModelNode::getModelId, modelId);
ProcessModelNode gatewayOrigin = processModelNodeMapper.selectOne(processModelNodeLambdaQueryWrapper); ProcessModelNode gatewayOrigin = processModelNodeMapper.selectOne(processModelNodeLambdaQueryWrapper);
processModelNodeLambdaQueryWrapper.clear();
//查找网关指向的线
processModelNodeLambdaQueryWrapper.eq(ProcessModelNode::getXmlSourceRef, gatewayOrigin.getXmlNodeId())
.eq(ProcessModelNode::getNodeName, "通过")
.eq(ProcessModelNode::getModelId, modelId);
ProcessModelNode flowOrigin2 = processModelNodeMapper.selectOne(processModelNodeLambdaQueryWrapper);
byte[] modelEditorSource = repositoryService.getModelEditorSource(modelId); byte[] modelEditorSource = repositoryService.getModelEditorSource(modelId);
ObjectNode objectNode = (ObjectNode) new ObjectMapper().readTree(modelEditorSource); ObjectNode objectNode = (ObjectNode) new ObjectMapper().readTree(modelEditorSource);
BpmnModel bpmnModel = new BpmnJsonConverter().convertToBpmnModel(objectNode); BpmnModel bpmnModel = new BpmnJsonConverter().convertToBpmnModel(objectNode);
Process process = bpmnModel.getMainProcess(); Process process = bpmnModel.getMainProcess();
//需要删除的节点idList
List<String> xmlNodeIdList = new ArrayList<>();
Gateway gateway = (Gateway) process.getFlowElement(gatewayOrigin.getXmlNodeId()); Gateway gateway = (Gateway) process.getFlowElement(gatewayOrigin.getXmlNodeId());
String gatewayId = gateway.getId();
process.removeFlowElement(gatewayId);
xmlNodeIdList.add(gatewayId);
//网关的流入流出线
List<SequenceFlow> outgoingFlows = gateway.getOutgoingFlows(); List<SequenceFlow> outgoingFlows = gateway.getOutgoingFlows();
String finalTargetRef = null;
for (SequenceFlow outgoingFlow : outgoingFlows) { for (SequenceFlow outgoingFlow : outgoingFlows) {
String name = outgoingFlow.getName(); String name = outgoingFlow.getName();
if ("通过".equals(name)){ if ("通过".equals(name)){
finalTargetRef = outgoingFlow.getTargetRef();
} }
process.removeFlowElement(outgoingFlow.getId());
xmlNodeIdList.add(outgoingFlow.getId());
} }
List<SequenceFlow> incomingFlows = gateway.getIncomingFlows(); List<SequenceFlow> incomingFlows = gateway.getIncomingFlows();
for (SequenceFlow incomingFlow : incomingFlows) {
process.removeFlowElement(incomingFlow.getId());
xmlNodeIdList.add(incomingFlow.getId());
}
//SequenceFlow flowElement = (SequenceFlow) process.getFlowElement(flowTarget.getXmlNodeId()); //更新指向当前待删除节点的线
UserTask userTask = (UserTask) process.getFlowElement(xmlNodeId); UserTask userTask = (UserTask) process.getFlowElement(xmlNodeId);
List<SequenceFlow> outgoingFlows1 = userTask.getOutgoingFlows(); process.removeFlowElement(xmlNodeId);
List<SequenceFlow> incomingFlows1 = userTask.getIncomingFlows(); xmlNodeIdList.add(xmlNodeId);
log.info("outgoingFlows1:"+outgoingFlows1.size()); List<SequenceFlow> beforeUserTaskFlows = userTask.getIncomingFlows();
for (SequenceFlow flow : beforeUserTaskFlows) {
flow.setTargetRef(finalTargetRef);
process.removeFlowElement(flow.getId());
process.addFlowElement(flow);
}
//重新绘画图形 //重新绘画图形
//BpmnAutoLayout bpmnAutoLayout = new BpmnAutoLayout(bpmnModel); BpmnAutoLayout bpmnAutoLayout = new BpmnAutoLayout(bpmnModel);
//bpmnAutoLayout.execute(); bpmnAutoLayout.execute();
//更新model //更新model
//ObjectNode objectNode1 = new BpmnJsonConverter().convertToJson(bpmnModel); ObjectNode objectNode1 = new BpmnJsonConverter().convertToJson(bpmnModel);
//String json = objectNode1.toString(); String json = objectNode1.toString();
//byte[] bytes1 = json.getBytes(StandardCharsets.UTF_8); byte[] bytes1 = json.getBytes(StandardCharsets.UTF_8);
//repositoryService.addModelEditorSource(modelId, bytes1); repositoryService.addModelEditorSource(modelId, bytes1);
//把新增的节点同步到数据库 //删除数据库中的节点
//LambdaUpdateWrapper<ProcessModelNode> updateFlow = new LambdaUpdateWrapper<>(); removeNode(modelId,xmlNodeIdList);
//updateFlow.eq(ProcessModelNode::getXmlNodeId,flowOrigin2.getXmlNodeId()); //更新待删除节点前的线的指向
//updateFlow.set(ProcessModelNode::getXmlTargetRef,userTaskId); for (SequenceFlow flow : beforeUserTaskFlows) {
//processModelNodeMapper.update(null,updateFlow); LambdaUpdateWrapper<ProcessModelNode> updateFlow = new LambdaUpdateWrapper<>();
//insertUserTask(modelId, userTask); updateFlow.eq(ProcessModelNode::getModelId,modelId);
//List<SequenceFlow> incomingFlows = gateway.getIncomingFlows(); updateFlow.eq(ProcessModelNode::getXmlNodeId,flow.getId());
//for (SequenceFlow incomingFlow : incomingFlows) { updateFlow.set(ProcessModelNode::getXmlTargetRef,finalTargetRef);
// insertFlow(modelId, incomingFlow); processModelNodeMapper.update(null,updateFlow);
//} }
//insertGateway(modelId, gateway);
//List<SequenceFlow> outgoingFlows = gateway.getOutgoingFlows();
//for (SequenceFlow outgoingFlow : outgoingFlows) {
// insertFlow(modelId, outgoingFlow);
//}
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
private void removeNode(String modelId, List<String> xmlNodeIdList) {
LambdaQueryWrapper<ProcessModelNode> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessModelNode::getModelId,modelId);
wrapper.in(ProcessModelNode::getXmlNodeId,xmlNodeIdList);
processModelNodeMapper.delete(wrapper);
}
private void insertGateway(String modelId, ExclusiveGateway gateway) { private void insertGateway(String modelId, ExclusiveGateway gateway) {
ProcessModelNode gatewayNode = new ProcessModelNode(); ProcessModelNode gatewayNode = new ProcessModelNode();