Browse Source

Merge remote-tracking branch 'origin/v1.0' into v1.0

contract
15989082884@163.com 2 years ago
parent
commit
52d428024a
  1. 12
      src/main/java/com/qs/serve/modules/bms/controller/BmsCenterExtendController.java
  2. 4
      src/main/java/com/qs/serve/modules/bms/entity/BmsCenterExtend.java
  3. 6
      src/main/java/com/qs/serve/modules/bms/entity/BmsCenterExtendBuild.java
  4. 19
      src/main/java/com/qs/serve/modules/bms/entity/vo/BmsCenterExtendTreeVo.java
  5. 6
      src/main/java/com/qs/serve/modules/bms/mapper/BmsCenterExtendMapper.java
  6. 58
      src/main/java/com/qs/serve/modules/bms/service/impl/BmsCenterExtendBuildServiceImpl.java
  7. 113
      src/main/java/com/qs/serve/modules/bms/service/impl/BmsCenterExtendServiceImpl.java
  8. 8
      src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java

12
src/main/java/com/qs/serve/modules/bms/controller/BmsCenterExtendController.java

@ -11,6 +11,7 @@ import com.qs.serve.common.util.CopierUtil;
import com.qs.serve.common.util.StringUtils;
import com.qs.serve.modules.bms.entity.BmsCenterExtendUser;
import com.qs.serve.modules.bms.entity.bo.BmsCenterExtendBo;
import com.qs.serve.modules.bms.service.BmsCenterExtendBuildService;
import com.qs.serve.modules.bms.service.BmsCenterExtendUserService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -38,6 +39,7 @@ public class BmsCenterExtendController {
private BmsCenterExtendService bmsCenterExtendService;
private BmsCenterExtendUserService bmsCenterExtendUserService;
private BmsCenterExtendBuildService bmsCenterExtendBuildService;
/**
* 列表
@ -139,5 +141,15 @@ public class BmsCenterExtendController {
return R.ok();
}
/**
* 更新均摊加删除子节点
* @return
*/
@PostMapping("/initBuild")
public R<?> allocation4Update(){
bmsCenterExtendBuildService.initData();
return R.ok();
}
}

4
src/main/java/com/qs/serve/modules/bms/entity/BmsCenterExtend.java

