|
@@ -1,13 +1,7 @@
|
|
package org.springblade.manager.service.impl;
|
|
package org.springblade.manager.service.impl;
|
|
|
|
|
|
-import cn.hutool.json.JSONString;
|
|
|
|
-import com.alibaba.fastjson.JSONArray;
|
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
|
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
-import jodd.util.ArraysUtil;
|
|
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.AllArgsConstructor;
|
|
-import org.apache.commons.lang.StringEscapeUtils;
|
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.springblade.business.entity.ConstructionLedger;
|
|
import org.springblade.business.entity.ConstructionLedger;
|
|
import org.springblade.business.feign.ConstructionLedgerFeignClient;
|
|
import org.springblade.business.feign.ConstructionLedgerFeignClient;
|
|
@@ -21,6 +15,7 @@ import org.springblade.core.tool.utils.Func;
|
|
import org.springblade.core.tool.utils.StringUtil;
|
|
import org.springblade.core.tool.utils.StringUtil;
|
|
import org.springblade.manager.dto.WbsTreeContractDTO;
|
|
import org.springblade.manager.dto.WbsTreeContractDTO;
|
|
import org.springblade.manager.entity.*;
|
|
import org.springblade.manager.entity.*;
|
|
|
|
+import org.springblade.manager.excel.WbsExcelBatchUtil;
|
|
import org.springblade.manager.excel.WbsExcelUtil;
|
|
import org.springblade.manager.excel.WbsExcelUtil;
|
|
import org.springblade.manager.mapper.ContractInfoMapper;
|
|
import org.springblade.manager.mapper.ContractInfoMapper;
|
|
import org.springblade.manager.mapper.WbsTreeContractMapper;
|
|
import org.springblade.manager.mapper.WbsTreeContractMapper;
|
|
@@ -141,7 +136,19 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
|
|
wbsTreePrivateList.forEach(wbsTreePrivate -> {
|
|
wbsTreePrivateList.forEach(wbsTreePrivate -> {
|
|
diffRent1.forEach(id -> {
|
|
diffRent1.forEach(id -> {
|
|
if (Long.parseLong(id) == (wbsTreePrivate.getId())) {
|
|
if (Long.parseLong(id) == (wbsTreePrivate.getId())) {
|
|
- WbsTreeContract wbsTreeContract = getWbsTreeContract(wbsTreePrivate, pawDTO);
|
|
|
|
|
|
+ //WbsTreeContract wbsTreeContract = getWbsTreeContract(wbsTreePrivate, pawDTO);
|
|
|
|
+ WbsTreeContract wbsTreeContract = BeanUtil.copyProperties(wbsTreePrivate, WbsTreeContract.class);
|
|
|
|
+ if (wbsTreeContract != null) {
|
|
|
|
+ wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
|
|
|
|
+ wbsTreeContract.setWbsId(pawDTO.getWbsId());
|
|
|
|
+ wbsTreeContract.setProjectId(pawDTO.getProjectId());
|
|
|
|
+ wbsTreeContract.setContractId(pawDTO.getContractId());
|
|
|
|
+ if (wbsTreePrivate.getType() == 2) {
|
|
|
|
+ wbsTreeContract.setIsTypePrivatePid(wbsTreePrivate.getPKeyId());
|
|
|
|
+ }
|
|
|
|
+ //导入划分匹配字段
|
|
|
|
+ //wbsTreeContract.setImportMatchingInfo(wbsTreePrivate.getFullName());
|
|
|
|
+ }
|
|
wbsTreeContracts.add(wbsTreeContract);
|
|
wbsTreeContracts.add(wbsTreeContract);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
@@ -206,18 +213,32 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
|
|
//初始化
|
|
//初始化
|
|
wbsTreePrivatesList.forEach(wbsTreePrivate -> {
|
|
wbsTreePrivatesList.forEach(wbsTreePrivate -> {
|
|
//节点、表
|
|
//节点、表
|
|
- WbsTreeContract wbsTreeContract = getWbsTreeContract(wbsTreePrivate, pawDTO);
|
|
|
|
- wbsTreeContractList.add(wbsTreeContract);
|
|
|
|
-
|
|
|
|
- //台账
|
|
|
|
- if (wbsTreeContract.getNodeType() == 6) {
|
|
|
|
- ConstructionLedger constructionLedger = new ConstructionLedger();
|
|
|
|
- constructionLedger.setIsBeton(0);
|
|
|
|
- constructionLedger.setWbsId(wbsTreeContract.getPKeyId());
|
|
|
|
- constructionLedger.setSite(wbsTreeContract.getNodeName());
|
|
|
|
- constructionLedger.setStation(wbsTreeContract.getNodeName());
|
|
|
|
- constructionLedger.setContractId(Long.parseLong(pawDTO.getContractId()));
|
|
|
|
- constructionLedgerList.add(constructionLedger);
|
|
|
|
|
|
+ //WbsTreeContract wbsTreeContract = getWbsTreeContract(wbsTreePrivate, pawDTO);
|
|
|
|
+ WbsTreeContract wbsTreeContract = BeanUtil.copyProperties(wbsTreePrivate, WbsTreeContract.class);
|
|
|
|
+ if (wbsTreeContract != null) {
|
|
|
|
+ wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
|
|
|
|
+ wbsTreeContract.setWbsId(pawDTO.getWbsId());
|
|
|
|
+ wbsTreeContract.setProjectId(pawDTO.getProjectId());
|
|
|
|
+ wbsTreeContract.setContractId(pawDTO.getContractId());
|
|
|
|
+ if (wbsTreePrivate.getType() == 2) {
|
|
|
|
+ wbsTreeContract.setIsTypePrivatePid(wbsTreePrivate.getPKeyId());
|
|
|
|
+ }
|
|
|
|
+ //导入划分匹配字段
|
|
|
|
+ if (wbsTreePrivate.getType() == 1) {
|
|
|
|
+ wbsTreeContract.setImportMatchingInfo(wbsTreePrivate.getFullName());
|
|
|
|
+ }
|
|
|
|
+ wbsTreeContractList.add(wbsTreeContract);
|
|
|
|
+
|
|
|
|
+ //台账
|
|
|
|
+ if (wbsTreeContract.getNodeType() == 6) {
|
|
|
|
+ ConstructionLedger constructionLedger = new ConstructionLedger();
|
|
|
|
+ constructionLedger.setIsBeton(0);
|
|
|
|
+ constructionLedger.setWbsId(wbsTreeContract.getPKeyId());
|
|
|
|
+ constructionLedger.setSite(wbsTreeContract.getNodeName());
|
|
|
|
+ constructionLedger.setStation(wbsTreeContract.getNodeName());
|
|
|
|
+ constructionLedger.setContractId(Long.parseLong(pawDTO.getContractId()));
|
|
|
|
+ constructionLedgerList.add(constructionLedger);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
@@ -348,23 +369,23 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
- public WbsTreeContractVO4 importWbsContract(MultipartFile excelFile, String contractId, Integer type) throws IOException {
|
|
|
|
|
|
+ public WbsTreeContractVO4 importWbsContract(MultipartFile excelFile, String contractId, Integer type, Integer isSplicingNumber) throws IOException {
|
|
File file = WbsExcelUtil.convert(excelFile);
|
|
File file = WbsExcelUtil.convert(excelFile);
|
|
String canonicalPath = file.getCanonicalPath();
|
|
String canonicalPath = file.getCanonicalPath();
|
|
try {
|
|
try {
|
|
- //解析excel
|
|
|
|
- WbsExcelUtil excelUtil = new WbsExcelUtil();
|
|
|
|
- ArrayList<Map<String, String>> result = excelUtil.readExcelToObjContract(canonicalPath);
|
|
|
|
- //获取对应工程类别树信息
|
|
|
|
- ArrayList<Map<String, String>> resultNow = excelUtil.getInfoByType(result, type);
|
|
|
|
-
|
|
|
|
- if (resultNow.size() <= 0) {
|
|
|
|
- throw new ServiceException("请选择一个工程类别进行匹配导入");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- //匹配对应工程类别修改对应合同段节点名称
|
|
|
|
- return this.updateContractNodeNames(resultNow, contractId);
|
|
|
|
|
|
+ if (StringUtils.isNotEmpty(contractId) && type != null && isSplicingNumber != null) {
|
|
|
|
+ //解析excel
|
|
|
|
+ WbsExcelUtil excelUtil = new WbsExcelUtil();
|
|
|
|
+ ArrayList<Map<String, String>> result = excelUtil.readExcelToObjContract(canonicalPath);
|
|
|
|
+ //获取对应工程类别树信息
|
|
|
|
+ ArrayList<Map<String, String>> resultNow = excelUtil.getDataListByType(result, type);
|
|
|
|
+ if (resultNow.size() <= 0) {
|
|
|
|
+ throw new ServiceException("请选择一个工程类别进行匹配导入");
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ //匹配对应工程类别修改对应合同段节点名称
|
|
|
|
+ return this.updateContractNodeNames(resultNow, contractId, isSplicingNumber);
|
|
|
|
+ }
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
} finally {
|
|
} finally {
|
|
@@ -377,11 +398,18 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
- private WbsTreeContractVO4 updateContractNodeNames(ArrayList<Map<String, String>> resultNow, String contractId) {
|
|
|
|
|
|
+ private WbsTreeContractVO4 updateContractNodeNames(ArrayList<Map<String, String>> resultNow, String contractId, Integer isSplicingNumber) {
|
|
//获取当前合同段树
|
|
//获取当前合同段树
|
|
List<WbsTreeContractVO> wbsTreeContractVOS = contractInfoMapper.tree2(null, null, contractId, null, null);
|
|
List<WbsTreeContractVO> wbsTreeContractVOS = contractInfoMapper.tree2(null, null, contractId, null, null);
|
|
|
|
+ if (wbsTreeContractVOS.size() <= 0) {
|
|
|
|
+ throw new ServiceException("请从项目级中分配合同段wbs划分模板");
|
|
|
|
+ }
|
|
List<Map<Integer, String>> resultList = new ArrayList<>();
|
|
List<Map<Integer, String>> resultList = new ArrayList<>();
|
|
|
|
|
|
|
|
+ if (isSplicingNumber == 1) {
|
|
|
|
+ //构建拼接划分编号
|
|
|
|
+ }
|
|
|
|
+
|
|
//构造map
|
|
//构造map
|
|
String str = "\\s*|\r|\n|\t";
|
|
String str = "\\s*|\r|\n|\t";
|
|
for (Map<String, String> map : resultNow) {
|
|
for (Map<String, String> map : resultNow) {
|
|
@@ -421,28 +449,75 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
|
|
String nodeName = split[0];
|
|
String nodeName = split[0];
|
|
String partitionCode = split[1];
|
|
String partitionCode = split[1];
|
|
|
|
|
|
|
|
+ //先判断是否循环到下一行,是否已经匹配成功名称类似节点
|
|
|
|
+ int count = 0;
|
|
|
|
+ if (successData.size() > 0) {
|
|
|
|
+ for (WbsTreeContractVO successDatum : successData) {
|
|
|
|
+ //同类型、名称相似、且划分编码不一样
|
|
|
|
+ if (successDatum.getNodeType().equals(k)
|
|
|
|
+ && nodeName.contains(successDatum.getImportMatchingInfo())
|
|
|
|
+ && !successDatum.getPartitionCode().equals(partitionCode)) {
|
|
|
|
+ //构造类似名称节点
|
|
|
|
+ Long id = SnowFlakeUtil.getId();
|
|
|
|
+ successDatum.setPrimaryKeyId(String.valueOf(id));
|
|
|
|
+ successDatum.setId(id);
|
|
|
|
+ successDatum.setFullName(nodeName);
|
|
|
|
+ successDatum.setPartitionCode(partitionCode);
|
|
|
|
+ successDatum.setIsImportIdentificationNode(1); //识别成功
|
|
|
|
+ WbsTreeContract wbsTreeContract = BeanUtil.copyProperties(successDatum, WbsTreeContract.class);
|
|
|
|
+ assert wbsTreeContract != null;
|
|
|
|
+ wbsTreeContract.setPKeyId(id);
|
|
|
|
+ wbsTreeContract.setId(id);
|
|
|
|
+ baseMapper.insert(wbsTreeContract);
|
|
|
|
+ successData.add(successDatum);
|
|
|
|
+ count = 1;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (count == 1) {
|
|
|
|
+ //如果添加了类似名称节点成功,那么结束当前循环,进入下一列,不执行修改、失败构造
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
for (WbsTreeContractVO nodeOld : wbsTreeContractVOS) {
|
|
for (WbsTreeContractVO nodeOld : wbsTreeContractVOS) {
|
|
if (nodeOld.getNodeType().equals(k)) {
|
|
if (nodeOld.getNodeType().equals(k)) {
|
|
String nodeNameOld = nodeOld.getNodeName();
|
|
String nodeNameOld = nodeOld.getNodeName();
|
|
- String fullNameOld = nodeOld.getFullName();
|
|
|
|
- List<WbsTreeContractVO> collect = successData.stream().filter(f -> DiffListUtil.getContains(f.getNodeName(), nodeName)).collect(Collectors.toList());
|
|
|
|
|
|
+ String importMatchingInfoOld = nodeOld.getImportMatchingInfo();
|
|
|
|
+ List<WbsTreeContractVO> collect = successData.stream().filter(f ->
|
|
|
|
+ f.getFullName().contains(nodeName)
|
|
|
|
+ && f.getPartitionCode().equals(partitionCode)
|
|
|
|
+ ).collect(Collectors.toList());
|
|
//匹配名称、别名
|
|
//匹配名称、别名
|
|
if (collect.size() == 0) {
|
|
if (collect.size() == 0) {
|
|
- if (DiffListUtil.getContains(nodeName, nodeNameOld) || DiffListUtil.getContains(nodeName, fullNameOld)) {
|
|
|
|
- //匹配成功 修改名称、划分编号
|
|
|
|
- nodeOld.setNodeName(nodeName);
|
|
|
|
|
|
+ if (nodeName.contains(nodeNameOld) || nodeName.contains(importMatchingInfoOld)) {
|
|
|
|
+ //匹配成功 修改名称、划分编号 不修改原始节点id,只修改别名id
|
|
|
|
+ nodeOld.setFullName(nodeName);
|
|
nodeOld.setPartitionCode(partitionCode);
|
|
nodeOld.setPartitionCode(partitionCode);
|
|
nodeOld.setIsImportIdentificationNode(1); //识别成功
|
|
nodeOld.setIsImportIdentificationNode(1); //识别成功
|
|
|
|
+ nodeOld.setImportMatchingInfo(importMatchingInfoOld);
|
|
successData.add(nodeOld);
|
|
successData.add(nodeOld);
|
|
|
|
+ count = 2;
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- List<WbsTreeContractVO> collect1 = successData.stream().filter(f -> DiffListUtil.getContains(f.getNodeName(), nodeName)).collect(Collectors.toList());
|
|
|
|
- List<WbsTreeContractVO> collect2 = failData.stream().filter(f -> DiffListUtil.getContains(f.getNodeName(), nodeName)).collect(Collectors.toList());
|
|
|
|
|
|
+ if (count == 2) {
|
|
|
|
+ //不执行失败构造
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ List<WbsTreeContractVO> collect = successData.stream().filter(f ->
|
|
|
|
+ f.getFullName().contains(nodeName)
|
|
|
|
+ ).collect(Collectors.toList());
|
|
|
|
+ List<WbsTreeContractVO> collect1 = failData.stream().filter(f ->
|
|
|
|
+ f.getFullName().contains(nodeName)
|
|
|
|
+ ).collect(Collectors.toList());
|
|
|
|
|
|
- if (collect1.size() == 0 && collect2.size() == 0) {
|
|
|
|
|
|
+ if (collect.size() == 0 && collect1.size() == 0) {
|
|
//未匹配成功 构建参数
|
|
//未匹配成功 构建参数
|
|
WbsTreeContract wbsTreeContract = this.buildFailData(k, nodeName, partitionCode);
|
|
WbsTreeContract wbsTreeContract = this.buildFailData(k, nodeName, partitionCode);
|
|
WbsTreeContractVO wbsTreeContractVO = BeanUtil.copyProperties(wbsTreeContract, WbsTreeContractVO.class);
|
|
WbsTreeContractVO wbsTreeContractVO = BeanUtil.copyProperties(wbsTreeContract, WbsTreeContractVO.class);
|
|
@@ -451,43 +526,54 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- //修改节点信息
|
|
|
|
- List<WbsTreeContract> wbsTreeContracts = BeanUtil.copyProperties(successData, WbsTreeContract.class);
|
|
|
|
- this.saveOrUpdateBatch(wbsTreeContracts, 1000);
|
|
|
|
-
|
|
|
|
WbsTreeContractVO4 res = new WbsTreeContractVO4();
|
|
WbsTreeContractVO4 res = new WbsTreeContractVO4();
|
|
|
|
+ try {
|
|
|
|
+ //修改节点信息
|
|
|
|
+ List<WbsTreeContract> wbsTreeContracts = BeanUtil.copyProperties(successData, WbsTreeContract.class);
|
|
|
|
+ this.saveOrUpdateBatch(wbsTreeContracts, 1000);
|
|
|
|
+
|
|
|
|
+ //导入识别匹配成功树
|
|
|
|
+ ArrayList<WbsTreeContractVO> collect = successData.stream().collect(
|
|
|
|
+ Collectors.collectingAndThen(
|
|
|
|
+ Collectors.toCollection(() -> new TreeSet<>(
|
|
|
|
+ Comparator.comparing(o -> o.getId() + ";" + o.getFullName()))), ArrayList::new)
|
|
|
|
+ );
|
|
|
|
+ List<WbsTreeContractVO> successWbsTreeContractVOS = this.buildWbsTreeByStream(collect);
|
|
|
|
+ res.setMatchedData(successWbsTreeContractVOS);
|
|
|
|
+
|
|
|
|
+ List<WbsTreeContractVO> successDataCopyToFail = WbsExcelBatchUtil.deepCopy(collect);
|
|
|
|
+ //构建导入识别匹配失败树failDataTree
|
|
|
|
+ List<WbsTreeContractVO> failDataTree = this.buildFailDataTree(resultList, failData, successDataCopyToFail);
|
|
|
|
+ List<WbsTreeContractVO> collect1 = failDataTree.stream().collect(
|
|
|
|
+ Collectors.collectingAndThen(
|
|
|
|
+ Collectors.toCollection(() -> new TreeSet<>(
|
|
|
|
+ Comparator.comparing(o -> o.getId() + ";" + o.getFullName()))), ArrayList::new)
|
|
|
|
+ );
|
|
|
|
+ List<WbsTreeContractVO> failWbsTreeContractVOS = this.buildWbsTreeByStream(collect1);
|
|
|
|
+ res.setUnmatchedData(failWbsTreeContractVOS);
|
|
|
|
|
|
- //导入识别匹配成功树
|
|
|
|
- List<WbsTreeContractVO> successWbsTreeContractVOS = contractInfoService.buildWbsTreeByStream(successData);
|
|
|
|
- res.setMatchedData(successWbsTreeContractVOS);
|
|
|
|
-
|
|
|
|
- //构建导入识别匹配失败树failDataTree
|
|
|
|
- List<WbsTreeContractVO> failDataTree = this.buildFailDataTree(resultList, failData, successData);
|
|
|
|
- List<WbsTreeContractVO> failWbsTreeContractVOS = contractInfoService.buildWbsTreeByStream(failDataTree);
|
|
|
|
- res.setUnmatchedData(failWbsTreeContractVOS);
|
|
|
|
-
|
|
|
|
|
|
+ return res;
|
|
|
|
+ } catch (IOException | ClassNotFoundException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
return res;
|
|
return res;
|
|
}
|
|
}
|
|
|
|
|
|
- private List<WbsTreeContractVO> buildFailDataTree(List<Map<Integer, String>> resultList, List<WbsTreeContractVO> failData, List<WbsTreeContractVO> successData) {
|
|
|
|
-
|
|
|
|
|
|
+ private List<WbsTreeContractVO> buildFailDataTree
|
|
|
|
+ (List<Map<Integer, String>> resultList, List<WbsTreeContractVO> failData, List<WbsTreeContractVO> successData) {
|
|
List<WbsTreeContractVO> resultData = new ArrayList<>();
|
|
List<WbsTreeContractVO> resultData = new ArrayList<>();
|
|
-
|
|
|
|
- for (Map<Integer, String> map : resultList) {
|
|
|
|
-
|
|
|
|
|
|
+ for (Map<Integer, String> map : resultList) {//行
|
|
Long nodeParentIdLv1 = 0L;
|
|
Long nodeParentIdLv1 = 0L;
|
|
Long nodeParentIdLv2 = 0L;
|
|
Long nodeParentIdLv2 = 0L;
|
|
Long nodeParentIdLv3 = 0L;
|
|
Long nodeParentIdLv3 = 0L;
|
|
Long nodeParentIdLv4 = 0L;
|
|
Long nodeParentIdLv4 = 0L;
|
|
Long nodeParentIdLv5 = 0L;
|
|
Long nodeParentIdLv5 = 0L;
|
|
-
|
|
|
|
//当前行,失败节点
|
|
//当前行,失败节点
|
|
List<WbsTreeContractVO> failList = new ArrayList<>();
|
|
List<WbsTreeContractVO> failList = new ArrayList<>();
|
|
//当前行,成功节点
|
|
//当前行,成功节点
|
|
List<WbsTreeContractVO> successList = new ArrayList<>();
|
|
List<WbsTreeContractVO> successList = new ArrayList<>();
|
|
|
|
|
|
- for (Map.Entry<Integer, String> entry : map.entrySet()) {
|
|
|
|
-
|
|
|
|
|
|
+ for (Map.Entry<Integer, String> entry : map.entrySet()) {//每行的列
|
|
Integer k = entry.getKey();
|
|
Integer k = entry.getKey();
|
|
String v = entry.getValue();
|
|
String v = entry.getValue();
|
|
if (StringUtil.isEmpty(v.replaceAll(":::", ""))) {
|
|
if (StringUtil.isEmpty(v.replaceAll(":::", ""))) {
|
|
@@ -496,112 +582,122 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
|
|
String[] split = v.split(":::");
|
|
String[] split = v.split(":::");
|
|
String nodeName = split[0];
|
|
String nodeName = split[0];
|
|
|
|
|
|
- //当前行,失败节点
|
|
|
|
for (WbsTreeContractVO failDatum : failData) {
|
|
for (WbsTreeContractVO failDatum : failData) {
|
|
- if (nodeName.equals(failDatum.getNodeName())) {
|
|
|
|
|
|
+ if (k.equals(failDatum.getNodeType()) && nodeName.equals(failDatum.getFullName())) {
|
|
failList.add(failDatum);
|
|
failList.add(failDatum);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- //当前行,成功节点
|
|
|
|
for (WbsTreeContractVO successDatum : successData) {
|
|
for (WbsTreeContractVO successDatum : successData) {
|
|
- if (nodeName.equals(successDatum.getNodeName())) {
|
|
|
|
|
|
+ if (k.equals(successDatum.getNodeType()) && nodeName.equals(successDatum.getFullName())) {
|
|
successList.add(successDatum);
|
|
successList.add(successDatum);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
- //初始化父级id
|
|
|
|
- for (WbsTreeContractVO successDatum : successList) {
|
|
|
|
- if (nodeName.equals(successDatum.getNodeName())) {
|
|
|
|
- if (successDatum.getNodeType() == 1) {
|
|
|
|
- nodeParentIdLv1 = successDatum.getParentId();
|
|
|
|
- } else if (successDatum.getNodeType() == 2) {
|
|
|
|
- nodeParentIdLv2 = successDatum.getParentId();
|
|
|
|
- } else if (successDatum.getNodeType() == 3) {
|
|
|
|
- nodeParentIdLv3 = successDatum.getParentId();
|
|
|
|
- } else if (successDatum.getNodeType() == 4) {
|
|
|
|
- nodeParentIdLv4 = successDatum.getParentId();
|
|
|
|
- } else if (successDatum.getNodeType() == 5) {
|
|
|
|
- nodeParentIdLv5 = successDatum.getParentId();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ //初始化上级id
|
|
|
|
+ for (WbsTreeContractVO successDatum : successList) {
|
|
|
|
+ if (successDatum.getNodeType() == 1) {
|
|
|
|
+ nodeParentIdLv1 = successDatum.getId();
|
|
|
|
+ } else if (successDatum.getNodeType() == 2) {
|
|
|
|
+ nodeParentIdLv2 = successDatum.getId();
|
|
|
|
+ } else if (successDatum.getNodeType() == 3) {
|
|
|
|
+ nodeParentIdLv3 = successDatum.getId();
|
|
|
|
+ } else if (successDatum.getNodeType() == 4) {
|
|
|
|
+ nodeParentIdLv4 = successDatum.getId();
|
|
|
|
+ } else if (successDatum.getNodeType() == 5) {
|
|
|
|
+ nodeParentIdLv5 = successDatum.getId();
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
- //构建未成功节点的父级id
|
|
|
|
- for (WbsTreeContractVO failDatum : failList) {
|
|
|
|
- if (failDatum.getNodeType() == 1) {
|
|
|
|
|
|
+ //构建未成功节点的父级id
|
|
|
|
+ for (WbsTreeContractVO failDatum : failList) {
|
|
|
|
+ if (failDatum.getNodeType() == 1) {
|
|
|
|
+ failDatum.setParentId(nodeParentIdLv1);
|
|
|
|
+
|
|
|
|
+ } else if (failDatum.getNodeType() == 2) {
|
|
|
|
+ if (nodeParentIdLv2 == 0L) {
|
|
failDatum.setParentId(nodeParentIdLv1);
|
|
failDatum.setParentId(nodeParentIdLv1);
|
|
- } else if (failDatum.getNodeType() == 2) {
|
|
|
|
|
|
+ } else {
|
|
|
|
+ failDatum.setParentId(nodeParentIdLv2);
|
|
|
|
+ nodeParentIdLv2 = failDatum.getId();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else if (failDatum.getNodeType() == 3) {
|
|
|
|
+ if (nodeParentIdLv3 == 0L) {
|
|
if (nodeParentIdLv2 == 0L) {
|
|
if (nodeParentIdLv2 == 0L) {
|
|
failDatum.setParentId(nodeParentIdLv1);
|
|
failDatum.setParentId(nodeParentIdLv1);
|
|
} else {
|
|
} else {
|
|
failDatum.setParentId(nodeParentIdLv2);
|
|
failDatum.setParentId(nodeParentIdLv2);
|
|
|
|
+ nodeParentIdLv3 = failDatum.getId();
|
|
}
|
|
}
|
|
- } else if (failDatum.getNodeType() == 3) {
|
|
|
|
|
|
+ } else {
|
|
|
|
+ failDatum.setParentId(nodeParentIdLv3);
|
|
|
|
+ nodeParentIdLv3 = failDatum.getId();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else if (failDatum.getNodeType() == 4) {
|
|
|
|
+ if (nodeParentIdLv4 == 0L) {
|
|
if (nodeParentIdLv3 == 0L) {
|
|
if (nodeParentIdLv3 == 0L) {
|
|
if (nodeParentIdLv2 == 0L) {
|
|
if (nodeParentIdLv2 == 0L) {
|
|
failDatum.setParentId(nodeParentIdLv1);
|
|
failDatum.setParentId(nodeParentIdLv1);
|
|
} else {
|
|
} else {
|
|
failDatum.setParentId(nodeParentIdLv2);
|
|
failDatum.setParentId(nodeParentIdLv2);
|
|
|
|
+ nodeParentIdLv4 = failDatum.getId();
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
failDatum.setParentId(nodeParentIdLv3);
|
|
failDatum.setParentId(nodeParentIdLv3);
|
|
|
|
+ nodeParentIdLv4 = failDatum.getId();
|
|
}
|
|
}
|
|
- } else if (failDatum.getNodeType() == 4) {
|
|
|
|
|
|
+ } else {
|
|
|
|
+ failDatum.setParentId(nodeParentIdLv4);
|
|
|
|
+ nodeParentIdLv4 = failDatum.getId();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else if (failDatum.getNodeType() == 5) {
|
|
|
|
+ if (nodeParentIdLv5 == 0L) {
|
|
if (nodeParentIdLv4 == 0L) {
|
|
if (nodeParentIdLv4 == 0L) {
|
|
if (nodeParentIdLv3 == 0L) {
|
|
if (nodeParentIdLv3 == 0L) {
|
|
if (nodeParentIdLv2 == 0L) {
|
|
if (nodeParentIdLv2 == 0L) {
|
|
failDatum.setParentId(nodeParentIdLv1);
|
|
failDatum.setParentId(nodeParentIdLv1);
|
|
} else {
|
|
} else {
|
|
failDatum.setParentId(nodeParentIdLv2);
|
|
failDatum.setParentId(nodeParentIdLv2);
|
|
|
|
+ nodeParentIdLv5 = failDatum.getId();
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
failDatum.setParentId(nodeParentIdLv3);
|
|
failDatum.setParentId(nodeParentIdLv3);
|
|
|
|
+ nodeParentIdLv5 = failDatum.getId();
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
failDatum.setParentId(nodeParentIdLv4);
|
|
failDatum.setParentId(nodeParentIdLv4);
|
|
|
|
+ nodeParentIdLv5 = failDatum.getId();
|
|
}
|
|
}
|
|
- } else if (failDatum.getNodeType() == 5) {
|
|
|
|
- if (nodeParentIdLv5 == 0L) {
|
|
|
|
- if (nodeParentIdLv4 == 0L) {
|
|
|
|
- if (nodeParentIdLv3 == 0L) {
|
|
|
|
- if (nodeParentIdLv2 == 0L) {
|
|
|
|
- failDatum.setParentId(nodeParentIdLv1);
|
|
|
|
- } else {
|
|
|
|
- failDatum.setParentId(nodeParentIdLv2);
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- failDatum.setParentId(nodeParentIdLv3);
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- failDatum.setParentId(nodeParentIdLv4);
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- failDatum.setParentId(nodeParentIdLv5);
|
|
|
|
- }
|
|
|
|
|
|
+ } else {
|
|
|
|
+ failDatum.setParentId(nodeParentIdLv5);
|
|
|
|
+ nodeParentIdLv5 = failDatum.getId();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- //添加未成功节点
|
|
|
|
- resultData.addAll(failData);
|
|
|
|
- }
|
|
|
|
|
|
+ //移除当前行构建成功节点,执行下一行时不再构建该节点
|
|
|
|
+ failData.removeAll(failList);
|
|
|
|
|
|
- //添加父级节点
|
|
|
|
- resultData.addAll(successData);
|
|
|
|
|
|
+ //添加构建成功节点
|
|
|
|
+ resultData.addAll(failList);
|
|
|
|
+ resultData.addAll(successList);
|
|
|
|
+ }
|
|
|
|
|
|
return resultData;
|
|
return resultData;
|
|
}
|
|
}
|
|
|
|
|
|
private WbsTreeContract buildFailData(Integer nodeType, String nodeName, String partitionCode) {
|
|
private WbsTreeContract buildFailData(Integer nodeType, String nodeName, String partitionCode) {
|
|
- //获取当前节点的parentId
|
|
|
|
WbsTreeContract wbsTreeContract = new WbsTreeContract();
|
|
WbsTreeContract wbsTreeContract = new WbsTreeContract();
|
|
Long id = SnowFlakeUtil.getId();
|
|
Long id = SnowFlakeUtil.getId();
|
|
wbsTreeContract.setPKeyId(id);
|
|
wbsTreeContract.setPKeyId(id);
|
|
wbsTreeContract.setId(id);
|
|
wbsTreeContract.setId(id);
|
|
wbsTreeContract.setNodeName(nodeName);
|
|
wbsTreeContract.setNodeName(nodeName);
|
|
wbsTreeContract.setFullName(nodeName);
|
|
wbsTreeContract.setFullName(nodeName);
|
|
|
|
+ wbsTreeContract.setImportMatchingInfo(nodeName);
|
|
wbsTreeContract.setPartitionCode(partitionCode);
|
|
wbsTreeContract.setPartitionCode(partitionCode);
|
|
wbsTreeContract.setType(1);
|
|
wbsTreeContract.setType(1);
|
|
wbsTreeContract.setNodeType(nodeType);
|
|
wbsTreeContract.setNodeType(nodeType);
|
|
@@ -609,6 +705,28 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
|
|
return wbsTreeContract;
|
|
return wbsTreeContract;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private List<WbsTreeContractVO> buildWbsTreeByStream(List<WbsTreeContractVO> wbsTreeVO2s) {
|
|
|
|
+ //根节点
|
|
|
|
+ List<WbsTreeContractVO> list = wbsTreeVO2s.stream().filter(f -> f.getParentId() == 0L).collect(Collectors.toList());
|
|
|
|
+ //子节点分组
|
|
|
|
+ Map<Long, List<WbsTreeContractVO>> map = wbsTreeVO2s.stream().collect(Collectors.groupingBy(WbsTreeContractVO::getParentId));
|
|
|
|
+ this.recursionFnTree(list, map);
|
|
|
|
+ return list;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void recursionFnTree(List<WbsTreeContractVO> list, Map<Long, List<WbsTreeContractVO>> map) {
|
|
|
|
+ for (WbsTreeContractVO wbsTreeContractVO : list) {
|
|
|
|
+ List<WbsTreeContractVO> childrenList = map.get(wbsTreeContractVO.getId());
|
|
|
|
+ wbsTreeContractVO.setChildren(childrenList);
|
|
|
|
+ if (childrenList != null && childrenList.size() > 0) {
|
|
|
|
+ //存在子级
|
|
|
|
+ wbsTreeContractVO.setHasChildren(true);
|
|
|
|
+ //递归查询
|
|
|
|
+ recursionFnTree(childrenList, map);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
private List<WbsTreeContract> findAllNodeList(String wbsTreeIds, String projectId, String contractId, String
|
|
private List<WbsTreeContract> findAllNodeList(String wbsTreeIds, String projectId, String contractId, String
|
|
wbsId) {
|
|
wbsId) {
|
|
String[] ids = wbsTreeIds.split(",");
|
|
String[] ids = wbsTreeIds.split(",");
|
|
@@ -629,9 +747,9 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
|
|
wbsTreeContract.setPKeyId(snowId);
|
|
wbsTreeContract.setPKeyId(snowId);
|
|
wbsTreeContract.setId(wbsTree.getId());
|
|
wbsTreeContract.setId(wbsTree.getId());
|
|
wbsTreeContract.setWbsId(pawDTO.getWbsId());
|
|
wbsTreeContract.setWbsId(pawDTO.getWbsId());
|
|
- wbsTreeContract.setWbsType(wbsTree.getType());
|
|
|
|
wbsTreeContract.setProjectId(pawDTO.getProjectId());
|
|
wbsTreeContract.setProjectId(pawDTO.getProjectId());
|
|
wbsTreeContract.setContractId(pawDTO.getContractId());
|
|
wbsTreeContract.setContractId(pawDTO.getContractId());
|
|
|
|
+ wbsTreeContract.setWbsType(wbsTree.getType());
|
|
wbsTreeContract.setContractType(1);
|
|
wbsTreeContract.setContractType(1);
|
|
wbsTreeContract.setTenantId(wbsTree.getTenantId());
|
|
wbsTreeContract.setTenantId(wbsTree.getTenantId());
|
|
wbsTreeContract.setParentId(wbsTree.getParentId());
|
|
wbsTreeContract.setParentId(wbsTree.getParentId());
|
|
@@ -664,6 +782,10 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
|
|
if (wbsTree.getType() == 2) {
|
|
if (wbsTree.getType() == 2) {
|
|
wbsTreeContract.setIsTypePrivatePid(wbsTree.getPKeyId());
|
|
wbsTreeContract.setIsTypePrivatePid(wbsTree.getPKeyId());
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ //导入划分匹配字段
|
|
|
|
+ wbsTreeContract.setImportMatchingInfo(wbsTree.getFullName());
|
|
|
|
+
|
|
return wbsTreeContract;
|
|
return wbsTreeContract;
|
|
}
|
|
}
|
|
|
|
|