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