Commit 707000af by jianan

出账检核-增加币种1

parent ba8a0018
......@@ -124,8 +124,8 @@ public class ApiFortuneController {
existingEntity.setFortunePeriod(updateEntity.getFortunePeriod());
existingEntity.setFortuneTotalPeriod(updateEntity.getFortuneTotalPeriod());
existingEntity.setFortuneName(updateEntity.getFortuneName());
existingEntity.setAmount(updateEntity.getAmount());
existingEntity.setCurrency(updateEntity.getCurrency());
existingEntity.setOriginalAmount(updateEntity.getOriginalAmount());
existingEntity.setOriginalCurrency(updateEntity.getOriginalCurrency());
existingEntity.setBroker(updateEntity.getBroker());
existingEntity.setTeam(updateEntity.getTeam());
existingEntity.setRemark(updateEntity.getRemark());
......
......@@ -55,8 +55,8 @@ public class FortuneImportDTO {
entity.setFortunePeriod(data.getFortunePeriod());
entity.setFortuneTotalPeriod(data.getFortuneTotalPeriod());
entity.setFortuneName(data.getFortuneName());
entity.setAmount(data.getAmount());
entity.setCurrency(data.getCurrency());
entity.setOriginalAmount(data.getAmount());
entity.setOriginalCurrency(data.getCurrency());
entity.setBroker(data.getBroker());
entity.setTeam(data.getTeam());
entity.setRemark(data.getRemark());
......
......@@ -317,8 +317,8 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
continue;
}
Fortune fortune = new Fortune();
//发佣金额 -> 计算值 - sqlAlgorithmResultDtoList集合里面的计算值和值
fortune.setAmount(algorithmResDto.getCalculatedValue());
//基本法发佣金额 -> 计算值 - sqlAlgorithmResultDtoList集合里面的计算值和值
fortune.setRuleAmount(algorithmResDto.getCalculatedValue());
//保单发佣批次ID
fortune.setBatchBizId(fortuneDto.getBatchBizId());
//转介人姓名 (获得积分的业务员)
......@@ -331,8 +331,8 @@ public class ApiBasicLawCalculateServiceImpl implements ApiBasicLawCalculateServ
fortune.setFortuneBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_FORTUNE.getCode()));
//基本法项目配置表唯一业务ID
fortune.setRuleItemBizId(algorithmResDto.getRuleItemBizId());
//发佣币种
fortune.setCurrency(fortuneDto.getCurrency());
//基本法发佣币种
fortune.setRuleCurrency(fortuneDto.getCurrency());
//发佣期数
fortune.setFortunePeriod(fortuneDto.getFortunePeriod());
//发佣总期数
......
......@@ -83,24 +83,60 @@ public class FortuneAddRequest implements Serializable {
private String fortuneType;
/**
* 出账金额
* 保单币种金额
*/
@Schema(description = "出账金额", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal amount;
@Schema(description = "保单币种金额", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal ruleAmount;
/**
* 出账币种
* 保单币种
*/
@Schema(description = "出账币种", requiredMode = Schema.RequiredMode.REQUIRED)
private String currency;
@Schema(description = "保单币种", requiredMode = Schema.RequiredMode.REQUIRED)
private String ruleCurrency;
/**
* 结算汇率
* 保单币种→港币汇率(入账检核汇率)
*/
@Schema(description = "结算汇率", requiredMode = Schema.RequiredMode.REQUIRED)
@Schema(description = "保单币种→港币汇率(入账检核汇率)", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal exchangeRate;
/**
* 原币种
*/
@Schema(description = "原币种", requiredMode = Schema.RequiredMode.REQUIRED)
private String originalCurrency;
/**
* 原币种金额
*/
@Schema(description = "原币种金额", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal originalAmount;
/**
* 原币种→港币汇率
*/
@Schema(description = "原币种→港币汇率", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal originalToHkdRate;
/**
* 发放币种
*/
@Schema(description = "发放币种", requiredMode = Schema.RequiredMode.REQUIRED)
private String payoutCurrency;
/**
* 发放币种金额
*/
@Schema(description = "发放币种金额", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal payoutAmount;
/**
* 港币金额
*/
@Schema(description = "港币金额", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal hkdAmount;
/**
* 出账日期
*/
@Schema(description = "出账日期", requiredMode = Schema.RequiredMode.REQUIRED)
......
......@@ -150,14 +150,15 @@ public class ExpectedFortune implements Serializable {
@TableField("standard_amount")
private BigDecimal standardAmount;
// ========== 保单币种及金额(基本法币种) ==========
/**
* 实际发佣金额(实际发佣金额 = 标准发佣金额 * 转介人介绍费占比)
* 保单币种金额(保单币种金额 = 标准发佣金额 * 转介人介绍费占比)
*/
@TableField("amount")
private BigDecimal amount;
/**
* 发佣币种
* 保单币种
*/
@TableField("currency")
private String currency;
......@@ -187,28 +188,29 @@ public class ExpectedFortune implements Serializable {
private LocalDate actualPayoutDate;
/**
* 默认结算汇率
* 默认保单币种汇率
*/
@TableField("default_exchange_rate")
private BigDecimal defaultExchangeRate;
/**
* 出账原币种金额
*/
@TableField("payout_amount")
private BigDecimal payoutAmount;
/**
* 出账原币种
*/
// ========== 原币种及金额 ==========
@TableField("original_currency")
private String originalCurrency; // 原币种
@TableField("original_amount")
private BigDecimal originalAmount; // 原币种金额
@TableField("original_to_hkd_rate")
private BigDecimal originalToHkdRate; // 原币→港币汇率
// ========== 发放币种及金额 ==========
@TableField("payout_currency")
private String payoutCurrency;
private String payoutCurrency; // 发放币种
@TableField("payout_amount")
private BigDecimal payoutAmount; // 发放币种金额
@TableField("hkd_to_payout_rate")
private BigDecimal hkdToPayoutRate; // 港币→发放币汇率
/**
* 出账原币种结算汇率(出账原币种 → 港币的结算汇率)
*/
@TableField("payout_exchange_rate")
private BigDecimal payoutExchangeRate;
/**
* 港币预计出账金额
......
package com.yd.csf.service.model;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
import lombok.Data;
/**
* 保单出账
* 保单发佣
*
* @TableName fortune
*/
@TableName(value = "fortune")
@Data
public class Fortune implements Serializable {
public class Fortune {
/**
* serial id
*/
......@@ -33,7 +33,7 @@ public class Fortune implements Serializable {
private String payableNo;
/**
* 检核年月
* 检核年月 yyyy-MM
*/
private String reconciliationYearMonth;
......@@ -48,17 +48,17 @@ public class Fortune implements Serializable {
private Integer isPart;
/**
* 保单出账批次ID
* 保单发佣批次ID
*/
private String batchBizId;
/**
* 保单出账业务id
* 保单发佣业务id
*/
private String fortuneBizId;
/**
* 来佣保单业务id
* 保单来佣业务id
*/
private String commissionBizId;
......@@ -78,12 +78,12 @@ public class Fortune implements Serializable {
private String policyCurrency;
/**
* 出账期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
* 发佣期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
*/
private Integer fortunePeriod;
/**
* 出账总期数
* 发佣总期数
*/
private Integer fortuneTotalPeriod;
......@@ -123,26 +123,51 @@ public class Fortune implements Serializable {
private String fortuneName;
/**
* 出账类型
* 发佣类型
*/
private String fortuneType;
/**
* 出账金额
* 保单币种金额
*/
private BigDecimal amount;
private BigDecimal ruleAmount;
/**
* 出账币种
* 保单币种
*/
private String currency;
private String ruleCurrency;
/**
* 结算汇率
* 保单币种→港币汇率(入账检核汇率)
*/
private BigDecimal exchangeRate;
/**
* 原币种
*/
private String originalCurrency;
/**
* 原币种金额
*/
private BigDecimal originalAmount;
/**
* 原币种→港币汇率
*/
private BigDecimal originalToHkdRate;
/**
* 发放币种
*/
private String payoutCurrency;
/**
* 发放币种金额
*/
private BigDecimal payoutAmount;
/**
* 港币金额
*/
private BigDecimal hkdAmount;
......@@ -158,7 +183,7 @@ public class Fortune implements Serializable {
private BigDecimal currentPaymentHkdAmount;
/**
* 本出账比例
* 本出账比例
*/
private BigDecimal currentPaymentRatio;
......@@ -178,12 +203,12 @@ public class Fortune implements Serializable {
private LocalDate actualPayoutDate;
/**
* 检核人
* 检核人
*/
private String reconciliationOperator;
/**
* 出账数据业务ID
* 出账记录业务ID
*/
private String fortuneAccountBizId;
......@@ -198,7 +223,7 @@ public class Fortune implements Serializable {
private BigDecimal taxAmount;
/**
* 税后出账
* 税后发佣
*/
private BigDecimal netAmount;
......@@ -258,6 +283,4 @@ public class Fortune implements Serializable {
*/
private Date updateTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
......@@ -702,8 +702,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
fortune.setId(null);
fortune.setFortuneBizType("R");
fortune.setExchangeRate(expectedFortune.getDefaultExchangeRate());
fortune.setAmount(expectedFortune.getAmount());
fortune.setHkdAmount(expectedFortune.getHkdAmount());
fortune.setCurrentPaymentAmount(expectedFortune.getAmount());
fortune.setCurrentPaymentHkdAmount(expectedFortune.getHkdAmount());
fortune.setExpectedFortuneBizId(expectedFortune.getExpectedFortuneBizId());
......
......@@ -366,8 +366,8 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
}
if (CollUtil.isNotEmpty(fortuneList)) {
// 按人和币种分组
Map<String, List<Fortune>> fortuneMap = fortuneList.stream().collect(Collectors.groupingBy(fortune -> fortune.getBroker() + "_" + fortune.getCurrency()));
// 按人和发放币种分组
Map<String, List<Fortune>> fortuneMap = fortuneList.stream().collect(Collectors.groupingBy(fortune -> fortune.getBroker() + "_" + fortune.getPayoutCurrency()));
// 创建按人分组的导出DTO列表
List<FortuneAccountExportDTO> accountExportDTOList = new ArrayList<>();
......@@ -526,19 +526,16 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
fortune.setExpectedFortuneBizId(expectedFortune.getExpectedFortuneBizId());
fortune.setCommissionExpectedBizId(expectedFortune.getExpectedFortuneBizId());
fortune.setPolicyCurrency(expectedFortune.getPolicyCurrency());
fortune.setExchangeRate(expectedFortune.getDefaultExchangeRate());
fortune.setHkdAmount(fortuneAddRequest.getAmount().multiply(expectedFortune.getDefaultExchangeRate()));
fortune.setCurrentPaymentHkdAmount(fortune.getHkdAmount());
fortune.setPayoutDate(expectedFortune.getPayoutDate());
} else {
fortune.setExchangeRate(BigDecimal.ONE);
fortune.setHkdAmount(fortuneAddRequest.getAmount());
fortune.setCurrentPaymentHkdAmount(fortune.getHkdAmount());
}
// 生成发佣业务ID
fortune.setFortuneBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_FORTUNE.getCode()));
fortune.setCurrentPaymentAmount(fortuneAddRequest.getAmount());
fortune.setCurrentPaymentAmount(fortuneAddRequest.getPayoutAmount());
fortune.setFortuneName(queryByDict(fortuneAddRequest.getFortuneType()));
fortune.setActualPayoutDate(fortuneAddRequest.getPayoutDate());
fortune.setIsPart(0);
......@@ -551,15 +548,35 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
if (ObjectUtils.isEmpty(fortuneAddRequest.getFortuneBizType())) {
throw new BusinessException(ResultCode.FAIL.getCode(), "出账类型不能为空");
}
if (ObjectUtils.isEmpty(fortuneAddRequest.getAmount())) {
throw new BusinessException(ResultCode.FAIL.getCode(), "出账金额不能为空");
if (ObjectUtils.isEmpty(fortuneAddRequest.getOriginalCurrency())) {
throw new BusinessException(ResultCode.FAIL.getCode(), "原币种不能为空");
}
if (ObjectUtils.isEmpty(fortuneAddRequest.getOriginalAmount())) {
throw new BusinessException(ResultCode.FAIL.getCode(), "原币种金额不能为空");
}
if (ObjectUtils.isEmpty(fortuneAddRequest.getOriginalToHkdRate())) {
throw new BusinessException(ResultCode.FAIL.getCode(), "原币种→港币汇率不能为空");
}
if (ObjectUtils.isEmpty(fortuneAddRequest.getPayoutCurrency())) {
throw new BusinessException(ResultCode.FAIL.getCode(), "发放币种不能为空");
}
if (ObjectUtils.isEmpty(fortuneAddRequest.getPayoutAmount())) {
throw new BusinessException(ResultCode.FAIL.getCode(), "发放币种金额不能为空");
}
if (ObjectUtils.isEmpty(fortuneAddRequest.getRuleCurrency())) {
throw new BusinessException(ResultCode.FAIL.getCode(), "保单币种不能为空");
}
if (ObjectUtils.isEmpty(fortuneAddRequest.getCurrency())) {
throw new BusinessException(ResultCode.FAIL.getCode(), "出账币种不能为空");
if (ObjectUtils.isEmpty(fortuneAddRequest.getRuleAmount())) {
throw new BusinessException(ResultCode.FAIL.getCode(), "保单币种金额不能为空");
}
if (ObjectUtils.isEmpty(fortuneAddRequest.getExchangeRate())) {
throw new BusinessException(ResultCode.FAIL.getCode(), "结算汇率不能为空");
throw new BusinessException(ResultCode.FAIL.getCode(), "保单币种→港币汇率不能为空");
}
if (ObjectUtils.isEmpty(fortuneAddRequest.getHkdAmount())) {
throw new BusinessException(ResultCode.FAIL.getCode(), "港币金额不能为空");
}
if (ObjectUtils.isEmpty(fortuneAddRequest.getFortuneType())) {
throw new BusinessException(ResultCode.FAIL.getCode(), "出账项目不能为空");
}
......@@ -722,11 +739,7 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
Fortune fortune = new Fortune();
BeanUtil.copyProperties(fortuneAddRequest, fortune);
// 计算港币金额
fortune.setHkdAmount(
NumberUtil.mul(fortuneAddRequest.getAmount(), fortuneAddRequest.getExchangeRate())
.setScale(2, RoundingMode.HALF_UP)
);
fortune.setCurrentPaymentHkdAmount(fortune.getHkdAmount());
// 查询发佣类型名称
String fortuneName = queryByDict(fortuneAddRequest.getFortuneType());
......@@ -765,7 +778,7 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
// 生成发佣业务ID
fortune.setFortuneBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_FORTUNE.getCode()));
fortune.setCurrentPaymentAmount(fortuneAddRequest.getAmount());
fortune.setCurrentPaymentAmount(fortuneAddRequest.getPayoutAmount());
fortune.setActualPayoutDate(fortuneAddRequest.getPayoutDate());
fortune.setIsPart(0);
fortuneList.add(fortune);
......@@ -858,10 +871,10 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal tolerance = new BigDecimal("0.01");
BigDecimal originalDifference = originalFortune.getAmount().subtract(totalSplitOriginalAmount).abs();
BigDecimal originalDifference = originalFortune.getOriginalAmount().subtract(totalSplitOriginalAmount).abs();
if (originalDifference.compareTo(tolerance) > 0) {
throw new BusinessException(ResultCode.PARAM_CHECK_ERROR.getCode(),
String.format("分期原始金额总和(%s)与原记录原始金额(%s)不匹配", totalSplitOriginalAmount, originalFortune.getAmount()));
String.format("分期原始金额总和(%s)与原记录原始金额(%s)不匹配", totalSplitOriginalAmount, originalFortune.getOriginalAmount()));
}
if (totalSplitRatio.compareTo(BigDecimal.ZERO) > 0) {
......@@ -937,7 +950,7 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
newFortune.setExpectedFortuneBizId(newExpectedFortuneBizId);
newFortune.setAmount(originalAmount);
newFortune.setOriginalAmount(originalAmount);
newFortune.setHkdAmount(splitDto.getHkdAmount());
newFortune.setExchangeRate(splitDto.getExchangeRate());
......@@ -1063,12 +1076,12 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
.update();
// 更新 expected fortune 的出账原币种结算汇率、港币金额
expectedFortuneService.lambdaUpdate()
.set(ExpectedFortune::getPayoutExchangeRate, exchangeRate)
.set(ExpectedFortune::getHkdAmount, hkdAmount)
.set(ExpectedFortune::getUnpaidAmount, hkdAmount)
.eq(ExpectedFortune::getId, originalExpectedFortune.getId())
.update();
// expectedFortuneService.lambdaUpdate()
// .set(ExpectedFortune::getPayoutExchangeRate, exchangeRate)
// .set(ExpectedFortune::getHkdAmount, hkdAmount)
// .set(ExpectedFortune::getUnpaidAmount, hkdAmount)
// .eq(ExpectedFortune::getId, originalExpectedFortune.getId())
// .update();
return true;
}
......
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