各渠道成交信息
This commit is contained in:
parent
e1c36cdcab
commit
a255b29d83
@ -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<ReturnAmountVo> byChannel(@RequestParam() Integer type) {
|
||||
public R<ChannelAmountVo> byChannel(@RequestParam() Integer type) {
|
||||
return R.ok(homeService.byChannel(type));
|
||||
}
|
||||
|
||||
|
@ -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<String,DataAmountVo> one;
|
||||
private Map<String,DataAmountVo> 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()+"%");});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
||||
}
|
@ -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<PsContractInfo, PsC
|
||||
List<PsSalaryContract> querySalaryListByCodes(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
|
||||
|
||||
List<Map<String,Object>> homePageReturnMoneyInfo(@Param("queryParam") Map<String, Object> queryParam);
|
||||
|
||||
|
||||
//首页查询各个渠道成交的合同
|
||||
List<ChannelPayInfo> byChannel(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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<String, Object> 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<PsContractInfo> 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<ChannelPayInfo> list = psContractInfoMapper.byChannel(new QueryWrapper<PsContractInfo>()
|
||||
.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<SysDictDataVo> dictList = dictDataService.selectDictDataList(dictData);
|
||||
//取字典label()
|
||||
List<String> configList = dictList.stream().map(SysDictDataVo::getDictLabel).toList();
|
||||
//把支付信息根据渠道分组(方便下面使用)
|
||||
Map<String, List<ChannelPayInfo>> map = list.stream().collect(Collectors.groupingBy(ChannelPayInfo::getChannel, Collectors.toList()));
|
||||
//各渠道的支付信息
|
||||
Map<String,DataAmountVo> channelMap = new HashMap<>();
|
||||
//便利渠道,装填各个渠道信息
|
||||
for (String item : configList){
|
||||
DataAmountVo data = new DataAmountVo();
|
||||
List<ChannelPayInfo> payList = map.get(item) == null ? new ArrayList<>() : map.get(item);
|
||||
Set<String> 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;
|
||||
}
|
||||
}
|
||||
|
@ -80,4 +80,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
info.contract_status != #{queryParam.contractStatus} and
|
||||
info.is_cancel != #{queryParam.isCancel}
|
||||
</select>
|
||||
|
||||
|
||||
<select id="byChannel" resultType="com.pusong.business.domain.vo.home.ChannelPayInfo">
|
||||
select
|
||||
cus.custom_source,
|
||||
info.contract_code,
|
||||
info.contract_amount,
|
||||
pay.business_type,
|
||||
pay.money
|
||||
from ps_contract_info info
|
||||
left join ps_custom_info cus on info.custom_id = cus.id
|
||||
left join ps_contract_pay pay on info.contract_code = pay.contract_code
|
||||
${ew.getCustomSqlSegment}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
Loading…
Reference in New Issue
Block a user