Commit 9723692e by jianan

前端对接问题修复19

parent 13292b02
package com.yd.csf.service.component;
import com.yd.common.exception.BusinessException;
import com.yd.csf.service.dto.CommissionExpectedAddDto;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.apache.commons.lang3.StringUtils;
......@@ -33,6 +35,10 @@ public class ReceivableService {
}
private String generateAdditionalReceivableNo(CommissionExpectedAddDto addDto) {
String reconciliationCompanyCode = addDto.getReconciliationCompanyCode();
if (ObjectUtils.isEmpty(reconciliationCompanyCode)) {
throw new BusinessException("对账公司编码不能为空");
}
LocalDate today = LocalDate.now();
String dateStr = today.format(DATE_FORMATTER);
......@@ -42,23 +48,11 @@ public class ReceivableService {
// 格式:应收款类型-对账公司代码-年份后两位-席号(6位数字)
return String.format("%s%s%s%06d",
"R".equals(addDto.getCommissionBizType()) ? "R-" : "U-",
getCompanyCode(addDto),
reconciliationCompanyCode,
dateStr.substring(2, 4), // 取年份后两位
dailySeq);
}
public String getCompanyCode(CommissionExpectedAddDto addDto) {
if (StringUtils.isBlank(addDto.getReconciliationCompanyCode())) {
// 没有对账公司编码,使用自定义公司编码
// 取MD5前6位
String md5 = DigestUtils.md5Hex(addDto.getReconciliationCompany());
return "UNKNOWN_" + md5.substring(0, 6).toUpperCase();
} else {
// 有对账公司编码,使用对账公司编码
return addDto.getReconciliationCompanyCode();
}
}
private long getDailySequence() {
LocalDate today = LocalDate.now();
String redisKey = ADDITIONAL_NO_PREFIX + today.format(DATE_FORMATTER);
......
......@@ -8,15 +8,9 @@ import java.math.BigDecimal;
@Data
public class FortuneStatisticsVO {
/**
* 总出账金额
* 账金额
*/
@Schema(description = "总出账金额")
private BigDecimal totalOutAmount;
/**
* 总入账金额
*/
@Schema(description = "总入账金额")
@Schema(description = "入账金额")
private BigDecimal totalInAmount;
/**
......@@ -24,4 +18,28 @@ public class FortuneStatisticsVO {
*/
@Schema(description = "总保单数")
private Long totalPolicyCount;
/**
* 总保费
*/
@Schema(description = "总保费")
private BigDecimal totalPremium;
/**
* 待出账金额
*/
@Schema(description = "待出账金额")
private BigDecimal pendingOutAmount;
/**
* 可出账账金额
*/
@Schema(description = "可出账金额")
private BigDecimal availableOutAmount;
/**
* 差额
*/
@Schema(description = "差额(待出账金额 - 可出账金额)")
private BigDecimal differenceAmount;
}
......@@ -124,6 +124,11 @@ public class Fortune implements Serializable {
private String currency;
/**
* 本次出账金额
*/
private BigDecimal currentPaymentAmount;
/**
* 佣金发放状态 0=待出账 1=可出账 2=已出账
*/
private String status;
......
......@@ -42,6 +42,7 @@ import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
......@@ -234,33 +235,46 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "预计入账列表不能为空");
}
// 查询保单信息
String policyNo = addDtoList.get(0).getPolicyNo();
Policy policy = policyService.getOne(new QueryWrapper<Policy>().eq("policy_no", policyNo));
Set<String> policyNoSet = addDtoList.stream()
.map(CommissionExpectedAddDto::getPolicyNo)
.collect(Collectors.toSet());
List<Policy> policyList = policyService.lambdaQuery().in(Policy::getPolicyNo, policyNoSet).list();
// 保单映射
Map<String, Policy> policyMap = policyList.stream()
.collect(Collectors.toMap(Policy::getPolicyNo, Function.identity()));
List<CommissionExpected> addList = new ArrayList<>();
List<CommissionExpected> updateList = new ArrayList<>();
for (CommissionExpectedAddDto addDto : addDtoList) {
CommissionExpected commissionExpected = new CommissionExpected();
BeanUtils.copyProperties(addDto, commissionExpected);
// 初始值
// 校验参数
validCommissionExpected(commissionExpected, true);
// 结算汇率初始值为 1
commissionExpected.setDefaultExchangeRate(BigDecimal.valueOf(1));
// 如果币种不是港币,查询默认结算汇率
if (!StringUtils.equalsIgnoreCase(addDto.getCurrency(), "HKD")) {
commissionExpected.setDefaultExchangeRate(queryDefaultExchangeRate(addDto.getCurrency()));
}
// 预计总金额
if (policy != null) {
if ("R".equals(addDto.getCommissionBizType())) {
Policy policy = policyMap.get(addDto.getPolicyNo());
if (ObjectUtils.isEmpty(policy)) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "保单号为" + addDto.getPolicyNo() + "的保单不存在");
}
BigDecimal expectedAmount = policy.getPaymentPremium()
.multiply(commissionExpected.getCommissionRatio())
.multiply(commissionExpected.getDefaultExchangeRate())
.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP);
commissionExpected.setExpectedAmount(expectedAmount);
// 设置关联字段
commissionExpected.setInsuranceCompanyBizId(policy.getInsuranceCompanyBizId());
commissionExpected.setProductLaunchBizId(policy.getProductLaunchBizId());
} else {
commissionExpected.setExpectedAmount(addDto.getAmount());
}
// 校验参数
validCommissionExpected(commissionExpected, true);
if (StringUtils.isBlank(addDto.getCommissionExpectedBizId())) {
// 生成应收账款编号
commissionExpected.setReceivableNo(receivableService.generateReceivableNo(addDto.getCommissionBizType(), addDto.getReconciliationCompanyCode(), addDto.getReconciliationCompany()));
......
......@@ -372,13 +372,19 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
public FortuneStatisticsVO getFortuneStatistics(List<Long> fortuneIdList) {
if (CollectionUtils.isEmpty(fortuneIdList)) {
FortuneStatisticsVO fortuneStatisticsVO = new FortuneStatisticsVO();
fortuneStatisticsVO.setTotalOutAmount(BigDecimal.ZERO);
fortuneStatisticsVO.setTotalInAmount(BigDecimal.ZERO);
fortuneStatisticsVO.setTotalPolicyCount(0L);
fortuneStatisticsVO.setTotalPremium(BigDecimal.ZERO);
fortuneStatisticsVO.setPendingOutAmount(BigDecimal.ZERO);
fortuneStatisticsVO.setAvailableOutAmount(BigDecimal.ZERO);
fortuneStatisticsVO.setDifferenceAmount(BigDecimal.ZERO);
return fortuneStatisticsVO;
}
// 自定义查询
return this.baseMapper.getFortuneStatistics(fortuneIdList);
FortuneStatisticsVO fortuneStatistics = this.baseMapper.getFortuneStatistics(fortuneIdList);
// 计算差额
fortuneStatistics.setDifferenceAmount(fortuneStatistics.getPendingOutAmount().subtract(fortuneStatistics.getAvailableOutAmount()));
return fortuneStatistics;
}
@Override
......
......@@ -101,10 +101,10 @@ public class CommissionExpectedVO implements Serializable {
private BigDecimal commissionRatio;
/**
* 来佣比例 (%)
* 预计入账金额
*/
@Schema(description = "来佣比例 (%)")
private BigDecimal ratio;
@Schema(description = "预计入账金额 HKD(如果不关联保单,就没有预计入账比例了,此时记录预计入账金额)")
private BigDecimal amount;
/**
* 来佣币种
......@@ -207,7 +207,6 @@ public class CommissionExpectedVO implements Serializable {
}
CommissionExpectedVO commissionVO = new CommissionExpectedVO();
BeanUtils.copyProperties(commissionExpected, commissionVO);
commissionVO.setRatio(commissionExpected.getCommissionRatio());
return commissionVO;
}
......
......@@ -24,6 +24,7 @@
<result property="fortuneType" column="fortune_type" />
<result property="amount" column="amount" />
<result property="currency" column="currency" />
<result property="currentPaymentAmount" column="current_payment_amount" />
<result property="status" column="status" />
<result property="payoutDate" column="payout_date" />
<result property="isTax" column="is_tax" />
......@@ -45,7 +46,7 @@
id,fortune_biz_id,expected_fortune_biz_id,reconciliation_year_month,fortune_biz_type,batch_biz_id,
commission_biz_id,policy_no,fortune_period,fortune_total_period,broker_biz_id,
team_biz_id,grade_commission_rate,share_rate,fortune_name,fortune_type,is_part,
amount,currency,status,payout_date,is_tax,
amount,currency,current_payment_amount,status,payout_date,is_tax,
tax_amount,net_amount,salary_biz_id,base_rule_biz_id,settlement_biz_id,
calculation_formula,remark,is_deleted,creator_id,updater_id,
create_time,update_time
......@@ -53,17 +54,20 @@
<select id="getFortuneStatistics" resultType="com.yd.csf.service.dto.FortuneStatisticsVO">
select
ifnull(f.amount,0) as totalOutAmount,
ifnull(c.amount,0) as totalInAmount,
count(distinct f.policy_no) as totalPolicyCount
ifnull(sum(f.amount),0) as pendingOutAmount,
ifnull(sum(c.amount),0) as totalInAmount,
count(distinct f.policy_no) as totalPolicyCount,
ifnull(sum(c.premium),0) as totalPremium,
ifnull(sum(f.current_payment_amount),0) as availableOutAmount
from fortune f
left join commission c on f.commission_biz_id = c.commission_biz_id
where
<if test="fortuneIdList != null and fortuneIdList.size() > 0">
f.id in
<foreach collection="fortuneIdList" item="fortuneId" open="(" close=")" separator=",">
#{fortuneId}
</foreach>
</if>
<if test="fortuneIdList != null and fortuneIdList.size() > 0">
f.id in
<foreach collection="fortuneIdList" item="fortuneId" open="(" close=")" separator=",">
#{fortuneId}
</foreach>
</if>
</select>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment