From c146cf8d6a2e74bf5f11a3114f6f38dd22b6c1d0 Mon Sep 17 00:00:00 2001 From: LIUFL Date: Fri, 13 Sep 2024 10:09:30 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BA=BA=E5=91=98=E5=90=88=E5=90=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=A5=BC=E5=9B=BE=E6=8E=A5=E5=8F=A3=E5=BC=80?= =?UTF-8?q?=E5=8F=91=20=E4=BA=BA=E5=91=98=E6=88=90=E4=BA=A4=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=BD=AC=E4=BB=8B=E7=BB=8D=E6=8E=A5=E5=8F=A3=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/controller/HomeController.java | 23 +++- .../domain/vo/home/UserAmountInfoVo.java | 47 +++++++ .../vo/home/UserContractAmountInfo.java | 8 ++ .../domain/vo/home/UserContractAmountVo.java | 18 +++ .../business/mapper/PsContractInfoMapper.java | 2 + .../pusong/business/service/HomeService.java | 2 + .../service/impl/HomeServiceImpl.java | 124 +++++++++++++++++- .../mapper/business/PsContractInfoMapper.xml | 79 +++++++++++ 8 files changed, 300 insertions(+), 3 deletions(-) create mode 100644 pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/UserAmountInfoVo.java diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/HomeController.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/HomeController.java index a8ef0f7..fa43c41 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/HomeController.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/controller/HomeController.java @@ -63,7 +63,7 @@ public class HomeController extends BaseController { } /** - * 首页大盘数据:人员合同金额统计 + * 首页大盘数据:人员成交数据列表 * @param type 1本月 2上月 3本季度 4本年 5所有 * @return */ @@ -72,6 +72,27 @@ public class HomeController extends BaseController { public R getUserContractAmounts(@RequestParam() Integer type, @RequestParam() Long deptId) { return R.ok(homeService.getUserContractAmountsByDeptId(type,deptId)); } + + /** + * 首页大盘数据:人员转介绍成交数据列表 + * @param type 1本月 2上月 3本季度 4本年 5所有 + * @return + */ + @SaCheckPermission("business:salary:list") + @GetMapping("/getUserContractSourceAmounts") + public R getUserContractSourceAmounts(@RequestParam() Integer type, @RequestParam() Long deptId){ + return R.ok(homeService.getUserContractSourceAmountsByDeptId(type,deptId)); + } + + /** + * 首页大盘数据:人员成交数据饼图 + * @param type + * @return + */ + @GetMapping("/getUserContractAndPayInfo") + public R getUserContractAndPayInfo(@RequestParam() Integer type){ + return R.ok(homeService.getUserContractAndPayInfo(type)); + } /** * 首页大盘数据:各渠道成交(公司总数居) * @param type 1本月 2上月 3本季度 4本年 5所有 diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/UserAmountInfoVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/UserAmountInfoVo.java new file mode 100644 index 0000000..076e4e8 --- /dev/null +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/UserAmountInfoVo.java @@ -0,0 +1,47 @@ +package com.pusong.business.domain.vo.home; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class UserAmountInfoVo { + /** + * 用户id + */ + private Long userId; + + private String dateStr; + /** + * 用户名字 + */ + private String nickName; + /** + * 合同数量 + */ + private Integer contractNum=0; + /** + * 合同总金额 + */ + private BigDecimal sumAmount=new BigDecimal(0); + /** + * 已支付总金额 + */ + private BigDecimal payedSumAmount=new BigDecimal(0); + /** + * 未支付金额 + */ + private BigDecimal unPaySumAmount=new BigDecimal(0); + + public void addContractNum(){ + contractNum++; + } + public void addSumAmount(BigDecimal amount){ + if(amount==null){return;} + sumAmount=sumAmount.add(amount); + } + public void addPayedSumAmount(BigDecimal amount){ + if(amount==null){return;} + payedSumAmount=payedSumAmount.add(amount); + } +} diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/UserContractAmountInfo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/UserContractAmountInfo.java index 7610c3d..f7c2d75 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/UserContractAmountInfo.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/UserContractAmountInfo.java @@ -26,8 +26,16 @@ public class UserContractAmountInfo { * 合同类型 */ private String businessType; + /** + * 客户来源 + */ + private String customSource; /** * 合同价格 */ private BigDecimal contractAmount; + /** + * 已付款金额 + */ + private BigDecimal payedMoney; } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/UserContractAmountVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/UserContractAmountVo.java index 361970b..a32aec8 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/UserContractAmountVo.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/UserContractAmountVo.java @@ -20,6 +20,14 @@ public class UserContractAmountVo { * 与其他人合同金额的占比 */ private String amountPer; + /** + * 转介绍合同数量 + */ + private Integer jieShaoContractNum=0; + /** + * 转介绍合同金额占比 + */ + private String jieShaoPer; /** * 用户所有合同总金额 */ @@ -40,6 +48,10 @@ public class UserContractAmountVo { * 其他类型合同总金额 */ private BigDecimal otherAmount=new BigDecimal(0); + /** + * 转介绍的合同金额 + */ + private BigDecimal jieShaoAmount=new BigDecimal(0); public void addSumAmount(BigDecimal amount){ sumAmount=sumAmount.add(amount); @@ -56,4 +68,10 @@ public class UserContractAmountVo { public void addOtherAmount(BigDecimal amount) { otherAmount=otherAmount.add(amount); } + public void addJieShaoAmount(BigDecimal amount) { + jieShaoAmount = jieShaoAmount.add(amount); + } + public void addJieShaoContractNum() { + jieShaoContractNum++; + } } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractInfoMapper.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractInfoMapper.java index 15f0f7d..7d23a0b 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractInfoMapper.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/mapper/PsContractInfoMapper.java @@ -45,7 +45,9 @@ public interface PsContractInfoMapper extends BaseMapperPlus querySalaryListByCodes(@Param(Constants.WRAPPER) Wrapper queryWrapper); List> homePageReturnMoneyInfo(@Param("queryParam") Map queryParam); + List getUserContractSourceAmountsByDeptId(@Param("queryParam") Map queryParam); List getUserContractTypeAmountsByDeptId(@Param("queryParam") Map queryParam); + List getUserContractAndPayInfo(@Param("queryParam") Map queryParam); //首页查询各个渠道成交的合同 diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/HomeService.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/HomeService.java index 4e5e194..d86de51 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/HomeService.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/HomeService.java @@ -14,7 +14,9 @@ public interface HomeService { MakeAmountVo selectMakeAmount(Integer type); ReturnMoneyInfoVo returnMoney(Integer type); + Object getUserContractSourceAmountsByDeptId(Integer type,Long deptId); List getUserContractAmountsByDeptId(Integer type, Long deptId); + Object getUserContractAndPayInfo(Integer type); /** * 首页大盘数据:各渠道成交 * @param type diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/HomeServiceImpl.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/HomeServiceImpl.java index 655c93b..6353936 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/HomeServiceImpl.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/service/impl/HomeServiceImpl.java @@ -211,8 +211,81 @@ public class HomeServiceImpl implements HomeService { return res; } + private String contractSource="转介绍"; /** - * 获取部门下各员工的合同总金额 + * 按人员成交【转介绍】列表,根据部门获取 + * @param type + * @param deptId + * @return + */ + public Object getUserContractSourceAmountsByDeptId(Integer type,Long deptId){ + Map mapParam = this.getDate(type); + LocalDate startDate = (LocalDate)mapParam.get("startDate"); + LocalDate endDate = (LocalDate)mapParam.get("endDate"); + String date = (String)mapParam.get("date"); + + Map queryParam=new HashMap<>(); + queryParam.put("startDate",startDate); + queryParam.put("endDate",endDate); + queryParam.put("contractStatus",ContractStatusEnum.INIT.getCode()); + queryParam.put("isCancel",CommonStatusEnum.SUCCESS.getCode()); + queryParam.put("deptId",deptId); + + List list=psContractInfoMapper.getUserContractSourceAmountsByDeptId(queryParam); + Map res=new HashMap<>(); + //记录合同编码,防止重复 + Map repeatContractCode=new HashMap<>(); + for(UserContractAmountInfo obj:list){ + UserContractAmountVo vo=res.get(obj.getUserId()); + if(vo==null){ + vo=new UserContractAmountVo(); + vo.setUserId(obj.getUserId()); + vo.setNickName(obj.getNickName()); + vo.setDateStr(date); + res.put(obj.getUserId(),vo); + } + if(repeatContractCode.get(obj.getContractCode())==null){ + repeatContractCode.put(obj.getContractCode(),obj.getContractCode()); + vo.addSumAmount(obj.getContractAmount()); + } + //判断是否为转介绍合同 + if(contractSource.equals(obj.getCustomSource())){ + vo.addJieShaoAmount(obj.getContractAmount()); + vo.addJieShaoContractNum(); + }else { + vo.addOtherAmount(obj.getContractAmount()); + } + } + + //构建表格第一行数据 + UserContractAmountVo title= new UserContractAmountVo(); + title.setNickName("总计"); + title.setDateStr(date); + title.setOtherAmount(null); + title.setSoftwareDevAmount(null); + title.setTuoGuanAmount(null); + title.setXuFeiAmount(null); + + //按总金额降序处理 + List listData=res.values().stream().sorted( + Comparator.comparing(UserContractAmountVo::getSumAmount,Comparator.reverseOrder())).collect(Collectors.toList()); + + for (UserContractAmountVo v:listData) { + title.addSumAmount(v.getSumAmount()); + } + //计算转介绍金额占比 + for (UserContractAmountVo v:listData) { + if(!BigDecimal.ZERO.equals(v.getJieShaoAmount())) { + v.setJieShaoPer(v.getJieShaoAmount().multiply(new BigDecimal("100.0")).divide(v.getSumAmount(), 2, RoundingMode.HALF_UP).toPlainString() + "%"); + }else { + v.setJieShaoPer("0.00%"); + } + } + listData.add(0,title); + return listData; + } + /** + * 按人员成交数据列表,根据部门获取 * @param type 日期过滤规则 * @param deptId 部门id * @return @@ -287,13 +360,60 @@ public class HomeServiceImpl implements HomeService { } //计算金额占比 for (UserContractAmountVo v:listData) { - v.setAmountPer(v.getSumAmount().multiply(new BigDecimal("100.0")).divide(title.getSumAmount(),2, RoundingMode.HALF_UP).toPlainString()+"%"); + if(!v.getSumAmount().equals(BigDecimal.ZERO)) { + v.setAmountPer(v.getSumAmount().multiply(new BigDecimal("100.0")).divide(title.getSumAmount(), 2, RoundingMode.HALF_UP).toPlainString() + "%"); + }else { + v.setAmountPer("0.00%"); + } } listData.add(0,title); return listData; } + /** + * 按人员成交数据饼图,所有部门人员 + * @param type + * @return + */ + public Object getUserContractAndPayInfo(Integer type){ + Map mapParam = this.getDate(type); + LocalDate startDate = (LocalDate)mapParam.get("startDate"); + LocalDate endDate = (LocalDate)mapParam.get("endDate"); + String date = (String)mapParam.get("date"); + + Map queryParam=new HashMap<>(); + queryParam.put("startDate",startDate); + queryParam.put("endDate",endDate); + queryParam.put("contractStatus",ContractStatusEnum.INIT.getCode()); + queryParam.put("isCancel",CommonStatusEnum.SUCCESS.getCode()); + queryParam.put("payStatus",PayStatusEnum.SUCCESS.getCode()); + + List list=psContractInfoMapper.getUserContractAndPayInfo(queryParam); + Map resMap=new HashMap<>(); + for (UserContractAmountInfo obj:list) { + Long userId=obj.getUserId(); + UserAmountInfoVo vo= resMap.get(userId); + if(vo==null){ + vo=new UserAmountInfoVo(); + vo.setUserId(userId); + vo.setNickName(obj.getNickName()); + vo.setDateStr(date); + resMap.put(userId, vo); + } + //累计合同数量 + if(obj.getContractCode()!=null&&obj.getContractCode().length()>0){ + vo.addContractNum(); + } + vo.addSumAmount(obj.getContractAmount()); + vo.addPayedSumAmount(obj.getPayedMoney()); + } + //计算未付款金额 + resMap.values().forEach(v->{ + v.setUnPaySumAmount(v.getSumAmount().subtract(v.getPayedSumAmount())); + }); + return resMap.values(); + } /** diff --git a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml index 04d2a28..9cfb711 100644 --- a/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml +++ b/pusong-modules/pusong-business/src/main/resources/mapper/business/PsContractInfoMapper.xml @@ -86,6 +86,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" info.is_cancel != #{queryParam.isCancel} + + + + + + + + + + select From 2565aa2ad5fd29e0e0cd1b83a2f2d6d51126572d Mon Sep 17 00:00:00 2001 From: mx <1289317512@qq.com> Date: Fri, 13 Sep 2024 15:55:24 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=BF=BD=E7=95=A5=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..29b636a --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +*.iml \ No newline at end of file