|
@@ -26,6 +26,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
|
|
|
import org.springblade.manager.utils.DiffListUtil;
|
|
|
import org.springblade.manager.utils.WbsElementUtil;
|
|
|
import org.springblade.manager.vo.*;
|
|
|
+import org.springframework.context.annotation.Bean;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
@@ -36,6 +37,7 @@ import java.io.File;
|
|
|
import java.io.IOException;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
@Service
|
|
|
@AllArgsConstructor
|
|
@@ -48,6 +50,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
private final WbsTreePrivateServiceImpl wbsTreePrivateService;
|
|
|
private final ProjectInfoMapper projectInfoMapper;
|
|
|
private final WbsTreeContractMapper wbsTreeContractMapper;
|
|
|
+ private final WbsTreeContractServiceImpl wbsTreeContractService;
|
|
|
private final ContractInfoMapper contractInfoMapper;
|
|
|
private final TextdictInfoServiceImpl textDictInfoService;
|
|
|
private final TextdictInfoMapper textdictInfoMapper;
|
|
@@ -591,290 +594,315 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
//@AvoidRepeatableCommit
|
|
|
public Boolean submitWbsTreeInProject(WbsTreeContractDTO pawDTO) {
|
|
|
- if (StringUtils.isEmpty(pawDTO.getWbsId())) {
|
|
|
- throw new ServiceException("请正确选择一个wbs模板");
|
|
|
- }
|
|
|
- String wbsTreeIds = pawDTO.getWbsTreeIds();
|
|
|
- String[] ids = wbsTreeIds.split(",");
|
|
|
- List<String> idList = Arrays.asList(ids);
|
|
|
- List<String> idList1 = idList.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
|
|
|
-
|
|
|
- //当前项目存在的引用ids
|
|
|
- List<String> idList2 = new ArrayList<>();
|
|
|
-
|
|
|
- //当前公有引用ids
|
|
|
- if (pawDTO.getReferenceType().equals("public")) {
|
|
|
- List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
|
|
|
- .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
- .eq(WbsTreePrivate::getType, 1)
|
|
|
- );
|
|
|
- wbsTreePrivates.forEach(wbsTreePrivate -> {
|
|
|
- idList2.add(String.valueOf(wbsTreePrivate.getId()));
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- //当前私有引用ids
|
|
|
- else if (pawDTO.getReferenceType().equals("private")) {
|
|
|
- List<WbsTreePrivate> wbsTreePrivates2 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId())
|
|
|
- .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
- .eq(WbsTreePrivate::getType, 1)
|
|
|
- );
|
|
|
- wbsTreePrivates2.forEach(wbsTreePrivate -> {
|
|
|
- idList2.add(String.valueOf(wbsTreePrivate.getId()));
|
|
|
- });
|
|
|
- }
|
|
|
+ try {
|
|
|
+ if (StringUtils.isEmpty(pawDTO.getWbsId())) {
|
|
|
+ throw new ServiceException("请正确选择一个wbs模板");
|
|
|
+ }
|
|
|
+ String wbsTreeIds = pawDTO.getWbsTreeIds();
|
|
|
+ String[] ids = wbsTreeIds.split(",");
|
|
|
+ List<String> idList = Arrays.asList(ids);
|
|
|
+ List<String> idList1 = idList.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
|
|
|
|
|
|
- //新增节点ids
|
|
|
- List<String> saveIds = idList1.stream().filter(f -> !idList2.contains(f)).collect(Collectors.toList());
|
|
|
- //删除节点ids
|
|
|
- List<String> delIds = idList2.stream().filter(f -> !idList1.contains(f)).collect(Collectors.toList());
|
|
|
+ //当前项目存在的引用ids
|
|
|
+ List<String> idList2 = new ArrayList<>();
|
|
|
|
|
|
- if (saveIds.size() == 0 && delIds.size() == 0) {
|
|
|
- //1.项目表单同步
|
|
|
+ //当前公有引用ids
|
|
|
if (pawDTO.getReferenceType().equals("public")) {
|
|
|
- //公有同步新增元素表
|
|
|
- //获取公有wbs树新增的元素表
|
|
|
- List<WbsTree> allNodeList = findAllNodeList(wbsTreeIds);
|
|
|
-
|
|
|
- //获取公有wbs树所有的节点、元素表
|
|
|
- List<WbsTree> wbsTreeListAll = new ArrayList<>();
|
|
|
- if (allNodeList != null) {
|
|
|
- List<WbsTree> wbsTreeList = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda()
|
|
|
- .eq(WbsTree::getWbsId, pawDTO.getWbsId())
|
|
|
- .eq(WbsTree::getStatus, 1)
|
|
|
+ List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+ .eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
|
|
|
+ .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getType, 1)
|
|
|
+ );
|
|
|
+ wbsTreePrivates.forEach(wbsTreePrivate -> {
|
|
|
+ idList2.add(String.valueOf(wbsTreePrivate.getId()));
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ //当前私有引用ids
|
|
|
+ else if (pawDTO.getReferenceType().equals("private")) {
|
|
|
+ List<WbsTreePrivate> wbsTreePrivates2 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+ .eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId())
|
|
|
+ .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getType, 1)
|
|
|
+ );
|
|
|
+ wbsTreePrivates2.forEach(wbsTreePrivate -> {
|
|
|
+ idList2.add(String.valueOf(wbsTreePrivate.getId()));
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ //新增节点ids
|
|
|
+ List<String> saveIds = idList1.stream().filter(f -> !idList2.contains(f)).collect(Collectors.toList());
|
|
|
+ //删除节点ids
|
|
|
+ List<String> delIds = idList2.stream().filter(f -> !idList1.contains(f)).collect(Collectors.toList());
|
|
|
+
|
|
|
+ /*-----------------1.同步-----------------*/
|
|
|
+ if (saveIds.size() == 0 && delIds.size() == 0) {
|
|
|
+ //同步的元素表DataList
|
|
|
+ List<WbsTreePrivate> insertDataPrivate1 = new ArrayList<>();
|
|
|
+ //同步到该项目下所有合同段下的DataList
|
|
|
+ List<WbsTreeContract> insertDataContract1 = new ArrayList<>();
|
|
|
+ //同步到该合同段下所有复制或新增的节点下的DataList
|
|
|
+ List<WbsTreeContract> insertDataContract2 = new ArrayList<>();
|
|
|
+
|
|
|
+ //1.项目表单同步
|
|
|
+ if (pawDTO.getReferenceType().equals("public")) {
|
|
|
+ //公有同步新增元素表
|
|
|
+ //获取公有wbs树新增的元素表
|
|
|
+ List<WbsTree> allNodeList = findAllNodeList(wbsTreeIds);
|
|
|
+
|
|
|
+ //获取公有wbs树所有的节点、元素表
|
|
|
+ List<WbsTree> wbsTreeListAll = new ArrayList<>();
|
|
|
+ if (allNodeList != null) {
|
|
|
+ List<WbsTree> wbsTreeList = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda()
|
|
|
+ .eq(WbsTree::getWbsId, pawDTO.getWbsId())
|
|
|
+ .eq(WbsTree::getStatus, 1)
|
|
|
+ );
|
|
|
+ wbsTreeListAll.addAll(wbsTreeList);
|
|
|
+ }
|
|
|
+
|
|
|
+ //公有元素表的id
|
|
|
+ List<WbsTree> wbsTreeListTables = wbsTreeListAll.stream().filter(f -> f.getType() == 2).collect(Collectors.toList());
|
|
|
+ List<String> collect1 = wbsTreeListTables.stream().map(WbsTree::getId).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
|
|
|
+
|
|
|
+ //获取项目私有wbs树下所有的节点、元素表
|
|
|
+ List<WbsTreePrivate> wbsTreePrivatesAll = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+ .eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
|
|
|
+ .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getStatus, 1)
|
|
|
);
|
|
|
- wbsTreeListAll.addAll(wbsTreeList);
|
|
|
- }
|
|
|
|
|
|
- //所有表单信息
|
|
|
- List<WbsTree> wbsTreeListTables = wbsTreeListAll.stream().filter(f -> f.getType() == 2).collect(Collectors.toList());
|
|
|
+ //私有元素表的id
|
|
|
+ List<WbsTreePrivate> collect = wbsTreePrivatesAll.stream().filter(f -> f.getType() == 2).collect(Collectors.toList());
|
|
|
+ List<String> collect2 = collect.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
|
|
|
|
|
|
- //公有元素表的id
|
|
|
- List<String> collect1 = wbsTreeListTables.stream().map(WbsTree::getId).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
|
|
|
+ List<String> diffRent1 = DiffListUtil.getDiffRent(collect1, collect2);
|
|
|
|
|
|
- //获取项目私有wbs树下所有的节点、元素表
|
|
|
- List<WbsTreePrivate> wbsTreePrivatesAll = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
|
|
|
- .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
- .eq(WbsTreePrivate::getStatus, 1)
|
|
|
- );
|
|
|
+ //修改公有wbs节点信息、元素表基础信息到项目级wbs、合同段wbs
|
|
|
+ this.updateWbsInfoPrivateAsync(wbsTreeListAll, wbsTreePrivatesAll, pawDTO.getProjectId());
|
|
|
|
|
|
- //私有下元素表id
|
|
|
- List<WbsTreePrivate> collect = wbsTreePrivatesAll.stream().filter(f -> f.getType() == 2).collect(Collectors.toList());
|
|
|
- List<String> collect2 = collect.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
|
|
|
-
|
|
|
- List<String> diffRent1 = DiffListUtil.getDiffRent(collect1, collect2);
|
|
|
-
|
|
|
- //修改公有wbs节点信息、元素表基础信息到项目级wbs、合同段wbs
|
|
|
- this.updateWbsInfoPrivateAsync(wbsTreeListAll, wbsTreePrivatesAll, pawDTO.getProjectId());
|
|
|
-
|
|
|
- if (diffRent1.size() == 0) {
|
|
|
- return true;
|
|
|
-
|
|
|
- } else {
|
|
|
- if (collect1.size() > collect2.size()) {
|
|
|
- //获取当前项目下所有施工合同段id
|
|
|
- List<ContractInfo> contractInfoIds = contractInfoMapper.selectContractIdByProjectId(pawDTO.getProjectId());
|
|
|
- //公有同步元素表
|
|
|
- diffRent1.forEach(tableId -> {
|
|
|
- WbsTree wbsTree = wbsTreeMapper.selectById(tableId);
|
|
|
- //判断当前新增的表在私有wbs中是否存在上级节点,存在表示可以新增,不存在表示不新增
|
|
|
- WbsTreePrivate wbsTreePrivate1 = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .eq(WbsTreePrivate::getId, wbsTree.getParentId())
|
|
|
- .eq(WbsTreePrivate::getWbsId, wbsTree.getWbsId())
|
|
|
- .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
- .eq(WbsTreePrivate::getStatus, 1)
|
|
|
- );
|
|
|
-
|
|
|
- if (wbsTreePrivate1 != null) {
|
|
|
- //同步元素表
|
|
|
- Long snowId1 = SnowFlakeUtil.getId();
|
|
|
- wbsTreePrivateMapper.insertCombination1(snowId1, wbsTree, pawDTO.getWbsType(), pawDTO.getProjectId());
|
|
|
-
|
|
|
- //2.同步到该项目下所有合同段wbs树
|
|
|
- //找到当前新增成功的元素表
|
|
|
- WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getPKeyId, snowId1));
|
|
|
-
|
|
|
- for (ContractInfo contractInfoId : contractInfoIds) {
|
|
|
- WbsTreeContract wbsTreeContract = BeanUtil.copyProperties(wbsTreePrivate, WbsTreeContract.class);
|
|
|
- if (wbsTreeContract != null) {
|
|
|
- wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- wbsTreeContract.setWbsId(pawDTO.getWbsId());
|
|
|
- wbsTreeContract.setProjectId(pawDTO.getProjectId());
|
|
|
- wbsTreeContract.setContractType(pawDTO.getContractType());
|
|
|
- wbsTreeContract.setContractId(String.valueOf(contractInfoId.getId()));
|
|
|
- wbsTreeContract.setIsBussShow(1);
|
|
|
- if (wbsTreePrivate.getType() == 2) {
|
|
|
- wbsTreeContract.setIsTypePrivatePid(wbsTreePrivate.getPKeyId());
|
|
|
- }
|
|
|
+ if (diffRent1.size() == 0) {
|
|
|
+ return true;
|
|
|
|
|
|
- //判断元素表是否存在上级节点,存在则新增;不存在则表示没被引用,不新增
|
|
|
- WbsTreeContract wbsTreeContract1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
|
|
|
- .eq(WbsTreeContract::getProjectId, wbsTreeContract.getProjectId())
|
|
|
- .eq(WbsTreeContract::getContractId, contractInfoId.getId())
|
|
|
- .eq(WbsTreeContract::getType, 1)
|
|
|
- .eq(WbsTreeContract::getId, wbsTreePrivate.getParentId())
|
|
|
- );
|
|
|
- if (wbsTreeContract1 != null) {
|
|
|
- wbsTreeContractMapper.insert(wbsTreeContract);
|
|
|
-
|
|
|
- //新增同步到对应的复制或新增的父级节点下
|
|
|
- //获取当前新增表单的上级父节点
|
|
|
- WbsTreeContract wbsTreeContracts1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
|
|
|
- .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
|
|
|
+ } else {
|
|
|
+ if (collect1.size() > collect2.size()) {
|
|
|
+ //获取当前项目下所有施工合同段id
|
|
|
+ List<ContractInfo> contractInfoIds = contractInfoMapper.selectContractIdByProjectId(pawDTO.getProjectId());
|
|
|
+ //公有同步元素表
|
|
|
+ for (String tableId : diffRent1) {
|
|
|
+ WbsTree wbsTree = wbsTreeMapper.selectById(tableId);
|
|
|
+ if (wbsTree == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //判断当前新增的表在私有wbs中是否存在上级节点,存在表示可以新增,不存在表示不新增
|
|
|
+ WbsTreePrivate wbsTreePrivate1 = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+ .eq(WbsTreePrivate::getId, wbsTree.getParentId())
|
|
|
+ .eq(WbsTreePrivate::getWbsId, wbsTree.getWbsId())
|
|
|
+ .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getStatus, 1)
|
|
|
+ );
|
|
|
+
|
|
|
+ if (wbsTreePrivate1 != null) {
|
|
|
+ //同步元素表
|
|
|
+ Long snowId1 = SnowFlakeUtil.getId();
|
|
|
+ WbsTreePrivate wbsTreePrivate2 = BeanUtil.copyProperties(wbsTree, WbsTreePrivate.class);
|
|
|
+ assert wbsTreePrivate2 != null;
|
|
|
+ wbsTreePrivate2.setPKeyId(snowId1);
|
|
|
+ wbsTreePrivate2.setWbsType(String.valueOf(pawDTO.getWbsType()));
|
|
|
+ wbsTreePrivate2.setProjectId(pawDTO.getProjectId());
|
|
|
+ insertDataPrivate1.add(wbsTreePrivate2);
|
|
|
+ //wbsTreePrivateMapper.insert(wbsTreePrivate2);
|
|
|
+ //wbsTreePrivateMapper.insertCombination1(snowId1, wbsTree, pawDTO.getWbsType(), pawDTO.getProjectId());
|
|
|
+
|
|
|
+ /*//2.同步到该项目下所有合同段wbs树
|
|
|
+ //找到当前新增成功的元素表
|
|
|
+ //WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getPKeyId, snowId1));
|
|
|
+ WbsTreePrivate wbsTreePrivate = insertDataPrivate1.stream().filter(f -> f.getPKeyId().equals(snowId1)).findAny().orElse(null);
|
|
|
+
|
|
|
+ for (ContractInfo contractInfoId : contractInfoIds) {
|
|
|
+ WbsTreeContract wbsTreeContract = BeanUtil.copyProperties(wbsTreePrivate, WbsTreeContract.class);
|
|
|
+ if (wbsTreeContract != null) {
|
|
|
+ wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+ wbsTreeContract.setWbsId(pawDTO.getWbsId());
|
|
|
+ wbsTreeContract.setProjectId(pawDTO.getProjectId());
|
|
|
+ wbsTreeContract.setContractType(pawDTO.getContractType());
|
|
|
+ wbsTreeContract.setContractId(String.valueOf(contractInfoId.getId()));
|
|
|
+ wbsTreeContract.setIsBussShow(1);
|
|
|
+ if (wbsTreePrivate.getType() == 2) {
|
|
|
+ wbsTreeContract.setIsTypePrivatePid(wbsTreePrivate.getPKeyId());
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断元素表是否存在上级节点,存在则新增;不存在则表示没被引用,不新增
|
|
|
+ WbsTreeContract wbsTreeContract1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
|
|
|
+ .eq(WbsTreeContract::getProjectId, wbsTreeContract.getProjectId())
|
|
|
.eq(WbsTreeContract::getContractId, contractInfoId.getId())
|
|
|
- .eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
|
|
|
- .eq(WbsTreeContract::getWbsId, pawDTO.getWbsId())
|
|
|
.eq(WbsTreeContract::getType, 1)
|
|
|
+ .eq(WbsTreeContract::getId, wbsTreePrivate.getParentId())
|
|
|
);
|
|
|
- if (wbsTreeContracts1 != null) {
|
|
|
- //获取上级父级节点同级别的复制或新增节点
|
|
|
- List<WbsTreeContract> wbsTreeContracts2 = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
|
|
|
- .eq(WbsTreeContract::getOldId, wbsTreeContracts1.getId())
|
|
|
+ if (wbsTreeContract1 != null) {
|
|
|
+ insertDataContract1.add(wbsTreeContract);
|
|
|
+ //wbsTreeContractMapper.insert(wbsTreeContract);
|
|
|
+
|
|
|
+ //新增同步到对应的复制或新增的父级节点下
|
|
|
+ //获取当前新增表单的上级父节点
|
|
|
+ WbsTreeContract wbsTreeContracts1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
|
|
|
+ .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
|
|
|
.eq(WbsTreeContract::getContractId, contractInfoId.getId())
|
|
|
.eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
|
|
|
.eq(WbsTreeContract::getWbsId, pawDTO.getWbsId())
|
|
|
.eq(WbsTreeContract::getType, 1)
|
|
|
);
|
|
|
- if (wbsTreeContracts2.size() > 0) {
|
|
|
- //将表单同步到复制或新增的节点下
|
|
|
- for (WbsTreeContract treeContract : wbsTreeContracts2) {
|
|
|
- wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- wbsTreeContract.setParentId(treeContract.getId());
|
|
|
- wbsTreeContractMapper.insert(wbsTreeContract);
|
|
|
+ if (wbsTreeContracts1 != null) {
|
|
|
+ //获取上级父级节点同级别的复制或新增节点
|
|
|
+ List<WbsTreeContract> wbsTreeContracts2 = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
|
|
|
+ .eq(WbsTreeContract::getOldId, wbsTreeContracts1.getId())
|
|
|
+ .eq(WbsTreeContract::getContractId, contractInfoId.getId())
|
|
|
+ .eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
|
|
|
+ .eq(WbsTreeContract::getWbsId, pawDTO.getWbsId())
|
|
|
+ .eq(WbsTreeContract::getType, 1)
|
|
|
+ );
|
|
|
+ if (wbsTreeContracts2.size() > 0) {
|
|
|
+ //将表单同步到复制或新增的节点下
|
|
|
+ for (WbsTreeContract treeContract : wbsTreeContracts2) {
|
|
|
+ wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+ wbsTreeContract.setParentId(treeContract.getId());
|
|
|
+ //wbsTreeContractMapper.insert(wbsTreeContract);
|
|
|
+ insertDataContract2.add(wbsTreeContract);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ */
|
|
|
}
|
|
|
}
|
|
|
- });
|
|
|
- return true;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- } else if (pawDTO.getReferenceType().equals("private")) {
|
|
|
- //私有同步新增元素表
|
|
|
- //获取私有引用项目的wbs树的所有节点、元素表
|
|
|
- WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .eq(WbsTreePrivate::getPKeyId, pawDTO.getPrimaryKeyId()));
|
|
|
- List<WbsTreePrivate> wbsTreePrivateAllOld = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
|
|
|
- .eq(WbsTreePrivate::getStatus, 1)
|
|
|
- );
|
|
|
-
|
|
|
- //私有引用项目的表单id
|
|
|
- List<WbsTreePrivate> WbsTreePrivateTables = wbsTreePrivateAllOld.stream().filter(f -> f.getType() == 2).collect(Collectors.toList());
|
|
|
- List<String> collect1 = WbsTreePrivateTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
|
|
|
|
|
|
- //获取当前项目私有wbs树下当前所有节点、元素表
|
|
|
- List<WbsTreePrivate> wbsTreePrivatesAllNow = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId())
|
|
|
- .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
- );
|
|
|
+ } else if (pawDTO.getReferenceType().equals("private")) {
|
|
|
+ //私有同步新增元素表
|
|
|
+ //获取私有引用项目的wbs树的所有节点、元素表
|
|
|
+ WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+ .eq(WbsTreePrivate::getPKeyId, pawDTO.getPrimaryKeyId()));
|
|
|
+ List<WbsTreePrivate> wbsTreePrivateAllOld = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+ .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
+ .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getStatus, 1)
|
|
|
+ );
|
|
|
|
|
|
- //当前存在的表单的id
|
|
|
- List<WbsTreePrivate> wbsTreePrivateNowTables = wbsTreePrivatesAllNow.stream().filter(f -> f.getType() == 2).collect(Collectors.toList());
|
|
|
- List<String> collect2 = wbsTreePrivateNowTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
|
|
|
+ //私有引用项目的表单id
|
|
|
+ List<WbsTreePrivate> WbsTreePrivateTables = wbsTreePrivateAllOld.stream().filter(f -> f.getType() == 2).collect(Collectors.toList());
|
|
|
+ List<String> collect1 = WbsTreePrivateTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
|
|
|
|
|
|
- List<String> diffRent1 = DiffListUtil.getDiffRent(collect1, collect2);
|
|
|
+ //获取当前项目私有wbs树下当前所有节点、元素表
|
|
|
+ List<WbsTreePrivate> wbsTreePrivatesAllNow = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+ .eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId())
|
|
|
+ .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
+ );
|
|
|
|
|
|
- //同步私有wbs节点信息、元素表基础信息到项目级wbs、合同段wbs
|
|
|
- this.updateWbsInfoContractAsync(wbsTreePrivateAllOld, wbsTreePrivatesAllNow, pawDTO.getProjectId(), pawDTO.getPrimaryKeyId());
|
|
|
+ //当前存在的表单的id
|
|
|
+ List<WbsTreePrivate> wbsTreePrivateNowTables = wbsTreePrivatesAllNow.stream().filter(f -> f.getType() == 2).collect(Collectors.toList());
|
|
|
+ List<String> collect2 = wbsTreePrivateNowTables.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
|
|
|
|
|
|
- //同步私有-电签匹配数据、默认信息数据
|
|
|
- this.insertTextDictInfoAsync(WbsTreePrivateTables, wbsTreePrivateNowTables);
|
|
|
+ List<String> diffRent1 = DiffListUtil.getDiffRent(collect1, collect2);
|
|
|
|
|
|
- if (diffRent1.size() == 0) {
|
|
|
- return true;
|
|
|
+ //同步私有wbs节点信息、元素表基础信息到项目级wbs、合同段wbs
|
|
|
+ this.updateWbsInfoContractAsync(wbsTreePrivateAllOld, wbsTreePrivatesAllNow, pawDTO.getProjectId(), pawDTO.getPrimaryKeyId());
|
|
|
|
|
|
- } else {
|
|
|
- if (collect1.size() > collect2.size()) {
|
|
|
- //获取当前项目下所有施工合同段id
|
|
|
- List<ContractInfo> contractInfoIds = contractInfoMapper.selectContractIdByProjectId(pawDTO.getProjectId());
|
|
|
- //私有同步元素表
|
|
|
- List<WbsTreePrivate> lists = new ArrayList<>();
|
|
|
+ //同步私有-电签匹配数据、默认信息数据
|
|
|
+ this.insertTextDictInfoAsync(WbsTreePrivateTables, wbsTreePrivateNowTables);
|
|
|
|
|
|
- diffRent1.forEach(tableId -> {
|
|
|
- List<WbsTreePrivate> wbsTreePrivates3 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .eq(WbsTreePrivate::getId, tableId)
|
|
|
- .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
|
|
|
- .eq(WbsTreePrivate::getType, 2)
|
|
|
- );
|
|
|
- lists.addAll(wbsTreePrivates3);
|
|
|
- });
|
|
|
+ if (diffRent1.size() == 0) {
|
|
|
+ return true;
|
|
|
|
|
|
- lists.forEach(list -> {
|
|
|
- //判断当前新增的表在私有wbs中是否存在上级节点,存在表示可以新增,不存在表示不新增
|
|
|
- WbsTreePrivate wbsTreePrivate1 = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
- .eq(WbsTreePrivate::getId, list.getParentId())
|
|
|
- .eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId())
|
|
|
- .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
- .eq(WbsTreePrivate::getStatus, 1)
|
|
|
- );
|
|
|
-
|
|
|
- if (wbsTreePrivate1 != null) {
|
|
|
- //初始化元素表信息
|
|
|
- list.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- list.setWbsId(pawDTO.getPrimaryKeyId());
|
|
|
- list.setProjectId(pawDTO.getProjectId());
|
|
|
- //同步新增元素表
|
|
|
- wbsTreePrivateService.save(list);
|
|
|
-
|
|
|
- //同步到该项目下的所有合同段
|
|
|
- for (ContractInfo contractInfoId : contractInfoIds) {
|
|
|
- WbsTreeContract wbsTreeContract = BeanUtil.copyProperties(list, WbsTreeContract.class);
|
|
|
- if (wbsTreeContract != null) {
|
|
|
- wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- wbsTreeContract.setWbsId(pawDTO.getPrimaryKeyId());
|
|
|
- wbsTreeContract.setProjectId(pawDTO.getProjectId());
|
|
|
- wbsTreeContract.setContractType(pawDTO.getContractType());
|
|
|
- wbsTreeContract.setContractId(String.valueOf(contractInfoId.getId()));
|
|
|
- wbsTreeContract.setIsBussShow(1);
|
|
|
- if (list.getType() == 2) {
|
|
|
- wbsTreeContract.setIsTypePrivatePid(list.getPKeyId());
|
|
|
- }
|
|
|
+ } else {
|
|
|
+ if (collect1.size() > collect2.size()) {
|
|
|
+ //获取当前项目下所有施工合同段id
|
|
|
+ List<ContractInfo> contractInfoIds = contractInfoMapper.selectContractIdByProjectId(pawDTO.getProjectId());
|
|
|
+ //私有同步元素表
|
|
|
+ List<WbsTreePrivate> lists = new ArrayList<>();
|
|
|
+
|
|
|
+ diffRent1.forEach(tableId -> {
|
|
|
+ List<WbsTreePrivate> wbsTreePrivates3 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+ .eq(WbsTreePrivate::getId, tableId)
|
|
|
+ .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
+ .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getType, 2)
|
|
|
+ );
|
|
|
+ lists.addAll(wbsTreePrivates3);
|
|
|
+ });
|
|
|
+
|
|
|
+ for (WbsTreePrivate list : lists) {
|
|
|
+ //判断当前新增的表在私有wbs中是否存在上级节点,存在表示可以新增,不存在表示不新增
|
|
|
+ WbsTreePrivate wbsTreePrivate1 = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+ .eq(WbsTreePrivate::getId, list.getParentId())
|
|
|
+ .eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId())
|
|
|
+ .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
|
|
|
+ .eq(WbsTreePrivate::getStatus, 1)
|
|
|
+ );
|
|
|
+
|
|
|
+ if (wbsTreePrivate1 != null) {
|
|
|
+ //初始化元素表信息
|
|
|
+ list.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+ list.setWbsId(pawDTO.getPrimaryKeyId());
|
|
|
+ list.setProjectId(pawDTO.getProjectId());
|
|
|
+ //同步新增元素表
|
|
|
+ //wbsTreePrivateService.save(list);
|
|
|
+ insertDataPrivate1.add(list);
|
|
|
+
|
|
|
+ //同步到该项目下的所有合同段
|
|
|
+ for (ContractInfo contractInfoId : contractInfoIds) {
|
|
|
+ WbsTreeContract wbsTreeContract = BeanUtil.copyProperties(list, WbsTreeContract.class);
|
|
|
+ if (wbsTreeContract != null) {
|
|
|
+ wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+ wbsTreeContract.setWbsId(pawDTO.getPrimaryKeyId());
|
|
|
+ wbsTreeContract.setProjectId(pawDTO.getProjectId());
|
|
|
+ wbsTreeContract.setContractType(pawDTO.getContractType());
|
|
|
+ wbsTreeContract.setContractId(String.valueOf(contractInfoId.getId()));
|
|
|
+ wbsTreeContract.setIsBussShow(1);
|
|
|
+ if (list.getType() == 2) {
|
|
|
+ wbsTreeContract.setIsTypePrivatePid(list.getPKeyId());
|
|
|
+ }
|
|
|
|
|
|
- //判断元素表是否存在上级节点,存在则新增;不存在则表示没被引用,不新增
|
|
|
- WbsTreeContract wbsTreeContract1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
|
|
|
- .eq(WbsTreeContract::getProjectId, wbsTreeContract.getProjectId())
|
|
|
- .eq(WbsTreeContract::getContractId, wbsTreeContract.getContractId())
|
|
|
- .eq(WbsTreeContract::getWbsId, wbsTreeContract.getWbsId())
|
|
|
- .eq(WbsTreeContract::getType, 1)
|
|
|
- .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
|
|
|
- );
|
|
|
- if (wbsTreeContract1 != null) {
|
|
|
- wbsTreeContractMapper.insert(wbsTreeContract);
|
|
|
-
|
|
|
- //新增同步到对应的复制或新增的父级节点下
|
|
|
- //获取当前新增表单的上级父节点
|
|
|
- WbsTreeContract wbsTreeContracts1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
|
|
|
- .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
|
|
|
- .eq(WbsTreeContract::getContractId, contractInfoId.getId())
|
|
|
- .eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
|
|
|
- .eq(WbsTreeContract::getWbsId, pawDTO.getPrimaryKeyId())
|
|
|
+ //判断元素表是否存在上级节点,存在则新增;不存在则表示没被引用,不新增
|
|
|
+ WbsTreeContract wbsTreeContract1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
|
|
|
+ .eq(WbsTreeContract::getProjectId, wbsTreeContract.getProjectId())
|
|
|
+ .eq(WbsTreeContract::getContractId, wbsTreeContract.getContractId())
|
|
|
+ .eq(WbsTreeContract::getWbsId, wbsTreeContract.getWbsId())
|
|
|
.eq(WbsTreeContract::getType, 1)
|
|
|
+ .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
|
|
|
);
|
|
|
- if (wbsTreeContracts1 != null) {
|
|
|
- //获取上级父级节点同级别的复制或新增节点
|
|
|
- List<WbsTreeContract> wbsTreeContracts2 = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
|
|
|
- .eq(WbsTreeContract::getOldId, wbsTreeContracts1.getId())
|
|
|
+ if (wbsTreeContract1 != null) {
|
|
|
+ //wbsTreeContractMapper.insert(wbsTreeContract);
|
|
|
+ insertDataContract1.add(wbsTreeContract);
|
|
|
+
|
|
|
+ //新增同步到对应的复制或新增的父级节点下
|
|
|
+ //获取当前新增表单的上级父节点
|
|
|
+ WbsTreeContract wbsTreeContracts1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
|
|
|
+ .eq(WbsTreeContract::getId, wbsTreeContract.getParentId())
|
|
|
.eq(WbsTreeContract::getContractId, contractInfoId.getId())
|
|
|
.eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
|
|
|
.eq(WbsTreeContract::getWbsId, pawDTO.getPrimaryKeyId())
|
|
|
.eq(WbsTreeContract::getType, 1)
|
|
|
);
|
|
|
- if (wbsTreeContracts2.size() > 0) {
|
|
|
- //将表单同步到复制或新增的节点下
|
|
|
- for (WbsTreeContract treeContract : wbsTreeContracts2) {
|
|
|
- wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- wbsTreeContract.setParentId(treeContract.getId());
|
|
|
- wbsTreeContractMapper.insert(wbsTreeContract);
|
|
|
+ if (wbsTreeContracts1 != null) {
|
|
|
+ //获取上级父级节点同级别的复制或新增节点
|
|
|
+ List<WbsTreeContract> wbsTreeContracts2 = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
|
|
|
+ .eq(WbsTreeContract::getOldId, wbsTreeContracts1.getId())
|
|
|
+ .eq(WbsTreeContract::getContractId, contractInfoId.getId())
|
|
|
+ .eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
|
|
|
+ .eq(WbsTreeContract::getWbsId, pawDTO.getPrimaryKeyId())
|
|
|
+ .eq(WbsTreeContract::getType, 1)
|
|
|
+ );
|
|
|
+ if (wbsTreeContracts2.size() > 0) {
|
|
|
+ //将表单同步到复制或新增的节点下
|
|
|
+ for (WbsTreeContract treeContract : wbsTreeContracts2) {
|
|
|
+ wbsTreeContract.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+ wbsTreeContract.setParentId(treeContract.getId());
|
|
|
+ //wbsTreeContractMapper.insert(wbsTreeContract);
|
|
|
+ insertDataContract2.add(wbsTreeContract);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -882,193 +910,204 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- });
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- } else {
|
|
|
- //节点id改变,进行新增或删除节点以及该节点下的元素表
|
|
|
- //1.删除
|
|
|
- if (delIds.size() > 0) {
|
|
|
- if (pawDTO.getReferenceType().equals("public")) {
|
|
|
- List<Long> ids1 = delIds.stream().map(Long::parseLong).collect(Collectors.toList());
|
|
|
- //判断是否被合同段引用
|
|
|
- List<WbsTreeContract> wbsTreeContractList = wbsTreeContractMapper.selectContractList(pawDTO.getWbsId(), pawDTO.getProjectId(), ids1);
|
|
|
-
|
|
|
- if (wbsTreeContractList.size() > 0) {
|
|
|
- List<ContractInfo> contractInfoArrayList = new ArrayList<>();
|
|
|
- wbsTreeContractList.forEach(list -> {
|
|
|
- ContractInfo contractInfos = contractInfoMapper.selectOne(Wrappers.<ContractInfo>query().lambda()
|
|
|
- .eq(ContractInfo::getId, list.getContractId())
|
|
|
- );
|
|
|
- contractInfoArrayList.add(contractInfos);
|
|
|
- });
|
|
|
- List<String> names = contractInfoArrayList.stream().distinct().map(ContractInfo::getContractName).collect(Collectors.toList());
|
|
|
+ //同步新增
|
|
|
+ if (insertDataPrivate1.size() > 0) {
|
|
|
+ this.insertBatch(insertDataPrivate1, 1000);
|
|
|
+ } else if (insertDataContract1.size() > 0) {
|
|
|
+ wbsTreeContractService.insertBatch(insertDataContract1, 1000);
|
|
|
+ } else if (insertDataContract2.size() > 0) {
|
|
|
+ wbsTreeContractService.insertBatch(insertDataContract2, 1000);
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ /*-----------------2.删除-----------------*/
|
|
|
+ if (delIds.size() > 0) {
|
|
|
+ if (pawDTO.getReferenceType().equals("public")) {
|
|
|
+ List<Long> ids1 = delIds.stream().map(Long::parseLong).collect(Collectors.toList());
|
|
|
+ //判断是否被合同段引用
|
|
|
+ List<WbsTreeContract> wbsTreeContractList = wbsTreeContractMapper.selectContractList(pawDTO.getWbsId(), pawDTO.getProjectId(), ids1);
|
|
|
+
|
|
|
if (wbsTreeContractList.size() > 0) {
|
|
|
- String join = StringUtils.join(names, ",");
|
|
|
- throw new ServiceException(StringUtil.format("当前项目wbs树的节点已被 {} 引用中,删除失败", join));
|
|
|
+ List<ContractInfo> contractInfoArrayList = new ArrayList<>();
|
|
|
+ wbsTreeContractList.forEach(list -> {
|
|
|
+ ContractInfo contractInfos = contractInfoMapper.selectOne(Wrappers.<ContractInfo>query().lambda()
|
|
|
+ .eq(ContractInfo::getId, list.getContractId())
|
|
|
+ );
|
|
|
+ contractInfoArrayList.add(contractInfos);
|
|
|
+ });
|
|
|
+ List<String> names = contractInfoArrayList.stream().distinct().map(ContractInfo::getContractName).collect(Collectors.toList());
|
|
|
+ if (wbsTreeContractList.size() > 0) {
|
|
|
+ String join = StringUtils.join(names, ",");
|
|
|
+ throw new ServiceException(StringUtil.format("当前项目wbs树的节点已被 {} 引用中,删除失败", join));
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- baseMapper.deleteBatch(ids1, pawDTO.getWbsId(), pawDTO.getProjectId());
|
|
|
- baseMapper.deleteBatch2(ids1, pawDTO.getWbsId(), pawDTO.getProjectId());
|
|
|
+ baseMapper.deleteBatch(ids1, pawDTO.getWbsId(), pawDTO.getProjectId());
|
|
|
+ baseMapper.deleteBatch2(ids1, pawDTO.getWbsId(), pawDTO.getProjectId());
|
|
|
+
|
|
|
+ } else if (pawDTO.getReferenceType().equals("private")) {
|
|
|
+ List<Long> ids2 = delIds.stream().map(Long::parseLong).collect(Collectors.toList());
|
|
|
+ //判断是否被合同段引用
|
|
|
+ List<WbsTreeContract> wbsTreeContractList = wbsTreeContractMapper.selectContractList(pawDTO.getPrimaryKeyId(), pawDTO.getProjectId(), ids2);
|
|
|
|
|
|
- } else if (pawDTO.getReferenceType().equals("private")) {
|
|
|
- List<Long> ids2 = delIds.stream().map(Long::parseLong).collect(Collectors.toList());
|
|
|
- //判断是否被合同段引用
|
|
|
- List<WbsTreeContract> wbsTreeContractList = wbsTreeContractMapper.selectContractList(pawDTO.getPrimaryKeyId(), pawDTO.getProjectId(), ids2);
|
|
|
-
|
|
|
- if (wbsTreeContractList.size() > 0) {
|
|
|
- List<ContractInfo> contractInfoArrayList = new ArrayList<>();
|
|
|
- wbsTreeContractList.forEach(list -> {
|
|
|
- ContractInfo contractInfos = contractInfoMapper.selectOne(Wrappers.<ContractInfo>query().lambda()
|
|
|
- .eq(ContractInfo::getId, list.getContractId())
|
|
|
- );
|
|
|
- contractInfoArrayList.add(contractInfos);
|
|
|
- });
|
|
|
- List<String> names = contractInfoArrayList.stream().distinct().map(ContractInfo::getContractName).collect(Collectors.toList());
|
|
|
if (wbsTreeContractList.size() > 0) {
|
|
|
- String join = StringUtils.join(names, ",");
|
|
|
- throw new ServiceException(StringUtil.format("当前项目wbs树的节点已被 {} 引用中,删除失败", join));
|
|
|
+ List<ContractInfo> contractInfoArrayList = new ArrayList<>();
|
|
|
+ wbsTreeContractList.forEach(list -> {
|
|
|
+ ContractInfo contractInfos = contractInfoMapper.selectOne(Wrappers.<ContractInfo>query().lambda()
|
|
|
+ .eq(ContractInfo::getId, list.getContractId())
|
|
|
+ );
|
|
|
+ contractInfoArrayList.add(contractInfos);
|
|
|
+ });
|
|
|
+ List<String> names = contractInfoArrayList.stream().distinct().map(ContractInfo::getContractName).collect(Collectors.toList());
|
|
|
+ if (wbsTreeContractList.size() > 0) {
|
|
|
+ String join = StringUtils.join(names, ",");
|
|
|
+ throw new ServiceException(StringUtil.format("当前项目wbs树的节点已被 {} 引用中,删除失败", join));
|
|
|
+ }
|
|
|
}
|
|
|
+ baseMapper.deleteBatch(ids2, pawDTO.getPrimaryKeyId(), pawDTO.getProjectId());
|
|
|
+ baseMapper.deleteBatch2(ids2, pawDTO.getPrimaryKeyId(), pawDTO.getProjectId());
|
|
|
}
|
|
|
- baseMapper.deleteBatch(ids2, pawDTO.getPrimaryKeyId(), pawDTO.getProjectId());
|
|
|
- baseMapper.deleteBatch2(ids2, pawDTO.getPrimaryKeyId(), pawDTO.getProjectId());
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- //2.新增
|
|
|
- if (saveIds.size() > 0) {
|
|
|
- if (saveIds.size() >= 1000) { //新增1000个以上节点时
|
|
|
- String redisValue = bladeRedis.get("submit-wbs-project:" + pawDTO.getProjectId());
|
|
|
- if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {
|
|
|
- throw new ServiceException("请勿重复提交,请60秒后再次尝试!");
|
|
|
+ /*-----------------3.新增-----------------*/
|
|
|
+ if (saveIds.size() > 0) {
|
|
|
+ if (saveIds.size() >= 1000) { //新增1000个以上节点时
|
|
|
+ String redisValue = bladeRedis.get("submit-wbs-project:" + pawDTO.getProjectId());
|
|
|
+ if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {
|
|
|
+ throw new ServiceException("请勿重复提交,请60秒后再次尝试!");
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- //公有-数据初始化节点
|
|
|
- List<WbsTreePrivate> insertData1 = new ArrayList<>();
|
|
|
- //私有-数据初始化节点
|
|
|
- List<WbsTreePrivate> insertData2 = new ArrayList<>();
|
|
|
- //私有-电签匹配数据、默认信息数据
|
|
|
- List<TextdictInfo> insertData3 = new ArrayList<>();
|
|
|
|
|
|
- if (pawDTO.getReferenceType().equals("public")) {
|
|
|
- //引用公有
|
|
|
- //查询所有公共节点、表 saveIds=新增的节点id
|
|
|
- List<WbsTree> addListData = new ArrayList<>();
|
|
|
- //查询出当前wbs树下所有节点、表信息
|
|
|
- List<WbsTree> treesAll = baseMapper.selectList(Wrappers.<WbsTree>query().lambda()
|
|
|
- .eq(WbsTree::getWbsId, pawDTO.getWbsId()));
|
|
|
-
|
|
|
- for (WbsTree wbsTree : treesAll) {
|
|
|
- for (String id : saveIds) {
|
|
|
- if (Long.parseLong(id) == (wbsTree.getId())) {
|
|
|
- //节点
|
|
|
- addListData.add(wbsTree);
|
|
|
- } else if (Long.parseLong(id) == (wbsTree.getParentId()) && wbsTree.getType() == 2) {
|
|
|
- //表
|
|
|
- addListData.add(wbsTree);
|
|
|
+ //公有-数据初始化节点
|
|
|
+ List<WbsTreePrivate> insertData1 = new ArrayList<>();
|
|
|
+ //私有-数据初始化节点
|
|
|
+ List<WbsTreePrivate> insertData2 = new ArrayList<>();
|
|
|
+ //私有-电签匹配数据、默认信息数据
|
|
|
+ List<TextdictInfo> insertData3 = new ArrayList<>();
|
|
|
+
|
|
|
+ if (pawDTO.getReferenceType().equals("public")) {
|
|
|
+ //引用公有
|
|
|
+ //查询所有公共节点、表 saveIds=新增的节点id
|
|
|
+ List<WbsTree> addListData = new ArrayList<>();
|
|
|
+ //查询出当前wbs树下所有节点、表信息
|
|
|
+ List<WbsTree> treesAll = baseMapper.selectList(Wrappers.<WbsTree>query().lambda()
|
|
|
+ .eq(WbsTree::getWbsId, pawDTO.getWbsId()));
|
|
|
+
|
|
|
+ for (WbsTree wbsTree : treesAll) {
|
|
|
+ for (String id : saveIds) {
|
|
|
+ if (Long.parseLong(id) == (wbsTree.getId())) {
|
|
|
+ //节点
|
|
|
+ addListData.add(wbsTree);
|
|
|
+ } else if (Long.parseLong(id) == (wbsTree.getParentId()) && wbsTree.getType() == 2) {
|
|
|
+ //表
|
|
|
+ addListData.add(wbsTree);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- addListData.forEach(tree -> {
|
|
|
- WbsTreePrivate wbsTreePrivate = BeanUtil.copyProperties(tree, WbsTreePrivate.class);
|
|
|
- if (wbsTreePrivate != null) {
|
|
|
- wbsTreePrivate.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- wbsTreePrivate.setWbsType(String.valueOf(pawDTO.getWbsType()));
|
|
|
- wbsTreePrivate.setProjectId(pawDTO.getProjectId());
|
|
|
- wbsTreePrivate.setFullName(wbsTreePrivate.getNodeName());
|
|
|
- }
|
|
|
- insertData1.add(wbsTreePrivate);
|
|
|
- });
|
|
|
+ addListData.forEach(tree -> {
|
|
|
+ WbsTreePrivate wbsTreePrivate = BeanUtil.copyProperties(tree, WbsTreePrivate.class);
|
|
|
+ if (wbsTreePrivate != null) {
|
|
|
+ wbsTreePrivate.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+ wbsTreePrivate.setWbsType(String.valueOf(pawDTO.getWbsType()));
|
|
|
+ wbsTreePrivate.setProjectId(pawDTO.getProjectId());
|
|
|
+ wbsTreePrivate.setFullName(wbsTreePrivate.getNodeName());
|
|
|
+ }
|
|
|
+ insertData1.add(wbsTreePrivate);
|
|
|
+ });
|
|
|
|
|
|
- } else if (pawDTO.getReferenceType().equals("private")) {
|
|
|
- //引用私有
|
|
|
- //查询所有私有节点、表 saveIds=新增的节点id
|
|
|
- List<WbsTreePrivate> addListData = new ArrayList<>();
|
|
|
-
|
|
|
- //私有引用-电签匹配数据、默认信息数据
|
|
|
- Map<Long, List<TextdictInfo>> textDictInfoData = new HashMap<>();
|
|
|
-
|
|
|
- //查询出当前wbs树下所有节点、表信息
|
|
|
- List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectNodeAndTable(null, pawDTO.getWbsId(), pawDTO.getReferencePrivateWbsProjectId());
|
|
|
-
|
|
|
- for (WbsTreePrivate wbsTreePrivate : wbsTreePrivates) {
|
|
|
- for (String id : saveIds) {
|
|
|
- if (Long.parseLong(id) == (wbsTreePrivate.getId())) {
|
|
|
- //节点
|
|
|
- addListData.add(wbsTreePrivate);
|
|
|
- } else if (Long.parseLong(id) == (wbsTreePrivate.getParentId()) && wbsTreePrivate.getType() == 2) {
|
|
|
- //表
|
|
|
- addListData.add(wbsTreePrivate);
|
|
|
-
|
|
|
- //根据元素表pKeyId,获取电签位置匹配信息、编辑默认信息
|
|
|
- List<TextdictInfo> textDictInfos = textdictInfoMapper.selectList(Wrappers.<TextdictInfo>query().lambda().eq(TextdictInfo::getTabId, wbsTreePrivate.getPKeyId()));
|
|
|
- if (textDictInfos.size() > 0) {
|
|
|
- textDictInfoData.put(wbsTreePrivate.getPKeyId(), textDictInfos);
|
|
|
+ } else if (pawDTO.getReferenceType().equals("private")) {
|
|
|
+ //引用私有
|
|
|
+ //查询所有私有节点、表 saveIds=新增的节点id
|
|
|
+ List<WbsTreePrivate> addListData = new ArrayList<>();
|
|
|
+
|
|
|
+ //私有引用-电签匹配数据、默认信息数据
|
|
|
+ Map<Long, List<TextdictInfo>> textDictInfoData = new HashMap<>();
|
|
|
+
|
|
|
+ //查询出当前wbs树下所有节点、表信息
|
|
|
+ List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectNodeAndTable(null, pawDTO.getWbsId(), pawDTO.getReferencePrivateWbsProjectId());
|
|
|
+
|
|
|
+ for (WbsTreePrivate wbsTreePrivate : wbsTreePrivates) {
|
|
|
+ for (String id : saveIds) {
|
|
|
+ if (Long.parseLong(id) == (wbsTreePrivate.getId())) {
|
|
|
+ //节点
|
|
|
+ addListData.add(wbsTreePrivate);
|
|
|
+ } else if (Long.parseLong(id) == (wbsTreePrivate.getParentId()) && wbsTreePrivate.getType() == 2) {
|
|
|
+ //表
|
|
|
+ addListData.add(wbsTreePrivate);
|
|
|
+
|
|
|
+ //根据元素表pKeyId,获取电签位置匹配信息、编辑默认信息
|
|
|
+ List<TextdictInfo> textDictInfos = textdictInfoMapper.selectList(Wrappers.<TextdictInfo>query().lambda().eq(TextdictInfo::getTabId, wbsTreePrivate.getPKeyId()));
|
|
|
+ if (textDictInfos.size() > 0) {
|
|
|
+ textDictInfoData.put(wbsTreePrivate.getPKeyId(), textDictInfos);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- addListData.forEach(tree -> {
|
|
|
- //构造参数
|
|
|
- WbsTreePrivate wbsTreePrivate = BeanUtil.copyProperties(tree, WbsTreePrivate.class);
|
|
|
- if (wbsTreePrivate != null) {
|
|
|
- wbsTreePrivate.setPKeyId(SnowFlakeUtil.getId());
|
|
|
- wbsTreePrivate.setWbsId(pawDTO.getPrimaryKeyId());
|
|
|
- wbsTreePrivate.setWbsType(String.valueOf(pawDTO.getWbsType()));
|
|
|
- wbsTreePrivate.setProjectId(pawDTO.getProjectId());
|
|
|
- wbsTreePrivate.setFullName(wbsTreePrivate.getNodeName());
|
|
|
-
|
|
|
- insertData2.add(wbsTreePrivate);
|
|
|
-
|
|
|
- //构造电签位置配置信息、编辑默认信息数据
|
|
|
- if (wbsTreePrivate.getType() == 2) {
|
|
|
- if (textDictInfoData.size() > 0) {
|
|
|
- textDictInfoData.forEach((k, v) -> {
|
|
|
- if (tree.getPKeyId().equals(k)) {
|
|
|
- for (TextdictInfo textdictInfo : v) {
|
|
|
- textdictInfo.setTabId(String.valueOf(wbsTreePrivate.getPKeyId()));
|
|
|
- textdictInfo.setId(SnowFlakeUtil.getId());
|
|
|
+ addListData.forEach(tree -> {
|
|
|
+ //构造参数
|
|
|
+ WbsTreePrivate wbsTreePrivate = BeanUtil.copyProperties(tree, WbsTreePrivate.class);
|
|
|
+ if (wbsTreePrivate != null) {
|
|
|
+ wbsTreePrivate.setPKeyId(SnowFlakeUtil.getId());
|
|
|
+ wbsTreePrivate.setWbsId(pawDTO.getPrimaryKeyId());
|
|
|
+ wbsTreePrivate.setWbsType(String.valueOf(pawDTO.getWbsType()));
|
|
|
+ wbsTreePrivate.setProjectId(pawDTO.getProjectId());
|
|
|
+ wbsTreePrivate.setFullName(wbsTreePrivate.getNodeName());
|
|
|
+
|
|
|
+ insertData2.add(wbsTreePrivate);
|
|
|
+
|
|
|
+ //构造电签位置配置信息、编辑默认信息数据
|
|
|
+ if (wbsTreePrivate.getType() == 2) {
|
|
|
+ if (textDictInfoData.size() > 0) {
|
|
|
+ textDictInfoData.forEach((k, v) -> {
|
|
|
+ if (tree.getPKeyId().equals(k)) {
|
|
|
+ for (TextdictInfo textdictInfo : v) {
|
|
|
+ textdictInfo.setTabId(String.valueOf(wbsTreePrivate.getPKeyId()));
|
|
|
+ textdictInfo.setId(SnowFlakeUtil.getId());
|
|
|
+ }
|
|
|
+ insertData3.addAll(v);
|
|
|
}
|
|
|
- insertData3.addAll(v);
|
|
|
- }
|
|
|
- });
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- //新增
|
|
|
- if (pawDTO.getReferenceType().equals("public")) {
|
|
|
- //批量插入
|
|
|
- insertBatch(insertData1, 1000);
|
|
|
+ //新增
|
|
|
+ if (pawDTO.getReferenceType().equals("public")) {
|
|
|
+ //批量插入
|
|
|
+ this.insertBatch(insertData1, 1000);
|
|
|
|
|
|
- projectInfoMapper.updateTemplateIdById(pawDTO.getProjectId(), pawDTO.getWbsId(), "public");
|
|
|
+ projectInfoMapper.updateTemplateIdById(pawDTO.getProjectId(), pawDTO.getWbsId(), "public");
|
|
|
|
|
|
- } else if (pawDTO.getReferenceType().equals("private")) {
|
|
|
- //批量插入
|
|
|
- insertBatch(insertData2, 1000);
|
|
|
+ } else if (pawDTO.getReferenceType().equals("private")) {
|
|
|
+ //批量插入
|
|
|
+ this.insertBatch(insertData2, 1000);
|
|
|
|
|
|
- //同步电签位置配置信息、编辑默认信息数据
|
|
|
- textDictInfoService.saveBatch(insertData3, 1000);
|
|
|
+ //同步电签位置配置信息、编辑默认信息数据
|
|
|
+ textDictInfoService.saveBatch(insertData3, 1000);
|
|
|
|
|
|
- projectInfoMapper.updateTemplateIdById(pawDTO.getProjectId(), pawDTO.getPrimaryKeyId(), "private");
|
|
|
- }
|
|
|
+ projectInfoMapper.updateTemplateIdById(pawDTO.getProjectId(), pawDTO.getPrimaryKeyId(), "private");
|
|
|
+ }
|
|
|
|
|
|
- if (saveIds.size() >= 1000) {
|
|
|
- bladeRedis.set("submit-wbs-project:" + pawDTO.getProjectId(), "1");
|
|
|
- bladeRedis.expire("submit-wbs-project:" + pawDTO.getProjectId(), 60);
|
|
|
+ if (saveIds.size() >= 1000) {
|
|
|
+ bladeRedis.set("submit-wbs-project:" + pawDTO.getProjectId(), "1");
|
|
|
+ bladeRedis.expire("submit-wbs-project:" + pawDTO.getProjectId(), 60);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ return true;
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
-
|
|
|
- return true;
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|