|
@@ -900,7 +900,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean syncPrivateProjectFormula(Long projectId, Long pKeyId) {
|
|
|
+ public R<String> 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));
|
|
@@ -914,52 +914,75 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
List<Formula> insertFormulaList=new ArrayList<>();
|
|
|
List<Formula> updateFormulaList=new ArrayList<>();
|
|
|
/*同步公共部分*/
|
|
|
- global(sourceProject.getId(),projectInfo.getId(),insertList,insertFormulaList,updateFormulaList);
|
|
|
+ global(sourceProject.getId(),projectInfo,insertList,insertFormulaList,updateFormulaList);
|
|
|
/*同步节点部分,查找模版的叶子节点,查找目标叶子节点,id一样的是关联数据 */
|
|
|
-
|
|
|
+ part(sourceProject.getId(),projectInfo,insertList,insertFormulaList,updateFormulaList);
|
|
|
/*保存记录*/
|
|
|
- if(!insertList.isEmpty()) {
|
|
|
- this.elementFormulaMappingService.saveBatch(insertList);
|
|
|
- }
|
|
|
- if(!insertFormulaList.isEmpty()) {
|
|
|
- this.formulaService.saveBatch(insertFormulaList);
|
|
|
- }
|
|
|
- if(!updateFormulaList.isEmpty()) {
|
|
|
- this.formulaService.updateBatchById(updateFormulaList);
|
|
|
+ int n=saveAll(insertList,insertFormulaList,updateFormulaList);
|
|
|
+ if(n>0){
|
|
|
+ R.success("成功同步"+n+"条公式");
|
|
|
}
|
|
|
}
|
|
|
+ return R.success("引用公有模版无需同步");
|
|
|
}
|
|
|
- return false;
|
|
|
+ return R.fail("同步异常,请联系管理员");
|
|
|
}
|
|
|
|
|
|
- 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));
|
|
|
+ private int saveAll(List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList){
|
|
|
+ int n=0;
|
|
|
+ if(!insertList.isEmpty()) {
|
|
|
+ this.elementFormulaMappingService.saveBatch(insertList,1000);
|
|
|
+ }
|
|
|
+ if(!insertFormulaList.isEmpty()) {
|
|
|
+ this.formulaService.saveBatch(insertFormulaList,1000);
|
|
|
+ n+=insertList.size();
|
|
|
}
|
|
|
- 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));
|
|
|
+ if(!updateFormulaList.isEmpty()) {
|
|
|
+ this.formulaService.updateBatchById(updateFormulaList,1000);
|
|
|
+ n+=updateFormulaList.size();
|
|
|
}
|
|
|
+ return n;
|
|
|
+ }
|
|
|
|
|
|
+ private void global(Long srcProjectId,ProjectInfo distProject,List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList){
|
|
|
+ this.check( srcProjectId, distProject, insertList, insertFormulaList, updateFormulaList,FormulaBean.PRO_GLOBAL);
|
|
|
+ }
|
|
|
+ private void part(Long srcProjectId,ProjectInfo distProject,List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList){
|
|
|
+ this.check( srcProjectId, distProject, insertList, insertFormulaList, updateFormulaList,FormulaBean.PRO_PART);
|
|
|
+ }
|
|
|
+ private void check(Long srcProjectId,ProjectInfo distProject,List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList,int model){
|
|
|
+ Map<String,ElementFormulaMapping> efmListScopeMap=new HashMap<>();
|
|
|
+ Map<String,ElementFormulaMapping> sourceEfmListScopeMap=new HashMap<>();
|
|
|
+ Map<Long,Formula> formulaScopeMap = new HashMap<>();
|
|
|
+ Map<Long,Formula> sourceFormulaScopeMap = new HashMap<>();
|
|
|
+ List<ElementFormulaMapping> efmListScope=this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().eq(ElementFormulaMapping::getProjectId,distProject.getId()).eq(ElementFormulaMapping::getScope, model));
|
|
|
+ if(!efmListScope.isEmpty()){
|
|
|
+ formulaScopeMap = this.formulaService.listByIds(efmListScope.stream().map(ElementFormulaMapping::getFormulaId).collect(Collectors.toList())).stream().collect(Collectors.toMap(Formula::getId, f -> f));
|
|
|
+ }
|
|
|
+ List<ElementFormulaMapping>sourceEfmListScope=this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().eq(ElementFormulaMapping::getProjectId,srcProjectId).eq(ElementFormulaMapping::getScope, model));
|
|
|
+ if(!sourceEfmListScope.isEmpty()){
|
|
|
+ sourceFormulaScopeMap = this.formulaService.listByIds(sourceEfmListScope.stream().map(ElementFormulaMapping::getFormulaId).collect(Collectors.toList())).stream().collect(Collectors.toMap(Formula::getId, f -> f));
|
|
|
+ }
|
|
|
+ if(FormulaBean.PRO_PART.equals(model)) {
|
|
|
+ efmListScopeMap = efmListScope.stream().collect(Collectors.toMap(e -> e.getElementId() + "" + e.getNodeId(), t -> t));
|
|
|
+ sourceEfmListScopeMap = sourceEfmListScope.stream().collect(Collectors.toMap(e -> e.getElementId() + "" + e.getNodeId(), t -> t));
|
|
|
+ }else{
|
|
|
+ efmListScopeMap = efmListScope.stream().collect(Collectors.toMap(e -> e.getElementId().toString(), t -> t));
|
|
|
+ sourceEfmListScopeMap = sourceEfmListScope.stream().collect(Collectors.toMap(e -> e.getElementId().toString(), t -> t));
|
|
|
+ }
|
|
|
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)){
|
|
|
+ Map<String, ElementFormulaMapping> finalEfmListScopeMap = efmListScopeMap;
|
|
|
+ Map<Long, Formula> finalSourceFormulaScopeMap = sourceFormulaScopeMap;
|
|
|
+ Map<Long, Formula> finalFormulaScopeMap = formulaScopeMap;
|
|
|
+ sourceEfmListScopeMap.forEach((k, v)->{
|
|
|
+ if(!finalEfmListScopeMap.containsKey(k)){
|
|
|
/*不存在*/
|
|
|
ElementFormulaMapping target = new ElementFormulaMapping();
|
|
|
BeanUtils.copyProperties(v,target,exclude);
|
|
|
+ target.setWbsId(distProject.getReferenceWbsTemplateId());
|
|
|
+ target.setProjectId(distProject.getId());
|
|
|
insertList.add(target);
|
|
|
- Formula sf= finalFormulaScope10Map.get(v.getFormulaId());
|
|
|
+ Formula sf= finalSourceFormulaScopeMap.get(v.getFormulaId());
|
|
|
Formula target2= new Formula();
|
|
|
BeanUtils.copyProperties(sf,target2);
|
|
|
Long id=SnowFlakeUtil.getId();
|
|
@@ -968,8 +991,8 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
insertFormulaList.add(target2);
|
|
|
}else{
|
|
|
/*存在则比较,有差异则覆盖*/
|
|
|
- Formula sf= finalSourceFormulaScope10Map.get(v.getFormulaId());
|
|
|
- Formula tf= finalFormulaScope10Map.get(finalEfmListScope10Map.get(k).getFormulaId());
|
|
|
+ Formula sf= finalSourceFormulaScopeMap.get(v.getFormulaId());
|
|
|
+ Formula tf= finalFormulaScopeMap.get(finalEfmListScopeMap.get(k).getFormulaId());
|
|
|
if(!tf.getFormula().equals(sf.getFormula())){
|
|
|
BeanUtils.copyProperties(sf,tf,exclude);
|
|
|
updateFormulaList.add(tf);
|
|
@@ -978,17 +1001,6 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
- 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));
|
|
|
-
|
|
|
- }
|
|
|
|
|
|
/**
|
|
|
* 电签同步-获取所有子级节点、表
|