update 删除节点(完成)
This commit is contained in:
+48
-40
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user