|
@@ -28,6 +28,7 @@ import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombi
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.springblade.common.utils.SnowFlakeUtil;
|
|
|
import org.springblade.core.log.exception.ServiceException;
|
|
|
+import org.springblade.core.mp.base.BaseEntity;
|
|
|
import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
import org.springblade.core.tool.constant.BladeConstant;
|
|
@@ -48,6 +49,7 @@ import org.springblade.manager.service.IWbsFormElementService;
|
|
|
import org.springblade.manager.service.IWbsTreeService;
|
|
|
import org.springblade.core.mp.base.BaseServiceImpl;
|
|
|
import org.springblade.manager.vo.*;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -479,7 +481,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
e.printStackTrace();
|
|
|
return false;
|
|
|
} finally {
|
|
|
- //资源删除
|
|
|
File file2 = new File(canonicalPath);
|
|
|
if (file2.isFile() && file2.exists()) {
|
|
|
file2.delete();
|
|
@@ -562,7 +563,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
wbsTreeZi.setIsExpernode(0);
|
|
|
}
|
|
|
baseMapper.insert(wbsTreeZi);
|
|
|
-
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -577,31 +577,44 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
private boolean importExcel2(ArrayList<Map<String, String>> result, WbsTree wbsTreeFu, WbsTree wbsTree1) {
|
|
|
//解析list-map
|
|
|
List<WbsTree> allNodeData = new ArrayList<>();
|
|
|
- result.stream().forEach(map -> {
|
|
|
- map.forEach((nodeType, nodeName) -> {
|
|
|
- if (StringUtils.isNotEmpty(nodeName)) {
|
|
|
+ for (Map<String, String> map : result) {
|
|
|
+ for (Map.Entry<String, String> maps : map.entrySet()) {
|
|
|
+ if (StringUtils.isNotEmpty(maps.getValue())) {
|
|
|
//初始化节点参数
|
|
|
WbsTree wbsTreeZi = new WbsTree();
|
|
|
wbsTreeZi.setId(SnowFlakeUtil.getId());
|
|
|
wbsTreeZi.setTenantId(AuthUtil.getTenantId());
|
|
|
- wbsTreeZi.setDeptName(nodeName);
|
|
|
- wbsTreeZi.setDeptCategory(Integer.valueOf(nodeType));
|
|
|
+ wbsTreeZi.setDeptName(maps.getValue());
|
|
|
+ wbsTreeZi.setDeptCategory(Integer.valueOf(maps.getKey()));
|
|
|
wbsTreeZi.setWbsId(wbsTreeFu.getWbsId());
|
|
|
- wbsTreeZi.setParentId(wbsTreeFu.getId());
|
|
|
+ wbsTreeZi.setParentId(wbsTreeFu.getParentId());
|
|
|
wbsTreeZi.setAncestors(wbsTreeFu.getAncestors());
|
|
|
wbsTreeZi.setProjectNodeId(wbsTree1.getProjectNodeId());
|
|
|
|
|
|
//构建参数
|
|
|
- WbsTree wbsTree = buildTreeNode(wbsTreeZi, allNodeData);
|
|
|
+ WbsTree wbsTree = buildTreeNode(wbsTreeZi, allNodeData, wbsTreeFu);
|
|
|
+
|
|
|
+ if (wbsTree.getStatus() != null && wbsTree.getStatus() == 1) {
|
|
|
+ //构建成功
|
|
|
+ System.out.println("构建成功: === " + wbsTree);
|
|
|
+
|
|
|
+ wbsTreeFu.setParentId(wbsTree.getId());
|
|
|
+ wbsTreeFu.setAncestors(wbsTree.getAncestors());
|
|
|
+
|
|
|
+ allNodeData.add(wbsTree);
|
|
|
+
|
|
|
|
|
|
- wbsTreeFu.setAncestors(wbsTree.getAncestors());
|
|
|
- wbsTreeFu.setId(wbsTree.getId());
|
|
|
+ } else {
|
|
|
+ //构建失败 相同节点参数跳过
|
|
|
+ System.out.println("构建失败: === 遇到相同的跳过了");
|
|
|
+ wbsTreeFu.setParentId(wbsTree.getId());
|
|
|
+ wbsTreeFu.setAncestors(wbsTree.getAncestors());
|
|
|
|
|
|
- allNodeData.add(wbsTree);
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
- });
|
|
|
- });
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
boolean b = this.saveBatch(allNodeData, 10000);
|
|
|
|
|
@@ -611,63 +624,72 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
|
|
|
}
|
|
|
|
|
|
- private WbsTree buildTreeNode(WbsTree wbsTreeZi, List<WbsTree> allNodeData) {
|
|
|
- //判断节点名称是否重复
|
|
|
+ private WbsTree buildTreeNode(WbsTree wbsTreeZi, List<WbsTree> allNodeData, WbsTree wbsTreeFu) {
|
|
|
List<WbsTree> wbsTrees = null;
|
|
|
+ //判断节点名称是否重复
|
|
|
if (allNodeData.size() > 0) {
|
|
|
-
|
|
|
wbsTrees = allNodeData.stream().filter(f -> f.getWbsId().equals(wbsTreeZi.getWbsId()))
|
|
|
.filter(f -> f.getDeptName().equals(wbsTreeZi.getDeptName()))
|
|
|
.filter(f -> f.getDeptCategory().equals(wbsTreeZi.getDeptCategory()))
|
|
|
.filter(f -> f.getProjectNodeId().equals(wbsTreeZi.getProjectNodeId()))
|
|
|
.filter(f -> !f.getAncestors().equals(wbsTreeZi.getAncestors())
|
|
|
-
|
|
|
).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
- wbsTreeZi.setStatus(1);
|
|
|
- wbsTreeZi.setType(1);
|
|
|
- wbsTreeZi.setMajorDataType(0);
|
|
|
- if (wbsTreeZi.getDeptCategory() == 6) {
|
|
|
- wbsTreeZi.setIsConcrete(0);
|
|
|
- wbsTreeZi.setIsExpernode(0);
|
|
|
- }
|
|
|
+ //不重复 直接新增
|
|
|
+ if (wbsTrees == null) {
|
|
|
+ System.out.println("方法执行到111111");
|
|
|
+
|
|
|
+ wbsTreeZi.setStatus(1);
|
|
|
+ wbsTreeZi.setType(1);
|
|
|
+ wbsTreeZi.setMajorDataType(0);
|
|
|
+ if (wbsTreeZi.getDeptCategory() == 6) {
|
|
|
+ wbsTreeZi.setIsConcrete(0);
|
|
|
+ wbsTreeZi.setIsExpernode(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ StringBuilder stringBuffer = new StringBuilder();
|
|
|
+ StringBuilder appendStr = stringBuffer.append(",").append(wbsTreeZi.getParentId());
|
|
|
+ wbsTreeZi.setAncestors(wbsTreeZi.getAncestors() + appendStr);
|
|
|
+ System.out.println("wbsTreeZi 1 : " + wbsTreeZi);
|
|
|
|
|
|
- StringBuilder stringBuffer = new StringBuilder();
|
|
|
- StringBuilder appendStr = stringBuffer.append(",").append(wbsTreeZi.getParentId());
|
|
|
- String ancestors = wbsTreeZi.getAncestors() + appendStr;
|
|
|
- wbsTreeZi.setAncestors(ancestors);
|
|
|
+ return wbsTreeZi;
|
|
|
|
|
|
- if (wbsTrees != null) { //重复-判断是否同级是否一样的,同级跳过,不同级新增
|
|
|
+ } else {
|
|
|
|
|
|
+ //重复 判断是否为同一父节点,相同父节点跳过,不同新增
|
|
|
for (WbsTree tree : wbsTrees) {
|
|
|
//只判断2 3 4 5 6级节点类型的名称是否重复,可根据实际情况更改控制的层级
|
|
|
- if (wbsTreeZi.getDeptCategory() == 2 || wbsTreeZi.getDeptCategory() == 3 || wbsTreeZi.getDeptCategory() == 4
|
|
|
- || wbsTreeZi.getDeptCategory() == 5 || wbsTreeZi.getDeptCategory() == 6) {
|
|
|
- if (!wbsTreeZi.getParentId().equals(tree.getParentId()) && wbsTreeZi.getDeptName().equals(tree.getDeptName())) {
|
|
|
- wbsTreeZi.setStatus(1);
|
|
|
- wbsTreeZi.setType(1);
|
|
|
- wbsTreeZi.setMajorDataType(0);
|
|
|
- if (wbsTreeZi.getDeptCategory() == 6) {
|
|
|
- wbsTreeZi.setIsConcrete(0);
|
|
|
- wbsTreeZi.setIsExpernode(0);
|
|
|
- }
|
|
|
+ /*if (wbsTreeZi.getDeptCategory() == 2 || wbsTreeZi.getDeptCategory() == 3 || wbsTreeZi.getDeptCategory() == 4
|
|
|
+ || wbsTreeZi.getDeptCategory() == 5 || wbsTreeZi.getDeptCategory() == 6) {*/
|
|
|
+
|
|
|
+ System.out.println("存在的节点 " + tree.getDeptName() + " parentID " + tree.getParentId());
|
|
|
+ System.out.println("当前子节点 " + wbsTreeZi.getDeptName() + " parentID " + wbsTreeZi.getParentId());
|
|
|
|
|
|
- StringBuilder stringBuffer1 = new StringBuilder();
|
|
|
- StringBuilder appendStr1 = stringBuffer1.append(",").append(wbsTreeZi.getParentId());
|
|
|
- String ancestors1 = wbsTreeZi.getAncestors() + appendStr1;
|
|
|
- wbsTreeZi.setAncestors(ancestors1);
|
|
|
+ if (!wbsTreeZi.getParentId().equals(tree.getParentId()) && wbsTreeZi.getDeptName().equals(tree.getDeptName())) {
|
|
|
|
|
|
- return wbsTreeZi;
|
|
|
+ System.out.println("方法执行到222222");
|
|
|
+ wbsTreeZi.setStatus(1);
|
|
|
+ wbsTreeZi.setType(1);
|
|
|
+ wbsTreeZi.setMajorDataType(0);
|
|
|
+ if (wbsTreeZi.getDeptCategory() == 6) {
|
|
|
+ wbsTreeZi.setIsConcrete(0);
|
|
|
+ wbsTreeZi.setIsExpernode(0);
|
|
|
}
|
|
|
- } else {
|
|
|
|
|
|
- return tree;
|
|
|
+ StringBuilder stringBuffer = new StringBuilder();
|
|
|
+ StringBuilder appendStr = stringBuffer.append(",").append(wbsTreeZi.getParentId());
|
|
|
+ wbsTreeZi.setAncestors(wbsTreeZi.getAncestors() + appendStr);
|
|
|
+ System.out.println("wbsTreeZi 2 : " + wbsTreeZi);
|
|
|
+ return wbsTreeZi;
|
|
|
+
|
|
|
}
|
|
|
+ //}
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
+ System.out.println("方法执行到333333");
|
|
|
+ System.out.println("wbsTreeZi 3 : " + wbsTreeZi);
|
|
|
return wbsTreeZi;
|
|
|
|
|
|
}
|
|
@@ -876,9 +898,36 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
//新增
|
|
|
else {
|
|
|
if (idList1.size() > idList2.size()) {
|
|
|
- List<WbsTreePrivate> insertData = new ArrayList<>(); //数据初始化节点-引用公有
|
|
|
- List<WbsTreePrivate> insertData2 = new ArrayList<>(); //数据初始化节点-引用私有
|
|
|
+
|
|
|
+ //数据初始化节点-引用公有
|
|
|
+ List<WbsTreePrivate> insertData = new ArrayList<>();
|
|
|
+ //数据初始化节点-引用私有
|
|
|
+ List<WbsTreePrivate> insertData2 = new ArrayList<>();
|
|
|
+
|
|
|
if (pawDTO.getReferenceType().equals("public")) {
|
|
|
+ //引用公有
|
|
|
+
|
|
|
+ //查询所有公共节点+表 diffRent=新增的节点id
|
|
|
+ List<List<WbsTree>> addListData = new ArrayList<>();
|
|
|
+
|
|
|
+ for (String id : diffRent) {
|
|
|
+ List<WbsTree> treeAndTable = baseMapper.selectNodeAndTable(Long.valueOf(id));
|
|
|
+ if (treeAndTable != null) {
|
|
|
+ addListData.add(treeAndTable);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ addListData.stream().forEach(trees -> {
|
|
|
+ trees.stream().forEach(tree -> {
|
|
|
+ WbsTreePrivate wbsTreePrivate2 = getWbsTreePrivate1(tree, pawDTO);
|
|
|
+ insertData.add(wbsTreePrivate2);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 不清楚为什么之前要节点+表分开判断
|
|
|
+ */
|
|
|
+ /*
|
|
|
//公有
|
|
|
//查询所有公共节点+表单
|
|
|
List<WbsTree> trees = baseMapper.selectList(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getWbsId, pawDTO.getWbsId()));
|
|
@@ -904,10 +953,32 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
WbsTreePrivate wbsTreePrivate2 = getWbsTreePrivate1(tree, pawDTO);
|
|
|
insertData.add(wbsTreePrivate2);
|
|
|
});
|
|
|
+ */
|
|
|
+
|
|
|
} else if (pawDTO.getReferenceType().equals("private")) {
|
|
|
- //私有
|
|
|
- //查询所有私有节点
|
|
|
- List<WbsTreePrivate> wbsTreePrivatesList = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
+ //引用私有
|
|
|
+
|
|
|
+ //查询所有私有节点+表 diffRent=新增的节点id
|
|
|
+ List<List<WbsTreePrivate>> addListData = new ArrayList<>();
|
|
|
+
|
|
|
+ diffRent.stream().forEach(id -> {
|
|
|
+ List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectNodeAndTable(id, pawDTO.getWbsId(), pawDTO.getReferencePrivateWbsProjectId());
|
|
|
+ if (wbsTreePrivates != null) {
|
|
|
+ addListData.add(wbsTreePrivates);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ addListData.stream().forEach(trees -> {
|
|
|
+ trees.stream().forEach(tree -> {
|
|
|
+ WbsTreePrivate wbsTreePrivate2 = getWbsTreePrivate2(tree, pawDTO);
|
|
|
+ insertData2.add(wbsTreePrivate2);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 不清楚为什么之前要节点+表分开判断
|
|
|
+ */
|
|
|
+ /* List<WbsTreePrivate> wbsTreePrivatesList = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
|
|
|
.eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
|
|
|
.eq(WbsTreePrivate::getProjectId, pawDTO.getReferencePrivateWbsProjectId())
|
|
|
);
|
|
@@ -932,8 +1003,10 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
wbsTreePrivatesListTable.stream().forEach(wbsTreePrivate -> {
|
|
|
WbsTreePrivate wbsTreePrivate2 = getWbsTreePrivate2(wbsTreePrivate, pawDTO);
|
|
|
insertData2.add(wbsTreePrivate2);
|
|
|
- });
|
|
|
+ });*/
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
if (pawDTO.getReferenceType().equals("public")) {
|
|
|
wbsTreePrivateService.saveBatch(insertData, 10000);
|
|
|
projectInfoMapper.updateTemplateIdById(pawDTO.getProjectId(), pawDTO.getWbsId(), "public");
|
|
@@ -941,7 +1014,9 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
wbsTreePrivateService.saveBatch(insertData2, 10000);
|
|
|
projectInfoMapper.updateTemplateIdById(pawDTO.getProjectId(), pawDTO.getPrimaryKeyId(), "private");
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
//删除节点 表单
|
|
|
else {
|
|
|
if (pawDTO.getReferenceType().equals("public")) {
|
|
@@ -952,6 +1027,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
.eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
|
|
|
.eq(WbsTreeContract::getParentId, 0)
|
|
|
);
|
|
|
+
|
|
|
if (wbsTreeContract.size() > 0) {
|
|
|
List<ContractInfo> contractInfoArrayList = new ArrayList<>();
|
|
|
wbsTreeContract.stream().forEach(list -> {
|
|
@@ -966,6 +1042,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
throw new ServiceException(StringUtil.format("当前项目wbs树已被合同段 {} 引用中,请先取消合同段关联后再删除", join));
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
baseMapper.deleteBatch(ids1, pawDTO.getWbsId(), pawDTO.getProjectId());
|
|
|
baseMapper.deleteBatch2(ids1, pawDTO.getWbsId(), pawDTO.getProjectId());
|
|
|
|
|
@@ -977,6 +1054,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
.eq(WbsTreeContract::getProjectId, pawDTO.getProjectId())
|
|
|
.eq(WbsTreeContract::getParentId, 0)
|
|
|
);
|
|
|
+
|
|
|
if (wbsTreeContract.size() > 0) {
|
|
|
List<ContractInfo> contractInfoArrayList = new ArrayList<>();
|
|
|
wbsTreeContract.stream().forEach(list -> {
|
|
@@ -991,8 +1069,10 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
|
|
|
throw new ServiceException(StringUtil.format("当前项目wbs树已被合同段 {} 引用中,请先取消合同段关联后再删除", join));
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
baseMapper.deleteBatch(ids2, pawDTO.getPrimaryKeyId(), pawDTO.getProjectId());
|
|
|
baseMapper.deleteBatch2(ids2, pawDTO.getPrimaryKeyId(), pawDTO.getProjectId());
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
}
|