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<>();
updateFlow.eq(ProcessModelNode::getModelId,modelId);
updateFlow.eq(ProcessModelNode::getXmlNodeId,flowOrigin2.getXmlNodeId());
updateFlow.set(ProcessModelNode::getXmlTargetRef,userTaskId);
processModelNodeMapper.update(null,updateFlow);
@@ -176,12 +177,6 @@ public class ProcessModelNodeService extends ServiceImpl<ProcessModelNodeMapper,
throw new JeroBootException("只能删除自定义新增的审批节点");
}
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)
.eq(ProcessModelNode::getModelId, modelId);
@@ -193,61 +188,74 @@ public class ProcessModelNodeService extends ServiceImpl<ProcessModelNodeMapper,
.eq(ProcessModelNode::getModelId, modelId);
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);
ObjectNode objectNode = (ObjectNode) new ObjectMapper().readTree(modelEditorSource);
BpmnModel bpmnModel = new BpmnJsonConverter().convertToBpmnModel(objectNode);
Process process = bpmnModel.getMainProcess();
//需要删除的节点idList
List<String> xmlNodeIdList = new ArrayList<>();
Gateway gateway = (Gateway) process.getFlowElement(gatewayOrigin.getXmlNodeId());
String gatewayId = gateway.getId();
process.removeFlowElement(gatewayId);
xmlNodeIdList.add(gatewayId);
//网关的流入流出线
List<SequenceFlow> outgoingFlows = gateway.getOutgoingFlows();
String finalTargetRef = null;
for (SequenceFlow outgoingFlow : outgoingFlows) {
String name = outgoingFlow.getName();
if ("通过".equals(name)){
finalTargetRef = outgoingFlow.getTargetRef();
}
process.removeFlowElement(outgoingFlow.getId());
xmlNodeIdList.add(outgoingFlow.getId());
}
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);
List<SequenceFlow> outgoingFlows1 = userTask.getOutgoingFlows();
List<SequenceFlow> incomingFlows1 = userTask.getIncomingFlows();
log.info("outgoingFlows1:"+outgoingFlows1.size());
process.removeFlowElement(xmlNodeId);
xmlNodeIdList.add(xmlNodeId);
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.execute();
BpmnAutoLayout bpmnAutoLayout = new BpmnAutoLayout(bpmnModel);
bpmnAutoLayout.execute();
//更新model
//ObjectNode objectNode1 = new BpmnJsonConverter().convertToJson(bpmnModel);
//String json = objectNode1.toString();
//byte[] bytes1 = json.getBytes(StandardCharsets.UTF_8);
//repositoryService.addModelEditorSource(modelId, bytes1);
ObjectNode objectNode1 = new BpmnJsonConverter().convertToJson(bpmnModel);
String json = objectNode1.toString();
byte[] bytes1 = json.getBytes(StandardCharsets.UTF_8);
repositoryService.addModelEditorSource(modelId, bytes1);
//把新增的节点同步到数据库
//LambdaUpdateWrapper<ProcessModelNode> updateFlow = new LambdaUpdateWrapper<>();
//updateFlow.eq(ProcessModelNode::getXmlNodeId,flowOrigin2.getXmlNodeId());
//updateFlow.set(ProcessModelNode::getXmlTargetRef,userTaskId);
//processModelNodeMapper.update(null,updateFlow);
//insertUserTask(modelId, userTask);
//List<SequenceFlow> incomingFlows = gateway.getIncomingFlows();
//for (SequenceFlow incomingFlow : incomingFlows) {
// insertFlow(modelId, incomingFlow);
//}
//insertGateway(modelId, gateway);
//List<SequenceFlow> outgoingFlows = gateway.getOutgoingFlows();
//for (SequenceFlow outgoingFlow : outgoingFlows) {
// insertFlow(modelId, outgoingFlow);
//}
//删除数据库中的节点
removeNode(modelId,xmlNodeIdList);
//更新待删除节点前的线的指向
for (SequenceFlow flow : beforeUserTaskFlows) {
LambdaUpdateWrapper<ProcessModelNode> updateFlow = new LambdaUpdateWrapper<>();
updateFlow.eq(ProcessModelNode::getModelId,modelId);
updateFlow.eq(ProcessModelNode::getXmlNodeId,flow.getId());
updateFlow.set(ProcessModelNode::getXmlTargetRef,finalTargetRef);
processModelNodeMapper.update(null,updateFlow);
}
} catch (IOException e) {
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) {
ProcessModelNode gatewayNode = new ProcessModelNode();