@ -112,6 +112,10 @@ public class BmsCenterExtend implements Serializable {
@JsonProperty
private String delFlag;
/** 组合id */
@TableField(exist = false)
private String comboId;
/** 子列表 */
@TableField(exist = false)
private List<?> childList;

6
src/main/java/com/qs/serve/modules/bms/entity/BmsCenterExtendBuild.java

@ -42,6 +42,12 @@ public class BmsCenterExtendBuild implements Serializable {
@Length(max = 255,message = "祖级id长度不能超过255字")
private String pathIds;
private String pathCenterIds;
private String pathCenterCodes;
private String pathCenterNames;
/** 成本中心类型 */
@NotBlank(message = "成本中心类型不能为空")
@Length(max = 255,message = "成本中心类型长度不能超过255字")

19
src/main/java/com/qs/serve/modules/bms/entity/vo/BmsCenterExtendTreeVo.java

@ -14,13 +14,30 @@ import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author YenHex
* @since 2023/7/17
*/
@Data
public class BmsCenterExtendTreeVo extends TreeNode {
public class BmsCenterExtendTreeVo {
private Long id;
//组合id
private String comboId;
//组合id
private String comboParentId;
private List<BmsCenterExtendTreeVo> children;
private String pathCenterIds;
private String pathCenterCodes;
private String pathCenterNames;
/** 来源id */
@NotNull(message = "来源id不能为空")

6
src/main/java/com/qs/serve/modules/bms/mapper/BmsCenterExtendMapper.java

@ -2,6 +2,9 @@ package com.qs.serve.modules.bms.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.bms.entity.BmsCenterExtend;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* 后继成本中心 Mapper
@ -10,5 +13,8 @@ import com.qs.serve.modules.bms.entity.BmsCenterExtend;
*/
public interface BmsCenterExtendMapper extends BaseMapper<BmsCenterExtend> {
@Select("select center_type,center_id,source_id,id from bms_center_extend GROUP BY center_type,center_id HAVING count(1)=1")
List<BmsCenterExtend> selectTopList();
}

58
src/main/java/com/qs/serve/modules/bms/service/impl/BmsCenterExtendBuildServiceImpl.java

@ -1,6 +1,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.modules.bms.common.CenterExtendBuildType;
import com.qs.serve.modules.bms.entity.vo.BmsCenterExtendTreeVo;
import com.qs.serve.modules.bms.service.BmsCenterExtendService;
@ -31,26 +32,36 @@ public class BmsCenterExtendBuildServiceImpl extends ServiceImpl<BmsCenterExtend
@Override
public void initData() {
List<BmsCenterExtendTreeVo> treeVoList = centerExtendService.transferTree();
List<BmsCenterExtendBuild> buildList = new ArrayList<>();
this.recursionBuildExtendCenter(treeVoList, buildList, null);
List<BmsCenterExtendBuild> buildTreeList = new ArrayList<>();
List<BmsCenterExtendBuild> buildDataList = new ArrayList<>();
this.recursionBuildExtendCenter(treeVoList,treeVoList, buildTreeList,buildDataList, null);
this.saveBatch(buildTreeList);
this.saveBatch(buildDataList);
}
private void recursionBuildExtendCenter(List<BmsCenterExtendTreeVo> allTreeList, List<BmsCenterExtendBuild> buildList, BmsCenterExtendBuild parent) {
private void recursionBuildExtendCenter(List<BmsCenterExtendTreeVo> allTreeList,List<BmsCenterExtendTreeVo> childList, List<BmsCenterExtendBuild> buildTreeList,List<BmsCenterExtendBuild> buildDataList, BmsCenterExtendBuild parent) {
//存放上级对象
for (BmsCenterExtendTreeVo source : allTreeList) {
for (BmsCenterExtendTreeVo source : childList) {
BmsCenterExtendBuild build = new BmsCenterExtendBuild();
build.setBuildType(CenterExtendBuildType.TREE);
build.setSourceId(source.getSourceId());
if(parent !=null){
String[] pathIds = parent.getPathIds().split("_");
for (String pathId : pathIds) {
if(pathId.equals(source.getId())){
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("0_" + source.getId());
build.setPathIds(source.getId()+"");
build.setPathCenterIds(source.getCenterId());
build.setPathCenterCodes(source.getCenterCode());
build.setPathCenterNames(source.getCenterName());
}
build.setCenterType(source.getCenterType());
build.setCenterId(source.getCenterId());
@ -60,12 +71,17 @@ public class BmsCenterExtendBuildServiceImpl extends ServiceImpl<BmsCenterExtend
build.setStopTime(source.getStopTime());
build.setStopFlag(source.getStopFlag());
build.setWeightRate(source.getWeightRate());
buildList.add(build);
buildTreeList.add(build);
//判断是否最后一级
if(source.getChildren()==null||source.getChildren().size()==0){
//自下而上查询返回所有占比
BmsCenterExtendBuild buildData = buildDataByTreeVo(source,source.getWeightRate());
buildList.add(buildData);
buildData.setPathIds(build.getPathIds());
buildData.setPathCenterIds(build.getPathCenterIds());
buildData.setPathCenterCodes(build.getPathCenterCodes());
buildData.setPathCenterNames(build.getPathCenterNames());
buildDataList.add(buildData);
//提取父级节点
List<BmsCenterExtendTreeVo> parents = new ArrayList<>();
this.filterParents(allTreeList, source, parents);
@ -75,16 +91,28 @@ public class BmsCenterExtendBuildServiceImpl extends ServiceImpl<BmsCenterExtend
BmsCenterExtendTreeVo treeVo = parents.get(i);
//计算父级节点比率
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;
}
BmsCenterExtendBuild buildParentData = this.buildDataByTreeVo(treeVo, currParentWeightRate);
buildList.add(buildParentData);
buildParentData.setPathIds(pathIds+"_"+buildData.getSourceId());
buildParentData.setPathCenterIds(pathCenterIds);
buildParentData.setPathCenterCodes(pathCenterCodes);
buildParentData.setPathCenterNames(pathCenterNames);
buildDataList.add(buildParentData);
}
}else {
//递归调用
this.recursionBuildExtendCenter(allTreeList, buildList, build);
this.recursionBuildExtendCenter(allTreeList,source.getChildren(), buildTreeList,buildDataList, build);
}
}
}
@ -117,11 +145,11 @@ public class BmsCenterExtendBuildServiceImpl extends ServiceImpl<BmsCenterExtend
* @param parents
*/
private void filterParents(List<BmsCenterExtendTreeVo> allTreeList, BmsCenterExtendTreeVo source, List<BmsCenterExtendTreeVo> parents) {
String pid = source.getParentId();
String pid = source.getComboParentId();
for (BmsCenterExtendTreeVo treeVo : allTreeList) {
if(treeVo.getId().equals(pid)){
if(treeVo.getComboId().equals(pid)){
parents.add(treeVo);
if(!treeVo.getParentId().equals("0")){
if(!treeVo.getComboParentId().equals("0")){
this.filterParents(allTreeList,treeVo,parents);
}
break;

113
src/main/java/com/qs/serve/modules/bms/service/impl/BmsCenterExtendServiceImpl.java

@ -24,9 +24,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
import java.util.List;
/**
@ -45,25 +43,91 @@ public class BmsCenterExtendServiceImpl extends ServiceImpl<BmsCenterExtendMappe
@Override
public List<BmsCenterExtendTreeVo> transferTree() {
//查询最高层级
List<BmsCenterExtend> rootList = this.baseMapper.selectTopList();
rootList = rootList.stream().filter(a->a.getSourceId().equals(0L)).collect(Collectors.toList());
//查询所有减少查询
List<BmsCenterExtend> listAll = this.list();
List<BmsCenterExtendTreeVo> treeVoList = listAll.stream().map(exCenter->{
BmsCenterExtendTreeVo treeNode = new BmsCenterExtendTreeVo();
treeNode.setId(exCenter.getId()+"");
treeNode.setParentId(exCenter.getSourceId().toString());
treeNode.setSort(0);
treeNode.setCenterType(exCenter.getCenterType());
treeNode.setCenterId(exCenter.getCenterId());
treeNode.setCenterCode(exCenter.getCenterCode());
treeNode.setCenterName(exCenter.getCenterName());
treeNode.setStartTime(exCenter.getStartTime());
treeNode.setStopTime(exCenter.getStopTime());
treeNode.setStopFlag(exCenter.getStopFlag());
treeNode.setWeightRate(exCenter.getWeightRate());
return treeNode;
}).collect(Collectors.toList());
treeVoList.sort((o1,o2) -> (o2.getSort()-o1.getSort()));
treeVoList = TreeUtil.buildByRecursive(treeVoList,TreeUtil.DEFAULT_PID_STRING);
return treeVoList;
listAll.forEach(ext->ext.setComboId(ext.getCenterType()+"_"+ext.getCenterId()));
//设置最高层级树节点
List<BmsCenterExtendTreeVo> treeRoot = new ArrayList<>();
for (BmsCenterExtend root : rootList) {
for (BmsCenterExtend node : listAll) {
if(root.getId().equals(node.getId())){
BmsCenterExtendTreeVo treeVo = this.toTreeVo(node,"0",node.getCenterId(),node.getCenterCode(),node.getCenterName());
treeRoot.add(treeVo);
break;
}
}
}
Map<Long,List<BmsCenterExtend>> listMapBySourId = listAll.stream()
.collect(Collectors.groupingBy(BmsCenterExtend::getSourceId));
//停用的节点
List<BmsCenterExtend> stopRows = listMapBySourId.get(0L);
//主要业务
for (BmsCenterExtendTreeVo treeVo : treeRoot) {
Long sourceId = treeVo.getId();
//source查找的子节点
this.buildTreeVoData(listMapBySourId, stopRows, treeVo, sourceId);
}
return treeRoot;
}
private void buildTreeVoData(Map<Long, List<BmsCenterExtend>> listMapBySourId, List<BmsCenterExtend> stopRows,
BmsCenterExtendTreeVo treeVo, Long sourceId) {
List<BmsCenterExtend> sourceList = listMapBySourId.get(sourceId);
if(CollectionUtil.isNotEmpty(sourceList)){
List<BmsCenterExtendTreeVo> children = new ArrayList<>();
for (BmsCenterExtend ext : sourceList) {
String comboId = ext.getComboId();
String centerIds = treeVo.getPathCenterIds()+"_"+ext.getCenterId();
String centerCodes = treeVo.getPathCenterCodes()+"_"+ext.getCenterName();
String centerNames = treeVo.getPathCenterNames()+"_"+ext.getCenterName();
BmsCenterExtendTreeVo entity = this.toTreeVo(ext, treeVo.getComboId(),centerIds,centerCodes,centerNames);
for (BmsCenterExtend stopRow : stopRows) {
if(stopRow.getComboId().equals(comboId)){
//支持多继承,若中断为单继承
this.buildTreeVoData(listMapBySourId,stopRows,entity,stopRow.getId());
}
}
children.add(entity);
}
treeVo.setChildren(children);
}
}
/**
* 转换对象
* @param exCenter
* @param parentId
* @param centerIds
* @param centerCodes
* @param centerNames
* @return
*/
private BmsCenterExtendTreeVo toTreeVo(BmsCenterExtend exCenter,String parentId,
String centerIds,String centerCodes,String centerNames){
BmsCenterExtendTreeVo treeNode = new BmsCenterExtendTreeVo();
treeNode.setComboId(exCenter.getCenterType()+"_"+exCenter.getCenterId());
treeNode.setComboParentId(parentId);
treeNode.setId(exCenter.getId());
treeNode.setPathCenterCodes(centerCodes);
treeNode.setPathCenterIds(centerIds);
treeNode.setPathCenterNames(centerNames);
treeNode.setSourceId(exCenter.getSourceId());
treeNode.setCenterType(exCenter.getCenterType());
treeNode.setCenterId(exCenter.getCenterId());
treeNode.setCenterCode(exCenter.getCenterCode());
treeNode.setCenterName(exCenter.getCenterName());
treeNode.setStartTime(exCenter.getStartTime());
treeNode.setStopTime(exCenter.getStopTime());
treeNode.setStopFlag(exCenter.getStopFlag());
treeNode.setWeightRate(exCenter.getWeightRate());
return treeNode;
}
@Override
@ -121,10 +185,15 @@ public class BmsCenterExtendServiceImpl extends ServiceImpl<BmsCenterExtendMappe
Assert.throwEx("部分后继成本中心已分配");
}
}
//查询是否已有基础
// LambdaQueryWrapper<BmsCenterExtend> lqw = new LambdaQueryWrapper<>();
// lqw.eq(BmsCenterExtend::getCenterType,type);
// lqw.eq(BmsCenterExtend::getCenterId,centerId);
// BmsCenterExtend orgEx = this.getOne(lqw,false);
//代办新增
currentCenter = new BmsCenterExtend();
currentCenter.setSourceId(0L);
currentCenter.setCenterType(type);
currentCenter.setCenterId(centerId);
currentCenter.setCenterCode(centerDto.getCenterCode());

8
src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java

@ -461,9 +461,11 @@ public class TbsActivityController {
for (int i = 0; i < idPaths.size(); i++) {
String idPath = idPaths.get(i);
boolean isMatch = false;
for (TbsBudgetCondition budgetCondition : budgetConditions) {
if(idPath.contains(budgetCondition.getTargetLevelPathIds())){
isMatch = true;
if(budgetConditions!=null){
for (TbsBudgetCondition budgetCondition : budgetConditions) {
if(idPath.contains(budgetCondition.getTargetLevelPathIds())){
isMatch = true;
}
}
}
if(!isMatch){

Loading…
Cancel
Save