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 3b48d55..a245d85 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 @@ -5,6 +5,7 @@ import cn.dev33.satoken.annotation.SaIgnore; import com.pusong.business.domain.bo.PsSalaryBo; import com.pusong.business.domain.vo.PsSalaryContractVo; import com.pusong.business.domain.vo.PsSalaryVo; +import com.pusong.business.domain.vo.home.ChannelAmountVo; import com.pusong.business.domain.vo.home.MakeAmountVo; import com.pusong.business.domain.vo.home.ReturnAmountVo; import com.pusong.business.domain.vo.home.ReturnMoneyInfoVo; @@ -65,7 +66,7 @@ public class HomeController extends BaseController { */ @SaCheckPermission("business:salary:list") @GetMapping("/byChannel") - public R byChannel(@RequestParam() Integer type) { + public R byChannel(@RequestParam() Integer type) { return R.ok(homeService.byChannel(type)); } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/ChannelAmountVo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/ChannelAmountVo.java index e59dc42..70d94ed 100644 --- a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/ChannelAmountVo.java +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/ChannelAmountVo.java @@ -6,7 +6,6 @@ import lombok.Data; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Date; -import java.util.HashMap; import java.util.Map; @Data @@ -29,20 +28,20 @@ public class ChannelAmountVo { /** * 各渠道成交金额 */ - private Map one; + private Map channelMap; public void cellPer(){ //计算总金额 this.all = this.all == null? BigDecimal.ZERO: this.all; - for (String str : one.keySet()){ - all = all.add(one.get(str).getMoney()); + for (String str : channelMap.keySet()){ + all = all.add(channelMap.get(str).getMoney()); } //计算占比 if(0 == this.all.compareTo(BigDecimal.ZERO)) { - one.forEach((k,v)->{v.setPer("0%");}); + channelMap.forEach((k, v)->{v.setPer("0%");}); }else { - one.forEach((k,v)->{v.setPer(v.getMoney().multiply(new BigDecimal("100.0")).divide(this.all,2, RoundingMode.HALF_UP).toPlainString()+"%");}); + channelMap.forEach((k, v)->{v.setPer(v.getMoney().multiply(new BigDecimal("100.0")).divide(this.all,2, RoundingMode.HALF_UP).toPlainString()+"%");}); } } diff --git a/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/ChannelPayInfo.java b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/ChannelPayInfo.java new file mode 100644 index 0000000..7881eca --- /dev/null +++ b/pusong-modules/pusong-business/src/main/java/com/pusong/business/domain/vo/home/ChannelPayInfo.java @@ -0,0 +1,36 @@ +package com.pusong.business.domain.vo.home; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Date; +import java.util.Map; + +//渠道支付信息 +@Data +public class ChannelPayInfo { + + /** + * 渠道编码 + */ + private String channel; + /** + * 合同编码 + */ + private String contractCode; + /** + * 合同金额 + */ + private BigDecimal contractAmount; + /** + * 支付类型1回款2退款 + */ + private String businessType; + /** + * 回款/退款金额 + */ + private BigDecimal money; + +} 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 1b0fc7b..4f83d65 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 @@ -9,6 +9,7 @@ import com.pusong.business.domain.PsSalaryContract; import com.pusong.business.domain.vo.PsContractInfoVo; import com.pusong.business.domain.vo.PsCustomInfoVo; import com.pusong.business.domain.vo.PsSalaryContractVo; +import com.pusong.business.domain.vo.home.ChannelPayInfo; import com.pusong.common.mybatis.annotation.DataColumn; import com.pusong.common.mybatis.annotation.DataPermission; import com.pusong.common.mybatis.core.mapper.BaseMapperPlus; @@ -43,4 +44,8 @@ public interface PsContractInfoMapper extends BaseMapperPlus querySalaryListByCodes(@Param(Constants.WRAPPER) Wrapper queryWrapper); List> homePageReturnMoneyInfo(@Param("queryParam") Map queryParam); + + + //首页查询各个渠道成交的合同 + List byChannel(@Param(Constants.WRAPPER) Wrapper queryWrapper); } 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 53e17c9..c95eca9 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 @@ -1,5 +1,6 @@ package com.pusong.business.service; +import com.pusong.business.domain.vo.home.ChannelAmountVo; import com.pusong.business.domain.vo.home.MakeAmountVo; import com.pusong.business.domain.vo.home.ReturnAmountVo; import com.pusong.business.domain.vo.home.ReturnMoneyInfoVo; @@ -18,5 +19,5 @@ public interface HomeService { * @param type * @return */ - ReturnAmountVo byChannel(Integer type); + ChannelAmountVo byChannel(Integer 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 3498bb3..579b894 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 @@ -1,13 +1,11 @@ package com.pusong.business.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.pusong.business.domain.PsContractInfo; import com.pusong.business.domain.PsContractPay; -import com.pusong.business.domain.vo.home.MakeAmountVo; -import com.pusong.business.domain.vo.home.ReturnAmountVo; -import com.pusong.business.domain.vo.home.ReturnMoneyInfoVo; -import com.pusong.business.domain.vo.home.DataAmountVo; +import com.pusong.business.domain.vo.home.*; import com.pusong.business.enums.CommonStatusEnum; import com.pusong.business.enums.ContractStatusEnum; import com.pusong.business.enums.PayStatusEnum; @@ -15,6 +13,9 @@ import com.pusong.business.mapper.PsContractInfoMapper; import com.pusong.business.mapper.PsContractPayMapper; import com.pusong.business.service.HomeService; import com.pusong.common.core.constant.CacheNames; +import com.pusong.system.domain.bo.SysDictDataBo; +import com.pusong.system.domain.vo.SysDictDataVo; +import com.pusong.system.service.ISysDictDataService; import lombok.RequiredArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,6 +38,8 @@ public class HomeServiceImpl implements HomeService { private final PsContractInfoMapper psContractInfoMapper; private final PsContractPayMapper payMapper; + private final ISysDictDataService dictDataService; + /** * 查询成交总金额 * @param type @@ -198,22 +201,51 @@ public class HomeServiceImpl implements HomeService { * @param type * @return */ - public ReturnAmountVo byChannel(Integer type){ + public ChannelAmountVo byChannel(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"); - + //返回dto + ChannelAmountVo res = new ChannelAmountVo(); + res.setDateStr(date); log.info("查询日期:{}到{}",startDate,endDate); - List list = psContractInfoMapper.selectList(Wrappers.query()); -// .select(PsContractInfo::getContractCode, PsContractInfo::getIsDue, PsContractInfo::getContractAmount) -// .ne(PsContractInfo::getIsCancel, CommonStatusEnum.SUCCESS.getCode()) -// .ne(PsContractInfo::getContractStatus, ContractStatusEnum.INIT.getCode()) -// .ge(startDate != null,PsContractInfo::getApplyDate,startDate) -// .le(endDate != null,PsContractInfo::getApplyDate,endDate)); - list.stream().collect(Collectors.groupingBy(PsContractInfo::getContractCode)).entrySet().stream().forEach(entry -> {}); - - - return null; + List list = psContractInfoMapper.byChannel(new QueryWrapper() + .ne("info.is_due", CommonStatusEnum.SUCCESS.getCode()).ne("info.contract_status", ContractStatusEnum.INIT.getCode()) + .eq("pay.pay_status",PayStatusEnum.SUCCESS.getCode()) + .ge(startDate != null,"info.apply_date",startDate).le(endDate != null,"info.apply_date",endDate)); + //查询各个渠道的字典表 + SysDictDataBo dictData = new SysDictDataBo(); + dictData.setInDictType(List.of("custom_source")); + List dictList = dictDataService.selectDictDataList(dictData); + //取字典label() + List configList = dictList.stream().map(SysDictDataVo::getDictLabel).toList(); + //把支付信息根据渠道分组(方便下面使用) + Map> map = list.stream().collect(Collectors.groupingBy(ChannelPayInfo::getChannel, Collectors.toList())); + //各渠道的支付信息 + Map channelMap = new HashMap<>(); + //便利渠道,装填各个渠道信息 + for (String item : configList){ + DataAmountVo data = new DataAmountVo(); + List payList = map.get(item) == null ? new ArrayList<>() : map.get(item); + Set contractCodes = new HashSet<>(); + BigDecimal money = BigDecimal.ZERO; + BigDecimal paymoney = BigDecimal.ZERO; + for (ChannelPayInfo pay : payList){ + contractCodes.add(pay.getContractCode()); + money = money.add(pay.getContractAmount()); + paymoney = pay.getBusinessType().equals("1")? paymoney.add(pay.getMoney()) : paymoney.subtract(pay.getMoney()); + } + BigDecimal unpaymoney = money.subtract(paymoney); + data.setNum(contractCodes.size()+"单"); + data.setMoney(money); + data.setPayMoney(paymoney); + data.setUnPayMoney(unpaymoney); + channelMap.put(item,data); + } + res.setChannelMap(channelMap); + //计算总金额和占比 + res.cellPer(); + return res; } } 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 36dbb18..bfd5392 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 @@ -80,4 +80,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" info.contract_status != #{queryParam.contractStatus} and info.is_cancel != #{queryParam.isCancel} + + + +