|
@@ -25,14 +25,18 @@ import org.springblade.core.tool.api.R;
|
|
import org.springblade.core.tool.constant.BladeConstant;
|
|
import org.springblade.core.tool.constant.BladeConstant;
|
|
import org.springblade.core.tool.node.ForestNodeMerger;
|
|
import org.springblade.core.tool.node.ForestNodeMerger;
|
|
import org.springblade.core.tool.utils.*;
|
|
import org.springblade.core.tool.utils.*;
|
|
|
|
+import org.springblade.manager.dto.FormulaBean;
|
|
import org.springblade.manager.dto.WbsTreePrivateDTO2;
|
|
import org.springblade.manager.dto.WbsTreePrivateDTO2;
|
|
import org.springblade.manager.dto.WbsTreePrivateDTO3;
|
|
import org.springblade.manager.dto.WbsTreePrivateDTO3;
|
|
import org.springblade.manager.entity.*;
|
|
import org.springblade.manager.entity.*;
|
|
import org.springblade.manager.mapper.*;
|
|
import org.springblade.manager.mapper.*;
|
|
|
|
+import org.springblade.manager.service.IElementFormulaMappingService;
|
|
|
|
+import org.springblade.manager.service.IFormulaService;
|
|
import org.springblade.manager.service.ITableInfoService;
|
|
import org.springblade.manager.service.ITableInfoService;
|
|
import org.springblade.manager.service.IWbsTreePrivateService;
|
|
import org.springblade.manager.service.IWbsTreePrivateService;
|
|
import org.springblade.manager.vo.*;
|
|
import org.springblade.manager.vo.*;
|
|
import org.springblade.system.cache.ParamCache;
|
|
import org.springblade.system.cache.ParamCache;
|
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
import org.springframework.scheduling.annotation.Async;
|
|
import org.springframework.scheduling.annotation.Async;
|
|
@@ -46,6 +50,7 @@ import java.io.FileNotFoundException;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.function.Function;
|
|
import java.util.function.Function;
|
|
|
|
+import java.util.stream.Collector;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Stream;
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
@@ -66,6 +71,8 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
private final JdbcTemplate jdbcTemplate;
|
|
private final JdbcTemplate jdbcTemplate;
|
|
private final TextdictInfoServiceImpl textDictInfoService;
|
|
private final TextdictInfoServiceImpl textDictInfoService;
|
|
private final InformationQueryClient informationQueryClient;
|
|
private final InformationQueryClient informationQueryClient;
|
|
|
|
+ private final IElementFormulaMappingService elementFormulaMappingService;
|
|
|
|
+ private final IFormulaService formulaService;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public List<WbsTreePrivateVO> tree(String wbsId, String projectId) {
|
|
public List<WbsTreePrivateVO> tree(String wbsId, String projectId) {
|
|
@@ -885,6 +892,97 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public boolean syncPrivateProjectFormula(Long projectId, Long pKeyId) {
|
|
|
|
+ if(projectId!=null&&pKeyId!=null){
|
|
|
|
+ ProjectInfo projectInfo = projectInfoMapper.selectById(projectId);
|
|
|
|
+ ProjectInfo sourceProject=jdbcTemplate.queryForObject("select a.* from m_project_info a join m_wbs_tree_private b on a.id=b.project_id where b.p_key_id="+projectInfo.getReferenceWbsTemplateId()+" limit 1",new BeanPropertyRowMapper<>(ProjectInfo.class));
|
|
|
|
+ /*只需要同步私有引用就可以了*/
|
|
|
|
+ if("private".equals(projectInfo.getReferenceWbsTemplateType())&&sourceProject!=null){
|
|
|
|
+ WbsTreePrivate selectNodeNow = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, pKeyId).eq(WbsTreePrivate::getStatus, 1));
|
|
|
|
+ if (selectNodeNow == null) {
|
|
|
|
+ throw new ServiceException("未获取到当前选择同步的节点信息,请联系管理员");
|
|
|
|
+ }
|
|
|
|
+ List<ElementFormulaMapping> insertList=new ArrayList<>();
|
|
|
|
+ List<Formula> insertFormulaList=new ArrayList<>();
|
|
|
|
+ List<Formula> updateFormulaList=new ArrayList<>();
|
|
|
|
+ /*同步公共部分*/
|
|
|
|
+ global(sourceProject.getId(),projectInfo.getId(),insertList,insertFormulaList,updateFormulaList);
|
|
|
|
+ /*同步节点部分,查找模版的叶子节点,查找目标叶子节点,id一样的是关联数据 */
|
|
|
|
+
|
|
|
|
+ /*保存记录*/
|
|
|
|
+ if(!insertList.isEmpty()) {
|
|
|
|
+ this.elementFormulaMappingService.saveBatch(insertList);
|
|
|
|
+ }
|
|
|
|
+ if(!insertFormulaList.isEmpty()) {
|
|
|
|
+ this.formulaService.saveBatch(insertFormulaList);
|
|
|
|
+ }
|
|
|
|
+ if(!updateFormulaList.isEmpty()) {
|
|
|
|
+ this.formulaService.updateBatchById(updateFormulaList);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void global(Long srcProjectId,Long distProjectId,List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList){
|
|
|
|
+ Map<Long,ElementFormulaMapping> efmListScope10Map=new HashMap<>();
|
|
|
|
+ Map<Long,Formula> formulaScope10Map = new HashMap<>();
|
|
|
|
+ List<ElementFormulaMapping> efmListScope10=this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().eq(ElementFormulaMapping::getProjectId,distProjectId).eq(ElementFormulaMapping::getScope, FormulaBean.PRO_GLOBAL));
|
|
|
|
+ if(Func.isNotEmpty(efmListScope10)) {
|
|
|
|
+ /*全局scope=10 每个元素和efm一对一*/
|
|
|
|
+ efmListScope10Map = efmListScope10.stream().collect(Collectors.toMap(ElementFormulaMapping::getElementId, o -> o));
|
|
|
|
+ formulaScope10Map = this.formulaService.listByIds(efmListScope10.stream().map(ElementFormulaMapping::getFormulaId).collect(Collectors.toList())).stream().collect(Collectors.toMap(Formula::getId, f -> f));
|
|
|
|
+ }
|
|
|
|
+ Map<Long,ElementFormulaMapping> sourceEfmListScope10Map =new HashMap<>();
|
|
|
|
+ Map<Long,Formula> sourceFormulaScope10Map = new HashMap<>();
|
|
|
|
+ List<ElementFormulaMapping> sourceEfmListScope10=this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().eq(ElementFormulaMapping::getProjectId,srcProjectId).eq(ElementFormulaMapping::getScope, FormulaBean.PRO_GLOBAL));
|
|
|
|
+ if(Func.isNotEmpty(sourceEfmListScope10)) {
|
|
|
|
+ sourceEfmListScope10Map = sourceEfmListScope10.stream().collect(Collectors.toMap(ElementFormulaMapping::getElementId, o -> o));
|
|
|
|
+ sourceFormulaScope10Map = this.formulaService.listByIds(sourceEfmListScope10.stream().map(ElementFormulaMapping::getFormulaId).collect(Collectors.toList())).stream().collect(Collectors.toMap(Formula::getId, f -> f));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ String[] exclude= new String[]{"id"};
|
|
|
|
+ Map<Long, ElementFormulaMapping> finalEfmListScope10Map = efmListScope10Map;
|
|
|
|
+ Map<Long, Formula> finalFormulaScope10Map = formulaScope10Map;
|
|
|
|
+ Map<Long, Formula> finalSourceFormulaScope10Map = sourceFormulaScope10Map;
|
|
|
|
+ sourceEfmListScope10Map.forEach((k, v)->{
|
|
|
|
+ if(!finalEfmListScope10Map.containsKey(k)){
|
|
|
|
+ /*不存在*/
|
|
|
|
+ ElementFormulaMapping target = new ElementFormulaMapping();
|
|
|
|
+ BeanUtils.copyProperties(v,target,exclude);
|
|
|
|
+ insertList.add(target);
|
|
|
|
+ Formula sf= finalFormulaScope10Map.get(v.getFormulaId());
|
|
|
|
+ Formula target2= new Formula();
|
|
|
|
+ BeanUtils.copyProperties(sf,target2);
|
|
|
|
+ Long id=SnowFlakeUtil.getId();
|
|
|
|
+ target.setFormulaId(id);
|
|
|
|
+ target2.setId(id);
|
|
|
|
+ insertFormulaList.add(target2);
|
|
|
|
+ }else{
|
|
|
|
+ /*存在则比较,有差异则覆盖*/
|
|
|
|
+ Formula sf= finalSourceFormulaScope10Map.get(v.getFormulaId());
|
|
|
|
+ Formula tf= finalFormulaScope10Map.get(finalEfmListScope10Map.get(k).getFormulaId());
|
|
|
|
+ if(!tf.getFormula().equals(sf.getFormula())){
|
|
|
|
+ BeanUtils.copyProperties(sf,tf,exclude);
|
|
|
|
+ updateFormulaList.add(tf);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ private void part(Long srcProjectId,Long distProjectId,List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList){
|
|
|
|
+ /**/
|
|
|
|
+ Map<String,ElementFormulaMapping> efmListScope20Map=new HashMap<>();
|
|
|
|
+ Map<String,ElementFormulaMapping> sourceEfmListScope20Map=new HashMap<>();
|
|
|
|
+ Map<Long,Formula> formulaScope20Map = new HashMap<>();
|
|
|
|
+ List<ElementFormulaMapping> efmListScope20=this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().eq(ElementFormulaMapping::getProjectId,distProjectId).eq(ElementFormulaMapping::getScope, FormulaBean.PRO_PART));
|
|
|
|
+ List<ElementFormulaMapping>sourceEfmListScope20=this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().eq(ElementFormulaMapping::getProjectId,srcProjectId).eq(ElementFormulaMapping::getScope, FormulaBean.PRO_PART));
|
|
|
|
+ efmListScope20Map= efmListScope20.stream().collect(Collectors.toMap(e->e.getElementId()+""+e.getNodeId(),t->t));
|
|
|
|
+ sourceEfmListScope20Map= sourceEfmListScope20.stream().collect(Collectors.toMap(e->e.getElementId()+""+e.getNodeId(),t->t));
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 电签同步-获取所有子级节点、表
|
|
* 电签同步-获取所有子级节点、表
|
|
*/
|
|
*/
|