فهرست منبع

ITP地图引用复制功能

fangpy 1 سال پیش
والد
کامیت
1a0e38626b

+ 1 - 1
business-common/pom.xml

@@ -25,7 +25,7 @@
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-generator</artifactId>
-            <version>3.1.2</version>
+            <version>3.2.0</version>
         </dependency>
 
         <dependency>

+ 5 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/service/ZhcxItpTemplateService.java

@@ -2,6 +2,9 @@ package com.rongwei.bscommon.sys.service;
 
 import com.rongwei.bsentity.domain.ZhcxItpTemplateDo;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwei.bsentity.vo.CopyAddTemplateVo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +16,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ZhcxItpTemplateService extends IService<ZhcxItpTemplateDo> {
 
+    void copyAddTemplateNodes(CopyAddTemplateVo copyAddTemplate);
+
 }

+ 80 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxItpTemplateServiceImpl.java

@@ -1,11 +1,23 @@
 package com.rongwei.bscommon.sys.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.rongwei.bscommon.sys.service.ZhcxItpTemplateNodesService;
 import com.rongwei.bsentity.domain.ZhcxItpTemplateDo;
 import com.rongwei.bscommon.sys.dao.ZhcxItpTemplateDao;
 import com.rongwei.bscommon.sys.service.ZhcxItpTemplateService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.rongwei.bsentity.domain.ZhcxItpTemplateNodesDo;
+import com.rongwei.bsentity.vo.CopyAddTemplateVo;
+import com.rongwei.rwcommon.base.exception.CustomException;
+import com.rongwei.rwcommon.utils.SecurityUtil;
+import com.rongwei.rwcommon.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.*;
+import java.util.logging.Handler;
+import java.util.stream.Collectors;
+
 /**
  * <p>
  * itp地图模板库 服务实现类
@@ -17,4 +29,72 @@ import org.springframework.stereotype.Service;
 @Service
 public class ZhcxItpTemplateServiceImpl extends ServiceImpl<ZhcxItpTemplateDao, ZhcxItpTemplateDo> implements ZhcxItpTemplateService {
 
+    @Autowired
+    private ZhcxItpTemplateNodesService zhcxItpTemplateNodesService;
+
+    /**
+     * 复制新增的引用所有子节点
+     * @param copyAddTemplate
+     */
+    @Override
+    public void copyAddTemplateNodes(CopyAddTemplateVo copyAddTemplate) {
+        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());
+                // 待复制保存的子节点
+                List<ZhcxItpTemplateNodesDo> toCopySaveNodes = new ArrayList<>();
+                // 存放老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);
+                    }
+                }
+                // 替换相关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()));
+                    }
+                }
+                // 保存最终数据
+                zhcxItpTemplateNodesService.saveBatch(toCopySaveNodes);
+            }
+        }
+    }
 }

+ 12 - 0
business-entity/src/main/java/com/rongwei/bsentity/vo/CopyAddTemplateVo.java

@@ -0,0 +1,12 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+import java.util.List;
+
+@Data
+public class CopyAddTemplateVo {
+
+    private String targetTmpId;
+
+    private List<String> tmpIds;
+}

+ 16 - 0
business-server/src/main/java/com/rongwei/bsserver/controller/ZhcxItpTemplateController.java

@@ -1,9 +1,16 @@
 package com.rongwei.bsserver.controller;
 
 
+import com.rongwei.bscommon.sys.service.ZhcxItpTemplateService;
+import com.rongwei.bsentity.vo.CopyAddTemplateVo;
+import com.rongwei.rwcommon.base.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * <p>
  * itp地图模板库 前端控制器
@@ -16,5 +23,14 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/zhcxItpTemplate")
 public class ZhcxItpTemplateController {
 
+    @Autowired
+    private ZhcxItpTemplateService zhcxItpTemplateService;
+
+    @RequestMapping("/copyAddTemplateNodes")
+    public R copyAddTemplateNodes(@RequestBody CopyAddTemplateVo copyAddTemplate){
+        zhcxItpTemplateService.copyAddTemplateNodes(copyAddTemplate);
+        return R.ok();
+    }
+
 }