Commit 9137b722 by zhangxingmin

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

parents 892015bd dc3fd6ff
......@@ -192,14 +192,15 @@ public class ApiCommissionController {
// 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 (StringUtils.isBlank(excelDTO.getPolicyNo())) {
errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行关联保单应收单, 保单号不能为空");
}
if (excelDTO.getAmount2() == null) {
errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行关联保单应收单, 来佣金额不能为空");
}
if (StringUtils.isBlank(excelDTO.getExchangeRate2())) {
if (ObjectUtils.isEmpty(excelDTO.getExchangeRate2())) {
errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行关联保单应收单, 结算汇率不能为空");
}
}
......@@ -222,7 +223,7 @@ public class ApiCommissionController {
entities.add(entity);
}
// 补充完整字段
// 补充关联字段、计算本次入账比例
commissionService.fillCommissionList(entities);
return entities;
......@@ -282,7 +283,7 @@ public class ApiCommissionController {
* @param request
* @return
*/
@Operation(summary = "同步到预计来佣")
@Operation(summary = "同步到预计来佣(比对状态自动为已比对成功)")
@PostMapping("/addToExpected")
public Result<Boolean> addToExpected(@RequestBody AddToExpectedCommissionRequest addToExpectedCommissionRequest, HttpServletRequest request) {
if (StringUtils.isBlank(addToExpectedCommissionRequest.getCommissionBizId())) {
......
package com.yd.csf.api.dto;
import cn.hutool.core.convert.Convert;
import com.alibaba.excel.annotation.ExcelProperty;
import com.yd.common.enums.CommonEnum;
import com.yd.common.utils.RandomStringGenerator;
......@@ -10,6 +11,7 @@ import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
@Data
......@@ -72,7 +74,7 @@ public class CommissionExcelDTO {
private String commissionName2;
@ExcelProperty("结算汇率(实)")
private String exchangeRate2;
private BigDecimal exchangeRate2;
/**
......@@ -85,13 +87,14 @@ public class CommissionExcelDTO {
if (StringUtils.isNotBlank(commissionBizType)) {
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.setCommissionName(data.getCommissionName2());
entity.setAmount(data.getAmount2());
entity.setCurrency(CurrencyEnum.getEnumByItemLabel(data.getCurrency2()));
entity.setExchangeRate(data.getExchangeRate2());
entity.setCommissionDate(data.getCommissionDate2());
entity.setHkdAmount(data.getAmount2().multiply(data.getExchangeRate2()));
entity.setRemark(data.getRemark());
entity.setStatus(null);
entity.setCreatorId(loginUserId);
......@@ -117,7 +120,7 @@ public class CommissionExcelDTO {
entity.setCommissionName(data.getCommissionName());
entity.setAmount(data.getAmount());
entity.setCurrency(data.getCurrency());
entity.setExchangeRate(data.getExchangeRate());
entity.setExchangeRate(Convert.toBigDecimal(data.getExchangeRate()));
entity.setCommissionDate(data.getCommissionDate());
entity.setRemark(data.getRemark());
entity.setStatus(null);
......
......@@ -26,6 +26,7 @@ import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service
......@@ -38,14 +39,14 @@ public class CommissionAsyncService {
@Resource
private CommissionCompareRecordService commissionCompareRecordService;
// @Async("commonAsyncExecutor")
// @Async("commonAsyncExecutor")
@Transactional(rollbackFor = Exception.class)
public void commissionCompareBatch(List<Commission> entities) {
// 根据是否保单号,来区分比对方式
// 根据是否关联保单号,来区分比对方式
List<Commission> hasPolicyNoList = new ArrayList<>();
List<Commission> noPolicyNoList = new ArrayList<>();
for (Commission entity : entities) {
if (StringUtils.isBlank(entity.getPolicyNo())) {
if ("U".equals(entity.getCommissionBizType())) {
noPolicyNoList.add(entity);
} else {
hasPolicyNoList.add(entity);
......@@ -61,6 +62,7 @@ public class CommissionAsyncService {
/**
* 无保单号的来佣比对
*
* @param noPolicyNoList
*/
private void noPolicyNoBatch(List<Commission> noPolicyNoList) {
......@@ -68,6 +70,9 @@ public class CommissionAsyncService {
List<String> receivableNoList = noPolicyNoList.stream()
.map(Commission::getReceivableNo)
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(receivableNoList)) {
throw new BusinessException(ResultCode.FAIL.getCode(), "非关联保单号应收单,应收款编号不能为空");
}
// 2.根据应收款编号查询预计来佣
List<CommissionExpected> expectedList = commissionExpectedService.lambdaQuery()
.in(CommissionExpected::getReceivableNo, receivableNoList)
......@@ -132,35 +137,29 @@ public class CommissionAsyncService {
}
private void normalBatch(List<Commission> entities) {
// 1.根据导入的来佣获取保单号集合
List<String> policyNoList = entities.stream()
.map(Commission::getPolicyNo)
// 1.需要比对的预计来佣业务id集合
List<String> commissionExpectedBizIdList = entities.stream()
.map(Commission::getCommissionExpectedBizId)
.collect(Collectors.toList());
// 2.根据保单号查询已存在的来佣记录
// 2.根据预计来佣业务id查询已存在的来佣记录
List<Commission> existingCommissions = commissionService.lambdaQuery()
.in(Commission::getPolicyNo, policyNoList)
.in(Commission::getCommissionExpectedBizId, commissionExpectedBizIdList)
.list();
// 来佣根据 保单号、来佣名称、来佣周期、货币 进行分组
// commission 根据关联的 commission_expected_biz_id 进行分组
Map<String, List<Commission>> commissionMap = existingCommissions.stream()
.collect(Collectors.groupingBy(
c -> c.getPolicyNo() + c.getCommissionName() + c.getCommissionPeriod() + c.getCurrency()
));
.filter(commission -> commission.getCommissionExpectedBizId() != null)
.collect(Collectors.groupingBy(Commission::getCommissionExpectedBizId));
// 3.根据保单号查询预计来佣
List<CommissionExpected> expectedList = commissionExpectedService.lambdaQuery()
.in(CommissionExpected::getPolicyNo, policyNoList)
.in(CommissionExpected::getCommissionExpectedBizId, commissionExpectedBizIdList)
.list();
// 预计来佣根据 保单号、来佣名称、来佣周期、货币 进行映射
// 预计来佣映射
Map<String, CommissionExpected> expectedMap = expectedList.stream()
.collect(Collectors.toMap(
commissionExpected -> commissionExpected.getPolicyNo() + commissionExpected.getCommissionName() + commissionExpected.getCommissionPeriod() + commissionExpected.getCurrency(),
commissionExpected -> commissionExpected
));
.collect(Collectors.toMap(CommissionExpected::getCommissionExpectedBizId, Function.identity()));
// 4.遍历预计来佣,进行比对
for (Map.Entry<String, CommissionExpected> entry : expectedMap.entrySet()) {
// 根据 保单号、来佣名称、来佣周期、货币 分组
String key = entry.getKey();
CommissionExpected commissionExpected = entry.getValue();
// 从已存在的来佣记录中获取当前来佣记录
......@@ -172,7 +171,7 @@ public class CommissionAsyncService {
private void doCompareBatch(CommissionExpected commissionExpected, List<Commission> existingCommissions) {
// 校验参数
boolean validFlag = false;
boolean validFlag = false;
for (Commission existingCommission : existingCommissions) {
Integer commissionTotalPeriod = existingCommission.getTotalPeriod();
Integer expectedTotalPeriod = commissionExpected.getTotalPeriod();
......@@ -194,12 +193,7 @@ public class CommissionAsyncService {
BigDecimal paidRatio = BigDecimal.ZERO;
BigDecimal paidAmount = BigDecimal.ZERO;
for (Commission item : existingCommissions) {
if (item.getCurrentCommissionRatio() == null) {
log.warn("当前来佣比例为空,临时计算当前来佣比例: commission_id={}", item.getId());
paidRatio = paidRatio.add(item.calculateCurrentPaidRatio());
} else {
paidRatio = paidRatio.add(item.getCurrentCommissionRatio());
}
paidRatio = paidRatio.add(item.getCurrentCommissionRatio());
paidAmount = paidAmount.add(item.getHkdAmount());
}
......@@ -217,6 +211,8 @@ public class CommissionAsyncService {
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) {
// 等于预计比例时,所有来佣设置为比对成功
for (Commission existingCommission : existingCommissions) {
......@@ -263,10 +259,15 @@ public class CommissionAsyncService {
public void commissionCompare(Commission commission) {
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());
} else {
// 无保单号,根据来佣名称、对账公司查询来佣记录
// 非关联保单号应收单,根据来佣名称、对账公司查询来佣记录
noPolicyNoCommission(commission);
}
}
......@@ -281,6 +282,7 @@ public class CommissionAsyncService {
// 1.根据来佣名称、对账公司查询预计来佣
QueryWrapper<CommissionExpected> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("reconciliation_company", commission.getReconciliationCompany());
queryWrapper.eq("commission_period", commission.getCommissionPeriod());
queryWrapper.eq("commission_name", commission.getCommissionName());
List<CommissionExpected> expectedList = commissionExpectedService.list(queryWrapper);
if (expectedList.size() != 1) {
......@@ -332,8 +334,7 @@ public class CommissionAsyncService {
List<Commission> existingCommissions = commissionService.list(new QueryWrapper<Commission>()
.eq("policy_no", policyNo)
.eq("commission_name", commissionName)
.eq("commission_period", commissionPeriod)
.eq("currency", currency));
.eq("commission_period", commissionPeriod));
// 当前 commission 记录
Commission commission = existingCommissions.stream()
......@@ -345,12 +346,7 @@ public class CommissionAsyncService {
}
// 查询对应预计来佣
CommissionExpected commissionExpected = commissionService.queryByCommission(
commission.getPolicyNo(),
commission.getCommissionName(),
commission.getCommissionPeriod(),
commission.getCurrency(),
premium);
CommissionExpected commissionExpected = commissionExpectedService.getByBizId(commission.getCommissionExpectedBizId());
doCompare(existingCommissions, commissionExpected, commission);
}
......@@ -359,6 +355,7 @@ public class CommissionAsyncService {
// 校验参数
if (commission.getTotalPeriod().compareTo(commissionExpected.getTotalPeriod()) != 0) {
commission.setRemark("来佣总期数与预计来佣总期数不一致");
commission.setStatus(CommissionStatusEnum.COMPARE_FAIL.getItemValue());
commissionService.updateById(commission);
return;
}
......
......@@ -78,7 +78,7 @@ public class CommissionAddRequest implements Serializable {
* 结算汇率
*/
@Schema(description = "结算汇率", requiredMode = Schema.RequiredMode.REQUIRED)
private String exchangeRate;
private BigDecimal exchangeRate;
/**
* 入账日(实)
......
......@@ -111,7 +111,7 @@ public class Commission implements Serializable {
/**
* 结算汇率
*/
private String exchangeRate;
private BigDecimal exchangeRate;
/**
* 来佣金额(港币)
......@@ -129,7 +129,7 @@ public class Commission implements Serializable {
private Date commissionDate;
/**
* 来佣状态 0=未比对 1=比对成功 2=比对失败
* 来佣状态 0=未比对 1=比对成功 2=比对失败 3=未查询到预计来佣,需要先同步到预计来佣表
*/
private String status;
......@@ -180,7 +180,7 @@ public class Commission implements Serializable {
public BigDecimal calculateCurrentPaidRatio() {
// 当前来佣比例=当前入账金额/结算汇率/保费 * 100
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));
}
}
\ No newline at end of file
......@@ -40,8 +40,6 @@ public interface CommissionService extends IService<Commission> {
CommissionStatisticsVO getCommissionStatistics(List<Long> commissionIds);
CommissionExpected queryByCommission(String policyNo, String commissionName, Integer commissionPeriod, String currency, String premium);
void validateCommissionUpdateRequest(CommissionUpdateRequest commissionUpdateRequest);
void saveUpdateCommissionRecord(Commission commission, CommissionUpdateRequest commissionUpdateRequest, AuthUserDto currentLoginUser);
......
......@@ -14,7 +14,9 @@ import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.common.utils.RandomStringGenerator;
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.enums.CommissionExpectedStatusEnum;
import com.yd.csf.service.enums.CommissionStatusEnum;
import com.yd.csf.service.enums.FortuneStatusEnum;
import com.yd.csf.service.model.*;
......@@ -71,6 +73,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
private CommissionAsyncService commissionAsyncService;
@Resource
private TransactionTemplate transactionTemplate;
@Resource
private ReceivableService receivableService;
@Override
......@@ -234,6 +238,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
CommissionExpected::getTotalPeriod,
CommissionExpected::getCommissionName,
CommissionExpected::getCurrency,
CommissionExpected::getReconciliationCompanyBizId,
CommissionExpected::getStatus)
.list();
......@@ -250,14 +255,13 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commission.setReconciliationCompanyBizId(policy.getReconciliationCompanyBizId());
commission.setCurrentCommissionRatio(commission.calculateCurrentPaidRatio());
}
// 根据保单号、期数、入账名称、币种查询预计来佣记录
// 匹配预计来佣记录
CommissionExpected expected = findExpectedFromList(commission, commissionExpectedList);
if (expected != null) {
commission.setCommissionExpectedBizId(expected.getCommissionExpectedBizId());
commission.setReceivableNo(expected.getReceivableNo());
commission.setTotalPeriod(expected.getTotalPeriod());
} else {
log.warn("导入入账:未查询到预计来佣记录, policyNo: {}, commissionPeriod: {}, commissionName: {}, currency: {}",
commission.getPolicyNo(), commission.getCommissionPeriod(), commission.getCommissionName(), commission.getCurrency());
commission.setRemark("未查询到预计来佣记录");
commission.setStatus(CommissionStatusEnum.MATCH_FAILED.getItemValue());
}
......@@ -271,11 +275,21 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
for (CommissionExpected i : commissionExpectedList) {
log.info(" expected: policyNo={}, commissionPeriod={}, commissionName={}, currency={}",
i.getPolicyNo(), i.getCommissionPeriod(), i.getCommissionName(), i.getCurrency());
if (Objects.equals(i.getPolicyNo(), commission.getPolicyNo())
&& Objects.equals(i.getCommissionPeriod(), commission.getCommissionPeriod())
&& Objects.equals(i.getCommissionName(), commission.getCommissionName())
&& Objects.equals(i.getCurrency(), commission.getCurrency())) {
return i;
if ("R".equals(i.getCommissionBizType())) {
if (Objects.equals(i.getPolicyNo(), commission.getPolicyNo())
&& Objects.equals(i.getCommissionBizType(), commission.getCommissionBizType())
&& Objects.equals(i.getCommissionPeriod(), commission.getCommissionPeriod())
&& 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;
......@@ -307,21 +321,13 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commissionUpdateRequest.getExchangeRate());
commission.setCurrentCommissionRatio(currentCommissionRatio);
} else {
// 非关联应收单,查询预计来佣记录,获取标准发佣金额
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(), "未找到预计来佣记录");
}
commission.setPolicyNo(null);
}
// 重新关联预计来佣记录
getCommissionExpectedBizId(commission);
// 计算来佣金额(港币)
BigDecimal hkdAmount = requestAmount
.multiply(commissionUpdateRequest.getExchangeRate())
.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP);
.multiply(commissionUpdateRequest.getExchangeRate());
commission.setHkdAmount(hkdAmount);
// 获取当前登录用户
......@@ -357,6 +363,32 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
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
public void validateCommissionUpdateRequest(CommissionUpdateRequest commissionUpdateRequest) {
// 校验入参
......@@ -445,31 +477,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
}
@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)
public Boolean generateFortune(GenerateFortuneRequest generateFortuneRequest) {
List<String> commissionBizIdList = generateFortuneRequest.getCommissionBizIdList();
......@@ -695,7 +702,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commissionCompareRecord.setAmount(commission.getAmount());
commissionCompareRecord.setCurrentCommissionRatio(commission.getCurrentCommissionRatio());
commissionCompareRecord.setCurrency(commission.getCurrency());
commissionCompareRecord.setExchangeRate(commission.getExchangeRate());
commissionCompareRecord.setExchangeRate(Convert.toStr(commission.getExchangeRate()));
commissionCompareRecord.setStatus(commission.getStatus());
commissionCompareRecord.setRemark(commission.getRemark());
commissionCompareRecord.setCreateTime(commission.getCreateTime());
......@@ -711,7 +718,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commissionCompareRecord.setTotalPeriod(commission.getTotalPeriod());
commissionCompareRecord.setAmount(commission.getAmount());
commissionCompareRecord.setCurrency(commission.getCurrency());
commissionCompareRecord.setExchangeRate(commission.getExchangeRate());
commissionCompareRecord.setExchangeRate(Convert.toStr(commission.getExchangeRate()));
commissionCompareRecord.setStatus(commission.getStatus());
commissionCompareRecord.setRemark(commission.getRemark());
commissionCompareRecord.setOperatorName(currentLoginUser.getUsername());
......@@ -739,14 +746,16 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
List<Policy> policyList = policyService.lambdaQuery().in(Policy::getPolicyNo, policyNoSet).list();
// 保单映射
policyMap = policyList.stream().collect(Collectors.toMap(Policy::getPolicyNo, Function.identity()));
// 查询预计入账信息
commissionExpectedList = commissionExpectedService.lambdaQuery().in(CommissionExpected::getPolicyNo, policyNoSet).list();
}
List<Commission> commissionList = new ArrayList<>();
for (CommissionAddRequest request : customerAddRequestList) {
Commission commission = new Commission();
BeanUtils.copyProperties(request, commission);
// 计算来佣金额(港币)
BigDecimal hkdAmount = request.getAmount()
.multiply(request.getExchangeRate());
commission.setHkdAmount(hkdAmount);
// 入账业务id
commission.setCommissionBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_COMMISSION.getCode()));
// 关联业务id
......@@ -765,27 +774,12 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "保单不存在, policyNo: " + request.getPolicyNo());
}
}
} else {
commission.setPolicyNo(null);
}
// 关联预计来佣信息
if (CollectionUtils.isNotEmpty(commissionExpectedList)) {
// 根据保单号、期数、入账名称、币种查询预计来佣记录
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());
}
}
getCommissionExpectedBizIdBatch(request, policyNoSet, commission);
commissionList.add(commission);
}
// 提交事务,保存数据
......@@ -809,6 +803,51 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
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) {
for (CommissionAddRequest request : customerAddRequestList) {
// 校验数据
......@@ -823,9 +862,12 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
if (StringUtils.isBlank(request.getCommissionName())) {
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 (StringUtils.isBlank(request.getExchangeRate())) {
if (ObjectUtils.isEmpty(request.getExchangeRate())) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "关联保单号记录,结算汇率不能为空");
}
}
......@@ -833,6 +875,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean addToExpected(AddToExpectedCommissionRequest addToExpectedCommissionRequest) {
if (StringUtils.isBlank(addToExpectedCommissionRequest.getCommissionBizId())) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "来佣业务id不能为空");
......@@ -842,7 +885,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
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(), "预计来佣已存在");
}
......@@ -851,21 +895,39 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
String loginUserId = currentLoginUser.getId().toString();
CommissionExpected expected = new CommissionExpected();
BeanUtils.copyProperties(commission, expected);
BeanUtils.copyProperties(commission, expected, "id");
expected.setCommissionExpectedBizId(RandomStringGenerator.generateBizId16("commission_expected"));
// 生成应收单编号
expected.setReceivableNo(receivableService.generateReceivableNo(
commission.getCommissionBizType(),
commission.getReconciliationCompanyCode(),
commission.getReconciliationCompany()));
// 设置预计入账金额、已来佣金额、待入账金额
expected.setExpectedAmount(commission.getAmount());
expected.setPaidAmount(BigDecimal.ZERO);
expected.setPaidRatio(BigDecimal.valueOf(100));
expected.setDefaultExchangeRate(new BigDecimal(commission.getExchangeRate()));
expected.setCommissionDate(new Date());
expected.setExpectedAmount(commission.getHkdAmount());
expected.setPaidAmount(commission.getHkdAmount());
expected.setPaidRatio(null);
expected.setDefaultExchangeRate(commission.getExchangeRate());
expected.setCommissionDate(commission.getCommissionDate());
expected.setStatus(CommissionExpectedStatusEnum.COMPARED.getItemValue());
expected.setStatusDesc("比对成功,通过手动同步预计来佣"); // 设置状态描述为比对成功
expected.setCreatorId(loginUserId);
expected.setCreateTime(new Date());
expected.setUpdaterId(loginUserId);
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
......
......@@ -125,7 +125,7 @@ public class CommissionVO implements Serializable {
* 当前结算汇率
*/
@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