From b35e13921ebd66e2aa894b1961a33671350136dc Mon Sep 17 00:00:00 2001 From: Yen Date: Mon, 13 Mar 2023 10:03:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=90=E6=9C=AC=E4=B8=AD=E5=BF=83(=E5=8C=BA?= =?UTF-8?q?=E5=9F=9F=E6=B7=BB=E5=8A=A0=E4=BE=9B=E5=BA=94=E5=95=86=E8=B4=9F?= =?UTF-8?q?=E8=B4=A3=E4=BA=BA=E7=9A=84=E5=8C=BA=E5=9F=9F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bms/controller/BmsRegion2Controller.java | 139 +++++++++++------- .../bms/controller/BmsRegionController.java | 129 ++++++++++------ .../bms/service/BmsRegion2Service.java | 1 + .../modules/bms/service/BmsRegionService.java | 2 + .../service/impl/BmsRegion2ServiceImpl.java | 7 + .../service/impl/BmsRegionServiceImpl.java | 8 + 6 files changed, 186 insertions(+), 100 deletions(-) diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsRegion2Controller.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsRegion2Controller.java index ed32b9b2..e49fe41c 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsRegion2Controller.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsRegion2Controller.java @@ -11,6 +11,7 @@ import com.qs.serve.common.util.*; import com.qs.serve.modules.bms.entity.BmsRegion; import com.qs.serve.modules.bms.entity.BmsRegion2; import com.qs.serve.modules.bms.entity.BmsRegionUser; +import com.qs.serve.modules.bms.entity.BmsSupplier; import com.qs.serve.modules.bms.entity.bo.BmsRegionBatchBo; import com.qs.serve.modules.bms.entity.vo.BmsRegionTreeVo; import com.qs.serve.modules.bms.service.*; @@ -60,72 +61,102 @@ public class BmsRegion2Controller { * 树查询(当前负责人) * @return */ - private List treeByCurrentUser(){ + private List treeByCurrentUser(String supplierId){ String userId = AuthContextUtils.getSysUserId(); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(BmsRegionUser::getType,1); lqw.eq(BmsRegionUser::getUserId,userId); List regionUsers = bmsRegionUserService.list(lqw); List regionIds = regionUsers.stream().map(BmsRegionUser::getRegionId).collect(Collectors.toList()); + if(StringUtils.hasText(supplierId)){ + BmsSupplier supplier = bmsSupplierService.getById(supplierId); + regionIds.addAll(supplier.listBizRegionIds()); + } if(regionIds.size()>0){ List regionList = bmsRegion2Service.listByIds(regionIds); Map> listMap = regionList.stream().collect(Collectors.groupingBy(BmsRegion2::getLevel)); List list1 = listMap.get(1)==null?new ArrayList<>():listMap.get(1); List list2 = listMap.get(2)==null?new ArrayList<>():listMap.get(2); List list3 = listMap.get(3)==null?new ArrayList<>():listMap.get(3); - List list4 = listMap.get(3)==null?new ArrayList<>():listMap.get(4); - if (list4!=null){ - list4.forEach(obj4->{ - boolean exist = false; - for (BmsRegion2 obj3 : list3) { - if(obj3.getId().equals(obj4.getPid())){ - List childList = obj3.getChildNodes()==null?new ArrayList<>():obj3.getChildNodes(); - childList.add(obj4); - obj3.setChildNodes(childList); - exist = true; - break; - } - } - if(!exist){ - list3.add(obj4); - } - }); - } - list3.forEach(obj3->{ - boolean exist = false; - for (BmsRegion2 obj2 : list2) { - if(obj2.getId().equals(obj3.getPid())){ - List childList = obj2.getChildNodes()==null?new ArrayList<>():obj2.getChildNodes(); - childList.add(obj3); - obj2.setChildNodes(childList); - exist = true; - break; - } - } - if(!exist){ - list2.add(obj3); - } - }); - list2.forEach(obj2->{ - boolean exist = false; - for (BmsRegion2 obj1 : list1) { - if(obj1.getId().equals(obj2.getPid())){ - List childList = obj1.getChildNodes()==null?new ArrayList<>():obj1.getChildNodes(); - childList.add(obj2); - obj1.setChildNodes(childList); - exist = true; - break; + List list4 = listMap.get(4)==null?new ArrayList<>():listMap.get(4); + + List allList = new ArrayList<>(); + if(CollectionUtil.isNotEmpty(list1)){ + allList.addAll(list1); + List lv01Pids = list1.stream().map(BmsRegion2::getId).collect(Collectors.toList()); + List level02List = bmsRegion2Service.listChild(lv01Pids); + if(CollectionUtil.isNotEmpty(level02List)){ + allList.addAll(level02List); + //list2 去重 + list2 = removeExistList(list2, level02List); + List lv02Pids = level02List.stream().map(BmsRegion2::getId).collect(Collectors.toList()); + List level03List = bmsRegion2Service.listChild(lv02Pids); + if(CollectionUtil.isNotEmpty(level03List)){ + allList.addAll(level03List); + //list3 去重 + list3 = removeExistList(list3,level03List); + List lv03Pids = level03List.stream().map(BmsRegion2::getId).collect(Collectors.toList()); + List level04List = bmsRegion2Service.listChild(lv03Pids); + //list4 去重 + list4 = removeExistList(list4,level04List); + allList.addAll(level04List); } } - if(!exist){ - list1.add(obj2); + } + + if(CollectionUtil.isNotEmpty(list2)){ + List lv02Pids = list2.stream().map(BmsRegion2::getId).collect(Collectors.toList()); + List level03List = bmsRegion2Service.listChild(lv02Pids); + if(CollectionUtil.isNotEmpty(level03List)){ + allList.addAll(level03List); + //list3 去重 + list3 = removeExistList(list3,level03List); + List lv03Pids = level03List.stream().map(BmsRegion2::getId).collect(Collectors.toList()); + List level04List = bmsRegion2Service.listChild(lv03Pids); + //list4 去重 + list4 = removeExistList(list4,level04List); + allList.addAll(level04List); } - }); - return toTreeNodeList(list1); + list2.forEach(a->a.setPid("0")); + allList.addAll(list2); + } + + if(CollectionUtil.isNotEmpty(list3)){ + List lv03Pids = list3.stream().map(BmsRegion2::getId).collect(Collectors.toList()); + List level04List = bmsRegion2Service.listChild(lv03Pids); + //list4 去重 + list4 = removeExistList(list4,level04List); + allList.addAll(level04List); + list3.forEach(a->a.setPid("0")); + allList.addAll(list3); + } + + if(CollectionUtil.isNotEmpty(list4)){ + //list4 去重 + list4.forEach(a->a.setPid("0")); + allList.addAll(list4); + } + return toTreeNodeList2(allList); + } return null; } + /** + * 移除包含的列 + * @param settingList + * @param byPidLoadList + * @return + */ + private List removeExistList(List settingList, List byPidLoadList) { + if(CollectionUtil.isNotEmpty(settingList)&&CollectionUtil.isNotEmpty(byPidLoadList)){ + settingList = settingList.stream().filter(a-> + byPidLoadList.stream().noneMatch(b->b.getId().equals(a.getId())) + ).collect(Collectors.toList()); + } + return settingList; + } + /** * 翻页查询 * @param param @@ -147,29 +178,23 @@ public class BmsRegion2Controller { */ @GetMapping("/tree") @PreAuthorize("hasRole('bms:region:query')") - public R> getTree(Integer listUserFlag,Integer loadByCurrent){ + public R> getTree(Integer listUserFlag,Integer loadByCurrent,String supplierId){ if(loadByCurrent!=null&&loadByCurrent.equals(1)){ - return R.ok(treeByCurrentUser()); + return R.ok(treeByCurrentUser(supplierId)); } return R.ok(bmsRegion2Service.getTree(listUserFlag!=null&&listUserFlag.equals(1))); } - private List toTreeNodeList(List list){ + private List toTreeNodeList2(List list){ List treeVoList = new ArrayList<>(); for (BmsRegion2 region2 : list) { BmsRegionTreeVo treeNode = CopierUtil.copy(region2,new BmsRegionTreeVo()); treeNode.setId(region2.getId()); treeNode.setParentId(region2.getPid()); treeNode.setSort(0); - if(CollectionUtil.isNotEmpty(region2.getChildNodes())){ - List childList = toTreeNodeList(region2.getChildNodes()); - for (BmsRegionTreeVo treeVo : childList) { - treeNode.addChildren(treeVo); - } - } treeVoList.add(treeNode); } - return treeVoList; + return TreeUtil.build(treeVoList,TreeUtil.DEFAULT_PID_STRING); } /** diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java index 78ba821c..bc221ee2 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java @@ -80,81 +80,124 @@ public class BmsRegionController { */ @GetMapping("/tree") @PreAuthorize("hasRole('bms:region:query')") - public R> getTree(Integer listUserFlag,Integer loadByCurrent){ + public R> getTree(Integer listUserFlag,Integer loadByCurrent,String supplierId){ if(loadByCurrent!=null&&loadByCurrent.equals(1)){ - return R.ok(treeByCurrentUser()); + return R.ok(treeByCurrentUser(supplierId)); } return R.ok(bmsRegionService.getTree(listUserFlag!=null&&listUserFlag.equals(1))); } - public List treeByCurrentUser(){ + public List treeByCurrentUser(String supplierId){ String userId = AuthContextUtils.getSysUserId(); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(BmsRegionUser::getType,0); lqw.eq(BmsRegionUser::getUserId,userId); List regionUsers = bmsRegionUserService.list(lqw); List regionIds = regionUsers.stream().map(BmsRegionUser::getRegionId).collect(Collectors.toList()); + if(StringUtils.hasText(supplierId)){ + BmsSupplier supplier = bmsSupplierService.getById(supplierId); + regionIds.addAll(supplier.listSaleRegionIds()); + } if(regionIds.size()>0){ List regionList = bmsRegionService.listByIds(regionIds); Map> listMap = regionList.stream().collect(Collectors.groupingBy(BmsRegion::getLevel)); List list1 = listMap.get(1)==null?new ArrayList<>():listMap.get(1); List list2 = listMap.get(2)==null?new ArrayList<>():listMap.get(2); List list3 = listMap.get(3)==null?new ArrayList<>():listMap.get(3); - list3.forEach(obj3->{ - boolean exist = false; - for (BmsRegion obj2 : list2) { - if(obj2.getId().equals(obj3.getPid())){ - List childList = obj2.getChildNodes()==null?new ArrayList<>():obj2.getChildNodes(); - childList.add(obj3); - obj2.setChildNodes(childList); - exist = true; - break; - } - } - if(!exist){ - list2.add(obj3); - } - }); - list2.forEach(obj2->{ - boolean exist = false; - for (BmsRegion obj1 : list1) { - if(obj1.getId().equals(obj2.getPid())){ - List childList = obj1.getChildNodes()==null?new ArrayList<>():obj1.getChildNodes(); - childList.add(obj2); - obj1.setChildNodes(childList); - exist = true; - break; + List list4 = listMap.get(4)==null?new ArrayList<>():listMap.get(4); + + List allList = new ArrayList<>(); + if(CollectionUtil.isNotEmpty(list1)){ + allList.addAll(list1); + List lv01Pids = list1.stream().map(BmsRegion::getId).collect(Collectors.toList()); + List level02List = bmsRegionService.listChild(lv01Pids); + if(CollectionUtil.isNotEmpty(level02List)){ + allList.addAll(level02List); + //list2 去重 + list2 = removeExistList(list2, level02List); + List lv02Pids = level02List.stream().map(BmsRegion::getId).collect(Collectors.toList()); + List level03List = bmsRegionService.listChild(lv02Pids); + if(CollectionUtil.isNotEmpty(level03List)){ + allList.addAll(level03List); + //list3 去重 + list3 = removeExistList(list3,level03List); + List lv03Pids = level03List.stream().map(BmsRegion::getId).collect(Collectors.toList()); + List level04List = bmsRegionService.listChild(lv03Pids); + //list4 去重 + list4 = removeExistList(list4,level04List); + allList.addAll(level04List); } } - if(!exist){ - list1.add(obj2); + } + + if(CollectionUtil.isNotEmpty(list2)){ + List lv02Pids = list2.stream().map(BmsRegion::getId).collect(Collectors.toList()); + List level03List = bmsRegionService.listChild(lv02Pids); + if(CollectionUtil.isNotEmpty(level03List)){ + allList.addAll(level03List); + //list3 去重 + list3 = removeExistList(list3,level03List); + List lv03Pids = level03List.stream().map(BmsRegion::getId).collect(Collectors.toList()); + List level04List = bmsRegionService.listChild(lv03Pids); + //list4 去重 + list4 = removeExistList(list4,level04List); + allList.addAll(level04List); } - }); + list2.forEach(a->a.setPid("0")); + allList.addAll(list2); + } + + if(CollectionUtil.isNotEmpty(list3)){ + List lv03Pids = list3.stream().map(BmsRegion::getId).collect(Collectors.toList()); + List level04List = bmsRegionService.listChild(lv03Pids); + //list4 去重 + list4 = removeExistList(list4,level04List); + allList.addAll(level04List); + list3.forEach(a->a.setPid("0")); + allList.addAll(list3); + } + + if(CollectionUtil.isNotEmpty(list4)){ + //list4 去重 + list4.forEach(a->a.setPid("0")); + allList.addAll(list4); + } + return toTreeNodeList2(allList); - return toTreeNodeList(list1); } return null; } - private List toTreeNodeList(List list){ + /** + * 移除包含的列 + * @param settingList + * @param byPidLoadList + * @return + */ + private List removeExistList(List settingList, List byPidLoadList) { + if(CollectionUtil.isNotEmpty(settingList)&&CollectionUtil.isNotEmpty(byPidLoadList)){ + settingList = settingList.stream().filter(a-> + byPidLoadList.stream().noneMatch(b->b.getId().equals(a.getId())) + ).collect(Collectors.toList()); + } + return settingList; + } + + + private List toTreeNodeList2(List list){ List treeVoList = new ArrayList<>(); - for (BmsRegion region : list) { - BmsRegionTreeVo treeNode = CopierUtil.copy(region,new BmsRegionTreeVo()); - treeNode.setId(region.getId()); - treeNode.setParentId(region.getPid()); + for (BmsRegion region2 : list) { + BmsRegionTreeVo treeNode = CopierUtil.copy(region2,new BmsRegionTreeVo()); + treeNode.setId(region2.getId()); + treeNode.setParentId(region2.getPid()); treeNode.setSort(0); - if(CollectionUtil.isNotEmpty(region.getChildNodes())){ - List childList = toTreeNodeList(region.getChildNodes()); - for (BmsRegionTreeVo treeVo : childList) { - treeNode.addChildren(treeVo); - } - } treeVoList.add(treeNode); } - return treeVoList; + return TreeUtil.build(treeVoList,TreeUtil.DEFAULT_PID_STRING); } + /** * 根据ID查询 * @param id diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsRegion2Service.java b/src/main/java/com/qs/serve/modules/bms/service/BmsRegion2Service.java index 889a40d6..22343149 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/BmsRegion2Service.java +++ b/src/main/java/com/qs/serve/modules/bms/service/BmsRegion2Service.java @@ -17,6 +17,7 @@ public interface BmsRegion2Service extends IService { List getTree(boolean listUserFlag); List listChild(String pid); + List listChild(List pid); BmsRegion2 getByCode(String code); diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java b/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java index ab55c859..58636adf 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java +++ b/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java @@ -18,6 +18,8 @@ public interface BmsRegionService extends IService { List listChild(String pid); + List listChild(List pids); + BmsRegion getByCode(String code); BmsRegion getByName(String name,Integer level); diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegion2ServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegion2ServiceImpl.java index a47d07ce..bb86e5f9 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegion2ServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegion2ServiceImpl.java @@ -106,6 +106,13 @@ public class BmsRegion2ServiceImpl extends ServiceImpl listChild(List pid) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(BmsRegion2::getPid,pid); + return this.list(lqw); + } + @Override public BmsRegion2 getByCode(String code) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java index 55c4c017..eef10e83 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java @@ -115,6 +115,14 @@ public class BmsRegionServiceImpl extends ServiceImpl return this.list(lqw); } + + @Override + public List listChild(List pid) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(BmsRegion::getPid,pid); + return this.list(lqw); + } + @Override public BmsRegion getByCode(String code) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();