|
@@ -1328,6 +1328,18 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
@ApiOperationSupport(order = 15)
|
|
|
@ApiOperation(value = "复制节点(新)")
|
|
|
public R<Boolean> copyContractTreeNode(@RequestBody CopyContractTreeNodeVO vo) {
|
|
|
+ //表单所属方
|
|
|
+ String tabOwner = "";
|
|
|
+ if (("1,2").equals(vo.getClassifyType()) || ("2,1").equals(vo.getClassifyType())) {
|
|
|
+ tabOwner = "1,2,3,4,5,6";
|
|
|
+ } else if (("1").equals(vo.getClassifyType())) {
|
|
|
+ tabOwner = "1,2,3";
|
|
|
+ } else if (("2").equals(vo.getClassifyType())) {
|
|
|
+ tabOwner = "4,5,6";
|
|
|
+ } else if (vo.getIsCopyData() == 0) {
|
|
|
+ tabOwner = "1,2,3,4,5,6"; //如果选择的是否复制数据=0(否),默认所属方123456
|
|
|
+ }
|
|
|
+
|
|
|
//TODO 单份复制
|
|
|
if (("1").equals(vo.getCopyType())) {
|
|
|
//首先查询需要复制的节点及其下级所有子节点的信息
|
|
@@ -1356,6 +1368,7 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
nodeMap.put(node.getId().toString(), node);
|
|
|
});
|
|
|
|
|
|
+ String finalTabOwner1 = tabOwner;
|
|
|
nodeChildAll.forEach(node -> {
|
|
|
WbsTreeContract newData = new WbsTreeContract();
|
|
|
BeanUtils.copyProperties(node, newData);
|
|
@@ -1405,29 +1418,31 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
//生成施工日志
|
|
|
this.createLedger(newData, saveLedger, nodeMap, null);
|
|
|
}
|
|
|
-
|
|
|
+ //表单所属方,只有勾选了对应的所属方权限才复制数据;勾选了复制数据才能复制,否则只是创建节点、表
|
|
|
// 组织复制值Sql
|
|
|
- if (nodeTabColsMap != null && node.getType() == 2 && StringUtils.isNotEmpty(newData.getInitTableName())) {
|
|
|
+ if (node.getType() == 2 && StringUtils.isNotEmpty(newData.getInitTableName()) && finalTabOwner1.contains(node.getTableOwner()) && vo.getIsCopyData() == 1) {
|
|
|
String tableName = newData.getInitTableName();
|
|
|
String col = nodeTabColsMap.get(tableName);
|
|
|
String colVal = nodeTabColsMap.get(tableName);
|
|
|
colVal = colVal.replaceAll("id,p_key_id,", "'" + SnowFlakeUtil.getId() + "' as id,'" + newData.getPKeyId() + "' as p_key_id,");
|
|
|
- copeSql.append("insert into " + tableName + " (" + col + ") select " + colVal + " from " + tableName + " where p_key_id='" + node.getPKeyId() + "' ;");
|
|
|
+ //delete SQL (先删除旧数据,再新增)
|
|
|
+ String delSql = "delete from " + tableName + " where p_key_id = " + newData.getPKeyId() + " ; ";
|
|
|
+ //insert into SQL
|
|
|
+ copeSql.append(delSql).append("insert into ").append(tableName).append(" (").append(col).append(") select ").append(colVal).append(" from ").append(tableName).append(" where p_key_id='").append(node.getPKeyId()).append("' ;");
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
//保存节点信息
|
|
|
R<Boolean> booleanR = this.saveOrCopyNodeTree(saveList, saveLedger, 32, needCopyNode);
|
|
|
-
|
|
|
//复制数据逻辑
|
|
|
- if (nodeTabColsMap != null && copeSql.length() >= 10) {
|
|
|
+ if (copeSql.length() >= 10) {
|
|
|
jdbcTemplate.execute(copeSql.toString());
|
|
|
}
|
|
|
-
|
|
|
//获取父节点信息
|
|
|
informationQueryService.AsyncWbsTree(needCopyNode.getParentId() + "", needCopyNode.getParentId() + "", needCopyNode.getContractId(), "", "1");
|
|
|
return booleanR;
|
|
|
|
|
|
+ } else if (("2").equals(vo.getCopyType())) {
|
|
|
/** TODO 多份复制
|
|
|
* @Author liuYC
|
|
|
* @Date 2023年4月10日18:06:53
|
|
@@ -1440,7 +1455,6 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
* 2.1 如果点击选择的是其他父级节点的父级,那么新增一个新的当前选择的复制的节点-新的表-新的表数据(根据所属方查询对应数据)。
|
|
|
* 2.2 如果点击选择的是当前复制节点本身的同等级节点,那么复制对应表数据,如果没有对应表,那么跳过。
|
|
|
*/
|
|
|
- } else if (("2").equals(vo.getCopyType())) {
|
|
|
//获取需要复制到的位置节点信息的集合
|
|
|
List<CopyContractTreeNodeVO.CopyBatch> copyBatches = vo.getCopyBatchToPaths();
|
|
|
if (copyBatches.size() > 0) {
|
|
@@ -1457,9 +1471,9 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //缓存需要复制的节点信息、表信息
|
|
|
WbsTreeContract needCopyNodeRoot = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getNeedCopyPrimaryKeyId());
|
|
|
if (needCopyNodeRoot != null) {
|
|
|
+ //缓存需要复制的节点信息、表信息
|
|
|
Map<String, List<WbsTreeContract>> needCopyNodeAndTabMap = new HashMap<>();
|
|
|
List<WbsTreeContract> needCopyChildNodes = this.getChildNodes(needCopyNodeRoot);
|
|
|
if (ObjectUtil.isEmpty(needCopyChildNodes) || needCopyChildNodes.size() == 0) {
|
|
@@ -1478,18 +1492,6 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
Set<WbsTreeContract> addChildNodesTablesOldAll = new HashSet<>(addChildNodesTables);//表单附件数据源
|
|
|
List<String> resultTablesData = new ArrayList<>();//表单数据
|
|
|
|
|
|
- //表单所属方
|
|
|
- String tabOwner = "";
|
|
|
- if (("1,2").equals(vo.getClassifyType()) || ("2,1").equals(vo.getClassifyType())) {
|
|
|
- tabOwner = "1,2,3,4,5,6";
|
|
|
- } else if (("1").equals(vo.getClassifyType())) {
|
|
|
- tabOwner = "1,2,3";
|
|
|
- } else if (("2").equals(vo.getClassifyType())) {
|
|
|
- tabOwner = "4,5,6";
|
|
|
- } else if (vo.getIsCopyData() == 0 && StringUtils.isEmpty(tabOwner)) {
|
|
|
- tabOwner = "1,2,3,4,5,6"; //如果选择的是否复制数据=0(否),默认所属方123456
|
|
|
- }
|
|
|
-
|
|
|
//创建线程池,默认设置4个线程
|
|
|
ExecutorService executor = Executors.newFixedThreadPool(4);
|
|
|
try {
|
|
@@ -1529,20 +1531,39 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
//获取需要复制节点的上级
|
|
|
WbsTreeContract parentNodeNeed = wbsTreeContractClient.getContractWbsTreeByContractIdAndId(needCopyNode.getParentId(), Long.parseLong(needCopyNode.getContractId()));
|
|
|
|
|
|
- //2.1 选择的父级的同级的父级节点,新增(当复制节点父级与选择复制到的位置节点的父级id相同时,表示跨节点)
|
|
|
- if (parentNodeNeed != null && parentNodeNeed.getParentId().equals(toCopyNode.getParentId())) {
|
|
|
- toCopyNode.setNodeName(toCopyVO.getNodeName());
|
|
|
- toCopyNode.setPartitionCode(toCopyVO.getPartitionCode());
|
|
|
-
|
|
|
- //获取缓存节点、表信息
|
|
|
- List<WbsTreeContract> needCopyNodes = needCopyNodeAndTabMap.get("node:" + needCopyNodeRoot.getPKeyId());
|
|
|
- List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
|
|
|
-
|
|
|
- //构造新的节点、表、数据
|
|
|
- this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, finalTabOwner, vo.getIsCopyData());
|
|
|
+ boolean var = false;
|
|
|
+ //2.1 选择的父级的同级的父级节点,新增(当复制节点父级与选择复制到的位置节点的父级id相同时,表示跨节点新增)
|
|
|
+ if (parentNodeNeed != null) {
|
|
|
+ //2.1.1 如果是跨一级的情况下:parentNodeNeed.getParentId() == toCopyNode.getParentId() ,且 parentNodeNeed.getAncestors() == toCopyNode.getAncestors() ,且节点类型必须一样
|
|
|
+ if (parentNodeNeed.getParentId().equals(toCopyNode.getParentId()) && parentNodeNeed.getAncestors().equals(toCopyNode.getAncestors()) && parentNodeNeed.getNodeType().equals(toCopyNode.getNodeType())) {
|
|
|
+ toCopyNode.setNodeName(toCopyVO.getNodeName());
|
|
|
+ toCopyNode.setPartitionCode(toCopyVO.getPartitionCode());
|
|
|
+
|
|
|
+ //获取缓存节点、表信息
|
|
|
+ List<WbsTreeContract> needCopyNodes = needCopyNodeAndTabMap.get("node:" + needCopyNodeRoot.getPKeyId());
|
|
|
+ List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
|
|
|
+
|
|
|
+ //构造新的节点、表、数据
|
|
|
+ this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, finalTabOwner, vo.getIsCopyData());
|
|
|
+ var = true;
|
|
|
+
|
|
|
+ } else if (!parentNodeNeed.getParentId().equals(toCopyNode.getParentId()) && !parentNodeNeed.getAncestors().equals(toCopyNode.getAncestors()) && parentNodeNeed.getNodeType().equals(toCopyNode.getNodeType())) {
|
|
|
+ //2.1.2 如果跨多级的情况下父级id不相同 parentNodeNeed.getParentId() != toCopyNode.getParentId() ,且 parentNodeNeed.getAncestors() != toCopyNode.getAncestors() ,且节点类型必须一样
|
|
|
+ toCopyNode.setNodeName(toCopyVO.getNodeName());
|
|
|
+ toCopyNode.setPartitionCode(toCopyVO.getPartitionCode());
|
|
|
+
|
|
|
+ //获取缓存节点、表信息
|
|
|
+ List<WbsTreeContract> needCopyNodes = needCopyNodeAndTabMap.get("node:" + needCopyNodeRoot.getPKeyId());
|
|
|
+ List<WbsTreeContract> needCopyTab = needCopyNodeAndTabMap.get("tab:" + needCopyNodeRoot.getPKeyId());
|
|
|
+
|
|
|
+ //构造新的节点、表、数据
|
|
|
+ this.addCopyNodesAndTabsBuildData(addNodeList, addTabList, needCopyNodes, needCopyTab, needCopyNode, toCopyNode, resultTablesData, 0, finalTabOwner, vo.getIsCopyData());
|
|
|
+ var = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- //2.2 如果点击选择的是当前复制节点本身的同等级节点,那么就只复制数据。(如果是跨节点,类型相同的情况下,只复制数据)
|
|
|
- } else if (needCopyNode.getNodeType().equals(toCopyNode.getNodeType()) && !needCopyNode.getParentId().equals(toCopyNode.getParentId())) {
|
|
|
+ //2.2 如果点击选择的是当前复制节点本身的同等级节点,那么就只复制数据。(如果是跨节点,类型相同的情况下,只复制数据),且var=false,表示没有进行到跨节点新增的逻辑,只是跨节点复制数据
|
|
|
+ if (needCopyNode.getNodeType().equals(toCopyNode.getNodeType()) && !needCopyNode.getParentId().equals(toCopyNode.getParentId()) && !var) {
|
|
|
//构造数据
|
|
|
this.addCopyTabData(needCopyNode, toCopyNode, finalTabOwner, resultTablesData, addTabList, vo.getIsCopyData());
|
|
|
}
|
|
@@ -1591,6 +1612,8 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
}
|
|
|
}
|
|
|
return R.success("操作成功");
|
|
|
+ } else {
|
|
|
+ throw new ServiceException("没有找到需要复制的节点信息,请联系管理员");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1715,7 +1738,7 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
*/
|
|
|
private void addCopyNodesAndTabsBuildData(List<WbsTreeContract> addNodeList, List<WbsTreeContract> addTabList, List<WbsTreeContract> needNodes, List<WbsTreeContract> needTabs, WbsTreeContract
|
|
|
needCopyNode, WbsTreeContract toCopyNode, List<String> resultTablesData, Integer isSameNode, String
|
|
|
- tabOwner, Integer isCopyData) {
|
|
|
+ tabOwner, Integer isCopyData) {
|
|
|
int var = 0;
|
|
|
if (needNodes.size() == 1) {
|
|
|
//判断是否为最下级节点
|