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> <dependency>
<groupId>com.pusong</groupId> <groupId>com.pusong</groupId>
<artifactId>pusong-workflow</artifactId> <artifactId>pusong-workflow</artifactId>
<version>${revision}</version> <version>${revision}</version>
</dependency>--> </dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>

View File

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

View File

@ -14,7 +14,7 @@
<module>pusong-generator</module> <module>pusong-generator</module>
<module>pusong-job</module> <module>pusong-job</module>
<module>pusong-system</module> <module>pusong-system</module>
<!-- <module>pusong-workflow</module>--> <module>pusong-workflow</module>
<module>pusong-business</module> <module>pusong-business</module>
</modules> </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.bo.PsSalaryBo;
import com.pusong.business.domain.vo.PsSalaryContractVo; import com.pusong.business.domain.vo.PsSalaryContractVo;
import com.pusong.business.domain.vo.PsSalaryVo; 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.MakeAmountVo;
import com.pusong.business.domain.vo.home.ReturnAmountVo; import com.pusong.business.domain.vo.home.ReturnAmountVo;
import com.pusong.business.domain.vo.home.ReturnMoneyInfoVo; import com.pusong.business.domain.vo.home.ReturnMoneyInfoVo;
@ -65,7 +66,7 @@ public class HomeController extends BaseController {
*/ */
@SaCheckPermission("business:salary:list") @SaCheckPermission("business:salary:list")
@GetMapping("/byChannel") @GetMapping("/byChannel")
public R<ReturnAmountVo> byChannel(@RequestParam() Integer type) { public R<ChannelAmountVo> byChannel(@RequestParam() Integer type) {
return R.ok(homeService.byChannel(type)); return R.ok(homeService.byChannel(type));
} }

View File

@ -6,7 +6,6 @@ import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
@Data @Data
@ -29,20 +28,20 @@ public class ChannelAmountVo {
/** /**
* 各渠道成交金额 * 各渠道成交金额
*/ */
private Map<String,DataAmountVo> one; private Map<String,DataAmountVo> channelMap;
public void cellPer(){ public void cellPer(){
//计算总金额 //计算总金额
this.all = this.all == null? BigDecimal.ZERO: this.all; this.all = this.all == null? BigDecimal.ZERO: this.all;
for (String str : one.keySet()){ for (String str : channelMap.keySet()){
all = all.add(one.get(str).getMoney()); all = all.add(channelMap.get(str).getMoney());
} }
//计算占比 //计算占比
if(0 == this.all.compareTo(BigDecimal.ZERO)) { if(0 == this.all.compareTo(BigDecimal.ZERO)) {
one.forEach((k,v)->{v.setPer("0%");}); channelMap.forEach((k, v)->{v.setPer("0%");});
}else { }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.PsContractInfoVo;
import com.pusong.business.domain.vo.PsCustomInfoVo; import com.pusong.business.domain.vo.PsCustomInfoVo;
import com.pusong.business.domain.vo.PsSalaryContractVo; 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.DataColumn;
import com.pusong.common.mybatis.annotation.DataPermission; import com.pusong.common.mybatis.annotation.DataPermission;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus; 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<PsSalaryContract> querySalaryListByCodes(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
List<Map<String,Object>> homePageReturnMoneyInfo(@Param("queryParam") Map<String, Object> queryParam); 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; 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.MakeAmountVo;
import com.pusong.business.domain.vo.home.ReturnAmountVo; import com.pusong.business.domain.vo.home.ReturnAmountVo;
import com.pusong.business.domain.vo.home.ReturnMoneyInfoVo; import com.pusong.business.domain.vo.home.ReturnMoneyInfoVo;
@ -18,5 +19,5 @@ public interface HomeService {
* @param type * @param type
* @return * @return
*/ */
ReturnAmountVo byChannel(Integer type); ChannelAmountVo byChannel(Integer type);
} }

View File

@ -1,13 +1,11 @@
package com.pusong.business.service.impl; 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.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.pusong.business.domain.PsContractInfo; import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.PsContractPay; import com.pusong.business.domain.PsContractPay;
import com.pusong.business.domain.vo.home.MakeAmountVo; import com.pusong.business.domain.vo.home.*;
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.enums.CommonStatusEnum; import com.pusong.business.enums.CommonStatusEnum;
import com.pusong.business.enums.ContractStatusEnum; import com.pusong.business.enums.ContractStatusEnum;
import com.pusong.business.enums.PayStatusEnum; 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.mapper.PsContractPayMapper;
import com.pusong.business.service.HomeService; import com.pusong.business.service.HomeService;
import com.pusong.common.core.constant.CacheNames; 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 lombok.RequiredArgsConstructor;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -37,6 +38,8 @@ public class HomeServiceImpl implements HomeService {
private final PsContractInfoMapper psContractInfoMapper; private final PsContractInfoMapper psContractInfoMapper;
private final PsContractPayMapper payMapper; private final PsContractPayMapper payMapper;
private final ISysDictDataService dictDataService;
/** /**
* 查询成交总金额 * 查询成交总金额
* @param type * @param type
@ -204,22 +207,51 @@ public class HomeServiceImpl implements HomeService {
* @param type * @param type
* @return * @return
*/ */
public ReturnAmountVo byChannel(Integer type){ public ChannelAmountVo byChannel(Integer type){
Map<String, Object> mapParam = this.getDate(type); Map<String, Object> mapParam = this.getDate(type);
LocalDate startDate = (LocalDate)mapParam.get("startDate"); LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate"); LocalDate endDate = (LocalDate)mapParam.get("endDate");
String date = (String)mapParam.get("date"); String date = (String)mapParam.get("date");
//返回dto
ChannelAmountVo res = new ChannelAmountVo();
res.setDateStr(date);
log.info("查询日期:{}到{}",startDate,endDate); log.info("查询日期:{}到{}",startDate,endDate);
List<PsContractInfo> list = psContractInfoMapper.selectList(Wrappers.query()); List<ChannelPayInfo> list = psContractInfoMapper.byChannel(new QueryWrapper<PsContractInfo>()
// .select(PsContractInfo::getContractCode, PsContractInfo::getIsDue, PsContractInfo::getContractAmount) .ne("info.is_due", CommonStatusEnum.SUCCESS.getCode()).ne("info.contract_status", ContractStatusEnum.INIT.getCode())
// .ne(PsContractInfo::getIsCancel, CommonStatusEnum.SUCCESS.getCode()) .eq("pay.pay_status",PayStatusEnum.SUCCESS.getCode())
// .ne(PsContractInfo::getContractStatus, ContractStatusEnum.INIT.getCode()) .ge(startDate != null,"info.apply_date",startDate).le(endDate != null,"info.apply_date",endDate));
// .ge(startDate != null,PsContractInfo::getApplyDate,startDate) //查询各个渠道的字典表
// .le(endDate != null,PsContractInfo::getApplyDate,endDate)); SysDictDataBo dictData = new SysDictDataBo();
list.stream().collect(Collectors.groupingBy(PsContractInfo::getContractCode)).entrySet().stream().forEach(entry -> {}); dictData.setInDictType(List.of("custom_source"));
List<SysDictDataVo> dictList = dictDataService.selectDictDataList(dictData);
//取字典label
return null; 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.contract_status != #{queryParam.contractStatus} and
info.is_cancel != #{queryParam.isCancel} info.is_cancel != #{queryParam.isCancel}
</select> </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> </mapper>