|
@@ -2,15 +2,21 @@ package org.springblade.meter.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.AllArgsConstructor;
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
import org.springblade.common.utils.SnowFlakeUtil;
|
|
import org.springblade.common.utils.SnowFlakeUtil;
|
|
import org.springblade.core.log.exception.ServiceException;
|
|
import org.springblade.core.log.exception.ServiceException;
|
|
import org.springblade.core.mp.base.BaseServiceImpl;
|
|
import org.springblade.core.mp.base.BaseServiceImpl;
|
|
|
|
+import org.springblade.core.tool.api.R;
|
|
import org.springblade.core.tool.utils.BeanUtil;
|
|
import org.springblade.core.tool.utils.BeanUtil;
|
|
|
|
+import org.springblade.manager.entity.ContractInfo;
|
|
import org.springblade.meter.entity.MeterTreeProject;
|
|
import org.springblade.meter.entity.MeterTreeProject;
|
|
import org.springblade.meter.entity.MeterTreeSystem;
|
|
import org.springblade.meter.entity.MeterTreeSystem;
|
|
import org.springblade.meter.mapper.MeterTreeProjectMapper;
|
|
import org.springblade.meter.mapper.MeterTreeProjectMapper;
|
|
import org.springblade.meter.mapper.MeterTreeSystemMapper;
|
|
import org.springblade.meter.mapper.MeterTreeSystemMapper;
|
|
import org.springblade.meter.service.MeterTreeProjectService;
|
|
import org.springblade.meter.service.MeterTreeProjectService;
|
|
|
|
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
|
+import org.springframework.jdbc.core.JdbcTemplate;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
@@ -21,7 +27,9 @@ import java.util.stream.Collectors;
|
|
@AllArgsConstructor
|
|
@AllArgsConstructor
|
|
public class MeterTreeProjectServiceImpl extends BaseServiceImpl<MeterTreeProjectMapper, MeterTreeProject> implements MeterTreeProjectService {
|
|
public class MeterTreeProjectServiceImpl extends BaseServiceImpl<MeterTreeProjectMapper, MeterTreeProject> implements MeterTreeProjectService {
|
|
|
|
|
|
|
|
+ private static Logger logger = LoggerFactory.getLogger(MeterTreeProjectServiceImpl.class);
|
|
private final MeterTreeSystemMapper meterTreeSystemMapper;
|
|
private final MeterTreeSystemMapper meterTreeSystemMapper;
|
|
|
|
+ private final JdbcTemplate jdbcTemplate;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public Integer selectMaxSort(Long parentId) {
|
|
public Integer selectMaxSort(Long parentId) {
|
|
@@ -30,15 +38,35 @@ public class MeterTreeProjectServiceImpl extends BaseServiceImpl<MeterTreeProjec
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
- public boolean projectTreeInitOrSync(Long meterTemplateId, Long projectId) {
|
|
|
|
|
|
+ public R<Object> projectTreeInitOrSync(Long meterTemplateId, Long projectId) {
|
|
/*首先判断是否存在项目树*/
|
|
/*首先判断是否存在项目树*/
|
|
MeterTreeProject rootNode = baseMapper.selectOne(Wrappers.<MeterTreeProject>lambdaQuery()
|
|
MeterTreeProject rootNode = baseMapper.selectOne(Wrappers.<MeterTreeProject>lambdaQuery()
|
|
.select(MeterTreeProject::getTemplateId)
|
|
.select(MeterTreeProject::getTemplateId)
|
|
|
|
+ .eq(MeterTreeProject::getTemplateId, meterTemplateId) //当前模板
|
|
.eq(MeterTreeProject::getProjectId, projectId)
|
|
.eq(MeterTreeProject::getProjectId, projectId)
|
|
.eq(MeterTreeProject::getParentId, 0L)
|
|
.eq(MeterTreeProject::getParentId, 0L)
|
|
.eq(MeterTreeProject::getAncestor, "0")
|
|
.eq(MeterTreeProject::getAncestor, "0")
|
|
.eq(MeterTreeProject::getStatus, 1));
|
|
.eq(MeterTreeProject::getStatus, 1));
|
|
|
|
|
|
|
|
+ /*非当前模板,表示已修改项目的系统级模板绑定,那么需要先删除旧模板数据(一个项目只关联了一个模板)*/
|
|
|
|
+ MeterTreeProject rootNodeOther = baseMapper.selectOne(Wrappers.<MeterTreeProject>lambdaQuery()
|
|
|
|
+ .select(MeterTreeProject::getTemplateId)
|
|
|
|
+ .ne(MeterTreeProject::getTemplateId, meterTemplateId) //非当前模板
|
|
|
|
+ .eq(MeterTreeProject::getProjectId, projectId)
|
|
|
|
+ .eq(MeterTreeProject::getParentId, 0L)
|
|
|
|
+ .eq(MeterTreeProject::getAncestor, "0")
|
|
|
|
+ .eq(MeterTreeProject::getStatus, 1));
|
|
|
|
+
|
|
|
|
+ if (rootNodeOther != null) {
|
|
|
|
+ /*逻辑删除旧项目模板信息*/
|
|
|
|
+ jdbcTemplate.execute("UPDATE s_meter_tree_project SET is_deleted = 1 WHERE project_id = " + projectId + " AND template_id = " + rootNodeOther.getTemplateId());
|
|
|
|
+ logger.info(" ==================== 已成功逻辑删除旧系统模板id {} 项目id {} 的项目单元树数据 ==================== ", rootNodeOther.getTemplateId(), projectId);
|
|
|
|
+
|
|
|
|
+ /*逻辑删除项目下所有合同段的模板信息*/
|
|
|
|
+ jdbcTemplate.execute("UPDATE s_meter_tree_contract SET is_deleted = 1 WHERE project_id = " + projectId + " AND template_id = " + rootNodeOther.getTemplateId());
|
|
|
|
+ logger.info(" ==================== 已成功逻辑删除旧系统模板id {} 项目id {} 的合同段单元树数据 ==================== ", rootNodeOther.getTemplateId(), projectId);
|
|
|
|
+ }
|
|
|
|
+
|
|
if (rootNode == null) {
|
|
if (rootNode == null) {
|
|
/*================== 新增初始化 ==================*/
|
|
/*================== 新增初始化 ==================*/
|
|
/*获取系统单元树信息*/
|
|
/*获取系统单元树信息*/
|
|
@@ -46,62 +74,69 @@ public class MeterTreeProjectServiceImpl extends BaseServiceImpl<MeterTreeProjec
|
|
.eq(MeterTreeSystem::getTemplateId, meterTemplateId)
|
|
.eq(MeterTreeSystem::getTemplateId, meterTemplateId)
|
|
.eq(MeterTreeSystem::getStatus, 1)
|
|
.eq(MeterTreeSystem::getStatus, 1)
|
|
);
|
|
);
|
|
|
|
+ if (meterTreeSystems.size() > 0) {
|
|
|
|
+ /*创建旧节点ID和新节点ID的映射newNodeIdMap*/
|
|
|
|
+ List<Long> systemNodeIds = meterTreeSystems.stream().map(MeterTreeSystem::getId).collect(Collectors.toList());
|
|
|
|
+ Map<Long, Long> newNodeIdMap = new HashMap<>(systemNodeIds.size());
|
|
|
|
+ for (Long oldNodeId : systemNodeIds) {
|
|
|
|
+ newNodeIdMap.put(oldNodeId, SnowFlakeUtil.getId());
|
|
|
|
+ }
|
|
|
|
|
|
- /*创建旧节点ID和新节点ID的映射newNodeIdMap*/
|
|
|
|
- List<Long> systemNodeIds = meterTreeSystems.stream().map(MeterTreeSystem::getId).collect(Collectors.toList());
|
|
|
|
- Map<Long, Long> newNodeIdMap = new HashMap<>(systemNodeIds.size());
|
|
|
|
- for (Long oldNodeId : systemNodeIds) {
|
|
|
|
- newNodeIdMap.put(oldNodeId, SnowFlakeUtil.getId());
|
|
|
|
- }
|
|
|
|
|
|
+ /*把项目节点id、parentId、ancestor替换成新的,构造成MeterTreeProject对象*/
|
|
|
|
+ List<MeterTreeProject> meterTreeProjectsResultData = new ArrayList<>(systemNodeIds.size());
|
|
|
|
+ for (MeterTreeSystem sObj : meterTreeSystems) {
|
|
|
|
+ MeterTreeProject pObj = new MeterTreeProject();
|
|
|
|
+ BeanUtil.copyProperties(sObj, pObj);
|
|
|
|
+ pObj.setProjectId(projectId);
|
|
|
|
+
|
|
|
|
+ /*数据源id*/
|
|
|
|
+ pObj.setSourceNodeId(sObj.getId());
|
|
|
|
+ pObj.setDataSourceType(1); //系统引用
|
|
|
|
+ pObj.setUpdateStatus(0); //非编辑
|
|
|
|
+
|
|
|
|
+ /*id*/
|
|
|
|
+ pObj.setId(newNodeIdMap.get(sObj.getId()));
|
|
|
|
+ /*parentId、ancestor*/
|
|
|
|
+ Long parentId = newNodeIdMap.getOrDefault(sObj.getParentId(), null);
|
|
|
|
+ if (parentId == null) {
|
|
|
|
+ /*根节点*/
|
|
|
|
+ pObj.setParentId(0L);
|
|
|
|
+ pObj.setAncestor("0");
|
|
|
|
+ } else {
|
|
|
|
+ /*非根节点*/
|
|
|
|
+ pObj.setParentId(parentId);
|
|
|
|
+ pObj.setAncestor(null); //后面重新计算子级ancestor
|
|
|
|
+ }
|
|
|
|
|
|
- /*把项目节点id、parentId、ancestor替换成新的,构造成MeterTreeProject对象*/
|
|
|
|
- List<MeterTreeProject> meterTreeProjectsResultData = new ArrayList<>(systemNodeIds.size());
|
|
|
|
- for (MeterTreeSystem sObj : meterTreeSystems) {
|
|
|
|
- MeterTreeProject pObj = new MeterTreeProject();
|
|
|
|
- BeanUtil.copyProperties(sObj, pObj);
|
|
|
|
- pObj.setProjectId(projectId);
|
|
|
|
-
|
|
|
|
- /*数据源id*/
|
|
|
|
- pObj.setSourceNodeId(sObj.getId());
|
|
|
|
- pObj.setDataSourceType(1); //系统引用
|
|
|
|
- pObj.setUpdateStatus(0); //非编辑
|
|
|
|
-
|
|
|
|
- /*id*/
|
|
|
|
- pObj.setId(newNodeIdMap.get(sObj.getId()));
|
|
|
|
- /*parentId、ancestor*/
|
|
|
|
- Long parentId = newNodeIdMap.getOrDefault(sObj.getParentId(), null);
|
|
|
|
- if (parentId == null) {
|
|
|
|
- /*根节点*/
|
|
|
|
- pObj.setParentId(0L);
|
|
|
|
- pObj.setAncestor("0");
|
|
|
|
- } else {
|
|
|
|
- /*非根节点*/
|
|
|
|
- pObj.setParentId(parentId);
|
|
|
|
- pObj.setAncestor(null); //后面重新计算子级ancestor
|
|
|
|
|
|
+ meterTreeProjectsResultData.add(pObj);
|
|
}
|
|
}
|
|
|
|
|
|
- meterTreeProjectsResultData.add(pObj);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /*层级结构排序*/
|
|
|
|
- List<MeterTreeProject> sortedList = this.sortMeterTreeProjects(meterTreeProjectsResultData);
|
|
|
|
-
|
|
|
|
- /*构造ancestor*/
|
|
|
|
- for (MeterTreeProject project : sortedList) {
|
|
|
|
- if (project.getAncestor() == null) {
|
|
|
|
- //如果当前元素是子级(ancestor为null),找到对应的父级
|
|
|
|
- Long parentId = project.getParentId();
|
|
|
|
- String parentAncestor = this.getAncestorForParentId(meterTreeProjectsResultData, parentId);
|
|
|
|
- //构造新的ancestor字段
|
|
|
|
- String newAncestor = parentAncestor + "," + parentId;
|
|
|
|
- project.setAncestor(newAncestor);
|
|
|
|
|
|
+ /*层级结构排序*/
|
|
|
|
+ List<MeterTreeProject> sortedList = this.sortMeterTreeProjects(meterTreeProjectsResultData);
|
|
|
|
+
|
|
|
|
+ /*构造ancestor*/
|
|
|
|
+ for (MeterTreeProject project : sortedList) {
|
|
|
|
+ if (project.getAncestor() == null) {
|
|
|
|
+ //如果当前元素是子级(ancestor为null),找到对应的父级
|
|
|
|
+ Long parentId = project.getParentId();
|
|
|
|
+ String parentAncestor = this.getAncestorForParentId(meterTreeProjectsResultData, parentId);
|
|
|
|
+ //构造新的ancestor字段
|
|
|
|
+ String newAncestor = parentAncestor + "," + parentId;
|
|
|
|
+ project.setAncestor(newAncestor);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
|
|
- if (sortedList.size() == systemNodeIds.size()) {
|
|
|
|
- return this.saveBatch(sortedList, 1000);
|
|
|
|
|
|
+ if (sortedList.size() == systemNodeIds.size()) {
|
|
|
|
+ if (this.saveBatch(sortedList, 1000)) {
|
|
|
|
+ return R.success("操作成功");
|
|
|
|
+ } else {
|
|
|
|
+ return R.fail("操作失败");
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ throw new ServiceException("数据构造异常!");
|
|
|
|
+ }
|
|
} else {
|
|
} else {
|
|
- throw new ServiceException("数据构造异常!");
|
|
|
|
|
|
+ return R.fail("未获取到需要同步的系统级计量单元信息!");
|
|
}
|
|
}
|
|
|
|
|
|
} else {
|
|
} else {
|
|
@@ -129,105 +164,111 @@ public class MeterTreeProjectServiceImpl extends BaseServiceImpl<MeterTreeProjec
|
|
|
|
|
|
/*增量同步(该接口逻辑与MeterTreeContractServiceImpl.contractSave()接口中的划分子级一样)*/
|
|
/*增量同步(该接口逻辑与MeterTreeContractServiceImpl.contractSave()接口中的划分子级一样)*/
|
|
if (!difference.isEmpty()) {
|
|
if (!difference.isEmpty()) {
|
|
- /*构造差集节点id=parentId关系Maps*/
|
|
|
|
- Map<Long, Long> idAndParentIdMaps = difference.stream().collect(Collectors.toMap(MeterTreeSystem::getId, MeterTreeSystem::getParentId));
|
|
|
|
-
|
|
|
|
- /*获取所有要新增的系统级的根节点ids*/
|
|
|
|
- Set<Long> rootNodeIds = this.getRootNodeIds(difference);
|
|
|
|
- /*获取根节点的父级节点ids*/
|
|
|
|
- List<MeterTreeSystem> meterTreeSystemsParentNodes = meterTreeSystemMapper.selectList(Wrappers.<MeterTreeSystem>lambdaQuery()
|
|
|
|
- .select(MeterTreeSystem::getParentId)
|
|
|
|
- .eq(MeterTreeSystem::getStatus, 1)
|
|
|
|
- .eq(MeterTreeSystem::getTemplateId, meterTemplateId)
|
|
|
|
- .in(MeterTreeSystem::getId, rootNodeIds)
|
|
|
|
- );
|
|
|
|
- Set<Long> parentRootNodeIds = meterTreeSystemsParentNodes.stream().map(MeterTreeSystem::getParentId).collect(Collectors.toSet());
|
|
|
|
-
|
|
|
|
- /*获取父级节点(即contractSave接口的合同段计量树选择新增节点meterTreeContractNode对象,对应项目级就是meterTreeProjectNode对象)*/
|
|
|
|
- List<MeterTreeProject> meterTreeProjectNodesList = baseMapper.selectList(Wrappers.<MeterTreeProject>lambdaQuery()
|
|
|
|
- .eq(MeterTreeProject::getStatus, 1)
|
|
|
|
- .eq(MeterTreeProject::getProjectId, projectId)
|
|
|
|
- .eq(MeterTreeProject::getTemplateId, meterTemplateId)
|
|
|
|
- .in(MeterTreeProject::getSourceNodeId, parentRootNodeIds) //系统级根节点父级 指向项目原始id字段
|
|
|
|
- );
|
|
|
|
- Map<Long, List<MeterTreeProject>> meterTreeProjectsNodesMaps = meterTreeProjectNodesList.stream().collect(Collectors.groupingBy(MeterTreeProject::getSourceNodeId));
|
|
|
|
-
|
|
|
|
- for (Long parentRootId : parentRootNodeIds) {
|
|
|
|
- /*项目与合同段不同之处,合同段有N份(合同段新增就是复制,sourceNodeId存在多份一样的),在项目中sourceNodeId源节点id应该是对应一个父级节点*/
|
|
|
|
- List<MeterTreeProject> projectParentRootNodeList = meterTreeProjectsNodesMaps.get(parentRootId);
|
|
|
|
- for (MeterTreeProject meterTreeProjectNode : projectParentRootNodeList) {
|
|
|
|
-
|
|
|
|
- for (Long rootNodeId : rootNodeIds) {
|
|
|
|
- /*归纳到自己节点下*/
|
|
|
|
- Long rootIdRecordParentId = idAndParentIdMaps.get(rootNodeId);
|
|
|
|
- if (!rootIdRecordParentId.equals(parentRootId)) {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
|
|
+ try {
|
|
|
|
+ /*构造差集节点id=parentId关系Maps*/
|
|
|
|
+ Map<Long, Long> idAndParentIdMaps = difference.stream().collect(Collectors.toMap(MeterTreeSystem::getId, MeterTreeSystem::getParentId));
|
|
|
|
+
|
|
|
|
+ /*获取所有要新增的系统级的根节点ids*/
|
|
|
|
+ Set<Long> rootNodeIds = this.getRootNodeIds(difference);
|
|
|
|
+ /*获取根节点的父级节点ids*/
|
|
|
|
+ List<MeterTreeSystem> meterTreeSystemsParentNodes = meterTreeSystemMapper.selectList(Wrappers.<MeterTreeSystem>lambdaQuery()
|
|
|
|
+ .select(MeterTreeSystem::getParentId)
|
|
|
|
+ .eq(MeterTreeSystem::getStatus, 1)
|
|
|
|
+ .eq(MeterTreeSystem::getTemplateId, meterTemplateId)
|
|
|
|
+ .in(MeterTreeSystem::getId, rootNodeIds)
|
|
|
|
+ );
|
|
|
|
+ Set<Long> parentRootNodeIds = meterTreeSystemsParentNodes.stream().map(MeterTreeSystem::getParentId).collect(Collectors.toSet());
|
|
|
|
+
|
|
|
|
+ /*获取父级节点(即contractSave接口的合同段计量树选择新增节点meterTreeContractNode对象,对应项目级就是meterTreeProjectNode对象)*/
|
|
|
|
+ List<MeterTreeProject> meterTreeProjectNodesList = baseMapper.selectList(Wrappers.<MeterTreeProject>lambdaQuery()
|
|
|
|
+ .eq(MeterTreeProject::getStatus, 1)
|
|
|
|
+ .eq(MeterTreeProject::getProjectId, projectId)
|
|
|
|
+ .eq(MeterTreeProject::getTemplateId, meterTemplateId)
|
|
|
|
+ .in(MeterTreeProject::getSourceNodeId, parentRootNodeIds) //系统级根节点父级 指向项目原始id字段
|
|
|
|
+ );
|
|
|
|
+ Map<Long, List<MeterTreeProject>> meterTreeProjectsNodesMaps = meterTreeProjectNodesList.stream().collect(Collectors.groupingBy(MeterTreeProject::getSourceNodeId));
|
|
|
|
+
|
|
|
|
+ for (Long parentRootId : parentRootNodeIds) {
|
|
|
|
+ /*项目与合同段不同之处,合同段有N份(合同段新增就是复制,sourceNodeId存在多份一样的),在项目中sourceNodeId源节点id应该是对应一个父级节点*/
|
|
|
|
+ List<MeterTreeProject> projectParentRootNodeList = meterTreeProjectsNodesMaps.get(parentRootId);
|
|
|
|
+ for (MeterTreeProject meterTreeProjectNode : projectParentRootNodeList) {
|
|
|
|
+
|
|
|
|
+ for (Long rootNodeId : rootNodeIds) {
|
|
|
|
+ /*归纳到自己节点下*/
|
|
|
|
+ Long rootIdRecordParentId = idAndParentIdMaps.get(rootNodeId);
|
|
|
|
+ if (!rootIdRecordParentId.equals(parentRootId)) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
|
|
- /*获取新增节点的所有子级相关节点*/
|
|
|
|
- List<MeterTreeSystem> systemNode = this.getMeterTreeSystemNode(meterTemplateId, rootNodeId);
|
|
|
|
|
|
+ /*获取新增节点的所有子级相关节点*/
|
|
|
|
+ List<MeterTreeSystem> systemNode = this.getMeterTreeSystemNode(meterTemplateId, rootNodeId);
|
|
|
|
|
|
- /*构造数据*/
|
|
|
|
- /*创建旧节点ID和新节点ID的映射Map*/
|
|
|
|
- Map<Long, Long> newRootAndChildNodeIdMap = new HashMap<>(systemNode.size());
|
|
|
|
- List<Long> systemNodeIdList = systemNode.stream().map(MeterTreeSystem::getId).collect(Collectors.toList());
|
|
|
|
- for (Long oldNodeId : systemNodeIdList) {
|
|
|
|
- newRootAndChildNodeIdMap.put(oldNodeId, SnowFlakeUtil.getId());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /*把项目节点id、parentId、ancestor替换成新的,构造成MeterTreeProject对象*/
|
|
|
|
- List<MeterTreeProject> meterTreeProjectsResultData = new ArrayList<>(systemNodeIdList.size());
|
|
|
|
- for (MeterTreeSystem sObj : systemNode) {
|
|
|
|
- MeterTreeProject pObj = new MeterTreeProject();
|
|
|
|
- BeanUtil.copyProperties(sObj, pObj);
|
|
|
|
- pObj.setProjectId(projectId);
|
|
|
|
-
|
|
|
|
- /*数据源id*/
|
|
|
|
- pObj.setSourceNodeId(sObj.getId());
|
|
|
|
- pObj.setDataSourceType(1); //系统引用
|
|
|
|
- pObj.setUpdateStatus(0); //非编辑
|
|
|
|
-
|
|
|
|
- /*id*/
|
|
|
|
- pObj.setId(newRootAndChildNodeIdMap.get(sObj.getId()));
|
|
|
|
- /*parentId、ancestor*/
|
|
|
|
- Long parentId = newRootAndChildNodeIdMap.getOrDefault(sObj.getParentId(), null);
|
|
|
|
- if (parentId == null) {
|
|
|
|
- /*根节点*/
|
|
|
|
- pObj.setParentId(meterTreeProjectNode.getId());
|
|
|
|
- /*ancestor(根节点ancestor指向就是 项目 的父级节点)*/
|
|
|
|
- pObj.setAncestor(meterTreeProjectNode.getAncestor() + "," + pObj.getParentId());
|
|
|
|
- } else {
|
|
|
|
- /*非根节点*/
|
|
|
|
- pObj.setParentId(parentId);
|
|
|
|
- pObj.setAncestor(null); //后面重新计算子级ancestor
|
|
|
|
|
|
+ /*构造数据*/
|
|
|
|
+ /*创建旧节点ID和新节点ID的映射Map*/
|
|
|
|
+ Map<Long, Long> newRootAndChildNodeIdMap = new HashMap<>(systemNode.size());
|
|
|
|
+ List<Long> systemNodeIdList = systemNode.stream().map(MeterTreeSystem::getId).collect(Collectors.toList());
|
|
|
|
+ for (Long oldNodeId : systemNodeIdList) {
|
|
|
|
+ newRootAndChildNodeIdMap.put(oldNodeId, SnowFlakeUtil.getId());
|
|
}
|
|
}
|
|
|
|
|
|
- meterTreeProjectsResultData.add(pObj);
|
|
|
|
- }
|
|
|
|
|
|
+ /*把项目节点id、parentId、ancestor替换成新的,构造成MeterTreeProject对象*/
|
|
|
|
+ List<MeterTreeProject> meterTreeProjectsResultData = new ArrayList<>(systemNodeIdList.size());
|
|
|
|
+ for (MeterTreeSystem sObj : systemNode) {
|
|
|
|
+ MeterTreeProject pObj = new MeterTreeProject();
|
|
|
|
+ BeanUtil.copyProperties(sObj, pObj);
|
|
|
|
+ pObj.setProjectId(projectId);
|
|
|
|
+
|
|
|
|
+ /*数据源id*/
|
|
|
|
+ pObj.setSourceNodeId(sObj.getId());
|
|
|
|
+ pObj.setDataSourceType(1); //系统引用
|
|
|
|
+ pObj.setUpdateStatus(0); //非编辑
|
|
|
|
+
|
|
|
|
+ /*id*/
|
|
|
|
+ pObj.setId(newRootAndChildNodeIdMap.get(sObj.getId()));
|
|
|
|
+ /*parentId、ancestor*/
|
|
|
|
+ Long parentId = newRootAndChildNodeIdMap.getOrDefault(sObj.getParentId(), null);
|
|
|
|
+ if (parentId == null) {
|
|
|
|
+ /*根节点*/
|
|
|
|
+ pObj.setParentId(meterTreeProjectNode.getId());
|
|
|
|
+ /*ancestor(根节点ancestor指向就是 项目 的父级节点)*/
|
|
|
|
+ pObj.setAncestor(meterTreeProjectNode.getAncestor() + "," + pObj.getParentId());
|
|
|
|
+ } else {
|
|
|
|
+ /*非根节点*/
|
|
|
|
+ pObj.setParentId(parentId);
|
|
|
|
+ pObj.setAncestor(null); //后面重新计算子级ancestor
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ meterTreeProjectsResultData.add(pObj);
|
|
|
|
+ }
|
|
|
|
|
|
- /*层级结构排序*/
|
|
|
|
- List<MeterTreeProject> sortedList = this.sortMeterTreeProjects(meterTreeProjectsResultData);
|
|
|
|
-
|
|
|
|
- /*构造ancestor*/
|
|
|
|
- for (MeterTreeProject project : sortedList) {
|
|
|
|
- if (project.getAncestor() == null) {
|
|
|
|
- //如果当前元素是子级(ancestor为null),找到对应的父级
|
|
|
|
- Long parentId = project.getParentId();
|
|
|
|
- String parentAncestor = this.getAncestorForParentId(meterTreeProjectsResultData, parentId);
|
|
|
|
- //构造新的ancestor字段
|
|
|
|
- String newAncestor = parentAncestor + "," + parentId;
|
|
|
|
- project.setAncestor(newAncestor);
|
|
|
|
|
|
+ /*层级结构排序*/
|
|
|
|
+ List<MeterTreeProject> sortedList = this.sortMeterTreeProjects(meterTreeProjectsResultData);
|
|
|
|
+
|
|
|
|
+ /*构造ancestor*/
|
|
|
|
+ for (MeterTreeProject project : sortedList) {
|
|
|
|
+ if (project.getAncestor() == null) {
|
|
|
|
+ //如果当前元素是子级(ancestor为null),找到对应的父级
|
|
|
|
+ Long parentId = project.getParentId();
|
|
|
|
+ String parentAncestor = this.getAncestorForParentId(meterTreeProjectsResultData, parentId);
|
|
|
|
+ //构造新的ancestor字段
|
|
|
|
+ String newAncestor = parentAncestor + "," + parentId;
|
|
|
|
+ project.setAncestor(newAncestor);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
|
|
- /*入库*/
|
|
|
|
- this.saveBatch(sortedList, 1000);
|
|
|
|
|
|
+ /*入库*/
|
|
|
|
+ this.saveBatch(sortedList, 1000);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
+ return R.success("操作成功");
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ throw new ServiceException("操作异常!");
|
|
}
|
|
}
|
|
- return true;
|
|
|
|
} else {
|
|
} else {
|
|
- throw new ServiceException("未获取到需要同步的系统计量单元信息!");
|
|
|
|
|
|
+ return R.fail("未获取到需要同步的系统级计量单元信息!");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|