From 55c32bc6cf8f6277600eec91556f806d7ea0fdfb Mon Sep 17 00:00:00 2001 From: Yen Date: Fri, 9 Dec 2022 14:49:25 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E7=AE=97=E8=B4=B9=E7=94=A8=E5=8D=A0?= =?UTF-8?q?=E7=94=A8,=E9=94=80=E5=94=AE=E4=BA=BA=E5=91=98=E6=A0=91?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/controller/SysUserController.java | 3 +- .../sys/service/SysUserSalesService.java | 7 +- .../service/impl/SysUserSalesServiceImpl.java | 27 ++++- .../controller/TbsCostApplyController.java | 98 ++++++++++++++++- .../modules/tbs/entity/TbsCostApply.java | 3 + .../modules/tbs/entity/vo/TbsCostApplyVo.java | 3 + .../service/TbsBudgetApplicationService.java | 102 ++++++++++++++++++ 7 files changed, 234 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java b/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java index e70c72d6..80017da6 100644 --- a/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java +++ b/src/main/java/com/qs/serve/modules/sys/controller/SysUserController.java @@ -409,8 +409,7 @@ public class SysUserController { for (String strv : arr) { setStr.add(strv); } - String lastId = arr[arr.length-1]; - if(!lastId.equals(childNode.getUserId())||userSale.getUserId().equals(childNode.getUserId())){ + if(userSale.getUserId().equals(childNode.getUserId())){ continue; } if(setStr.size() { */ List listByPathId(String pathId); - + /** + * 加载销售人员下所有下级 + * @param userId + * @return + */ + List listByChildIds(String userId); } diff --git a/src/main/java/com/qs/serve/modules/sys/service/impl/SysUserSalesServiceImpl.java b/src/main/java/com/qs/serve/modules/sys/service/impl/SysUserSalesServiceImpl.java index faf2148e..bda13be6 100644 --- a/src/main/java/com/qs/serve/modules/sys/service/impl/SysUserSalesServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/sys/service/impl/SysUserSalesServiceImpl.java @@ -2,6 +2,7 @@ package com.qs.serve.modules.sys.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.serve.common.util.Assert; import com.qs.serve.common.util.StringUtils; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -11,7 +12,10 @@ import com.qs.serve.modules.sys.service.SysUserSalesService; import com.qs.serve.modules.sys.mapper.SysUserSalesMapper; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * 服务实现类 @@ -35,7 +39,28 @@ public class SysUserSalesServiceImpl extends ServiceImpl lqw = new LambdaQueryWrapper<>(); lqw.likeRight(SysUserSales::getPathIds,pathId); - return this.list(lqw); + List list = this.list(lqw); + List result = new ArrayList<>(); + //过滤数值类型脏数据 + for (SysUserSales userSales : list) { + String[] arr = userSales.getPathIds().split("_"); + String lastId = arr[arr.length-1]; + if(!lastId.equals(userSales.getUserId())){ + continue; + } + result.add(userSales); + } + return result; + } + + @Override + public List listByChildIds(String userId) { + SysUserSales sysUserSales = this.getById(userId); + if(sysUserSales!=null){ + List userSales = this.listByPathId(sysUserSales.getPathIds()); + return userSales.stream().map(SysUserSales::getUserId).collect(Collectors.toList()); + } + return new ArrayList<>(); } } 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 a8baeb73..a8eda53f 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 @@ -18,6 +18,7 @@ import com.qs.serve.modules.seeyon.entity.CtpAffairQo; import com.qs.serve.modules.seeyon.service.SeeYonService; import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.service.SysConfigService; +import com.qs.serve.modules.sys.service.SysUserSalesService; import com.qs.serve.modules.sys.service.SysUserService; import com.qs.serve.modules.tbs.common.TbsCostApplyState; import com.qs.serve.modules.tbs.common.TbsSeeYonConst; @@ -60,7 +61,7 @@ public class TbsCostApplyController { private SeeYonService seeYonService; private TbsBudgetApplicationService budgetApplicationService; - + private SysUserSalesService sysUserSalesService; /** * 预览 @@ -74,6 +75,17 @@ public class TbsCostApplyController { return R.ok(result.getTableData()); } + /** + * 预览2 提交审批后调用 + * @param id + * @return + */ + @GetMapping("preview2") + public R viewTable(Long id){ + TbsBudgetTableVo result = budgetApplicationService.buildResultTable(id); + return R.ok(result); + } + /** * 列表 * @param param @@ -90,27 +102,64 @@ public class TbsCostApplyController { } /** - * 列表 + * 列表(个人及下属的费用申请) * @param param * @return */ @GetMapping("/listMy") public R> getListMy(TbsCostApplyVo param){ + String userId = AuthContextUtils.getSysUserId(); + List userIds = new ArrayList<>(); + if(param.getLoadChild()!=null&¶m.getLoadChild().equals(1)){ + userIds = sysUserSalesService.listByChildIds(userId); + }else { + userIds.add(userId); + } TbsCostApply entity = CopierUtil.copy(param,new TbsCostApply()); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(entity); - lqw.eq(TbsCostApply::getCreateBy,AuthContextUtils.getSysUserId()); + lqw.in(TbsCostApply::getCreateBy,userIds); PageUtil.startPage(); List list = tbsCostApplyService.list(lqw); + for (TbsCostApply costApply : list) { + SysUser sysUser = sysUserService.getById(costApply.getCreateBy()); + costApply.setUserInfo(sysUser.toSysUserVo()); + } return R.ok(list); } + /** + * 翻页(个人及下属的费用申请) + * @param param + * @return + */ + @GetMapping("/pageMy") + @PreAuthorize("hasRole('tbs:costApply:query')") + public R> getPageMy(TbsCostApplyVo param){ + String userId = AuthContextUtils.getSysUserId(); + List userIds = new ArrayList<>(); + if(param.getLoadChild()!=null&¶m.getLoadChild().equals(1)){ + userIds = sysUserSalesService.listByChildIds(userId); + }else { + userIds.add(userId); + } + TbsCostApply entity = CopierUtil.copy(param,new TbsCostApply()); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(entity); + lqw.orderByDesc(TbsCostApply::getId); + PageUtil.startPage(); + List list = tbsCostApplyService.list(lqw); + for (TbsCostApply costApply : list) { + SysUser sysUser = sysUserService.getById(costApply.getCreateBy()); + costApply.setUserInfo(sysUser.toSysUserVo()); + } + return R.byPageHelperList(list); + } + /** * 翻页 * @param param * @return */ @GetMapping("/page") - @PreAuthorize("hasRole('tbs:costApply:query')") public R> getPage(TbsCostApplyVo param){ TbsCostApply entity = CopierUtil.copy(param,new TbsCostApply()); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(entity); @@ -205,6 +254,46 @@ public class TbsCostApplyController { return R.isTrue(result); } + /** + * 审批列表(用于详情页) + * @param costApplyId + * @return + */ + @GetMapping("/ListAffairs") + public R> pageMemberAffair(Long costApplyId){ + SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId()); + if(!StringUtils.hasText(sysUser.getSyUserId())||!StringUtils.hasText(sysUser.getSyAccount())){ + return R.error("当前账号未绑定致远用户信息"); + } + TbsCostApply costApplyParam = tbsCostApplyService.getById(costApplyId); + CtpAffairQo param = new CtpAffairQo(); + param.setMemberId(sysUser.getSyUserId()); + param.setFormMainId(costApplyParam.getSyFormId()); + param.setTemplateCodes(Arrays.asList(TbsSeeYonConst.COST_APPLY_FORM)); + R> syResult = seeYonService.pageMemberAffair(param); + PageVo pageVo = syResult.getData(); + List ctpAffairs = pageVo.getList(); + if(ctpAffairs.size()>0){ + List costApplyIds = ctpAffairs.stream().map(CtpAffair::getCostApplyId).collect(Collectors.toList()); + List costApplyList = tbsCostApplyService.listByIds(costApplyIds); + List result = new ArrayList<>(); + for (CtpAffair ctpAffair : ctpAffairs) { + CtpAffairVo ctpAffairVo = new CtpAffairVo(); + for (TbsCostApply costApply : costApplyList) { + if(costApply.getId().toString().equals(ctpAffair.getCostApplyId())){ + ctpAffairVo.setCostApply(costApply); + break; + } + } + ctpAffairVo.setAffairInfo(ctpAffair); + result.add(ctpAffairVo); + } + PageVo costApplyPageVo = PageVo.initNewList(pageVo,result); + return R.ok(costApplyPageVo); + } + return R.byEmptyList(); + } + /** * 审批列表(翻页) * @param state 状态:0-未完成与已完成(默认);1-未完成;2已完成;3-我发起的;其它-被拦截 @@ -213,7 +302,6 @@ public class TbsCostApplyController { * @return */ @GetMapping("/pageMemberAffair") - @SysLog(module = SystemModule.Budget, title = "费用申请", biz = BizType.DELETE) public R> pageMemberAffair(Integer state,Integer pageNum,Integer pageSize){ SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId()); if(!StringUtils.hasText(sysUser.getSyUserId())||!StringUtils.hasText(sysUser.getSyAccount())){ diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java index ff5cf486..8bd87722 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java @@ -117,5 +117,8 @@ public class TbsCostApply implements Serializable { @TableField(exist = false) private String affairId; + @TableField(exist = false) + private Object userInfo; + } diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsCostApplyVo.java b/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsCostApplyVo.java index 4045dc73..dcdd7ed0 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsCostApplyVo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/vo/TbsCostApplyVo.java @@ -79,5 +79,8 @@ public class TbsCostApplyVo implements Serializable { @JsonProperty private String delFlag; + /** 加载下属标识 1 是,0否 */ + private Integer loadChild; + } 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 8d5b71c3..64f19677 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 @@ -39,6 +39,108 @@ public class TbsBudgetApplicationService { private SysConfigService configService; private TbsActivityMapper activityMapper; + public TbsBudgetTableVo buildResultTable(Long costApplyId){ + //加载活动 + LambdaQueryWrapper activityLqw = new LambdaQueryWrapper<>(); + activityLqw.eq(TbsActivity::getCostApplyId,costApplyId); + List activityList = activityMapper.selectList(activityLqw); + + //费用占用 + LambdaQueryWrapper costItemLqw = new LambdaQueryWrapper<>(); + costItemLqw.eq(TbsBudgetCostItem::getCostApplyId,costApplyId); + List budgetCostItems = tbsBudgetCostItemService.list(costItemLqw); + + //预算 + List budgetIds = budgetCostItems.stream().map(TbsBudgetCostItem::getBudgetId) + .distinct().collect(Collectors.toList()); + List budgetList = tbsBudgetMapper.selectBatchIds(budgetIds); + + List budgetItemIds = budgetCostItems.stream().map(TbsBudgetCostItem::getScheduleItemBudgetId) + .distinct().collect(Collectors.toList()); + List scheduleItemList = tbsScheduleItemBudgetService.listByIds(budgetItemIds); + + TbsBudgetTableVo tableVo = new TbsBudgetTableVo(); + List topTheadHeaders = new ArrayList<>(); + Map> tmpMap = budgetCostItems.stream().collect(Collectors.groupingBy(TbsBudgetCostItem::getScheduleItemBudgetId)); + for (Long scheduleItemBudgetId : tmpMap.keySet()) { + if(scheduleItemBudgetId.equals(0L)){continue;} + TbsBudgetCostItem itemBudget = tmpMap.get(scheduleItemBudgetId).get(0); + String budgetCode = null; + for (TbsBudget budget : budgetList) { + if(budget.getId().equals(itemBudget.getBudgetId())){ + budgetCode = budget.getBudgetCode(); + break; + } + } + String scheduleItemName = null; + for (TbsScheduleItemBudget scheduleItemBudget : scheduleItemList) { + if(scheduleItemBudget.getId().equals(scheduleItemBudgetId)){ + scheduleItemName = scheduleItemBudget.getItemName(); + break; + } + } + TbsBudgetTableVo.TopTheadHeader theadHeader = new TbsBudgetTableVo.TopTheadHeader(); + theadHeader.setId(scheduleItemBudgetId+""); + theadHeader.setLabel(budgetCode+"("+scheduleItemName+")"); + BigDecimal totalUsed = BigDecimal.ZERO; + for (TbsBudgetCostItem costItem : tmpMap.get(scheduleItemBudgetId)) { + totalUsed = totalUsed.add(costItem.getCenterGoodsAmount()); + } + theadHeader.setBudgetAmount(totalUsed); + topTheadHeaders.add(theadHeader); + } + //自定义超额预算 + TbsBudgetTableVo.TopTheadHeader overTopHeader = new TbsBudgetTableVo.TopTheadHeader(); + overTopHeader.setId("0"); + overTopHeader.setLabel("其它预算"); + overTopHeader.setBudgetAmount(BigDecimal.ZERO); + topTheadHeaders.add(overTopHeader); + + List leftTheadHeaders = new ArrayList<>(); + for (TbsBudgetCostItem centerGoods : budgetCostItems) { + TbsActivity activity = null; + for (TbsActivity obj : activityList) { + if(obj.getId().equals(centerGoods.getActivityId())){ + activity = obj; + break; + } + } + String actCode = activity==null?centerGoods.getActivityId().toString():activity.getActivityCode(); + TbsBudgetTableVo.LeftTheadHeader theadHeader = new TbsBudgetTableVo.LeftTheadHeader(); + theadHeader.setActivityCode(actCode); + theadHeader.setId(centerGoods.getCenterGoodItemId()+""); + theadHeader.setSubjectId(centerGoods.getSubjectId()); + theadHeader.setSubjectName(centerGoods.getSubjectName()); + theadHeader.setCenterId(centerGoods.getCenterId()); + theadHeader.setCenterName(centerGoods.getCenterName()); + theadHeader.setTargetType(centerGoods.getTargetType()); + theadHeader.setTargetId(centerGoods.getTargetId()); + if(centerGoods.getTargetType().equals(TbsGoodsType.sku.name())){ + centerGoods.initSpuSkuName(); + theadHeader.setLabel(centerGoods.getSpuName()+"("+centerGoods.getSkuName()+")"); + }else { + theadHeader.setLabel(centerGoods.getTargetName()); + } + theadHeader.setLabelCombo(actCode+"-" + +theadHeader.getSubjectName()+"-" + +theadHeader.getCenterName()+"-" + +theadHeader.getLabel()); + leftTheadHeaders.add(theadHeader); + } + List tableValueList = new ArrayList<>(); + for (TbsBudgetCostItem costItem : budgetCostItems) { + TbsBudgetTableVo.TableValue tableValue = new TbsBudgetTableVo.TableValue(); + tableValue.setTopId(costItem.getScheduleItemBudgetId()+""); + tableValue.setLeftId(costItem.getCenterGoodItemId()+""); + tableValue.setValue(costItem.getCenterGoodsAmount()); + tableValueList.add(tableValue); + } + tableVo.setTableValueList(tableValueList); + tableVo.setTopTheadHeaderList(topTheadHeaders); + tableVo.setLeftTheadHeaderList(leftTheadHeaders); + return tableVo; + } + /** * 创建费用占用结果 * @param costApplyId