|
@@ -48,57 +48,126 @@ public class ZhcxItpTemplateServiceImpl extends ServiceImpl<ZhcxItpTemplateDao,
|
|
|
if(StringUtils.isBlank(copyAddTemplate.getTargetTmpId())){
|
|
|
throw new CustomException("数据有问题,ID没有值");
|
|
|
}
|
|
|
- if(copyAddTemplate.getTmpIds() != null && copyAddTemplate.getTmpIds().size()>0){
|
|
|
- // 查询所有引用子节点,复制给新的ITP地图
|
|
|
- List<ZhcxItpTemplateNodesDo> copyNodesDos = zhcxItpTemplateNodesService.list(
|
|
|
- new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().in(ZhcxItpTemplateNodesDo::getItpid,copyAddTemplate.getTmpIds()));
|
|
|
- if(copyNodesDos != null && copyNodesDos.size()>0){
|
|
|
- // 获取当前ITP地图模板所有子节点
|
|
|
- List<ZhcxItpTemplateNodesDo> targetNodesDos = zhcxItpTemplateNodesService.list(
|
|
|
- new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().eq(ZhcxItpTemplateNodesDo::getItpid,copyAddTemplate.getTargetTmpId()));
|
|
|
- // 过滤出当前ITP地图模板所有根节点
|
|
|
- List<ZhcxItpTemplateNodesDo> rootTargetNodes = targetNodesDos.stream().filter(v -> v.getPid().equals("-1")).collect(Collectors.toList());
|
|
|
- // 存放老ID和新ID的Map,方便后面的归属大构件ID替换
|
|
|
- Map<String,String> oldNewId = new HashMap<>();
|
|
|
- for (ZhcxItpTemplateNodesDo copyNodesDo : copyNodesDos) {
|
|
|
- // 重复的已存在的根节点
|
|
|
- ZhcxItpTemplateNodesDo repeatNode = null;
|
|
|
- if(copyNodesDo.getPid().equals("-1") && copyNodesDo.getNodename() != null){
|
|
|
- for (ZhcxItpTemplateNodesDo rootTargetNode : rootTargetNodes) {
|
|
|
- if(rootTargetNode.getNodename() != null && copyNodesDo.getNodename().equals(rootTargetNode.getNodename())){
|
|
|
- repeatNode = rootTargetNode;
|
|
|
- break;
|
|
|
+ // 判断是否选择引用模板节点
|
|
|
+ if(copyAddTemplate.getTmpNodeIds() != null && copyAddTemplate.getTmpNodeIds().size()>0){
|
|
|
+ // 引用的节点没有改变不需要处理
|
|
|
+ if(copyAddTemplate.getTmpNodeIds().size() == 1 && "-1".equals(copyAddTemplate.getTmpNodeIds().get(0))){
|
|
|
+ return;
|
|
|
+ }else{
|
|
|
+ List<ZhcxItpTemplateNodesDo> allCopyNodes = new ArrayList<>();
|
|
|
+ // 根据引用模板ID,获取所有相关节点
|
|
|
+ List<ZhcxItpTemplateNodesDo> tempNodesDos = zhcxItpTemplateNodesService.list(
|
|
|
+ new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().in(ZhcxItpTemplateNodesDo::getItpid,copyAddTemplate.getTmpIds()));
|
|
|
+ // 引用的节点做了改动,则直接覆盖当前引用节点
|
|
|
+ zhcxItpTemplateNodesService.remove(new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().eq(ZhcxItpTemplateNodesDo::getItpid,copyAddTemplate.getTargetTmpId()));
|
|
|
+ List<ZhcxItpTemplateNodesDo> copyNodesDos = zhcxItpTemplateNodesService.list(
|
|
|
+ new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().in(ZhcxItpTemplateNodesDo::getId,copyAddTemplate.getTmpNodeIds()));
|
|
|
+ // 根据ID获取所有父子节点ID
|
|
|
+ if(copyNodesDos != null && copyNodesDos.size()>0){
|
|
|
+ allCopyNodes.addAll(copyNodesDos);
|
|
|
+ List<String> pids = new ArrayList<>();
|
|
|
+ for (ZhcxItpTemplateNodesDo copyNodesDo : copyNodesDos) {
|
|
|
+ // 获取所有父节点
|
|
|
+ if(StringUtils.isNotBlank(copyNodesDo.getPath())){
|
|
|
+ pids.addAll(Arrays.asList(copyNodesDo.getPath().split(",")));
|
|
|
+ }
|
|
|
+ // 获取所有子节点
|
|
|
+ for (ZhcxItpTemplateNodesDo tempNodesDo : tempNodesDos) {
|
|
|
+ if(StringUtils.isNotBlank(tempNodesDo.getPath())){
|
|
|
+ if(tempNodesDo.getPath().contains(copyNodesDo.getId())){
|
|
|
+ allCopyNodes.add(tempNodesDo);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- // 重复的阶段(即根节点),则不需要插入,只需要插入当前根节点所有子节点
|
|
|
- if(repeatNode != null){
|
|
|
- oldNewId.put(copyNodesDo.getId(),repeatNode.getId());
|
|
|
+ if(pids != null && pids.size()>0){
|
|
|
+ List<ZhcxItpTemplateNodesDo> pidNodesDos = zhcxItpTemplateNodesService.list(
|
|
|
+ new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().in(ZhcxItpTemplateNodesDo::getId,pids));
|
|
|
+ if(pidNodesDos != null){
|
|
|
+ allCopyNodes.addAll(pidNodesDos);
|
|
|
+ }
|
|
|
}
|
|
|
- // 无重复的设置新ID,并加入待保存的列表
|
|
|
- else{
|
|
|
+ }
|
|
|
+ if(allCopyNodes != null && allCopyNodes.size()>0){
|
|
|
+ // 存放老ID和新ID的Map,方便后面的归属大构件ID替换
|
|
|
+ Map<String,String> oldNewId = new HashMap<>();
|
|
|
+ for (ZhcxItpTemplateNodesDo copyNodesDo : allCopyNodes) {
|
|
|
String newId = SecurityUtil.getUUID();
|
|
|
oldNewId.put(copyNodesDo.getId(),newId);
|
|
|
// 设置新的ID
|
|
|
copyNodesDo.setId(newId);
|
|
|
toCopySaveNodes.add(copyNodesDo);
|
|
|
}
|
|
|
+ // 替换相关ID
|
|
|
+ for (ZhcxItpTemplateNodesDo copyNodesDo : toCopySaveNodes) {
|
|
|
+ // 设置新的ITP地图ID
|
|
|
+ copyNodesDo.setItpid(copyAddTemplate.getTargetTmpId());
|
|
|
+ // 设置新的归属大构件ID
|
|
|
+ if(StringUtils.isNotBlank(copyNodesDo.getPnodeid())){
|
|
|
+ copyNodesDo.setPnodeid(oldNewId.get(copyNodesDo.getPnodeid()));
|
|
|
+ }
|
|
|
+ // 设置新的父节点
|
|
|
+ if(oldNewId.containsKey(copyNodesDo.getPid())){
|
|
|
+ copyNodesDo.setPid(oldNewId.get(copyNodesDo.getPid()));
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- // 替换相关ID
|
|
|
- for (ZhcxItpTemplateNodesDo copyNodesDo : toCopySaveNodes) {
|
|
|
- // 设置新的ITP地图ID
|
|
|
- copyNodesDo.setItpid(copyAddTemplate.getTargetTmpId());
|
|
|
- // 设置新的归属大构件ID
|
|
|
- if(StringUtils.isNotBlank(copyNodesDo.getPnodeid())){
|
|
|
- copyNodesDo.setPnodeid(oldNewId.get(copyNodesDo.getPnodeid()));
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(copyAddTemplate.getTmpIds() != null && copyAddTemplate.getTmpIds().size()>0){
|
|
|
+ // 查询所有引用子节点,复制给新的ITP地图
|
|
|
+ List<ZhcxItpTemplateNodesDo> copyNodesDos = zhcxItpTemplateNodesService.list(
|
|
|
+ new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().in(ZhcxItpTemplateNodesDo::getItpid,copyAddTemplate.getTmpIds()));
|
|
|
+ if(copyNodesDos != null && copyNodesDos.size()>0){
|
|
|
+ // 获取当前ITP地图模板所有子节点
|
|
|
+ List<ZhcxItpTemplateNodesDo> targetNodesDos = zhcxItpTemplateNodesService.list(
|
|
|
+ new LambdaQueryWrapper<ZhcxItpTemplateNodesDo>().eq(ZhcxItpTemplateNodesDo::getItpid,copyAddTemplate.getTargetTmpId()));
|
|
|
+ // 过滤出当前ITP地图模板所有根节点
|
|
|
+ List<ZhcxItpTemplateNodesDo> rootTargetNodes = targetNodesDos.stream().filter(v -> v.getPid().equals("-1")).collect(Collectors.toList());
|
|
|
+ // 存放老ID和新ID的Map,方便后面的归属大构件ID替换
|
|
|
+ Map<String,String> oldNewId = new HashMap<>();
|
|
|
+ for (ZhcxItpTemplateNodesDo copyNodesDo : copyNodesDos) {
|
|
|
+ // 重复的已存在的根节点
|
|
|
+ ZhcxItpTemplateNodesDo repeatNode = null;
|
|
|
+ if(copyNodesDo.getPid().equals("-1") && copyNodesDo.getNodename() != null){
|
|
|
+ for (ZhcxItpTemplateNodesDo rootTargetNode : rootTargetNodes) {
|
|
|
+ if(rootTargetNode.getNodename() != null && copyNodesDo.getNodename().equals(rootTargetNode.getNodename())){
|
|
|
+ repeatNode = rootTargetNode;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 重复的阶段(即根节点),则不需要插入,只需要插入当前根节点所有子节点
|
|
|
+ if(repeatNode != null){
|
|
|
+ oldNewId.put(copyNodesDo.getId(),repeatNode.getId());
|
|
|
+ }
|
|
|
+ // 无重复的设置新ID,并加入待保存的列表
|
|
|
+ else{
|
|
|
+ String newId = SecurityUtil.getUUID();
|
|
|
+ oldNewId.put(copyNodesDo.getId(),newId);
|
|
|
+ // 设置新的ID
|
|
|
+ copyNodesDo.setId(newId);
|
|
|
+ toCopySaveNodes.add(copyNodesDo);
|
|
|
+ }
|
|
|
}
|
|
|
- // 设置新的父节点
|
|
|
- if(oldNewId.containsKey(copyNodesDo.getPid())){
|
|
|
- copyNodesDo.setPid(oldNewId.get(copyNodesDo.getPid()));
|
|
|
+ // 替换相关ID
|
|
|
+ for (ZhcxItpTemplateNodesDo copyNodesDo : toCopySaveNodes) {
|
|
|
+ // 设置新的ITP地图ID
|
|
|
+ copyNodesDo.setItpid(copyAddTemplate.getTargetTmpId());
|
|
|
+ // 设置新的归属大构件ID
|
|
|
+ if(StringUtils.isNotBlank(copyNodesDo.getPnodeid())){
|
|
|
+ copyNodesDo.setPnodeid(oldNewId.get(copyNodesDo.getPnodeid()));
|
|
|
+ }
|
|
|
+ // 设置新的父节点
|
|
|
+ if(oldNewId.containsKey(copyNodesDo.getPid())){
|
|
|
+ copyNodesDo.setPid(oldNewId.get(copyNodesDo.getPid()));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
// 保存数据
|
|
|
if(toCopySaveNodes != null && toCopySaveNodes.size()>0){
|
|
|
// 保存最终数据
|