|
@@ -1142,7 +1142,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
}
|
|
|
|
|
|
//构建参数
|
|
|
- WbsTree wbsTree = buildTreeNode(wbsTreeZi, allNodeData);
|
|
|
+ WbsTree wbsTree = this.buildTreeNode(wbsTreeZi, allNodeData);
|
|
|
|
|
|
if (wbsTree == null) {
|
|
|
//构建成功,后置赋值
|
|
@@ -1171,22 +1171,30 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- return this.saveBatch(allNodeData, 1000) && baseMapper.updateById(wbsTree1) > 0;
|
|
|
-
|
|
|
+ return this.insertBatchPublic(allNodeData, 1000) && baseMapper.updateById(wbsTree1) > 0;
|
|
|
}
|
|
|
|
|
|
private WbsTree buildTreeNode(WbsTree wbsTreeZi, List<WbsTree> allNodeData) {
|
|
|
List<WbsTree> wbsTrees = new ArrayList<>();
|
|
|
+ Map<String, List<WbsTree>> collect = allNodeData.stream().collect(Collectors.groupingBy(WbsTree::getNodeName));
|
|
|
//判重
|
|
|
for (WbsTree tree : allNodeData) {
|
|
|
if (tree.getNodeName().equals(wbsTreeZi.getNodeName())
|
|
|
&& tree.getWbsId().equals(wbsTreeZi.getWbsId())
|
|
|
&& tree.getNodeType().equals(wbsTreeZi.getNodeType())
|
|
|
&& tree.getProjectNodeId().equals(wbsTreeZi.getProjectNodeId())) {
|
|
|
- //判断上级节点不同,当前节点名相同的tree选择问题
|
|
|
- //例如:第X跨的上级有上部构造现场浇筑、上部构造预制和安装,导致下方新增重复节点判断时找到的是前一个 TODO
|
|
|
+ //判断上级节点不同,当前节点名相同的选择问题
|
|
|
if (!tree.getAncestors().equals(wbsTreeZi.getAncestors())) {
|
|
|
+ List<WbsTree> wbsTrees1 = collect.get(wbsTreeZi.getNodeName());
|
|
|
+ //存在两个相同节点以上时,找到本身同级节点
|
|
|
+ if (wbsTrees1.size() > 1) {
|
|
|
+ WbsTree wbsTree = wbsTrees1.stream().filter(f -> f.getParentId().equals(wbsTreeZi.getParentId())).findAny().orElse(null);
|
|
|
+ if (wbsTree != null) {
|
|
|
+ wbsTrees.add(wbsTree);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //存在一个相同节点,正常执行
|
|
|
wbsTrees.add(tree);
|
|
|
break;
|
|
|
}
|
|
@@ -1198,6 +1206,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
if (wbsTrees.size() <= 0) {
|
|
|
wbsTreeZi.setStatus(1);
|
|
|
wbsTreeZi.setType(1);
|
|
|
+ wbsTreeZi.setIsDeleted(0);
|
|
|
if (wbsTreeZi.getNodeType() == 6) {
|
|
|
wbsTreeZi.setIsConcrete(0);
|
|
|
wbsTreeZi.setIsExpernode(0);
|
|
@@ -1205,11 +1214,12 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
} else {
|
|
|
//重复 判断是否为同一父节点,相同父节点跳过,不同新增
|
|
|
for (WbsTree tree : wbsTrees) {
|
|
|
- if (wbsTreeZi.getNodeType() == 2 || wbsTreeZi.getNodeType() == 3
|
|
|
- || wbsTreeZi.getNodeType() == 4 || wbsTreeZi.getNodeType() == 5 || wbsTreeZi.getNodeType() == 6) {
|
|
|
- if (!wbsTreeZi.getParentId().equals(tree.getParentId()) && wbsTreeZi.getNodeName().equals(tree.getNodeName())) {
|
|
|
+ if (wbsTreeZi.getNodeType() == 2 || wbsTreeZi.getNodeType() == 3 || wbsTreeZi.getNodeType() == 4 || wbsTreeZi.getNodeType() == 5 || wbsTreeZi.getNodeType() == 6) {
|
|
|
+ //不同父级相同节点
|
|
|
+ if (ObjectUtil.isNotEmpty(wbsTreeZi.getParentId()) && ObjectUtil.isNotEmpty(tree.getParentId()) && !wbsTreeZi.getParentId().equals(tree.getParentId()) && wbsTreeZi.getNodeName().equals(tree.getNodeName())) {
|
|
|
wbsTreeZi.setStatus(1);
|
|
|
wbsTreeZi.setType(1);
|
|
|
+ wbsTreeZi.setIsDeleted(0);
|
|
|
if (wbsTreeZi.getNodeType() == 6) {
|
|
|
wbsTreeZi.setIsConcrete(0);
|
|
|
wbsTreeZi.setIsExpernode(0);
|
|
@@ -1287,4 +1297,29 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public boolean insertBatchPublic(Collection<WbsTree> entityList, int batchSize) {
|
|
|
+ try {
|
|
|
+ int size = entityList.size();
|
|
|
+ int idxLimit = Math.min(batchSize, size);
|
|
|
+ int i = 1;
|
|
|
+ //保存单批提交的数据集合
|
|
|
+ List<WbsTree> oneBatchList = new ArrayList<>();
|
|
|
+ for (Iterator<WbsTree> var1 = entityList.iterator(); var1.hasNext(); ++i) {
|
|
|
+ WbsTree element = var1.next();
|
|
|
+ oneBatchList.add(element);
|
|
|
+ if (i == idxLimit) {
|
|
|
+ baseMapper.insertBatchSomeColumn(oneBatchList);
|
|
|
+ //每次提交后清空集合数据
|
|
|
+ oneBatchList.clear();
|
|
|
+ idxLimit = Math.min(idxLimit + batchSize, size);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("保存失败", e);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
}
|