|
@@ -121,6 +121,12 @@ public class WbsSynchronousServiceImpl {
|
|
|
? Arrays.stream(formIds.split(",")).map(Long::parseLong).collect(Collectors.toSet())
|
|
|
: Collections.emptySet();
|
|
|
|
|
|
+ //获取项目信息
|
|
|
+ ProjectInfo projectInfo = projectInfoMapper.selectOne(Wrappers.<ProjectInfo>lambdaQuery().eq(ProjectInfo::getId, wbsTreeSynchronousRecord.getProjectId()));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
for (String primaryKeyId : nodeIds) {
|
|
|
if (StringUtils.isNotEmpty(primaryKeyId)) {
|
|
@@ -129,14 +135,25 @@ public class WbsSynchronousServiceImpl {
|
|
|
if (wbsTreePrivate == null) {
|
|
|
throw new ServiceException("当前节点不存在");
|
|
|
}
|
|
|
- //获取项目信息
|
|
|
- ProjectInfo projectInfo = projectInfoMapper.selectOne(Wrappers.<ProjectInfo>lambdaQuery().eq(ProjectInfo::getId, wbsTreePrivate.getProjectId()));
|
|
|
+ //当前项目绑定的是公有模板还是私有项目
|
|
|
+ Boolean isPublic = false;
|
|
|
+ if (
|
|
|
+ ("1".equals(wbsTreePrivate.getWbsType()) && ("public").equals(projectInfo.getReferenceWbsTemplateType())) ||
|
|
|
+ ("2".equals(wbsTreePrivate.getWbsType()) && ("public").equals(projectInfo.getReferenceWbsTemplateTypeTrial())) ||
|
|
|
+ ("3".equals(wbsTreePrivate.getWbsType()) && ("public").equals(projectInfo.getReferenceWbsTemplateTypeMeter())) ||
|
|
|
+ ("5".equals(wbsTreePrivate.getWbsType()) && ("public").equals(projectInfo.getReferenceWbsTemplateTypeLar()))
|
|
|
+ ) {
|
|
|
+ isPublic = true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
//当前项目模板对应的节点信息
|
|
|
List<WbsTreePrivate> templateNodes = new ArrayList<>();
|
|
|
//质检
|
|
|
//当前节点引用的模板为公有模板
|
|
|
|
|
|
- if (("public").equals(projectInfo.getReferenceWbsTemplateType())) {
|
|
|
+ if (isPublic) {
|
|
|
//当前节点对应的模板节点信息
|
|
|
WbsTree wbsTreeTemplate = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery()
|
|
|
.eq(WbsTree::getId, wbsTreePrivate.getTreePId()));
|
|
@@ -156,7 +173,7 @@ public class WbsSynchronousServiceImpl {
|
|
|
templateNodes = BeanUtil.copyProperties(wbsTrees, WbsTreePrivate.class);
|
|
|
templateNodes.forEach(f -> f.setTreePId(f.getId()));
|
|
|
|
|
|
- } else if (("private").equals(projectInfo.getReferenceWbsTemplateType())) {
|
|
|
+ } else {
|
|
|
//根据wbsTreePrivate的wbsId=私有引用的pKeyId来获取引用树根节点
|
|
|
WbsTreePrivate wbsTreePrivateRoot = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
.eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
|
|
@@ -215,7 +232,8 @@ public class WbsSynchronousServiceImpl {
|
|
|
List<WbsTreePrivate> editPrivateNodes = new ArrayList<>();
|
|
|
for (WbsTreePrivate templateNode : templateNodes) {
|
|
|
//数据修复-----------------------------------------------------------------------------------------------------------------------------------开始
|
|
|
- if (("private").equals(projectInfo.getReferenceWbsTemplateType())) {
|
|
|
+
|
|
|
+ if (isPublic) {
|
|
|
boolean isUpdate = false;
|
|
|
if (templateNode.getExcelId() != null) {
|
|
|
ExcelTab excelTab = excelTabMapper.selectOne(Wrappers.<ExcelTab>lambdaQuery()
|
|
@@ -353,7 +371,7 @@ public class WbsSynchronousServiceImpl {
|
|
|
switch (i) {
|
|
|
//添加表单
|
|
|
case 1:
|
|
|
- insertPrivateForm(wbsTreeSynchronousRecord,wbsTreePrivates, addPrivateNodes);
|
|
|
+ insertPrivateForm(wbsTreeSynchronousRecord, wbsTreePrivates, addPrivateNodes);
|
|
|
//如果同时选择新增表单和其他的同步类型 在操作其他类型的时候需要添加新的表单
|
|
|
if (CollectionUtil.isNotEmpty(addPrivateNodes)) {
|
|
|
editPrivateNodes.addAll(addPrivateNodes.stream().filter(f -> f.getType() == 2).collect(Collectors.toList()));
|
|
@@ -624,7 +642,7 @@ public class WbsSynchronousServiceImpl {
|
|
|
switch (i) {
|
|
|
//添加表单
|
|
|
case 1:
|
|
|
- insertContractForm(wbsTreeSynchronousRecord,contractInfo, wbsTreeContracts, addContractNode);
|
|
|
+ insertContractForm(wbsTreeSynchronousRecord, contractInfo, wbsTreeContracts, addContractNode);
|
|
|
//如果同时选择新增表单和其他的同步类型 在操作其他类型的时候需要添加新的表单
|
|
|
if (CollectionUtil.isNotEmpty(addContractNode)) {
|
|
|
editContractNodes.addAll(addContractNode.stream().filter(f -> f.getType() == 2).collect(Collectors.toList()));
|
|
@@ -666,10 +684,10 @@ public class WbsSynchronousServiceImpl {
|
|
|
* 类型 1 添加表单
|
|
|
*
|
|
|
* @param wbsTreeSynchronousRecord 同步任务
|
|
|
- * @param wbsTreePrivates 当前项目对应节点的子节点
|
|
|
- * @param addPrivateNodes 需要新增的节点
|
|
|
+ * @param wbsTreePrivates 当前项目对应节点的子节点
|
|
|
+ * @param addPrivateNodes 需要新增的节点
|
|
|
*/
|
|
|
- public void insertPrivateForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord,List<WbsTreePrivate> wbsTreePrivates, List<WbsTreePrivate> addPrivateNodes) {
|
|
|
+ public void insertPrivateForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, List<WbsTreePrivate> wbsTreePrivates, List<WbsTreePrivate> addPrivateNodes) {
|
|
|
List<WbsTreePrivate> addData = new ArrayList<>();
|
|
|
|
|
|
//------------------------------------------------新增-------------------------------------------------------------------------
|
|
@@ -782,12 +800,13 @@ public class WbsSynchronousServiceImpl {
|
|
|
/**
|
|
|
* 合同段添加表单
|
|
|
* 合同段添加表单
|
|
|
+ *
|
|
|
* @param wbsTreeSynchronousRecord 同步任务
|
|
|
- * @param contractInfo 合同段信息
|
|
|
- * @param wbsTreeContracts 当前合同节点数据
|
|
|
- * @param addContractNodes 新增节点数据
|
|
|
+ * @param contractInfo 合同段信息
|
|
|
+ * @param wbsTreeContracts 当前合同节点数据
|
|
|
+ * @param addContractNodes 新增节点数据
|
|
|
*/
|
|
|
- public void insertContractForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord,ContractInfo contractInfo, List<WbsTreeContract> wbsTreeContracts, List<WbsTreeContract> addContractNodes) {
|
|
|
+ public void insertContractForm(WbsTreeSynchronousRecord wbsTreeSynchronousRecord, ContractInfo contractInfo, List<WbsTreeContract> wbsTreeContracts, List<WbsTreeContract> addContractNodes) {
|
|
|
List<WbsTreeContract> addData = new ArrayList<>();
|
|
|
|
|
|
|
|
@@ -884,7 +903,8 @@ public class WbsSynchronousServiceImpl {
|
|
|
|
|
|
//判断 如果模板项目为公共项目 则无法同步电签
|
|
|
ProjectInfo projectInfo = projectInfoMapper.selectById(projectId);
|
|
|
- if (projectInfo != null && ("private").equals(projectInfo.getReferenceWbsTemplateType()) && com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotEmpty(projectInfo.getReferenceWbsTemplateId())) {
|
|
|
+
|
|
|
+ if (projectInfo != null && ("private").equals(projectInfo.getReferenceWbsTemplateType()) && projectInfo.getReferenceWbsTemplateId() != null) {
|
|
|
|
|
|
|
|
|
//封装 源Pkeyid 修改pKeyId
|
|
@@ -1078,190 +1098,4 @@ public class WbsSynchronousServiceImpl {
|
|
|
// 将路径列表转换为字符串并返回
|
|
|
return String.join(",", path.stream().map(String::valueOf).toArray(String[]::new));
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 根据选中节点id 同步新增节点和新增表单
|
|
|
- *
|
|
|
- * @param primaryKeyId
|
|
|
- * @return
|
|
|
- */
|
|
|
-
|
|
|
- public void test(String primaryKeyId) {
|
|
|
-
|
|
|
- if (StringUtils.isNotEmpty(primaryKeyId)) {
|
|
|
- //获取当前节点对应节点信息
|
|
|
- WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, primaryKeyId));
|
|
|
-
|
|
|
- //获取项目信息
|
|
|
- ProjectInfo projectInfo = projectInfoMapper.selectOne(Wrappers.<ProjectInfo>lambdaQuery().eq(ProjectInfo::getId, wbsTreePrivate.getProjectId()));
|
|
|
-
|
|
|
- //当前项目模板对应的节点信息
|
|
|
-
|
|
|
- List<WbsTreePrivate> templateNodes = new ArrayList<>();
|
|
|
-
|
|
|
- //结果集
|
|
|
- List<WbsTreePrivate> addData = new ArrayList<>();
|
|
|
- //质检
|
|
|
- //当前节点引用的模板为公有模板
|
|
|
-
|
|
|
- if (("public").equals(projectInfo.getReferenceWbsTemplateType())) {
|
|
|
- //当前节点对应的模板节点信息
|
|
|
- WbsTree wbsTreeTemplate = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery()
|
|
|
- .eq(WbsTree::getId, wbsTreePrivate.getTreePId()));
|
|
|
- //获取模板中当前节点的子节点的数据------------------------------------------------------------------------------------------------------------------------
|
|
|
- LambdaQueryWrapper<WbsTree> wrapperTree = Wrappers.lambdaQuery();
|
|
|
- wrapperTree.eq(WbsTree::getWbsId, wbsTreePrivate.getWbsId())
|
|
|
- .eq(WbsTree::getIsDeleted, 0);
|
|
|
- if (wbsTreeTemplate.getParentId() != 0) {
|
|
|
- wrapperTree.apply("FIND_IN_SET({0},ancestors)", wbsTreeTemplate.getId());
|
|
|
- }
|
|
|
- //模板节点的所有子节点信息
|
|
|
- List<WbsTree> wbsTrees = wbsTreeMapper.selectList(wrapperTree);
|
|
|
- //3、获取需要新增的节点或者表单节点信息 以及他们对应的父级节点信息--------------------------------------------------------------------------------------------
|
|
|
- if (CollectionUtil.isEmpty(wbsTrees)) {
|
|
|
- throw new ServiceException("模板节点未找到");
|
|
|
- }
|
|
|
- templateNodes = BeanUtil.copyProperties(wbsTrees, WbsTreePrivate.class);
|
|
|
-
|
|
|
- } else if (("private").equals(projectInfo.getReferenceWbsTemplateType())) {
|
|
|
- //根据wbsTreePrivate的wbsId=私有引用的pKeyId来获取引用树根节点
|
|
|
- WbsTreePrivate wbsTreePrivateRoot = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
- .eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
|
|
|
-
|
|
|
- //获取当前选中节点与私有模板对应的节点信息 父级模板项目的当前选中节点
|
|
|
- wbsTreePrivateRoot = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId())
|
|
|
- .eq(WbsTreePrivate::getTreePId, wbsTreePrivate.getTreePId()));
|
|
|
-
|
|
|
- //获取模板中当前节点的子节点的数据------------------------------------------------------------------------------------------------------------------------
|
|
|
- LambdaQueryWrapper<WbsTreePrivate> wrapperPrivate = Wrappers.lambdaQuery();
|
|
|
- wrapperPrivate.eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId())
|
|
|
- .eq(WbsTreePrivate::getIsDeleted, 0);
|
|
|
- //判断如果为顶级顶级节点
|
|
|
- if (wbsTreePrivate.getTreePId() != 0) {
|
|
|
- wrapperPrivate.apply("FIND_IN_SET({0},ancestors_p_id)", wbsTreePrivateRoot.getPKeyId());
|
|
|
- }
|
|
|
- templateNodes = wbsTreePrivateMapper.selectList(wrapperPrivate);
|
|
|
- }
|
|
|
-
|
|
|
- if (CollectionUtil.isEmpty(templateNodes)) {
|
|
|
- throw new ServiceException("未找到模板对应节点");
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- //2、获取当前节点的子节点的数据------------------------------------------------------------------------------------------------------------------------
|
|
|
- LambdaQueryWrapper<WbsTreePrivate> wrapperPrivate = Wrappers.lambdaQuery();
|
|
|
- wrapperPrivate.eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId()).eq(WbsTreePrivate::getIsDeleted, 0);
|
|
|
- //判断如果为顶级顶级节点
|
|
|
- if (wbsTreePrivate.getTreePId() != 0) {
|
|
|
- wrapperPrivate.apply("FIND_IN_SET({0},ancestors_p_id)", wbsTreePrivate.getPKeyId());
|
|
|
- }
|
|
|
- List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(wrapperPrivate);
|
|
|
-
|
|
|
- if (wbsTreePrivates.isEmpty()) {
|
|
|
- throw new ServiceException("无法找到模板对应节点,请检查模板节点");
|
|
|
- }
|
|
|
- //获取id 和 tree_p_id 组成的集合
|
|
|
- Set<Long> ids = wbsTreePrivates.stream().map(WbsTreePrivate::getTreePId).collect(Collectors.toSet());
|
|
|
- //3.1筛选出需要新增的节点
|
|
|
- List<WbsTreePrivate> addPrivateNodes = templateNodes.stream()
|
|
|
- .filter(f -> !ids.contains(f.getId()))
|
|
|
- .collect(Collectors.toList());
|
|
|
- //------------------------------------------------新增-------------------------------------------------------------------------
|
|
|
- if (CollectionUtil.isNotEmpty(addPrivateNodes)) {
|
|
|
- //先给每个新增节点赋唯一id,项目id,父级id
|
|
|
- addPrivateNodes.forEach(f -> f.setPKeyId(SnowFlakeUtil.getId()));
|
|
|
-
|
|
|
- //给每一个节点的父级id
|
|
|
- for (WbsTreePrivate addPrivateNode : addPrivateNodes) {
|
|
|
- if (addPrivateNode.getParentId() == 0) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- //查询出当前模板节点的父节点 去获取对应项目节点 如果父节点为0就跳过
|
|
|
- List<WbsTreePrivate> addPrivateParentNodes = wbsTreePrivates.stream().filter(f -> f.getTreePId().equals(addPrivateNode.getParentId())).collect(Collectors.toList());
|
|
|
- //如果没有数据 就表示这条数据的父节点也时新增节点 就需要从新增节点集合中找父级节点
|
|
|
- if (addPrivateParentNodes.isEmpty()) {
|
|
|
- addPrivateParentNodes = addPrivateNodes.stream().filter(f -> f.getId().equals(addPrivateNode.getParentId())).collect(Collectors.toList());
|
|
|
- }
|
|
|
- //如果现在还找不到当前节点的父节点就表示数据有问题
|
|
|
- if (addPrivateParentNodes.isEmpty()) {
|
|
|
- //TODO
|
|
|
- continue;
|
|
|
- }
|
|
|
- //当前新增节点的父节点
|
|
|
- WbsTreePrivate parent = addPrivateParentNodes.get(0);
|
|
|
-
|
|
|
- addPrivateNode.setPId(parent.getPKeyId());
|
|
|
- addPrivateNode.setWbsId(parent.getWbsId());
|
|
|
- addPrivateNode.setWbsType(wbsTreePrivate.getWbsType());
|
|
|
- addPrivateNode.setIsAddConceal(0);
|
|
|
- addPrivateNode.setProjectId(wbsTreePrivate.getProjectId());
|
|
|
- //TODO 后续如果把p_key_id改成了id做 唯一id
|
|
|
- addPrivateNode.setTreePId(addPrivateNode.getId());
|
|
|
- //后续如果使用id做当前表主键 则先在赋值treePid之后再去赋值id addPrivateNode.setId(SnowFlakeUtil.getId());
|
|
|
- }
|
|
|
- addData.addAll(addPrivateNodes);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- //设置html_url----------------------------------------------------------------------------------------------------------
|
|
|
- //如果有新增的数据 旧设置html_url
|
|
|
- if (CollectionUtil.isNotEmpty(addData)) {
|
|
|
- try {
|
|
|
- String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
|
|
|
- Set<String> urls = new HashSet<>();
|
|
|
- for (WbsTreePrivate tree : addData) {
|
|
|
- if (org.apache.commons.lang3.StringUtils.isNotBlank(tree.getHtmlUrl())) {
|
|
|
- String[] split = tree.getHtmlUrl().split("/");
|
|
|
- String htmlUrl = file_path + "privateUrlCopy/" + tree.getPdfUrl() + "/" + split[split.length - 1];
|
|
|
- if (!urls.contains(tree.getHtmlUrl())) {
|
|
|
- urls.add(tree.getHtmlUrl());
|
|
|
- File file_in = ResourceUtil.getFile(tree.getHtmlUrl());
|
|
|
- if (!file_in.exists() || file_in.length() == 0) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- File file_out = ResourceUtil.getFile(htmlUrl);
|
|
|
- FileUtil.copy(file_in, file_out);
|
|
|
- }
|
|
|
- tree.setHtmlUrl(htmlUrl);
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- throw new ServiceException("重置表单路径错误");
|
|
|
- }
|
|
|
- //查询出当前项目所有节点---------------------------------------------------------------------------------------------------
|
|
|
- List<WbsTreePrivate> addList = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
|
|
|
- .select(WbsTreePrivate::getPKeyId, WbsTreePrivate::getPId)
|
|
|
- .eq(WbsTreePrivate::getIsDeleted, 0)
|
|
|
- .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()));
|
|
|
-
|
|
|
- addList.addAll(addData);
|
|
|
- //组合祖级路径 根据当前选中节点为开始
|
|
|
- Map<Long, WbsTreePrivate> collect = addList.stream().collect(Collectors.toMap(WbsTreePrivate::getPKeyId, Function.identity()));
|
|
|
-
|
|
|
- addData.forEach(node -> {
|
|
|
- String correctAncestors = createAncestorsPId(node, collect);
|
|
|
- node.setAncestorsPId(correctAncestors);
|
|
|
- });
|
|
|
-
|
|
|
- //新增-----------------------------------------------------------------------------------------------------------------
|
|
|
- List<List<WbsTreePrivate>> partition = Lists.partition(addData, 1000);
|
|
|
- for (List<WbsTreePrivate> data : partition) {
|
|
|
- //单个批次一个事务,只会回滚当前批次数据
|
|
|
- Integer i = wbsTreePrivateMapper.insertBatchSomeColumn(data);
|
|
|
- //如果失败 -- - - - - 继续执行 或者把当前节点的p_key_id 记录到某个地方 方便后续处理
|
|
|
- if (i == 0) {
|
|
|
- List<Long> collect1 = addData.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
|
|
|
- //这里可以保存到数据库指定错误日志表
|
|
|
- throw new ServiceException("新增节点失败,请联系后台人员");
|
|
|
- }
|
|
|
- }
|
|
|
- //记录同步信息
|
|
|
- }
|
|
|
- } else {
|
|
|
- throw new ServiceException("未传指定参数,请联系后台人员");
|
|
|
- }
|
|
|
- }
|
|
|
}
|