Merge remote-tracking branch 'origin/master'

This commit is contained in:
LIUFL 2024-09-10 14:50:41 +08:00
commit f22be83321
10 changed files with 118 additions and 29 deletions

View File

@ -369,11 +369,11 @@
</dependency>
<!-- 工作流模块 -->
<!--<dependency>
<dependency>
<groupId>com.pusong</groupId>
<artifactId>pusong-workflow</artifactId>
<version>${revision}</version>
</dependency>-->
</dependency>
</dependencies>
</dependencyManagement>

View File

@ -85,10 +85,10 @@
<artifactId>pusong-business</artifactId>
</dependency>
<!-- 工作流模块 -->
<!-- <dependency>
<dependency>
<groupId>com.pusong</groupId>
<artifactId>pusong-workflow</artifactId>
</dependency>-->
</dependency>
<dependency>
<groupId>de.codecentric</groupId>

View File

@ -14,7 +14,7 @@
<module>pusong-generator</module>
<module>pusong-job</module>
<module>pusong-system</module>
<!-- <module>pusong-workflow</module>-->
<module>pusong-workflow</module>
<module>pusong-business</module>
</modules>

View File

@ -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));
}

View File

@ -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()+"%");});
}
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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
@ -204,22 +207,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;
}
}

View File

@ -85,4 +85,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>