|
|
@ -2,6 +2,7 @@ package com.qs.serve.modules.bms.service.impl; |
|
|
|
|
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|
|
|
import com.qs.serve.common.model.dto.TreeNode; |
|
|
|
import com.qs.serve.common.util.CollectionUtil; |
|
|
|
import com.qs.serve.modules.bms.common.CenterExtendBuildType; |
|
|
|
import com.qs.serve.modules.bms.entity.vo.BmsCenterExtendTreeVo; |
|
|
|
import com.qs.serve.modules.bms.service.BmsCenterExtendService; |
|
|
@ -13,9 +14,7 @@ import com.qs.serve.modules.bms.service.BmsCenterExtendBuildService; |
|
|
|
import com.qs.serve.modules.bms.mapper.BmsCenterExtendBuildMapper; |
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Collections; |
|
|
|
import java.util.List; |
|
|
|
import java.util.*; |
|
|
|
|
|
|
|
/** |
|
|
|
* 后继成本中心 服务实现类 |
|
|
@ -34,35 +33,27 @@ public class BmsCenterExtendBuildServiceImpl extends ServiceImpl<BmsCenterExtend |
|
|
|
List<BmsCenterExtendTreeVo> treeVoList = centerExtendService.transferTree(); |
|
|
|
List<BmsCenterExtendBuild> buildTreeList = new ArrayList<>(); |
|
|
|
List<BmsCenterExtendBuild> buildDataList = new ArrayList<>(); |
|
|
|
this.recursionBuildExtendCenter(treeVoList,treeVoList, buildTreeList,buildDataList, null); |
|
|
|
this.saveBatch(buildTreeList); |
|
|
|
this.recursionBuildExtendCenter(treeVoList,treeVoList, buildTreeList,buildDataList); |
|
|
|
//this.saveBatch(buildTreeList);
|
|
|
|
this.saveBatch(buildDataList); |
|
|
|
} |
|
|
|
|
|
|
|
private void recursionBuildExtendCenter(List<BmsCenterExtendTreeVo> allTreeList,List<BmsCenterExtendTreeVo> childList, List<BmsCenterExtendBuild> buildTreeList,List<BmsCenterExtendBuild> buildDataList, BmsCenterExtendBuild parent) { |
|
|
|
private void recursionBuildExtendCenter(List<BmsCenterExtendTreeVo> allTreeList,List<BmsCenterExtendTreeVo> childList, List<BmsCenterExtendBuild> buildTreeList,List<BmsCenterExtendBuild> buildDataList) { |
|
|
|
//存放上级对象
|
|
|
|
for (BmsCenterExtendTreeVo source : childList) { |
|
|
|
BmsCenterExtendBuild build = new BmsCenterExtendBuild(); |
|
|
|
build.setBuildType(CenterExtendBuildType.TREE); |
|
|
|
build.setSourceId(source.getSourceId()); |
|
|
|
if(parent !=null){ |
|
|
|
String[] centerIds = parent.getPathCenterIds().split("_"); |
|
|
|
for (String centerId : centerIds) { |
|
|
|
if(centerId.equals(source.getCenterId())){ |
|
|
|
build.setBuildType(CenterExtendBuildType.ERROR); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
build.setPathIds(parent.getPathIds() + "_" + source.getId()); |
|
|
|
build.setPathCenterIds(parent.getPathCenterIds() + "_" + source.getCenterId()); |
|
|
|
build.setPathCenterIds(parent.getPathCenterCodes() + "_" + source.getCenterCode()); |
|
|
|
build.setPathCenterIds(parent.getPathCenterNames() + "_" + source.getCenterName()); |
|
|
|
}else { |
|
|
|
build.setPathIds(source.getId()+""); |
|
|
|
build.setPathCenterIds(source.getCenterId()); |
|
|
|
build.setPathCenterCodes(source.getCenterCode()); |
|
|
|
build.setPathCenterNames(source.getCenterName()); |
|
|
|
build.setRowId(source.getId()); |
|
|
|
|
|
|
|
String[] centerIds = source.getPathCenterIds().split("_"); |
|
|
|
Set<String> centerIdsSet = new HashSet<>(Arrays.asList(centerIds)); |
|
|
|
if(centerIds.length!=centerIdsSet.size()){ |
|
|
|
build.setBuildType(CenterExtendBuildType.ERROR); |
|
|
|
} |
|
|
|
build.setPathCenterIds(source.getPathCenterIds()); |
|
|
|
build.setPathCenterCodes(source.getPathCenterCodes()); |
|
|
|
build.setPathCenterNames(source.getPathCenterNames()); |
|
|
|
|
|
|
|
build.setCenterType(source.getCenterType()); |
|
|
|
build.setCenterId(source.getCenterId()); |
|
|
|
build.setCenterCode(source.getCenterCode()); |
|
|
@ -71,48 +62,97 @@ public class BmsCenterExtendBuildServiceImpl extends ServiceImpl<BmsCenterExtend |
|
|
|
build.setStopTime(source.getStopTime()); |
|
|
|
build.setStopFlag(source.getStopFlag()); |
|
|
|
build.setWeightRate(source.getWeightRate()); |
|
|
|
//是否有子节点
|
|
|
|
boolean lastFlag = source.getChildren()==null||source.getChildren().size()==0; |
|
|
|
build.setLastType(1); |
|
|
|
buildTreeList.add(build); |
|
|
|
|
|
|
|
//判断是否最后一级
|
|
|
|
if(source.getChildren()==null||source.getChildren().size()==0){ |
|
|
|
if(lastFlag){ |
|
|
|
//自下而上查询返回所有占比
|
|
|
|
BmsCenterExtendBuild buildData = buildDataByTreeVo(source,source.getWeightRate()); |
|
|
|
buildData.setPathIds(build.getPathIds()); |
|
|
|
buildData.setPathCenterIds(build.getPathCenterIds()); |
|
|
|
buildData.setPathCenterCodes(build.getPathCenterCodes()); |
|
|
|
buildData.setPathCenterNames(build.getPathCenterNames()); |
|
|
|
//自身lastType==2
|
|
|
|
buildData.setLastType(2); |
|
|
|
buildDataList.add(buildData); |
|
|
|
//提取父级节点
|
|
|
|
|
|
|
|
List<BmsCenterExtendTreeVo> parents = new ArrayList<>(); |
|
|
|
this.filterParents(allTreeList, source, parents); |
|
|
|
List<BmsCenterExtendTreeVo> allTreeToList = new ArrayList<>(); |
|
|
|
this.buildAllTreeToList(allTreeList,allTreeToList); |
|
|
|
this.filterParentTreeList(allTreeToList, build.getCenterType(), build.getPathCenterIds(), parents); |
|
|
|
//修改为 从上往下
|
|
|
|
Collections.reverse(parents); |
|
|
|
for (int i = 0; i < parents.size(); i++) { |
|
|
|
BmsCenterExtendTreeVo treeVo = parents.get(i); |
|
|
|
//计算父级节点比率
|
|
|
|
//TODO:感觉不对,需要测试 计算父级节点比率
|
|
|
|
BigDecimal currParentWeightRate = treeVo.getWeightRate(); |
|
|
|
String pathIds = treeVo.getSourceId().toString(); |
|
|
|
String pathCenterIds = treeVo.getSourceId().toString(); |
|
|
|
String pathCenterCodes = treeVo.getCenterCode(); |
|
|
|
String pathCenterNames = treeVo.getCenterName(); |
|
|
|
for (int j = i+1; j < parents.size(); j++) { |
|
|
|
BmsCenterExtendTreeVo nextTreeVo = parents.get(j); |
|
|
|
currParentWeightRate = currParentWeightRate.multiply(nextTreeVo.getWeightRate()); |
|
|
|
pathIds = nextTreeVo.getSourceId() + "_"+pathIds; |
|
|
|
pathCenterIds = nextTreeVo.getCenterId() + "_"+pathCenterIds; |
|
|
|
pathCenterCodes = nextTreeVo.getCenterCode() + "_"+pathCenterCodes; |
|
|
|
pathCenterNames = nextTreeVo.getCenterName() + "_"+pathCenterNames; |
|
|
|
//解决分叉,问题导致费用率异常
|
|
|
|
if(nextTreeVo.getPathCenterIds().contains(treeVo.getPathCenterIds())){ |
|
|
|
currParentWeightRate = currParentWeightRate.multiply(nextTreeVo.getWeightRate()) |
|
|
|
.divide(new BigDecimal("100"),2,BigDecimal.ROUND_DOWN); |
|
|
|
}else { |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
BmsCenterExtendBuild buildParentData = this.buildDataByTreeVo(treeVo, currParentWeightRate); |
|
|
|
buildParentData.setPathIds(pathIds+"_"+buildData.getSourceId()); |
|
|
|
buildParentData.setPathCenterIds(pathCenterIds); |
|
|
|
buildParentData.setPathCenterCodes(pathCenterCodes); |
|
|
|
buildParentData.setPathCenterNames(pathCenterNames); |
|
|
|
BmsCenterExtendBuild buildParentData = this.buildDataByTreeVo(source, currParentWeightRate); |
|
|
|
buildParentData.setRowId(treeVo.getId()); |
|
|
|
buildParentData.setPathCenterIds(treeVo.getPathCenterIds()); |
|
|
|
buildParentData.setPathCenterCodes(treeVo.getPathCenterCodes()); |
|
|
|
buildParentData.setPathCenterNames(treeVo.getPathCenterNames()); |
|
|
|
buildParentData.setLastType(3); |
|
|
|
buildDataList.add(buildParentData); |
|
|
|
} |
|
|
|
|
|
|
|
/*//提取父级节点(有分支的)
|
|
|
|
List<BmsCenterExtendTreeVo> parents = new ArrayList<>(); |
|
|
|
List<BmsCenterExtendTreeVo> allTreeToList = new ArrayList<>(); |
|
|
|
this.buildAllTreeToList(allTreeList,allTreeToList); |
|
|
|
this.filterParents(allTreeToList, source, parents); |
|
|
|
//修改为 从上往下
|
|
|
|
Collections.reverse(parents); |
|
|
|
for (int i = 0; i < parents.size(); i++) { |
|
|
|
BmsCenterExtendTreeVo treeVo = parents.get(i); |
|
|
|
//计算父级节点比率
|
|
|
|
BigDecimal currParentWeightRate = treeVo.getWeightRate(); |
|
|
|
for (int j = i+1; j < parents.size(); j++) { |
|
|
|
BmsCenterExtendTreeVo nextTreeVo = parents.get(j); |
|
|
|
currParentWeightRate = currParentWeightRate.multiply(nextTreeVo.getWeightRate()) |
|
|
|
.divide(new BigDecimal("100"),2,BigDecimal.ROUND_DOWN); |
|
|
|
} |
|
|
|
BmsCenterExtendBuild buildParentData = this.buildDataByTreeVo(source, currParentWeightRate); |
|
|
|
buildParentData.setRowId(treeVo.getId()); |
|
|
|
buildParentData.setPathCenterIds(treeVo.getPathCenterIds()); |
|
|
|
buildParentData.setPathCenterCodes(treeVo.getPathCenterCodes()); |
|
|
|
buildParentData.setPathCenterNames(treeVo.getPathCenterNames()); |
|
|
|
buildParentData.setLastType(3); |
|
|
|
buildDataList.add(buildParentData); |
|
|
|
}*/ |
|
|
|
}else { |
|
|
|
//递归调用
|
|
|
|
this.recursionBuildExtendCenter(allTreeList,source.getChildren(), buildTreeList,buildDataList, build); |
|
|
|
this.recursionBuildExtendCenter(allTreeList,source.getChildren(), buildTreeList,buildDataList); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 过滤父级列表 |
|
|
|
* @param allTreeList |
|
|
|
* @param centerType |
|
|
|
* @param pathCenterIds |
|
|
|
* @param outDataParents |
|
|
|
*/ |
|
|
|
private void filterParentTreeList(List<BmsCenterExtendTreeVo> allTreeList, String centerType, String pathCenterIds, List<BmsCenterExtendTreeVo> outDataParents) { |
|
|
|
if(pathCenterIds.contains("_")){ |
|
|
|
pathCenterIds = pathCenterIds.substring(0,pathCenterIds.lastIndexOf("_")); |
|
|
|
for (BmsCenterExtendTreeVo treeVo : allTreeList) { |
|
|
|
if(treeVo.getCenterType().equals(centerType)&& treeVo.getPathCenterIds().equals(pathCenterIds)){ |
|
|
|
outDataParents.add(treeVo); |
|
|
|
this.filterParentTreeList(allTreeList,centerType,treeVo.getPathCenterIds(),outDataParents); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -125,8 +165,8 @@ public class BmsCenterExtendBuildServiceImpl extends ServiceImpl<BmsCenterExtend |
|
|
|
*/ |
|
|
|
private BmsCenterExtendBuild buildDataByTreeVo(BmsCenterExtendTreeVo source, BigDecimal currParentWeightRate) { |
|
|
|
BmsCenterExtendBuild parentData = new BmsCenterExtendBuild(); |
|
|
|
parentData.setRowId(source.getId()); |
|
|
|
parentData.setBuildType(CenterExtendBuildType.DATA); |
|
|
|
parentData.setSourceId(source.getSourceId()); |
|
|
|
parentData.setCenterType(source.getCenterType()); |
|
|
|
parentData.setCenterId(source.getCenterId()); |
|
|
|
parentData.setCenterCode(source.getCenterCode()); |
|
|
@ -138,6 +178,20 @@ public class BmsCenterExtendBuildServiceImpl extends ServiceImpl<BmsCenterExtend |
|
|
|
return parentData; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 树数据转list |
|
|
|
* @param allTreeList |
|
|
|
* @param outDataList |
|
|
|
*/ |
|
|
|
private void buildAllTreeToList(List<BmsCenterExtendTreeVo> allTreeList,List<BmsCenterExtendTreeVo> outDataList){ |
|
|
|
outDataList.addAll(allTreeList); |
|
|
|
for (BmsCenterExtendTreeVo treeVo : allTreeList) { |
|
|
|
if(CollectionUtil.isNotEmpty(treeVo.getChildren())){ |
|
|
|
this.buildAllTreeToList(treeVo.getChildren(),outDataList); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 过滤获取父级节点(自下而上) |
|
|
|
* @param allTreeList |
|
|
@ -152,7 +206,6 @@ public class BmsCenterExtendBuildServiceImpl extends ServiceImpl<BmsCenterExtend |
|
|
|
if(!treeVo.getComboParentId().equals("0")){ |
|
|
|
this.filterParents(allTreeList,treeVo,parents); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|