From 1108ae921a82abe14a009273add46e35c3b3bd69 Mon Sep 17 00:00:00 2001 From: Yen Date: Tue, 18 Jul 2023 16:35:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=90=E6=9C=AC=E4=B8=AD=E5=BF=83=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BmsCenterExtendController.java | 12 ++ .../modules/bms/entity/BmsCenterExtend.java | 4 + .../bms/entity/BmsCenterExtendBuild.java | 6 + .../bms/entity/vo/BmsCenterExtendTreeVo.java | 19 ++- .../bms/mapper/BmsCenterExtendMapper.java | 6 + .../impl/BmsCenterExtendBuildServiceImpl.java | 58 ++++++--- .../impl/BmsCenterExtendServiceImpl.java | 113 ++++++++++++++---- .../tbs/controller/TbsActivityController.java | 8 +- 8 files changed, 185 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsCenterExtendController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsCenterExtendController.java index 0265560a..fc437c9c 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsCenterExtendController.java +++ b/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(); + } + } diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsCenterExtend.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsCenterExtend.java index d9cef685..4e14bdba 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsCenterExtend.java +++ b/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; diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsCenterExtendBuild.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsCenterExtendBuild.java index 5be73f11..338a8216 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsCenterExtendBuild.java +++ b/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字") diff --git a/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsCenterExtendTreeVo.java b/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsCenterExtendTreeVo.java index 178780f8..c7c823a8 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/vo/BmsCenterExtendTreeVo.java +++ b/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 children; + + private String pathCenterIds; + + private String pathCenterCodes; + + private String pathCenterNames; /** 来源id */ @NotNull(message = "来源id不能为空") diff --git a/src/main/java/com/qs/serve/modules/bms/mapper/BmsCenterExtendMapper.java b/src/main/java/com/qs/serve/modules/bms/mapper/BmsCenterExtendMapper.java index 26b8103c..c22d6d00 100644 --- a/src/main/java/com/qs/serve/modules/bms/mapper/BmsCenterExtendMapper.java +++ b/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 { + @Select("select center_type,center_id,source_id,id from bms_center_extend GROUP BY center_type,center_id HAVING count(1)=1") + List selectTopList(); + } diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsCenterExtendBuildServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsCenterExtendBuildServiceImpl.java index e5ad992f..d7eff705 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsCenterExtendBuildServiceImpl.java +++ b/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 treeVoList = centerExtendService.transferTree(); - List buildList = new ArrayList<>(); - this.recursionBuildExtendCenter(treeVoList, buildList, null); + List buildTreeList = new ArrayList<>(); + List buildDataList = new ArrayList<>(); + this.recursionBuildExtendCenter(treeVoList,treeVoList, buildTreeList,buildDataList, null); + this.saveBatch(buildTreeList); + this.saveBatch(buildDataList); } - private void recursionBuildExtendCenter(List allTreeList, List buildList, BmsCenterExtendBuild parent) { + private void recursionBuildExtendCenter(List allTreeList,List childList, List buildTreeList,List 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 parents = new ArrayList<>(); this.filterParents(allTreeList, source, parents); @@ -75,16 +91,28 @@ public class BmsCenterExtendBuildServiceImpl extends ServiceImpl allTreeList, BmsCenterExtendTreeVo source, List 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; diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsCenterExtendServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsCenterExtendServiceImpl.java index af50abd3..a638f5b8 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsCenterExtendServiceImpl.java +++ b/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 transferTree() { + //查询最高层级 + List rootList = this.baseMapper.selectTopList(); + rootList = rootList.stream().filter(a->a.getSourceId().equals(0L)).collect(Collectors.toList()); + + //查询所有减少查询 List listAll = this.list(); - List 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 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> listMapBySourId = listAll.stream() + .collect(Collectors.groupingBy(BmsCenterExtend::getSourceId)); + + //停用的节点 + List 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> listMapBySourId, List stopRows, + BmsCenterExtendTreeVo treeVo, Long sourceId) { + List sourceList = listMapBySourId.get(sourceId); + if(CollectionUtil.isNotEmpty(sourceList)){ + List 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 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()); diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java index 20dae1f7..92d1fc68 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java +++ b/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){