From 4651e3e2273287c44a972f705aa2cb678c580a9d Mon Sep 17 00:00:00 2001 From: Yen Date: Thu, 18 May 2023 16:03:44 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=8E=92=E5=BA=8F=E4=BC=98=E5=85=88?= =?UTF-8?q?=E7=BA=A7=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bms/controller/BmsChannelController.java | 6 +- .../controller/BmsChannelPointController.java | 10 +- .../bms/controller/BmsRegion2Controller.java | 4 +- .../bms/controller/BmsSubjectController.java | 26 ++-- .../bms/controller/BmsSupplierController.java | 18 ++- .../BmsSupplierVisitAddressController.java | 8 +- .../controller/my/BmsChannelMyController.java | 43 ++---- .../my/BmsChannelPointMyController.java | 53 ++++--- .../my/BmsSupplierMyController.java | 16 ++ .../serve/modules/bms/entity/BmsChannel.java | 4 + .../modules/bms/entity/BmsChannelPoint.java | 3 + .../serve/modules/bms/entity/BmsSupplier.java | 2 +- .../bms/entity/bo/BmsChannelPointBo.java | 2 - .../impl/BmsChannelPointServiceImpl.java | 14 +- .../impl/BmsSubjectRegionServiceImpl.java | 5 + .../modules/his/entity/HisUserSupplier.java | 4 + .../tbs/common/dto/CostSortWrapper.java | 63 ++++++++ .../tbs/common/util/CostSortWrapperUtil.java | 137 ++++++++++++++++++ .../controller/TbsCostApplyController.java | 3 +- .../service/TbsBudgetApplicationService.java | 70 +++++---- .../mapper/bms/BmsSupplierMapper.xml | 4 +- .../mapper/his/HisUserSupplierMapper.xml | 7 + 22 files changed, 386 insertions(+), 116 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/tbs/common/dto/CostSortWrapper.java create mode 100644 src/main/java/com/qs/serve/modules/tbs/common/util/CostSortWrapperUtil.java diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelController.java index 80200fd8..a57a36b9 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelController.java @@ -8,6 +8,7 @@ import com.qs.serve.common.model.enums.BizType; import com.qs.serve.common.model.enums.SystemModule; import com.qs.serve.common.util.PageUtil; import com.qs.serve.modules.bms.common.MasterUserType; +import com.qs.serve.modules.bms.controller.my.BmsChannelMyController; import com.qs.serve.modules.bms.entity.BmsChannelPoint; import com.qs.serve.modules.bms.entity.BmsMasterUser; import com.qs.serve.modules.bms.entity.BmsSupplierVisitType; @@ -47,7 +48,7 @@ public class BmsChannelController { private HisUserChannelPointService hisUserChannelPointService; private BmsMasterUserMapper bmsMasterUserMapper; private BmsSupplierChannelService bmsSupplierChannelService; - + private BmsChannelMyController bmsChannelMyController; /** * 翻页 * @param param @@ -56,6 +57,9 @@ public class BmsChannelController { @GetMapping("/page") @PreAuthorize("hasRole('bms:channel:query')") public R> getPage(BmsChannel param){ + if(param.getLoadByCurrent()!=null&¶m.getLoadByCurrent().equals(1)){ + return bmsChannelMyController.getPage4UnderAndMine(param); + } PageUtil.startPage(); LambdaQueryWrapper channelWrapper = new LambdaQueryWrapper<>(param); channelWrapper.orderByDesc(BmsChannel::getCreateTime); diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelPointController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelPointController.java index 242fd3b5..295dae72 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelPointController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsChannelPointController.java @@ -16,6 +16,7 @@ import com.qs.serve.modules.baz.common.BazTargetTypeConsts; import com.qs.serve.modules.baz.entity.BazVisitInfo; import com.qs.serve.modules.baz.service.BazVisitInfoService; import com.qs.serve.modules.bms.common.MasterUserType; +import com.qs.serve.modules.bms.controller.my.BmsChannelPointMyController; import com.qs.serve.modules.bms.entity.BmsChannel; import com.qs.serve.modules.bms.entity.BmsRegion; import com.qs.serve.modules.bms.entity.BmsRegion2; @@ -28,6 +29,7 @@ import com.qs.serve.modules.bms.service.*; import com.qs.serve.modules.his.service.HisUserChannelPointService; import com.qs.serve.modules.sys.common.enums.BusinessLogType; import com.qs.serve.modules.sys.service.SysBusinessLogService; +import com.qs.serve.modules.sys.service.SysPostUserService; import com.qs.serve.modules.tbs.entity.TbsActivityChannelPoint; import com.qs.serve.modules.tbs.service.TbsActivityChannelPointService; import lombok.AllArgsConstructor; @@ -62,6 +64,8 @@ public class BmsChannelPointController { private BmsChannelPointMapper channelPointMapper; private HisUserChannelPointService hisUserChannelPointService; private BmsMasterUserService bmsMasterUserService; + private SysPostUserService postUserService; + private BmsChannelPointMyController bmsChannelPointMyController; /** * 获取我负责的网点 @@ -71,7 +75,8 @@ public class BmsChannelPointController { @GetMapping("/page4Visit") public R> getPage4Visit(BmsPointVisitSo param){ String sysUserId = AuthContextUtils.getSysUserId(); - List userIds = Arrays.asList(sysUserId); + List userIds = postUserService.listByChildIds(sysUserId); + userIds.add(sysUserId); List list = channelPointMapper.selectUserPointList4Visit(param, userIds,new RowParam(true)); Long count = channelPointMapper.selectCountUserPointList4Visit(param,userIds); for (BmsUserPoint4VisitVo visitVo : list) { @@ -93,6 +98,9 @@ public class BmsChannelPointController { @GetMapping("/page") @PreAuthorize("hasRole('bms:channelPoint:query')") public R> getPage(BmsChannelPoint param){ + if(param.getLoadByCurrent()!=null&¶m.getLoadByCurrent().equals(1)){ + return bmsChannelPointMyController.page4UnderAndMine(param); + } PageUtil.startPage(); List list = bmsChannelPointService.selectChannelPointList(param); for (BmsChannelPoint channelPoint : list) { 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 6c5f86da..2b1bdc09 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 @@ -74,7 +74,9 @@ public class BmsRegion2Controller { List regionIds = regionUsers.stream().map(BmsRegionUser::getRegionId).collect(Collectors.toList()); if(StringUtils.hasText(supplierId)){ BmsSupplier supplier = bmsSupplierService.getById(supplierId); - regionIds.addAll(supplier.listBizRegionIds()); + if(supplier.listBizRegionIds()!=null){ + regionIds.addAll(supplier.listBizRegionIds()); + } } if(regionIds.size()>0){ List regionList = bmsRegion2Service.listByIds(regionIds); diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java index f20325ad..96a626bc 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java @@ -67,18 +67,20 @@ public class BmsSubjectController { treeVoList = TreeUtil.buildByRecursive(treeVoList,TreeUtil.DEFAULT_PID_STRING); if(StringUtils.hasText(supplierId)&&!supplierId.equals("0")){ BmsSupplier bmsSupplier = bmsSupplierService.getById(supplierId); - LambdaQueryWrapper subjectLqw = new LambdaQueryWrapper<>(); - subjectLqw.eq(BmsSubject::getBizRegionFlag,0).or().eq(BmsSubject::getSaleRegionFlag,0); - List bmsSubjectList = bmsSubjectService.list(subjectLqw); - List subjectRegionList = bmsSubjectRegionService.listByRegionIds(bmsSupplier.listBizRegionIds(),1); - List subjectRegionList2 = bmsSubjectRegionService.listByRegionIds(bmsSupplier.listSaleRegionIds(),0); - subjectRegionList.addAll(subjectRegionList2); - List subjectIds = bmsSubjectList.stream().map(a->a.getId().toString()).collect(Collectors.toList()); - //加载允许适用的科目 - List subjectIds2 = subjectRegionList.stream().map(a->a.getSubjectId().toString()) - .distinct().collect(Collectors.toList()); - subjectIds.addAll(subjectIds2); - recursionToSetSelectAble(treeVoList, subjectIds); + if(bmsSupplier!=null){ + LambdaQueryWrapper subjectLqw = new LambdaQueryWrapper<>(); + subjectLqw.eq(BmsSubject::getBizRegionFlag,0).or().eq(BmsSubject::getSaleRegionFlag,0); + List bmsSubjectList = bmsSubjectService.list(subjectLqw); + List subjectRegionList = bmsSubjectRegionService.listByRegionIds(bmsSupplier.listBizRegionIds(),1); + List subjectRegionList2 = bmsSubjectRegionService.listByRegionIds(bmsSupplier.listSaleRegionIds(),0); + subjectRegionList.addAll(subjectRegionList2); + List subjectIds = bmsSubjectList.stream().map(a->a.getId().toString()).collect(Collectors.toList()); + //加载允许适用的科目 + List subjectIds2 = subjectRegionList.stream().map(a->a.getSubjectId().toString()) + .distinct().collect(Collectors.toList()); + subjectIds.addAll(subjectIds2); + recursionToSetSelectAble(treeVoList, subjectIds); + } } return R.ok(treeVoList); } diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java index c8a9ca68..3d45995d 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java @@ -19,10 +19,12 @@ import com.qs.serve.modules.bms.mapper.BmsSupplierMapper; import com.qs.serve.modules.bms.service.*; import com.qs.serve.modules.his.entity.HisUserSupplier; import com.qs.serve.modules.his.service.HisUserSupplierService; +import com.qs.serve.modules.sys.entity.SysPostUser; import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.entity.bo.SysRelateSuppliersParam; import com.qs.serve.modules.sys.entity.bo.SysRelateSuppliersParam2; import com.qs.serve.modules.sys.entity.dto.SysUserSimpleVo; +import com.qs.serve.modules.sys.service.SysPostUserService; import com.qs.serve.modules.sys.service.SysUserService; import com.qs.serve.modules.tbs.common.TbsCenterType; import com.qs.serve.modules.tbs.entity.TbsBudget; @@ -56,6 +58,7 @@ public class BmsSupplierController { private BmsRegionService bmsRegionService; private BmsRegion2Service bmsRegion2Service; private SysUserService sysUserService; + private SysPostUserService sysPostUserService; private BmsSupplierMapper bmsSupplierMapper; private HisUserSupplierService hisUserSupplierService; private RedisService redisService; @@ -70,7 +73,13 @@ public class BmsSupplierController { @PreAuthorize("hasRole('bms:supplier:query')") public R> getList(BmsSupplier param){ String userId = param.getUserId(); - param.setCurrUserId(userId); + if(param.getLoadByCurrent()!=null&¶m.getLoadByCurrent().equals(1)){ + List userIds = sysPostUserService.listByChildIds(userId); + userIds.add(userId); + param.setSelectUserIds(userIds); + }else { + param.setCurrUserId(userId); + } List list = bmsSupplierService.selectSupplierList(param); initSupplierList(list); initParentList(list); @@ -95,10 +104,13 @@ public class BmsSupplierController { public R> getPage(@RequestBody BmsSupplier param){ if(param.getLoadByCurrent()!=null&¶m.getLoadByCurrent().equals(1)){ String userId = AuthContextUtils.getSysUserId(); - //初始化 hisUserSupplierService.initByUserId(userId,false); - HisUserSupplier userSupplier = param.toHisUserSupplier(userId,null); + //初始化 + List userIds = sysPostUserService.listByChildIds(userId); + userIds.add(userId); + HisUserSupplier userSupplier = param.toHisUserSupplier(null,null); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(userSupplier); + lqw.in(HisUserSupplier::getUserId,userIds); lqw.ne(HisUserSupplier::getSupplierId,0); PageHelper.startPage(param.getPageNum(),param.getPageSize()); List list = hisUserSupplierService.list(lqw); diff --git a/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierVisitAddressController.java b/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierVisitAddressController.java index 1f217ea6..8abc2d0d 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierVisitAddressController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierVisitAddressController.java @@ -25,6 +25,7 @@ import com.qs.serve.modules.his.mapper.HisUserSupplierMapper; import com.qs.serve.modules.his.service.HisUserSupplierService; import com.qs.serve.modules.sys.common.enums.BusinessLogType; import com.qs.serve.modules.sys.service.SysBusinessLogService; +import com.qs.serve.modules.sys.service.SysPostUserService; import com.qs.serve.modules.sys.service.SysUserService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -56,6 +57,7 @@ public class BmsSupplierVisitAddressController { private HisUserSupplierService hisUserSupplierService; private HisUserSupplierMapper hisUserSupplierMapper; private BazVisitFlowService bazVisitFlowService; + private SysPostUserService sysPostUserService; /** @@ -68,14 +70,16 @@ public class BmsSupplierVisitAddressController { String userId = AuthContextUtils.getSysUserId(); hisUserSupplierService.initByUserId(userId,false); HisUserSupplier userSupplier = new HisUserSupplier(); - userSupplier.setUserId(userId); + //userSupplier.setUserId(userId); userSupplier.setSupplierName(param.getSupplierName()); userSupplier.setSupplierCode(param.getSupplierCode()); userSupplier.setQueryAddress(param.getAddress()); userSupplier.setQueryValue(param.getSearchValue()); userSupplier.setLocalX(param.getLocalX()); userSupplier.setLocalY(param.getLocalY()); - + List userIds = sysPostUserService.listByChildIds(userId); + userIds.add(userId); + userSupplier.setSelectUserIds(userIds); PageHelper.startPage(param.getPageNum(),param.getPageSize()); List list = hisUserSupplierMapper.selectHisUserSupplierAddressList(userSupplier); diff --git a/src/main/java/com/qs/serve/modules/bms/controller/my/BmsChannelMyController.java b/src/main/java/com/qs/serve/modules/bms/controller/my/BmsChannelMyController.java index c6230284..32227ffa 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/my/BmsChannelMyController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/my/BmsChannelMyController.java @@ -58,20 +58,6 @@ public class BmsChannelMyController { */ @GetMapping("/page") public R> getPage(BmsChannel param){ -// LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); -// lqw.eq(BmsMasterUser::getUserId, AuthContextUtils.getSysUserId()); -// lqw.eq(BmsMasterUser::getType,MasterUserType.Channel); -// lqw.select(BmsMasterUser::getTargetId); -// List masterUsers = bmsMasterUserService.list(lqw); -// List targetIds = masterUsers.stream().map(BmsMasterUser::getTargetId).distinct().collect(Collectors.toList()); -// if(CollectionUtil.isEmpty(targetIds)){ -// return R.byEmptyList(); -// } -// PageUtil.startPage(); -// LambdaQueryWrapper channelWrapper = new LambdaQueryWrapper<>(param); -// channelWrapper.orderByDesc(BmsChannel::getCreateTime); -// channelWrapper.in(BmsChannel::getId,targetIds); -// List list = bmsChannelService.list(channelWrapper); PageUtil.startPage(); List list = bmsChannelService.selectChannelList(param, Arrays.asList(AuthContextUtils.getSysUserId())); return R.byPageHelperList(list); @@ -90,20 +76,21 @@ public class BmsChannelMyController { if(CollectionUtil.isEmpty(userIds)){ return R.byEmptyList(); } -// LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); -// lqw.in(BmsMasterUser::getUserId, userIds); -// lqw.eq(BmsMasterUser::getType,MasterUserType.Channel); -// lqw.select(BmsMasterUser::getTargetId); -// List masterUsers = bmsMasterUserService.list(lqw); -// List targetIds = masterUsers.stream().map(BmsMasterUser::getTargetId).distinct().collect(Collectors.toList()); -// if(CollectionUtil.isEmpty(targetIds)){ -// return R.byEmptyList(); -// } -// PageUtil.startPage(); -// LambdaQueryWrapper channelWrapper = new LambdaQueryWrapper<>(param); -// channelWrapper.orderByDesc(BmsChannel::getCreateTime); -// channelWrapper.in(BmsChannel::getId,targetIds); -// List list = bmsChannelService.list(channelWrapper); + PageUtil.startPage(); + List list = bmsChannelService.selectChannelList(param, userIds); + return R.byPageHelperList(list); + } + + /** + * 翻页(下属负责的渠道) + * @param param + * @return + */ + @GetMapping("/page4UnderAndMine") + public R> getPage4UnderAndMine(BmsChannel param){ + String loginUserId = AuthContextUtils.getSysUserId(); + List userIds = postUserService.listByChildIds(loginUserId); + userIds.add(loginUserId); PageUtil.startPage(); List list = bmsChannelService.selectChannelList(param, userIds); return R.byPageHelperList(list); diff --git a/src/main/java/com/qs/serve/modules/bms/controller/my/BmsChannelPointMyController.java b/src/main/java/com/qs/serve/modules/bms/controller/my/BmsChannelPointMyController.java index 9153396b..60d7ea07 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/my/BmsChannelPointMyController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/my/BmsChannelPointMyController.java @@ -67,10 +67,26 @@ public class BmsChannelPointMyController { */ @GetMapping("/page") public R> getPage(BmsChannelPoint param){ - /*param.setUserId(AuthContextUtils.getSysUserId()); - param.setTenantId(AuthContextUtils.getTenant()); - List list = bmsChannelPointService.selectChannelPointMyList(param); - for (BmsChannelPoint channelPoint : list) { + List list = bmsChannelPointService.selectChannelPointMyList(param, Arrays.asList(AuthContextUtils.getSysUserId())); + Long count = bmsChannelPointService.selectCountChannelPointMyList(param, Arrays.asList(AuthContextUtils.getSysUserId())); + return R.byPageList(count,list); + } + + + + /** + * 下属负责的网店 + * @param param + * @return + */ + @GetMapping("/page4Under") + public R> getPage4Under(BmsChannelPoint param){ + String loginUserId = AuthContextUtils.getSysUserId(); + List userIds = postUserService.listByChildIds(loginUserId); + if(userIds.size() == 0){return R.byEmptyList();} + List pageList = bmsChannelPointService.selectChannelPointMyList(param, userIds); + Long count = bmsChannelPointService.selectCountChannelPointMyList(param, userIds); + for (BmsChannelPoint channelPoint : pageList) { if(StringUtils.hasText(channelPoint.getBizRegionPath())){ String[] bizRegions = channelPoint.getBizRegionPath().split("_"); if(bizRegions.length>0){ @@ -83,41 +99,22 @@ public class BmsChannelPointMyController { channelPoint.setSaleRegionName(regions[regions.length-1]); } } - }*/ - List list = bmsChannelPointService.selectChannelPointMyList(param, Arrays.asList(AuthContextUtils.getSysUserId())); - Long count = bmsChannelPointService.selectCountChannelPointMyList(param, Arrays.asList(AuthContextUtils.getSysUserId())); - return R.byPageList(count,list); + } + return R.byPageList(count,pageList); } - - /** * 下属负责的网店 * @param param * @return */ - @GetMapping("/page4Under") - public R> getPage4Under(BmsChannelPoint param){ + @GetMapping("/page4UnderAndMine") + public R> page4UnderAndMine(BmsChannelPoint param){ String loginUserId = AuthContextUtils.getSysUserId(); List userIds = postUserService.listByChildIds(loginUserId); - //旧版本加载方式 -// param.setUserIdList(userIds); -// LambdaQueryWrapper rulqw = new LambdaQueryWrapper<>(); -// rulqw.select(BmsRegionUser::getPathIds,BmsRegionUser::getId); -// rulqw.eq(BmsRegionUser::getUserId,loginUserId); -// List regionUserList = bmsRegionUserService.list(rulqw); -// if(CollectionUtil.isNotEmpty(regionUserList)){ -// List regionPaths = regionUserList.stream().map(BmsRegionUser::getPathIds) -// .filter(StringUtils::hasText).distinct().collect(Collectors.toList()); -// param.setSourceIdsList(regionPaths); -// } -// PageUtil.startPage(); -// param.setTenantId(AuthContextUtils.getTenant()); -// List list = bmsChannelPointService.selectChannelPointMyUnderList(param); - //新版本加载方式 + userIds.add(loginUserId); List pageList = bmsChannelPointService.selectChannelPointMyList(param, userIds); Long count = bmsChannelPointService.selectCountChannelPointMyList(param, userIds); - for (BmsChannelPoint channelPoint : pageList) { if(StringUtils.hasText(channelPoint.getBizRegionPath())){ String[] bizRegions = channelPoint.getBizRegionPath().split("_"); diff --git a/src/main/java/com/qs/serve/modules/bms/controller/my/BmsSupplierMyController.java b/src/main/java/com/qs/serve/modules/bms/controller/my/BmsSupplierMyController.java index d5b421b3..a43ef17a 100644 --- a/src/main/java/com/qs/serve/modules/bms/controller/my/BmsSupplierMyController.java +++ b/src/main/java/com/qs/serve/modules/bms/controller/my/BmsSupplierMyController.java @@ -70,5 +70,21 @@ public class BmsSupplierMyController { return R.byPageHelperList(list,supplierList); } + /** + * 我的和下属的客户,翻页查询 + * @param param + * @return + */ + @GetMapping("/underlingAndMinePage") + public R> getUnderlingAndMinePage(BmsSupplier param){ + List childIds = postUserService.listByChildIds(AuthContextUtils.getSysUserId()); + childIds.add(AuthContextUtils.getSysUserId()); + param.setSelectUserIds(childIds); + param.setSelectUserIdsFlag(true); + List list = hisUserSupplierService.selectSupplier(param,true); + List supplierList = list.stream().map(HisUserSupplier::toSupplier).collect(Collectors.toList()); + return R.byPageHelperList(list,supplierList); + } + } diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsChannel.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsChannel.java index 1fc8056c..ed17f74d 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsChannel.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsChannel.java @@ -82,5 +82,9 @@ public class BmsChannel implements Serializable { /** 可投放费用标识 */ private Integer costFlag; + /** 值=1,过滤当前用户及下属负责数据 */ + @TableField(exist = false) + private Integer loadByCurrent; + } diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsChannelPoint.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsChannelPoint.java index b6d68f25..252e07ba 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsChannelPoint.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsChannelPoint.java @@ -180,5 +180,8 @@ public class BmsChannelPoint implements Serializable { @TableField(exist = false) private List userIdList; + /** 值=1,过滤当前用户及下属负责数据 */ + @TableField(exist = false) + private Integer loadByCurrent; } diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java index 08d034ea..22ffb4d8 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java @@ -199,7 +199,7 @@ public class BmsSupplier implements Serializable { private String searchUserCode; /** - * 值=1,过滤当前用户负责数据 + * 值=1,过滤当前用户及下属负责数据 */ @TableField(exist = false) private Integer loadByCurrent; diff --git a/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsChannelPointBo.java b/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsChannelPointBo.java index 331ba3bf..d946af0b 100644 --- a/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsChannelPointBo.java +++ b/src/main/java/com/qs/serve/modules/bms/entity/bo/BmsChannelPointBo.java @@ -57,11 +57,9 @@ public class BmsChannelPointBo { private String address; /** 销售区域id */ - @NotNull(message = "销售区域id不能为空") private String saleRegionId; /** 行政区域id */ - @NotNull(message = "行政区域id不能为空") private String bizRegionId; /** 备注 */ diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsChannelPointServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsChannelPointServiceImpl.java index 957994ab..07429ac7 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsChannelPointServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsChannelPointServiceImpl.java @@ -64,13 +64,17 @@ public class BmsChannelPointServiceImpl extends ServiceImpl listByRegionIds(List regionIds, Integer regionType) { + if(CollectionUtil.isEmpty(regionIds)){ + return new ArrayList<>(); + } LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.in(BmsSubjectRegion::getRegionId,regionIds); lqw.eq(BmsSubjectRegion::getType,regionType); diff --git a/src/main/java/com/qs/serve/modules/his/entity/HisUserSupplier.java b/src/main/java/com/qs/serve/modules/his/entity/HisUserSupplier.java index 8710f734..7969e883 100644 --- a/src/main/java/com/qs/serve/modules/his/entity/HisUserSupplier.java +++ b/src/main/java/com/qs/serve/modules/his/entity/HisUserSupplier.java @@ -16,6 +16,7 @@ import org.springframework.format.annotation.DateTimeFormat; import javax.validation.constraints.NotNull; import javax.validation.constraints.NotBlank; +import java.util.List; /** * 供应商负责人 实体类 @@ -110,6 +111,9 @@ public class HisUserSupplier implements Serializable { @TableField(exist = false) private String queryValue; + @TableField(exist = false) + private List selectUserIds; + @TableField(exist = false) private String addressId; diff --git a/src/main/java/com/qs/serve/modules/tbs/common/dto/CostSortWrapper.java b/src/main/java/com/qs/serve/modules/tbs/common/dto/CostSortWrapper.java new file mode 100644 index 00000000..c010899b --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/common/dto/CostSortWrapper.java @@ -0,0 +1,63 @@ +package com.qs.serve.modules.tbs.common.dto; + +import com.qs.serve.common.util.CollectionUtil; +import com.qs.serve.modules.tbs.entity.TbsActivity; +import com.qs.serve.modules.tbs.entity.TbsBudget; +import com.qs.serve.modules.tbs.entity.TbsBudgetCondition; +import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; +import lombok.Data; + +import java.util.*; + +/** + * 用于排序 + * @author YenHex + * @since 2023/5/18 + */ +@Data +public class CostSortWrapper { + + Set budgetSet4Subject = new HashSet<>(); + Set budgetSet4NoSubject = new HashSet<>(); + + Set budgetSet4Condition = new HashSet<>(); + Set budgetSet4NoCondition = new HashSet<>(); + + + Map> activityCostConditionsOfSort = new HashMap<>(); + Map> activityAllowBudgetId; + + /** + * sort of timeline,filter timeline + * key is activity_id, value is schedule list + */ + Map> activityScheduleItemMap = new HashMap<>(); + + + public void putActivityCostCondition(Long activityId, List list){ + activityCostConditionsOfSort.put(activityId, list); + } + + /** + * 初始化科目排序因子 + * @param budgetList + */ + public void initializeBudget(List budgetList){ + if(CollectionUtil.isNotEmpty(budgetList)){ + for (TbsBudget budget : budgetList) { + if(budget.getSubjectId()==null||budget.getSubjectId().equals(0L)){ + budgetSet4NoSubject.add(budget.getId()); + }else { + budgetSet4Subject.add(budget.getId()); + } + if(budget.getConditionFlag()==null||budget.getConditionFlag().equals(0)){ + budgetSet4NoCondition.add(budget.getId()); + }else { + budgetSet4Condition.add(budget.getId()); + } + } + } + } + + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/common/util/CostSortWrapperUtil.java b/src/main/java/com/qs/serve/modules/tbs/common/util/CostSortWrapperUtil.java new file mode 100644 index 00000000..900c7b82 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/common/util/CostSortWrapperUtil.java @@ -0,0 +1,137 @@ +package com.qs.serve.modules.tbs.common.util; + +import com.qs.serve.common.util.Assert; +import com.qs.serve.common.util.CollectionUtil; +import com.qs.serve.modules.tbs.common.dto.CostSortWrapper; +import com.qs.serve.modules.tbs.entity.TbsActivity; +import com.qs.serve.modules.tbs.entity.TbsBudget; +import com.qs.serve.modules.tbs.entity.TbsBudgetCondition; +import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.time.Duration; +import java.util.*; + +/** + * 用于排序 + * @author YenHex + * @since 2023/5/18 + */ +@Slf4j +@Data +public class CostSortWrapperUtil { + + + public static List initializeSort(TbsActivity activity, List list, CostSortWrapper wrapper){ + List resultSortList = new ArrayList<>(); + if(CollectionUtil.isNotEmpty(list)){ + //1.科目限制>品类之间>时间区间 + //2.相同品类,取纬度最小值 + //3.时间区间内,区间长度取最短 + //3.时间区间内,区间长度相同,取最近结束时间 + List tmpList4Subject = new ArrayList<>(); + List tmpList4NotSubject = new ArrayList<>(); + for (TbsScheduleItemBudget scheduleItemBudget : list) { + Long budgetId = scheduleItemBudget.getBudgetId(); + if(wrapper.getBudgetSet4Subject().contains(budgetId)){ + tmpList4Subject.add(scheduleItemBudget); + }else{ + tmpList4NotSubject.add(scheduleItemBudget); + } + } + log.debug("活动【{}】匹配有科目预算数:{},无科目预算:{}",activity.getActivityCode() ,tmpList4Subject.size() , tmpList4NotSubject.size()); + if(CollectionUtil.isNotEmpty(tmpList4Subject)){ + CostSortWrapperUtil.sort4Condition(activity,tmpList4Subject,resultSortList,wrapper); + } + if(CollectionUtil.isNotEmpty(tmpList4NotSubject)){ + CostSortWrapperUtil.sort4Condition(activity,tmpList4NotSubject,resultSortList,wrapper); + } + } + if(resultSortList.size()!=list.size()){ + log.error("排序有误"); + Assert.throwEx("排序有误"); + } + return resultSortList; + } + + /** + * 按有无条件分割 + * @param activity + * @param list + * @param result + * @param wrapper + */ + private static void sort4Condition(TbsActivity activity,List list,List result,CostSortWrapper wrapper) { + List tmpList4Condition = new ArrayList<>(); + List tmpList4NoCondition = new ArrayList<>(); + for (TbsScheduleItemBudget scheduleItemBudget : list) { + Long budgetId = scheduleItemBudget.getBudgetId(); + if(wrapper.getBudgetSet4Condition().contains(budgetId)){ + tmpList4Condition.add(scheduleItemBudget); + }else{ + tmpList4NoCondition.add(scheduleItemBudget); + } + } + log.debug("活动【{}】匹配有科目预算数:{},无科目预算:{}",activity.getActivityCode() ,tmpList4Condition.size() , tmpList4NoCondition.size()); + if(CollectionUtil.isNotEmpty(tmpList4Condition)){ + CostSortWrapperUtil.sort4GoodsCondition(activity,tmpList4Condition,result,wrapper); + } + if(CollectionUtil.isNotEmpty(tmpList4NoCondition)){ + CostSortWrapperUtil.sort4NotGoodsCondition(tmpList4NoCondition,result,wrapper); + } + } + + private static void sort4GoodsCondition(TbsActivity activity,List list,List result,CostSortWrapper wrapper){ + if(CollectionUtil.isNotEmpty(list)){ + List activityCostConditions = wrapper.getActivityCostConditionsOfSort().get(activity.getId()); + Collections.sort(activityCostConditions, (o1, o2) -> { + int len1 = o1.getTargetLevelPathIds().split("_").length; + int len2 = o2.getTargetLevelPathIds().split("_").length; + if(len1==len2){ + List scheduleItemBudgets = list; + Long day1 = null; + Long day2 = null; + for (TbsScheduleItemBudget itemBudget : scheduleItemBudgets) { + if(itemBudget.getBudgetId().equals(o1.getBudgetId())){ + day1 = Duration.between(itemBudget.getStartDate(), itemBudget.getEndDate()).toDays(); + }else if (itemBudget.getBudgetId().equals(o2.getBudgetId())){ + day2 = Duration.between(itemBudget.getStartDate(), itemBudget.getEndDate()).toDays(); + } + } + log.debug("活动【{}】 时间区间相同,day1:{} , day2:{}",activity.getActivityCode(),day1,day2); + if(day1!=null&&day2!=null){ + return (int) (day1-day2); + } + } + return len2 - len1; + }); + List newSortList = new ArrayList<>(); + for (TbsBudgetCondition costCondition : activityCostConditions) { + for (TbsScheduleItemBudget scheduleItemBudget : list) { + if(scheduleItemBudget.getBudgetId().equals(costCondition.getBudgetId())){ + newSortList.add(scheduleItemBudget); + } + } + } + if(newSortList.size()!=list.size()){ + log.error("排序有误"); + Assert.throwEx("排序有误"); + } + result.addAll(newSortList); + } + } + + private static void sort4NotGoodsCondition(List list,List result,CostSortWrapper wrapper){ + if(CollectionUtil.isNotEmpty(list)){ + Collections.sort(list, (o1, o2) -> { + Long day1 = Duration.between(o1.getStartDate(), o1.getEndDate()).toDays(); + Long day2 = Duration.between(o2.getStartDate(), o2.getEndDate()).toDays(); + log.debug("时间区间相同,day1:{} , day2:{}",day1,day2); + return (int) (day1-day2); + }); + result.addAll(list); + } + } + +} diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java index 5a2054ea..eaf18960 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java @@ -78,10 +78,9 @@ public class TbsCostApplyController { private BmsSupplierService bmsSupplierService; private SysUserService sysUserService; private SeeYonService seeYonService; - private TbsBudgetApplicationService budgetApplicationService; - private SysPostUserService postUserService; + /** * 预览 * @param id diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java index 63ea297b..87760e57 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetApplicationService.java @@ -6,9 +6,10 @@ import com.qs.serve.common.util.Assert; import com.qs.serve.common.util.CollectionUtil; import com.qs.serve.modules.sys.service.SysConfigService; import com.qs.serve.modules.tbs.common.TbsGoodsType; +import com.qs.serve.modules.tbs.common.dto.CostSortWrapper; +import com.qs.serve.modules.tbs.common.util.CostSortWrapperUtil; import com.qs.serve.modules.tbs.common.util.TbsBudgetCostUtil; import com.qs.serve.modules.tbs.entity.*; -import com.qs.serve.modules.tbs.entity.bo.TbsActivitySubjectBo; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo; import com.qs.serve.modules.tbs.mapper.TbsActivityGoodsMapper; @@ -187,12 +188,13 @@ public class TbsBudgetApplicationService { Boolean overspend, Boolean throwEx, Boolean buildTableFlag){ + CostSortWrapper costSortWrapper = new CostSortWrapper(); //考核期有关的预算id,判断逻辑为活动需要允许在 List budgetIds = new ArrayList<>(); //没有预算的活动 List noBudgetActivityIds = new ArrayList<>(); //所有满足条件的考核期,用于加载历史核销费用 - List scheduleItemList = this.loadScheduleBudgetAndSetting(activityList, budgetIds, noBudgetActivityIds); + List scheduleItemList = this.loadScheduleBudgetAndSetting(activityList, budgetIds, noBudgetActivityIds,costSortWrapper); List centerIds = activityCenterList.stream().map(TbsActivityCenter::getCenterId).collect(Collectors.toList()); List subjectIds = activitySubjects.stream().map(TbsActivitySubject::getSubjectId).collect(Collectors.toList()); // 加载所有条件 @@ -209,15 +211,18 @@ public class TbsBudgetApplicationService { }else { budgetList = new ArrayList<>(); } + costSortWrapper.initializeBudget(budgetList); List noConditionBudgetList = new ArrayList<>(); //加载预算条件和关联预算匹配,返回是否由无条件预算 boolean budgetNoCondition = this.loadConditionByBudgetsAndMatch(budgetList, noConditionBudgetList); //预算条件需包含活动条件, Map结构:活动id->满足的预算id列表 Map> activityAllowBudgetIdMap = this.buildActivityBudgetMap(activityList, budgetList, noConditionBudgetList); + costSortWrapper.setActivityAllowBudgetId(activityAllowBudgetIdMap); //活动拦截 if(!budgetNoCondition){ this.handleNoBudgetActivity(throwEx, overspend, activityList, noBudgetActivityIds,activityAllowBudgetIdMap); } + //统计所有占用预算金额 Map budgetItemAmountMap = new HashMap<>(scheduleItemList.size()); //统计费用申请占用金额 @@ -241,6 +246,7 @@ public class TbsBudgetApplicationService { } budgetItemAmountMap.put(itemBudget.getId(),budgetItemAmount); } + //统计当前活动前置项占用预算 Map counterMap = new HashMap<>(); //匹配预算主要方法 @@ -248,8 +254,9 @@ public class TbsBudgetApplicationService { final List actUnMatchList = new ArrayList<>(); for (TbsActivityCenterGoods activityCostItem : centerGoodsList) { this.matchActivityMain(activityCostItem,throwEx, overspend, activityList, budgetItemAmountMap, budgetList, - noConditionBudgetList, counterMap, actMatchList, actUnMatchList,activityAllowBudgetIdMap,budgetItemApplyAmountMap); + noConditionBudgetList, counterMap, actMatchList, actUnMatchList,activityAllowBudgetIdMap,budgetItemApplyAmountMap,costSortWrapper); } + List budgetMatchList = actMatchList.stream() .map(TbsActivityCenterGoods::toBudgetCostItem).collect(Collectors.toList()); List budgetUnMatchList = actUnMatchList.stream() @@ -448,7 +455,8 @@ public class TbsBudgetApplicationService { final List actMatchList, final List actUnMatchList, final Map> activityAllowBudgetIdMap, - Map budgetItemApplyAmountMap) { + Map budgetItemApplyAmountMap, + CostSortWrapper costSortWrapper) { //过滤满全条件的预算 List allowBudgetIds = activityAllowBudgetIdMap.get(activityCostItem.getActivityId()); if(CollectionUtil.isEmpty(allowBudgetIds)){ @@ -470,7 +478,7 @@ public class TbsBudgetApplicationService { break; } } - List currentItemBudgetList = this.filterMatchGoodsCondition(budgetList, activityCostItem.getTargetLevelPathIds(),currentActivity); + List currentItemBudgetList = this.filterMatchGoodsCondition(budgetList, activityCostItem.getTargetLevelPathIds(),currentActivity,costSortWrapper); //关联无条件预算 currentItemBudgetList.addAll(noConditionBudgetList); //提取可用预算的考核期 @@ -503,6 +511,9 @@ public class TbsBudgetApplicationService { } } + //进行排序 + currentScheduleItemBudgets = CostSortWrapperUtil.initializeSort(currentActivity,currentScheduleItemBudgets,costSortWrapper); + //检测是否有是否足够预算 BigDecimal goodsAmount = activityCostItem.getCenterGoodsAmount(); if(CollectionUtil.isNotEmpty(currentScheduleItemBudgets)){ @@ -588,7 +599,7 @@ public class TbsBudgetApplicationService { * @return */ @NotNull - public List filterMatchGoodsCondition(List budgetList,String targetLevelPathIds,TbsActivity currentActivity) { + public List filterMatchGoodsCondition(List budgetList,String targetLevelPathIds,TbsActivity currentActivity,CostSortWrapper costSortWrapper) { String levelPath = targetLevelPathIds; Set levelPathSet = new LinkedHashSet<>(); levelPathSet.add(levelPath); @@ -611,26 +622,27 @@ public class TbsBudgetApplicationService { } } } - Collections.sort(budgetConditionList, (o1, o2) -> { - int len1 = o1.getTargetLevelPathIds().split("_").length; - int len2 = o2.getTargetLevelPathIds().split("_").length; - if(len1==len2){ - List scheduleItemBudgets = currentActivity.getScheduleItemBudgetList(); - Long day1 = null; - Long day2 = null; - for (TbsScheduleItemBudget itemBudget : scheduleItemBudgets) { - if(itemBudget.getBudgetId().equals(o1.getBudgetId())){ - day1 = Duration.between(itemBudget.getStartDate(), itemBudget.getEndDate()).toDays(); - }else if (itemBudget.getBudgetId().equals(o2.getBudgetId())){ - day2 = Duration.between(itemBudget.getStartDate(), itemBudget.getEndDate()).toDays(); - } - } - if(day1!=null&&day2!=null){ - return (int) (day1-day2); - } - } - return len2 - len1; - }); + costSortWrapper.putActivityCostCondition(currentActivity.getId(), budgetConditionList); +// Collections.sort(budgetConditionList, (o1, o2) -> { +// int len1 = o1.getTargetLevelPathIds().split("_").length; +// int len2 = o2.getTargetLevelPathIds().split("_").length; +// if(len1==len2){ +// List scheduleItemBudgets = currentActivity.getScheduleItemBudgetList(); +// Long day1 = null; +// Long day2 = null; +// for (TbsScheduleItemBudget itemBudget : scheduleItemBudgets) { +// if(itemBudget.getBudgetId().equals(o1.getBudgetId())){ +// day1 = Duration.between(itemBudget.getStartDate(), itemBudget.getEndDate()).toDays(); +// }else if (itemBudget.getBudgetId().equals(o2.getBudgetId())){ +// day2 = Duration.between(itemBudget.getStartDate(), itemBudget.getEndDate()).toDays(); +// } +// } +// if(day1!=null&&day2!=null){ +// return (int) (day1-day2); +// } +// } +// return len2 - len1; +// }); List currentItemBudgetList = new ArrayList<>(); for (TbsBudgetCondition condition : budgetConditionList) { for (TbsBudget budget : budgetList) { @@ -703,10 +715,12 @@ public class TbsBudgetApplicationService { * @return scheduleItemList 命中的考核期列表 */ public List loadScheduleBudgetAndSetting(List activityList, - List budgetIds, List noBudgetActivityIds) { + List budgetIds, List noBudgetActivityIds,CostSortWrapper costSortWrapper) { List scheduleItemList = new ArrayList<>(); Set budgetIdsSet = new HashSet<>(); Map allAllowScheduleItemTempMap = new HashMap<>(); + // of sort + Map> activityScheduleItemMapOfSort = new HashMap<>(); for (TbsActivity activity : activityList) { List budgetItemList = tbsScheduleItemBudgetService .betweenDateList(activity.getPreStartDate(),activity.getPreEndDate()); @@ -717,10 +731,12 @@ public class TbsBudgetApplicationService { budgetIdsSet.add(item.getBudgetId()); allAllowScheduleItemTempMap.put(item.getId(),item); } + activityScheduleItemMapOfSort.put(activity.getId(),budgetItemList); }else { noBudgetActivityIds.add(activity.getId()); } } + costSortWrapper.setActivityScheduleItemMap(activityScheduleItemMapOfSort); for (Long tmpId : allAllowScheduleItemTempMap.keySet()) { scheduleItemList.add(allAllowScheduleItemTempMap.get(tmpId)); } diff --git a/src/main/resources/mapper/bms/BmsSupplierMapper.xml b/src/main/resources/mapper/bms/BmsSupplierMapper.xml index 3758f784..6f1bcc55 100644 --- a/src/main/resources/mapper/bms/BmsSupplierMapper.xml +++ b/src/main/resources/mapper/bms/BmsSupplierMapper.xml @@ -74,9 +74,7 @@ SELECT DISTINCT his_user_supplier.supplier_id, @@ -89,8 +46,6 @@ and `his_user_supplier`.`biz_region_fourthly` = #{query.bizRegionFourthly} and `his_user_supplier`.`tenant_id` = #{query.tenantId} and `his_user_supplier`.`cost_flag` = #{query.costFlag} - - and `bms_supplier_visit_address`.`address_detail` like concat('%',#{query.queryAddress},'%') and (`bms_supplier_visit_address`.`address_detail` like concat('%',#{query.queryValue},'%')