|
@@ -36,6 +36,7 @@ import org.springblade.core.oss.model.BladeFile;
|
|
|
import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
import org.springblade.core.tool.node.ForestNodeMerger;
|
|
|
+import org.springblade.core.tool.utils.DateUtil;
|
|
|
import org.springblade.core.tool.utils.Func;
|
|
|
import org.springblade.core.tool.utils.ObjectUtil;
|
|
|
import org.springblade.core.tool.utils.StringUtil;
|
|
@@ -1244,6 +1245,118 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
return R.status(wbsTreeContractClient.diySort(sortLists));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 复制节点
|
|
|
+ */
|
|
|
+ @PostMapping("/copyContractTreeNode11")
|
|
|
+ @ApiOperationSupport(order = 15)
|
|
|
+ @ApiOperation(value = "复制节点")
|
|
|
+ public R<Boolean> copyContractTreeNode11(@RequestBody CopyContractTreeNodeVO vo) {
|
|
|
+ //首先查询需要复制的节点及其下级所有子节点的信息
|
|
|
+ WbsTreeContract needCopyNode = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getNeedCopyPrimaryKeyId());
|
|
|
+ // 获取当前节点的所有子节点
|
|
|
+ String vocational = SnowFlakeUtil.getId()+"";
|
|
|
+ // 插入数据库
|
|
|
+ // informationQueryService.copeNodeData(needCopyNode.getId()+"",vocational);
|
|
|
+ // 修改
|
|
|
+ //
|
|
|
+ //
|
|
|
+ //新增施工台账
|
|
|
+ System.out.println("1="+DateUtil.formatDateTime(DateUtil.now()));
|
|
|
+ List<WbsTreeContract> saveList = new ArrayList<>();
|
|
|
+ List<ConstructionLedger> saveLedger = new ArrayList<>();
|
|
|
+ System.out.println("2="+DateUtil.formatDateTime(DateUtil.now()));
|
|
|
+ List<WbsTreeContract> nodeChildAll = informationQueryService.getNodeChildAllByNodeId(needCopyNode.getId() + "", needCopyNode.getContractId(),vo.getNeedCopyPrimaryKeyId());
|
|
|
+ System.out.println("3="+DateUtil.formatDateTime(DateUtil.now()));
|
|
|
+ if (StringUtils.isNotEmpty(vo.getNeedCopyPrimaryKeyId())) {
|
|
|
+ WbsTreeContract parent = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getParentPrimaryKeyId());
|
|
|
+
|
|
|
+ //重塑关键信息
|
|
|
+ Map<Long, Long> oldToNewIdMap = new HashMap<>();
|
|
|
+ //节点信息
|
|
|
+ Map<String, WbsTreeContract> nodeMap = new HashMap<>();
|
|
|
+ nodeChildAll.forEach(node -> {
|
|
|
+ oldToNewIdMap.put(node.getId(), SnowFlakeUtil.getId());
|
|
|
+ nodeMap.put(node.getId().toString(), node);
|
|
|
+ });
|
|
|
+
|
|
|
+ System.out.println("4="+DateUtil.formatDateTime(DateUtil.now()));
|
|
|
+ //todo 单份复制
|
|
|
+ nodeChildAll.forEach(node -> {
|
|
|
+ WbsTreeContract newData = new WbsTreeContract();
|
|
|
+ BeanUtils.copyProperties(node, newData);
|
|
|
+
|
|
|
+ //重塑关键信息
|
|
|
+ //重塑primaryKeyId
|
|
|
+ newData.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+ //设置旧ID
|
|
|
+ if (StringUtils.isNotEmpty(node.getOldId())) {
|
|
|
+ newData.setOldId(node.getOldId());
|
|
|
+ } else {
|
|
|
+ newData.setOldId(node.getId().toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ //设置新ID
|
|
|
+ if (new Integer("1").equals(node.getType())) {
|
|
|
+ //如果是节点类型才重塑ID
|
|
|
+ newData.setId(oldToNewIdMap.containsKey(node.getId()) ? oldToNewIdMap.get(node.getId()) : SnowFlakeUtil.getId());
|
|
|
+
|
|
|
+ //划分编号
|
|
|
+ newData.setPartitionCode(StringUtils.isNotEmpty(vo.getPartitionCode()) ? vo.getPartitionCode() : null);
|
|
|
+ }
|
|
|
+ //设置父节点ID
|
|
|
+ if (vo.getNeedCopyPrimaryKeyId().equals(node.getPKeyId().toString())) {
|
|
|
+ //找到复制的节点,将parentId更改为 parent.getId()
|
|
|
+ newData.setParentId(parent.getId());
|
|
|
+ //设置新名称
|
|
|
+ newData.setNodeName(vo.getNeedCopyNodeName());
|
|
|
+ newData.setFullName(vo.getNeedCopyNodeName());
|
|
|
+ } else {
|
|
|
+ newData.setParentId(oldToNewIdMap.containsKey(node.getParentId()) ? oldToNewIdMap.get(node.getParentId()) : SnowFlakeUtil.getId());
|
|
|
+ }
|
|
|
+ newData.setCreateTime(new Date());
|
|
|
+ newData.setUpdateTime(new Date());
|
|
|
+ //初始化是否显示表格,默认显示
|
|
|
+ newData.setIsBussShow(1);
|
|
|
+ //初始化表格是否上传附件,默认未上传
|
|
|
+ newData.setTabFileType(1);
|
|
|
+ //初始化单表是否可以预览,默认不能
|
|
|
+ newData.setIsTabPdf(1);
|
|
|
+ //初始化PDF路径
|
|
|
+ newData.setPdfUrl(null);
|
|
|
+ newData.setCreateUser(AuthUtil.getUserId());
|
|
|
+
|
|
|
+ //获取当前所有复制的节点的最大sort
|
|
|
+ // String sql = "select sort from m_wbs_tree_contract where contract_id = '" + node.getContractId() + "' and (id = '" + node.getId() + "' or old_id = '" + node.getId() + "')";
|
|
|
+ // List<WbsTreeContract> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
|
|
|
+ // List<Integer> collect = query.stream().filter(f -> ObjectUtils.isNotEmpty(f.getSort())).collect(Collectors.toList()).stream().map(WbsTreeContract::getSort).collect(Collectors.toList());
|
|
|
+ Integer max = 1;
|
|
|
+ // if (collect.size() > 0) {
|
|
|
+ // max = collect.stream().reduce(collect.get(0), Integer::max);
|
|
|
+ // } else {
|
|
|
+ // max = 1;
|
|
|
+ // }
|
|
|
+ //设置sort
|
|
|
+ newData.setSort(max);
|
|
|
+ //重塑父节点关联关系
|
|
|
+ this.restoreParent(newData, oldToNewIdMap);
|
|
|
+
|
|
|
+ //保存到集合中
|
|
|
+ saveList.add(newData);
|
|
|
+
|
|
|
+ if (new Integer("6").equals(node.getNodeType())) {
|
|
|
+ //生成施工日志
|
|
|
+ this.createLedger(newData, saveLedger, nodeMap, null);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ System.out.println("7="+DateUtil.formatDateTime(DateUtil.now()));
|
|
|
+ }
|
|
|
+
|
|
|
+ return this.saveOrCopyNodeTree(saveList, saveLedger, 32, needCopyNode);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 复制节点
|
|
|
*/
|
|
@@ -1251,10 +1364,8 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
@ApiOperationSupport(order = 15)
|
|
|
@ApiOperation(value = "复制节点")
|
|
|
public R<Boolean> copyContractTreeNode(@RequestBody CopyContractTreeNodeVO vo) {
|
|
|
-
|
|
|
//首先查询需要复制的节点及其下级所有子节点的信息
|
|
|
WbsTreeContract needCopyNode = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getNeedCopyPrimaryKeyId());
|
|
|
-
|
|
|
//获取当前合同段所有节点
|
|
|
List<WbsTreeContract> allContractNodeList = this.wbsTreeContractClient.searchContractTree(needCopyNode.getContractId());
|
|
|
|
|
@@ -1277,17 +1388,20 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ System.out.println("1="+DateUtil.formatDateTime(DateUtil.now()));
|
|
|
List<WbsTreeContract> parentList = new ArrayList<>(), childList = new ArrayList<>(), allList = new ArrayList<>(), saveList = new ArrayList<>();
|
|
|
//新增施工台账
|
|
|
List<ConstructionLedger> saveLedger = new ArrayList<>();
|
|
|
|
|
|
parentList.add(needCopyNode);
|
|
|
-
|
|
|
- //查询所有有效子节点
|
|
|
+ System.out.println("2="+DateUtil.formatDateTime(DateUtil.now()));
|
|
|
+ //查询所有有效子节点(慢 10分钟)
|
|
|
this.foreachQueryChildContract(parentList, childList, contractAllNodeMap);
|
|
|
+
|
|
|
+ System.out.println("3="+DateUtil.formatDateTime(DateUtil.now()));
|
|
|
allList.addAll(parentList);
|
|
|
allList.addAll(childList);
|
|
|
-
|
|
|
+ System.out.println("4="+DateUtil.formatDateTime(DateUtil.now()));
|
|
|
if ("1".equals(vo.getCopyType())) {
|
|
|
if (StringUtils.isNotEmpty(vo.getNeedCopyPrimaryKeyId())) {
|
|
|
WbsTreeContract parent = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getParentPrimaryKeyId());
|
|
@@ -1300,6 +1414,9 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
oldToNewIdMap.put(node.getId(), SnowFlakeUtil.getId());
|
|
|
nodeMap.put(node.getId().toString(), node);
|
|
|
});
|
|
|
+
|
|
|
+
|
|
|
+ System.out.println("5="+DateUtil.formatDateTime(DateUtil.now()));
|
|
|
//todo 单份复制
|
|
|
allList.forEach(node -> {
|
|
|
WbsTreeContract newData = new WbsTreeContract();
|
|
@@ -1370,7 +1487,7 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
-
|
|
|
+ System.out.println("6="+DateUtil.formatDateTime(DateUtil.now()));
|
|
|
} else {
|
|
|
//todo 多份复制
|
|
|
//获取需要复制到的位置集合
|
|
@@ -1816,7 +1933,6 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
//处理完重复数据后,设置进集合中
|
|
|
selectedNodeList.addAll(childList);
|
|
|
}
|
|
|
-
|
|
|
//处理半选
|
|
|
this.disposeHalfSelectList(treeContract, halfSelectedNodeList, selectedNodeList);
|
|
|
|
|
@@ -1838,7 +1954,6 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
}
|
|
|
//处理半选
|
|
|
this.disposeHalfSelectList(treeContract, halfSelectedNodeList, selectedNodeList);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
//保存集合
|
|
@@ -1889,7 +2004,6 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
}
|
|
|
//设置sort
|
|
|
newData.setSort(max);
|
|
|
-
|
|
|
//设置节点名称
|
|
|
for (AddContractTreeNodeVO.Node addVO : selectList) {
|
|
|
if (half.getPKeyId().toString().equals(addVO.getPrimaryKeyId())) {
|
|
@@ -1929,7 +2043,6 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
//设置到保存集合中
|
|
|
saveList.add(newData);
|
|
|
|
|
@@ -1937,7 +2050,6 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
//生成施工日志
|
|
|
this.createLedger(newData, saveLedger, null, nodeMap);
|
|
|
}
|
|
|
-
|
|
|
});
|
|
|
}
|
|
|
|
|
@@ -1957,6 +2069,7 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
|
|
|
@NotNull
|
|
|
private R<Boolean> saveOrCopyNodeTree(List<WbsTreeContract> saveList, List<ConstructionLedger> saveLedger, Integer operationType, WbsTreeContract currentNode) {
|
|
|
+
|
|
|
if (saveList.size() > 0) {
|
|
|
StringBuilder str = new StringBuilder();
|
|
|
//保存施工日志
|
|
@@ -1990,8 +2103,9 @@ public class InformationWriteQueryController extends BladeController {
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
- //保存节点
|
|
|
- return R.data(this.wbsTreeContractClient.saveBatch(saveList));
|
|
|
+ //保存节点(10s)
|
|
|
+ Boolean aBoolean = this.wbsTreeContractClient.saveBatch(saveList);
|
|
|
+ return R.data(aBoolean);
|
|
|
}
|
|
|
|
|
|
return R.data(false);
|