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);
......
...@@ -14,7 +14,9 @@ import com.yd.common.enums.ResultCode; ...@@ -14,7 +14,9 @@ import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException; import com.yd.common.exception.BusinessException;
import com.yd.common.utils.RandomStringGenerator; import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.service.component.CommissionAsyncService; import com.yd.csf.service.component.CommissionAsyncService;
import com.yd.csf.service.component.ReceivableService;
import com.yd.csf.service.dto.*; import com.yd.csf.service.dto.*;
import com.yd.csf.service.enums.CommissionExpectedStatusEnum;
import com.yd.csf.service.enums.CommissionStatusEnum; import com.yd.csf.service.enums.CommissionStatusEnum;
import com.yd.csf.service.enums.FortuneStatusEnum; import com.yd.csf.service.enums.FortuneStatusEnum;
import com.yd.csf.service.model.*; import com.yd.csf.service.model.*;
...@@ -71,6 +73,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -71,6 +73,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
private CommissionAsyncService commissionAsyncService; private CommissionAsyncService commissionAsyncService;
@Resource @Resource
private TransactionTemplate transactionTemplate; private TransactionTemplate transactionTemplate;
@Resource
private ReceivableService receivableService;
@Override @Override
...@@ -234,6 +238,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -234,6 +238,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
CommissionExpected::getTotalPeriod, CommissionExpected::getTotalPeriod,
CommissionExpected::getCommissionName, CommissionExpected::getCommissionName,
CommissionExpected::getCurrency, CommissionExpected::getCurrency,
CommissionExpected::getReconciliationCompanyBizId,
CommissionExpected::getStatus) CommissionExpected::getStatus)
.list(); .list();
...@@ -250,14 +255,13 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -250,14 +255,13 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commission.setReconciliationCompanyBizId(policy.getReconciliationCompanyBizId()); commission.setReconciliationCompanyBizId(policy.getReconciliationCompanyBizId());
commission.setCurrentCommissionRatio(commission.calculateCurrentPaidRatio()); commission.setCurrentCommissionRatio(commission.calculateCurrentPaidRatio());
} }
// 根据保单号、期数、入账名称、币种查询预计来佣记录 // 匹配预计来佣记录
CommissionExpected expected = findExpectedFromList(commission, commissionExpectedList); CommissionExpected expected = findExpectedFromList(commission, commissionExpectedList);
if (expected != null) { if (expected != null) {
commission.setCommissionExpectedBizId(expected.getCommissionExpectedBizId()); commission.setCommissionExpectedBizId(expected.getCommissionExpectedBizId());
commission.setReceivableNo(expected.getReceivableNo());
commission.setTotalPeriod(expected.getTotalPeriod()); commission.setTotalPeriod(expected.getTotalPeriod());
} else { } else {
log.warn("导入入账:未查询到预计来佣记录, policyNo: {}, commissionPeriod: {}, commissionName: {}, currency: {}",
commission.getPolicyNo(), commission.getCommissionPeriod(), commission.getCommissionName(), commission.getCurrency());
commission.setRemark("未查询到预计来佣记录"); commission.setRemark("未查询到预计来佣记录");
commission.setStatus(CommissionStatusEnum.MATCH_FAILED.getItemValue()); commission.setStatus(CommissionStatusEnum.MATCH_FAILED.getItemValue());
} }
...@@ -271,11 +275,21 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -271,11 +275,21 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
for (CommissionExpected i : commissionExpectedList) { for (CommissionExpected i : commissionExpectedList) {
log.info(" expected: policyNo={}, commissionPeriod={}, commissionName={}, currency={}", log.info(" expected: policyNo={}, commissionPeriod={}, commissionName={}, currency={}",
i.getPolicyNo(), i.getCommissionPeriod(), i.getCommissionName(), i.getCurrency()); i.getPolicyNo(), i.getCommissionPeriod(), i.getCommissionName(), i.getCurrency());
if (Objects.equals(i.getPolicyNo(), commission.getPolicyNo()) if ("R".equals(i.getCommissionBizType())) {
&& Objects.equals(i.getCommissionPeriod(), commission.getCommissionPeriod()) if (Objects.equals(i.getPolicyNo(), commission.getPolicyNo())
&& Objects.equals(i.getCommissionName(), commission.getCommissionName()) && Objects.equals(i.getCommissionBizType(), commission.getCommissionBizType())
&& Objects.equals(i.getCurrency(), commission.getCurrency())) { && Objects.equals(i.getCommissionPeriod(), commission.getCommissionPeriod())
return i; && Objects.equals(i.getCommissionName(), commission.getCommissionName())
) {
return i;
}
} else {
if (Objects.equals(i.getReconciliationCompanyBizId(), commission.getReconciliationCompanyBizId())
&& Objects.equals(i.getCommissionName(), commission.getCommissionName())
&& Objects.equals(i.getCommissionBizType(), commission.getCommissionBizType())
) {
return i;
}
} }
} }
return null; return null;
...@@ -307,21 +321,13 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -307,21 +321,13 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commissionUpdateRequest.getExchangeRate()); commissionUpdateRequest.getExchangeRate());
commission.setCurrentCommissionRatio(currentCommissionRatio); commission.setCurrentCommissionRatio(currentCommissionRatio);
} else { } else {
// 非关联应收单,查询预计来佣记录,获取标准发佣金额 commission.setPolicyNo(null);
CommissionExpected commissionExpected = commissionExpectedService.lambdaQuery()
.eq(CommissionExpected::getPolicyNo, commission.getPolicyNo())
.eq(CommissionExpected::getCommissionPeriod, commission.getCommissionPeriod())
.eq(CommissionExpected::getCommissionName, commission.getCommissionName())
// .eq(CommissionExpected::getCurrency, commission.getCurrency())
.one();
if (commissionExpected == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "未找到预计来佣记录");
}
} }
// 重新关联预计来佣记录
getCommissionExpectedBizId(commission);
// 计算来佣金额(港币) // 计算来佣金额(港币)
BigDecimal hkdAmount = requestAmount BigDecimal hkdAmount = requestAmount
.multiply(commissionUpdateRequest.getExchangeRate()) .multiply(commissionUpdateRequest.getExchangeRate());
.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP);
commission.setHkdAmount(hkdAmount); commission.setHkdAmount(hkdAmount);
// 获取当前登录用户 // 获取当前登录用户
...@@ -357,6 +363,32 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -357,6 +363,32 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return true; return true;
} }
private void getCommissionExpectedBizId(Commission commission) {
CommissionExpected commissionExpected = null;
if ("R".equals(commission.getCommissionBizType())) {
commissionExpected = commissionExpectedService.lambdaQuery()
.eq(CommissionExpected::getPolicyNo, commission.getPolicyNo())
.eq(CommissionExpected::getCommissionBizType, commission.getCommissionBizType())
.eq(CommissionExpected::getCommissionPeriod, commission.getCommissionPeriod())
.eq(CommissionExpected::getCommissionName, commission.getCommissionName())
.one();
} else {
// 从应收款管理查询到应收编号,如果没有应收编号,就需要同步到应收款管理
commissionExpected = commissionExpectedService.lambdaQuery()
.eq(CommissionExpected::getCommissionBizType, commission.getCommissionBizType())
.eq(CommissionExpected::getReconciliationCompanyBizId, commission.getReconciliationCompanyBizId())
.eq(CommissionExpected::getCommissionName, commission.getCommissionName())
.one();
}
if (commissionExpected != null) {
commission.setCommissionExpectedBizId(commissionExpected.getCommissionExpectedBizId());
commission.setReceivableNo(commissionExpected.getReceivableNo());
} else {
commission.setStatus(CommissionStatusEnum.MATCH_FAILED.getItemValue());
}
}
@Override @Override
public void validateCommissionUpdateRequest(CommissionUpdateRequest commissionUpdateRequest) { public void validateCommissionUpdateRequest(CommissionUpdateRequest commissionUpdateRequest) {
// 校验入参 // 校验入参
...@@ -445,31 +477,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -445,31 +477,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
} }
@Override @Override
public CommissionExpected queryByCommission(String policyNo, String commissionName, Integer commissionPeriod, String currency, String premium) {
QueryWrapper<CommissionExpected> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("policy_no", policyNo);
queryWrapper.eq("commission_name", commissionName);
queryWrapper.eq("commission_period", commissionPeriod);
queryWrapper.eq("currency", currency);
CommissionExpected one = commissionExpectedService.getOne(queryWrapper);
if (ObjectUtils.isEmpty(one)) {
String errorMsg = String.format("未找到当前来佣对应的预计来佣,保单号:%s, 来佣名称:%s, 来佣期数:%s, 币种:%s",
policyNo, commissionName, commissionPeriod, currency);
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), errorMsg);
}
// 计算预计来佣金额 (统一试算币种:HKD)
if (one.getExpectedAmount() == null) {
BigDecimal expectedAmount = new BigDecimal(premium)
.multiply(one.getCommissionRatio());
if ("USD".equals(one.getCurrency())) {
expectedAmount = expectedAmount.multiply(one.getDefaultExchangeRate());
}
one.setExpectedAmount(expectedAmount.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP));
}
return one;
}
@Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean generateFortune(GenerateFortuneRequest generateFortuneRequest) { public Boolean generateFortune(GenerateFortuneRequest generateFortuneRequest) {
List<String> commissionBizIdList = generateFortuneRequest.getCommissionBizIdList(); List<String> commissionBizIdList = generateFortuneRequest.getCommissionBizIdList();
...@@ -695,7 +702,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -695,7 +702,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commissionCompareRecord.setAmount(commission.getAmount()); commissionCompareRecord.setAmount(commission.getAmount());
commissionCompareRecord.setCurrentCommissionRatio(commission.getCurrentCommissionRatio()); commissionCompareRecord.setCurrentCommissionRatio(commission.getCurrentCommissionRatio());
commissionCompareRecord.setCurrency(commission.getCurrency()); commissionCompareRecord.setCurrency(commission.getCurrency());
commissionCompareRecord.setExchangeRate(commission.getExchangeRate()); commissionCompareRecord.setExchangeRate(Convert.toStr(commission.getExchangeRate()));
commissionCompareRecord.setStatus(commission.getStatus()); commissionCompareRecord.setStatus(commission.getStatus());
commissionCompareRecord.setRemark(commission.getRemark()); commissionCompareRecord.setRemark(commission.getRemark());
commissionCompareRecord.setCreateTime(commission.getCreateTime()); commissionCompareRecord.setCreateTime(commission.getCreateTime());
...@@ -711,7 +718,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -711,7 +718,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commissionCompareRecord.setTotalPeriod(commission.getTotalPeriod()); commissionCompareRecord.setTotalPeriod(commission.getTotalPeriod());
commissionCompareRecord.setAmount(commission.getAmount()); commissionCompareRecord.setAmount(commission.getAmount());
commissionCompareRecord.setCurrency(commission.getCurrency()); commissionCompareRecord.setCurrency(commission.getCurrency());
commissionCompareRecord.setExchangeRate(commission.getExchangeRate()); commissionCompareRecord.setExchangeRate(Convert.toStr(commission.getExchangeRate()));
commissionCompareRecord.setStatus(commission.getStatus()); commissionCompareRecord.setStatus(commission.getStatus());
commissionCompareRecord.setRemark(commission.getRemark()); commissionCompareRecord.setRemark(commission.getRemark());
commissionCompareRecord.setOperatorName(currentLoginUser.getUsername()); commissionCompareRecord.setOperatorName(currentLoginUser.getUsername());
...@@ -739,14 +746,16 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -739,14 +746,16 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
List<Policy> policyList = policyService.lambdaQuery().in(Policy::getPolicyNo, policyNoSet).list(); List<Policy> policyList = policyService.lambdaQuery().in(Policy::getPolicyNo, policyNoSet).list();
// 保单映射 // 保单映射
policyMap = policyList.stream().collect(Collectors.toMap(Policy::getPolicyNo, Function.identity())); policyMap = policyList.stream().collect(Collectors.toMap(Policy::getPolicyNo, Function.identity()));
// 查询预计入账信息
commissionExpectedList = commissionExpectedService.lambdaQuery().in(CommissionExpected::getPolicyNo, policyNoSet).list();
} }
List<Commission> commissionList = new ArrayList<>(); List<Commission> commissionList = new ArrayList<>();
for (CommissionAddRequest request : customerAddRequestList) { for (CommissionAddRequest request : customerAddRequestList) {
Commission commission = new Commission(); Commission commission = new Commission();
BeanUtils.copyProperties(request, commission); BeanUtils.copyProperties(request, commission);
// 计算来佣金额(港币)
BigDecimal hkdAmount = request.getAmount()
.multiply(request.getExchangeRate());
commission.setHkdAmount(hkdAmount);
// 入账业务id // 入账业务id
commission.setCommissionBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_COMMISSION.getCode())); commission.setCommissionBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_COMMISSION.getCode()));
// 关联业务id // 关联业务id
...@@ -765,27 +774,12 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -765,27 +774,12 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "保单不存在, policyNo: " + request.getPolicyNo()); throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "保单不存在, policyNo: " + request.getPolicyNo());
} }
} }
} else {
commission.setPolicyNo(null);
} }
// 关联预计来佣信息 // 关联预计来佣信息
if (CollectionUtils.isNotEmpty(commissionExpectedList)) { getCommissionExpectedBizIdBatch(request, policyNoSet, commission);
// 根据保单号、期数、入账名称、币种查询预计来佣记录
CommissionExpected expected = commissionExpectedList.stream()
.filter(item -> item.getPolicyNo().equals(request.getPolicyNo())
&& item.getCommissionPeriod().equals(request.getCommissionPeriod())
&& item.getCommissionName().equals(request.getCommissionName())
&& item.getCurrency().equals(request.getCurrency()))
.findFirst()
.orElse(null);
if (expected != null) {
commission.setCommissionExpectedBizId(expected.getCommissionExpectedBizId());
commission.setTotalPeriod(expected.getTotalPeriod());
} else {
log.warn("新增入账:未查询到预计来佣记录, policyNo: {}, commissionPeriod: {}, commissionName: {}, currency: {}",
request.getPolicyNo(), request.getCommissionPeriod(), request.getCommissionName(), request.getCurrency());
commission.setRemark("未查询到预计来佣记录");
commission.setStatus(CommissionStatusEnum.MATCH_FAILED.getItemValue());
}
}
commissionList.add(commission); commissionList.add(commission);
} }
// 提交事务,保存数据 // 提交事务,保存数据
...@@ -809,6 +803,51 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -809,6 +803,51 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return commissionList; return commissionList;
} }
private void getCommissionExpectedBizIdBatch(CommissionAddRequest request, Set<String> policyNoSet, Commission commission) {
CommissionExpected expected = null;
if ("R".equals(request.getCommissionBizType())) {
// 查询预计入账信息
List<CommissionExpected> commissionExpectedList = new ArrayList<>();
if (CollUtil.isNotEmpty(policyNoSet)) {
commissionExpectedList = commissionExpectedService.lambdaQuery().in(CommissionExpected::getPolicyNo, policyNoSet).list();
}
if (CollectionUtils.isNotEmpty(commissionExpectedList)) {
// 根据保单号、期数、入账名称,查询预计来佣记录
expected = commissionExpectedList.stream()
.filter(item -> item.getPolicyNo().equals(request.getPolicyNo())
&& item.getCommissionBizType().equals(request.getCommissionBizType())
&& item.getCommissionPeriod().equals(request.getCommissionPeriod())
&& item.getCommissionName().equals(request.getCommissionName()))
.findFirst()
.orElse(null);
}
} else {
// 查询预计来佣信息
List<CommissionExpected> commissionExpectedList = commissionExpectedService.lambdaQuery()
.eq(CommissionExpected::getReconciliationCompanyBizId, request.getReconciliationCompanyBizId())
.eq(CommissionExpected::getCommissionBizType, request.getCommissionBizType())
.eq(CommissionExpected::getCommissionName, request.getCommissionName())
.list();
if (CollectionUtils.isNotEmpty(commissionExpectedList)) {
expected = commissionExpectedList.stream()
.filter(item -> item.getReconciliationCompanyBizId().equals(request.getReconciliationCompanyBizId())
&& item.getCommissionName().equals(request.getCommissionName())
&& item.getCommissionBizType().equals(request.getCommissionBizType()))
.findFirst()
.orElse(null);
}
}
if (expected != null) {
commission.setCommissionExpectedBizId(expected.getCommissionExpectedBizId());
commission.setReceivableNo(expected.getReceivableNo());
commission.setTotalPeriod(expected.getTotalPeriod());
} else {
commission.setRemark("未查询到预计来佣记录");
commission.setStatus(CommissionStatusEnum.MATCH_FAILED.getItemValue());
}
}
private void validateAddCommissionBatch(List<CommissionAddRequest> customerAddRequestList) { private void validateAddCommissionBatch(List<CommissionAddRequest> customerAddRequestList) {
for (CommissionAddRequest request : customerAddRequestList) { for (CommissionAddRequest request : customerAddRequestList) {
// 校验数据 // 校验数据
...@@ -823,9 +862,12 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -823,9 +862,12 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
if (StringUtils.isBlank(request.getCommissionName())) { if (StringUtils.isBlank(request.getCommissionName())) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "入账项目名称不能为空"); throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "入账项目名称不能为空");
} }
if (ObjectUtils.isEmpty(request.getAmount())) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "入账金额不能为空");
}
if ("R".equals(request.getCommissionBizType())) { if ("R".equals(request.getCommissionBizType())) {
// 校验保单号是否存在 // 校验保单号是否存在
if (StringUtils.isBlank(request.getExchangeRate())) { if (ObjectUtils.isEmpty(request.getExchangeRate())) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "关联保单号记录,结算汇率不能为空"); throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "关联保单号记录,结算汇率不能为空");
} }
} }
...@@ -833,6 +875,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -833,6 +875,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Boolean addToExpected(AddToExpectedCommissionRequest addToExpectedCommissionRequest) { public Boolean addToExpected(AddToExpectedCommissionRequest addToExpectedCommissionRequest) {
if (StringUtils.isBlank(addToExpectedCommissionRequest.getCommissionBizId())) { if (StringUtils.isBlank(addToExpectedCommissionRequest.getCommissionBizId())) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "来佣业务id不能为空"); throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "来佣业务id不能为空");
...@@ -842,7 +885,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -842,7 +885,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "来佣记录不存在"); throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "来佣记录不存在");
} }
if (commission.getCommissionExpectedBizId() != null) { CommissionExpected commissionExpected = commissionExpectedService.getByBizId(commission.getCommissionExpectedBizId());
if (commissionExpected != null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "预计来佣已存在"); throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "预计来佣已存在");
} }
...@@ -851,21 +895,39 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -851,21 +895,39 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
String loginUserId = currentLoginUser.getId().toString(); String loginUserId = currentLoginUser.getId().toString();
CommissionExpected expected = new CommissionExpected(); CommissionExpected expected = new CommissionExpected();
BeanUtils.copyProperties(commission, expected); BeanUtils.copyProperties(commission, expected, "id");
expected.setCommissionExpectedBizId(RandomStringGenerator.generateBizId16("commission_expected")); expected.setCommissionExpectedBizId(RandomStringGenerator.generateBizId16("commission_expected"));
// 生成应收单编号
expected.setReceivableNo(receivableService.generateReceivableNo(
commission.getCommissionBizType(),
commission.getReconciliationCompanyCode(),
commission.getReconciliationCompany()));
// 设置预计入账金额、已来佣金额、待入账金额 // 设置预计入账金额、已来佣金额、待入账金额
expected.setExpectedAmount(commission.getAmount()); expected.setExpectedAmount(commission.getHkdAmount());
expected.setPaidAmount(BigDecimal.ZERO); expected.setPaidAmount(commission.getHkdAmount());
expected.setPaidRatio(BigDecimal.valueOf(100)); expected.setPaidRatio(null);
expected.setDefaultExchangeRate(new BigDecimal(commission.getExchangeRate())); expected.setDefaultExchangeRate(commission.getExchangeRate());
expected.setCommissionDate(new Date()); expected.setCommissionDate(commission.getCommissionDate());
expected.setStatus(CommissionExpectedStatusEnum.COMPARED.getItemValue());
expected.setStatusDesc("比对成功,通过手动同步预计来佣"); // 设置状态描述为比对成功
expected.setCreatorId(loginUserId); expected.setCreatorId(loginUserId);
expected.setCreateTime(new Date()); expected.setCreateTime(new Date());
expected.setUpdaterId(loginUserId); expected.setUpdaterId(loginUserId);
expected.setUpdateTime(new Date()); expected.setUpdateTime(new Date());
// 保存预计来佣记录
commissionExpectedService.save(expected);
// 更新来佣记录
this.lambdaUpdate()
.set(Commission::getCommissionExpectedBizId, expected.getCommissionExpectedBizId())
.set(Commission::getReceivableNo, expected.getReceivableNo())
.set(Commission::getStatus, CommissionStatusEnum.COMPARE_SUCCESS.getItemValue())
.set(Commission::getRemark, null)
.eq(Commission::getId, commission.getId())
.update();
return commissionExpectedService.save(expected); return true;
} }
@Override @Override
......
...@@ -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