Commit 9137b722 by zhangxingmin

Merge remote-tracking branch 'origin/test' into test

parents 892015bd dc3fd6ff
...@@ -192,14 +192,15 @@ public class ApiCommissionController { ...@@ -192,14 +192,15 @@ public class ApiCommissionController {
// errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行存在空字段"); // errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行存在空字段");
// } // }
if (excelDTO.getAmount2() == null) {
errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行, 来佣金额不能为空");
}
if ("关联保单应收单".equals(excelDTO.getCommissionBizType())) { if ("关联保单应收单".equals(excelDTO.getCommissionBizType())) {
if (StringUtils.isBlank(excelDTO.getPolicyNo())) { if (StringUtils.isBlank(excelDTO.getPolicyNo())) {
errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行关联保单应收单, 保单号不能为空"); errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行关联保单应收单, 保单号不能为空");
} }
if (excelDTO.getAmount2() == null) { if (ObjectUtils.isEmpty(excelDTO.getExchangeRate2())) {
errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行关联保单应收单, 来佣金额不能为空");
}
if (StringUtils.isBlank(excelDTO.getExchangeRate2())) {
errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行关联保单应收单, 结算汇率不能为空"); errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行关联保单应收单, 结算汇率不能为空");
} }
} }
...@@ -222,7 +223,7 @@ public class ApiCommissionController { ...@@ -222,7 +223,7 @@ public class ApiCommissionController {
entities.add(entity); entities.add(entity);
} }
// 补充完整字段 // 补充关联字段、计算本次入账比例
commissionService.fillCommissionList(entities); commissionService.fillCommissionList(entities);
return entities; return entities;
...@@ -282,7 +283,7 @@ public class ApiCommissionController { ...@@ -282,7 +283,7 @@ public class ApiCommissionController {
* @param request * @param request
* @return * @return
*/ */
@Operation(summary = "同步到预计来佣") @Operation(summary = "同步到预计来佣(比对状态自动为已比对成功)")
@PostMapping("/addToExpected") @PostMapping("/addToExpected")
public Result<Boolean> addToExpected(@RequestBody AddToExpectedCommissionRequest addToExpectedCommissionRequest, HttpServletRequest request) { public Result<Boolean> addToExpected(@RequestBody AddToExpectedCommissionRequest addToExpectedCommissionRequest, HttpServletRequest request) {
if (StringUtils.isBlank(addToExpectedCommissionRequest.getCommissionBizId())) { if (StringUtils.isBlank(addToExpectedCommissionRequest.getCommissionBizId())) {
......
package com.yd.csf.api.dto; package com.yd.csf.api.dto;
import cn.hutool.core.convert.Convert;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.yd.common.enums.CommonEnum; import com.yd.common.enums.CommonEnum;
import com.yd.common.utils.RandomStringGenerator; import com.yd.common.utils.RandomStringGenerator;
...@@ -10,6 +11,7 @@ import lombok.Data; ...@@ -10,6 +11,7 @@ import lombok.Data;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date; import java.util.Date;
@Data @Data
...@@ -72,7 +74,7 @@ public class CommissionExcelDTO { ...@@ -72,7 +74,7 @@ public class CommissionExcelDTO {
private String commissionName2; private String commissionName2;
@ExcelProperty("结算汇率(实)") @ExcelProperty("结算汇率(实)")
private String exchangeRate2; private BigDecimal exchangeRate2;
/** /**
...@@ -85,13 +87,14 @@ public class CommissionExcelDTO { ...@@ -85,13 +87,14 @@ public class CommissionExcelDTO {
if (StringUtils.isNotBlank(commissionBizType)) { if (StringUtils.isNotBlank(commissionBizType)) {
entity.setCommissionBizType("R".equals(commissionBizType) || "关联保单应收单".equalsIgnoreCase(commissionBizType) ? "R" : "U"); entity.setCommissionBizType("R".equals(commissionBizType) || "关联保单应收单".equalsIgnoreCase(commissionBizType) ? "R" : "U");
} }
entity.setPolicyNo(data.getPolicyNo2()); entity.setPolicyNo("U".equals(entity.getCommissionBizType()) ? null : data.getPolicyNo2());
entity.setCommissionPeriod(data.getCommissionPeriod2()); entity.setCommissionPeriod(data.getCommissionPeriod2());
entity.setCommissionName(data.getCommissionName2()); entity.setCommissionName(data.getCommissionName2());
entity.setAmount(data.getAmount2()); entity.setAmount(data.getAmount2());
entity.setCurrency(CurrencyEnum.getEnumByItemLabel(data.getCurrency2())); entity.setCurrency(CurrencyEnum.getEnumByItemLabel(data.getCurrency2()));
entity.setExchangeRate(data.getExchangeRate2()); entity.setExchangeRate(data.getExchangeRate2());
entity.setCommissionDate(data.getCommissionDate2()); entity.setCommissionDate(data.getCommissionDate2());
entity.setHkdAmount(data.getAmount2().multiply(data.getExchangeRate2()));
entity.setRemark(data.getRemark()); entity.setRemark(data.getRemark());
entity.setStatus(null); entity.setStatus(null);
entity.setCreatorId(loginUserId); entity.setCreatorId(loginUserId);
...@@ -117,7 +120,7 @@ public class CommissionExcelDTO { ...@@ -117,7 +120,7 @@ public class CommissionExcelDTO {
entity.setCommissionName(data.getCommissionName()); entity.setCommissionName(data.getCommissionName());
entity.setAmount(data.getAmount()); entity.setAmount(data.getAmount());
entity.setCurrency(data.getCurrency()); entity.setCurrency(data.getCurrency());
entity.setExchangeRate(data.getExchangeRate()); entity.setExchangeRate(Convert.toBigDecimal(data.getExchangeRate()));
entity.setCommissionDate(data.getCommissionDate()); entity.setCommissionDate(data.getCommissionDate());
entity.setRemark(data.getRemark()); entity.setRemark(data.getRemark());
entity.setStatus(null); entity.setStatus(null);
......
...@@ -26,6 +26,7 @@ import java.math.RoundingMode; ...@@ -26,6 +26,7 @@ import java.math.RoundingMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
...@@ -38,14 +39,14 @@ public class CommissionAsyncService { ...@@ -38,14 +39,14 @@ public class CommissionAsyncService {
@Resource @Resource
private CommissionCompareRecordService commissionCompareRecordService; private CommissionCompareRecordService commissionCompareRecordService;
// @Async("commonAsyncExecutor") // @Async("commonAsyncExecutor")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void commissionCompareBatch(List<Commission> entities) { public void commissionCompareBatch(List<Commission> entities) {
// 根据是否保单号,来区分比对方式 // 根据是否关联保单号,来区分比对方式
List<Commission> hasPolicyNoList = new ArrayList<>(); List<Commission> hasPolicyNoList = new ArrayList<>();
List<Commission> noPolicyNoList = new ArrayList<>(); List<Commission> noPolicyNoList = new ArrayList<>();
for (Commission entity : entities) { for (Commission entity : entities) {
if (StringUtils.isBlank(entity.getPolicyNo())) { if ("U".equals(entity.getCommissionBizType())) {
noPolicyNoList.add(entity); noPolicyNoList.add(entity);
} else { } else {
hasPolicyNoList.add(entity); hasPolicyNoList.add(entity);
...@@ -61,6 +62,7 @@ public class CommissionAsyncService { ...@@ -61,6 +62,7 @@ public class CommissionAsyncService {
/** /**
* 无保单号的来佣比对 * 无保单号的来佣比对
*
* @param noPolicyNoList * @param noPolicyNoList
*/ */
private void noPolicyNoBatch(List<Commission> noPolicyNoList) { private void noPolicyNoBatch(List<Commission> noPolicyNoList) {
...@@ -68,6 +70,9 @@ public class CommissionAsyncService { ...@@ -68,6 +70,9 @@ public class CommissionAsyncService {
List<String> receivableNoList = noPolicyNoList.stream() List<String> receivableNoList = noPolicyNoList.stream()
.map(Commission::getReceivableNo) .map(Commission::getReceivableNo)
.collect(Collectors.toList()); .collect(Collectors.toList());
if (CollectionUtils.isEmpty(receivableNoList)) {
throw new BusinessException(ResultCode.FAIL.getCode(), "非关联保单号应收单,应收款编号不能为空");
}
// 2.根据应收款编号查询预计来佣 // 2.根据应收款编号查询预计来佣
List<CommissionExpected> expectedList = commissionExpectedService.lambdaQuery() List<CommissionExpected> expectedList = commissionExpectedService.lambdaQuery()
.in(CommissionExpected::getReceivableNo, receivableNoList) .in(CommissionExpected::getReceivableNo, receivableNoList)
...@@ -132,35 +137,29 @@ public class CommissionAsyncService { ...@@ -132,35 +137,29 @@ public class CommissionAsyncService {
} }
private void normalBatch(List<Commission> entities) { private void normalBatch(List<Commission> entities) {
// 1.根据导入的来佣获取保单号集合 // 1.需要比对的预计来佣业务id集合
List<String> policyNoList = entities.stream() List<String> commissionExpectedBizIdList = entities.stream()
.map(Commission::getPolicyNo) .map(Commission::getCommissionExpectedBizId)
.collect(Collectors.toList()); .collect(Collectors.toList());
// 2.根据预计来佣业务id查询已存在的来佣记录
// 2.根据保单号查询已存在的来佣记录
List<Commission> existingCommissions = commissionService.lambdaQuery() List<Commission> existingCommissions = commissionService.lambdaQuery()
.in(Commission::getPolicyNo, policyNoList) .in(Commission::getCommissionExpectedBizId, commissionExpectedBizIdList)
.list(); .list();
// 来佣根据 保单号、来佣名称、来佣周期、货币 进行分组 // commission 根据关联的 commission_expected_biz_id 进行分组
Map<String, List<Commission>> commissionMap = existingCommissions.stream() Map<String, List<Commission>> commissionMap = existingCommissions.stream()
.collect(Collectors.groupingBy( .filter(commission -> commission.getCommissionExpectedBizId() != null)
c -> c.getPolicyNo() + c.getCommissionName() + c.getCommissionPeriod() + c.getCurrency() .collect(Collectors.groupingBy(Commission::getCommissionExpectedBizId));
));
// 3.根据保单号查询预计来佣 // 3.根据保单号查询预计来佣
List<CommissionExpected> expectedList = commissionExpectedService.lambdaQuery() List<CommissionExpected> expectedList = commissionExpectedService.lambdaQuery()
.in(CommissionExpected::getPolicyNo, policyNoList) .in(CommissionExpected::getCommissionExpectedBizId, commissionExpectedBizIdList)
.list(); .list();
// 预计来佣根据 保单号、来佣名称、来佣周期、货币 进行映射 // 预计来佣映射
Map<String, CommissionExpected> expectedMap = expectedList.stream() Map<String, CommissionExpected> expectedMap = expectedList.stream()
.collect(Collectors.toMap( .collect(Collectors.toMap(CommissionExpected::getCommissionExpectedBizId, Function.identity()));
commissionExpected -> commissionExpected.getPolicyNo() + commissionExpected.getCommissionName() + commissionExpected.getCommissionPeriod() + commissionExpected.getCurrency(),
commissionExpected -> commissionExpected
));
// 4.遍历预计来佣,进行比对 // 4.遍历预计来佣,进行比对
for (Map.Entry<String, CommissionExpected> entry : expectedMap.entrySet()) { for (Map.Entry<String, CommissionExpected> entry : expectedMap.entrySet()) {
// 根据 保单号、来佣名称、来佣周期、货币 分组
String key = entry.getKey(); String key = entry.getKey();
CommissionExpected commissionExpected = entry.getValue(); CommissionExpected commissionExpected = entry.getValue();
// 从已存在的来佣记录中获取当前来佣记录 // 从已存在的来佣记录中获取当前来佣记录
...@@ -172,7 +171,7 @@ public class CommissionAsyncService { ...@@ -172,7 +171,7 @@ public class CommissionAsyncService {
private void doCompareBatch(CommissionExpected commissionExpected, List<Commission> existingCommissions) { private void doCompareBatch(CommissionExpected commissionExpected, List<Commission> existingCommissions) {
// 校验参数 // 校验参数
boolean validFlag = false; boolean validFlag = false;
for (Commission existingCommission : existingCommissions) { for (Commission existingCommission : existingCommissions) {
Integer commissionTotalPeriod = existingCommission.getTotalPeriod(); Integer commissionTotalPeriod = existingCommission.getTotalPeriod();
Integer expectedTotalPeriod = commissionExpected.getTotalPeriod(); Integer expectedTotalPeriod = commissionExpected.getTotalPeriod();
...@@ -194,12 +193,7 @@ public class CommissionAsyncService { ...@@ -194,12 +193,7 @@ public class CommissionAsyncService {
BigDecimal paidRatio = BigDecimal.ZERO; BigDecimal paidRatio = BigDecimal.ZERO;
BigDecimal paidAmount = BigDecimal.ZERO; BigDecimal paidAmount = BigDecimal.ZERO;
for (Commission item : existingCommissions) { for (Commission item : existingCommissions) {
if (item.getCurrentCommissionRatio() == null) { paidRatio = paidRatio.add(item.getCurrentCommissionRatio());
log.warn("当前来佣比例为空,临时计算当前来佣比例: commission_id={}", item.getId());
paidRatio = paidRatio.add(item.calculateCurrentPaidRatio());
} else {
paidRatio = paidRatio.add(item.getCurrentCommissionRatio());
}
paidAmount = paidAmount.add(item.getHkdAmount()); paidAmount = paidAmount.add(item.getHkdAmount());
} }
...@@ -217,6 +211,8 @@ public class CommissionAsyncService { ...@@ -217,6 +211,8 @@ public class CommissionAsyncService {
List<CommissionCompareRecord> compareRecords = new ArrayList<>(); List<CommissionCompareRecord> compareRecords = new ArrayList<>();
// 计算比对状态 // 计算比对状态
log.info("paidRatio: {}, commissionExpected.getCommissionRatio(): {}", paidRatio, commissionExpected.getCommissionRatio());
log.info("commissionExpected_id: {}", commissionExpected.getId());
if (paidRatio.compareTo(commissionExpected.getCommissionRatio()) == 0) { if (paidRatio.compareTo(commissionExpected.getCommissionRatio()) == 0) {
// 等于预计比例时,所有来佣设置为比对成功 // 等于预计比例时,所有来佣设置为比对成功
for (Commission existingCommission : existingCommissions) { for (Commission existingCommission : existingCommissions) {
...@@ -263,10 +259,15 @@ public class CommissionAsyncService { ...@@ -263,10 +259,15 @@ public class CommissionAsyncService {
public void commissionCompare(Commission commission) { public void commissionCompare(Commission commission) {
log.info("开始执行比对事务,来佣ID: {}", commission.getCommissionBizId()); log.info("开始执行比对事务,来佣ID: {}", commission.getCommissionBizId());
if (StringUtils.isNotBlank(commission.getPolicyNo())) { // 未查询到预计来佣,需要先同步到预计来佣表
if (CommissionStatusEnum.MATCH_FAILED.getItemValue().equals(commission.getStatus())) {
return;
}
if ("R".equals(commission.getCommissionBizType())) {
normalCommission(commission.getCommissionBizId(), commission.getPolicyNo(), commission.getCommissionName(), commission.getCommissionPeriod(), commission.getCurrency(), commission.getPremium()); normalCommission(commission.getCommissionBizId(), commission.getPolicyNo(), commission.getCommissionName(), commission.getCommissionPeriod(), commission.getCurrency(), commission.getPremium());
} else { } else {
// 无保单号,根据来佣名称、对账公司查询来佣记录 // 非关联保单号应收单,根据来佣名称、对账公司查询来佣记录
noPolicyNoCommission(commission); noPolicyNoCommission(commission);
} }
} }
...@@ -281,6 +282,7 @@ public class CommissionAsyncService { ...@@ -281,6 +282,7 @@ public class CommissionAsyncService {
// 1.根据来佣名称、对账公司查询预计来佣 // 1.根据来佣名称、对账公司查询预计来佣
QueryWrapper<CommissionExpected> queryWrapper = new QueryWrapper<>(); QueryWrapper<CommissionExpected> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("reconciliation_company", commission.getReconciliationCompany()); queryWrapper.eq("reconciliation_company", commission.getReconciliationCompany());
queryWrapper.eq("commission_period", commission.getCommissionPeriod());
queryWrapper.eq("commission_name", commission.getCommissionName()); queryWrapper.eq("commission_name", commission.getCommissionName());
List<CommissionExpected> expectedList = commissionExpectedService.list(queryWrapper); List<CommissionExpected> expectedList = commissionExpectedService.list(queryWrapper);
if (expectedList.size() != 1) { if (expectedList.size() != 1) {
...@@ -332,8 +334,7 @@ public class CommissionAsyncService { ...@@ -332,8 +334,7 @@ public class CommissionAsyncService {
List<Commission> existingCommissions = commissionService.list(new QueryWrapper<Commission>() List<Commission> existingCommissions = commissionService.list(new QueryWrapper<Commission>()
.eq("policy_no", policyNo) .eq("policy_no", policyNo)
.eq("commission_name", commissionName) .eq("commission_name", commissionName)
.eq("commission_period", commissionPeriod) .eq("commission_period", commissionPeriod));
.eq("currency", currency));
// 当前 commission 记录 // 当前 commission 记录
Commission commission = existingCommissions.stream() Commission commission = existingCommissions.stream()
...@@ -345,12 +346,7 @@ public class CommissionAsyncService { ...@@ -345,12 +346,7 @@ public class CommissionAsyncService {
} }
// 查询对应预计来佣 // 查询对应预计来佣
CommissionExpected commissionExpected = commissionService.queryByCommission( CommissionExpected commissionExpected = commissionExpectedService.getByBizId(commission.getCommissionExpectedBizId());
commission.getPolicyNo(),
commission.getCommissionName(),
commission.getCommissionPeriod(),
commission.getCurrency(),
premium);
doCompare(existingCommissions, commissionExpected, commission); doCompare(existingCommissions, commissionExpected, commission);
} }
...@@ -359,6 +355,7 @@ public class CommissionAsyncService { ...@@ -359,6 +355,7 @@ public class CommissionAsyncService {
// 校验参数 // 校验参数
if (commission.getTotalPeriod().compareTo(commissionExpected.getTotalPeriod()) != 0) { if (commission.getTotalPeriod().compareTo(commissionExpected.getTotalPeriod()) != 0) {
commission.setRemark("来佣总期数与预计来佣总期数不一致"); commission.setRemark("来佣总期数与预计来佣总期数不一致");
commission.setStatus(CommissionStatusEnum.COMPARE_FAIL.getItemValue());
commissionService.updateById(commission); commissionService.updateById(commission);
return; return;
} }
......
...@@ -78,7 +78,7 @@ public class CommissionAddRequest implements Serializable { ...@@ -78,7 +78,7 @@ public class CommissionAddRequest implements Serializable {
* 结算汇率 * 结算汇率
*/ */
@Schema(description = "结算汇率", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "结算汇率", requiredMode = Schema.RequiredMode.REQUIRED)
private String exchangeRate; private BigDecimal exchangeRate;
/** /**
* 入账日(实) * 入账日(实)
......
...@@ -111,7 +111,7 @@ public class Commission implements Serializable { ...@@ -111,7 +111,7 @@ public class Commission implements Serializable {
/** /**
* 结算汇率 * 结算汇率
*/ */
private String exchangeRate; private BigDecimal exchangeRate;
/** /**
* 来佣金额(港币) * 来佣金额(港币)
...@@ -129,7 +129,7 @@ public class Commission implements Serializable { ...@@ -129,7 +129,7 @@ public class Commission implements Serializable {
private Date commissionDate; private Date commissionDate;
/** /**
* 来佣状态 0=未比对 1=比对成功 2=比对失败 * 来佣状态 0=未比对 1=比对成功 2=比对失败 3=未查询到预计来佣,需要先同步到预计来佣表
*/ */
private String status; private String status;
...@@ -180,7 +180,7 @@ public class Commission implements Serializable { ...@@ -180,7 +180,7 @@ public class Commission implements Serializable {
public BigDecimal calculateCurrentPaidRatio() { public BigDecimal calculateCurrentPaidRatio() {
// 当前来佣比例=当前入账金额/结算汇率/保费 * 100 // 当前来佣比例=当前入账金额/结算汇率/保费 * 100
return amount.divide(new BigDecimal(premium), 4, RoundingMode.HALF_UP) return amount.divide(new BigDecimal(premium), 4, RoundingMode.HALF_UP)
.divide(new BigDecimal(exchangeRate), 4, RoundingMode.HALF_UP) .divide(exchangeRate, 4, RoundingMode.HALF_UP)
.multiply(new BigDecimal(100)); .multiply(new BigDecimal(100));
} }
} }
\ No newline at end of file
...@@ -40,8 +40,6 @@ public interface CommissionService extends IService<Commission> { ...@@ -40,8 +40,6 @@ public interface CommissionService extends IService<Commission> {
CommissionStatisticsVO getCommissionStatistics(List<Long> commissionIds); CommissionStatisticsVO getCommissionStatistics(List<Long> commissionIds);
CommissionExpected queryByCommission(String policyNo, String commissionName, Integer commissionPeriod, String currency, String premium);
void validateCommissionUpdateRequest(CommissionUpdateRequest commissionUpdateRequest); void validateCommissionUpdateRequest(CommissionUpdateRequest commissionUpdateRequest);
void saveUpdateCommissionRecord(Commission commission, CommissionUpdateRequest commissionUpdateRequest, AuthUserDto currentLoginUser); void saveUpdateCommissionRecord(Commission commission, CommissionUpdateRequest commissionUpdateRequest, AuthUserDto currentLoginUser);
......
...@@ -125,7 +125,7 @@ public class CommissionVO implements Serializable { ...@@ -125,7 +125,7 @@ public class CommissionVO implements Serializable {
* 当前结算汇率 * 当前结算汇率
*/ */
@Schema(description = "当前结算汇率") @Schema(description = "当前结算汇率")
private String exchangeRate; private BigDecimal exchangeRate;
/** /**
* 来佣金额 * 来佣金额
......
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