Commit 6fbf4835 by jianan

前端对接问题修复34

parent 7c48d5dc
...@@ -232,22 +232,6 @@ public class ApiCommissionController { ...@@ -232,22 +232,6 @@ public class ApiCommissionController {
} }
/** /**
* 新增入账
*
* @param customerAddRequest
* @param request
* @return
*/
@Operation(summary = "新增入账")
@PostMapping("/add")
public Result<Boolean> addCommission(@RequestBody CommissionAddRequest customerAddRequest, HttpServletRequest request) {
if (customerAddRequest == null || StringUtils.isBlank(customerAddRequest.getPolicyNo())) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "保单号不能为空");
}
return Result.success(commissionService.addCommission(customerAddRequest));
}
/**
* 批量新增入账 * 批量新增入账
* *
* @param customerAddRequestList * @param customerAddRequestList
......
...@@ -28,12 +28,8 @@ public interface CommissionService extends IService<Commission> { ...@@ -28,12 +28,8 @@ public interface CommissionService extends IService<Commission> {
Boolean generateFortune(GenerateFortuneRequest generateFortuneRequest); Boolean generateFortune(GenerateFortuneRequest generateFortuneRequest);
Boolean addCommission(CommissionAddRequest commissionAddRequest);
Commission getByCommissionBizId(String commissionBizId); Commission getByCommissionBizId(String commissionBizId);
void compareWithExpected(String premium, Commission commission, CommissionExpected expected);
List<Commission> queryList(CommissionDto dto); List<Commission> queryList(CommissionDto dto);
List<CommissionBindPolicyBrokerDto> queryCommissionBindPolicyBrokerList(CommissionDto dto); List<CommissionBindPolicyBrokerDto> queryCommissionBindPolicyBrokerList(CommissionDto dto);
...@@ -42,8 +38,6 @@ public interface CommissionService extends IService<Commission> { ...@@ -42,8 +38,6 @@ public interface CommissionService extends IService<Commission> {
CommissionExpected queryByCommission(String policyNo, String commissionName, Integer commissionPeriod, String currency, String premium); CommissionExpected queryByCommission(String policyNo, String commissionName, Integer commissionPeriod, String currency, String premium);
void calculatePaidAmountByCommissionList(Commission commission, CommissionExpected one);
void validateCommissionUpdateRequest(CommissionUpdateRequest commissionUpdateRequest); void validateCommissionUpdateRequest(CommissionUpdateRequest commissionUpdateRequest);
void saveUpdateCommissionRecord(Commission commission, CommissionUpdateRequest commissionUpdateRequest, AuthUserDto currentLoginUser); void saveUpdateCommissionRecord(Commission commission, CommissionUpdateRequest commissionUpdateRequest, AuthUserDto currentLoginUser);
......
...@@ -15,13 +15,10 @@ import com.yd.common.exception.BusinessException; ...@@ -15,13 +15,10 @@ 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.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.FortuneStatusEnum; import com.yd.csf.service.enums.FortuneStatusEnum;
import com.yd.csf.service.model.*; import com.yd.csf.service.model.*;
import com.yd.csf.service.service.*; import com.yd.csf.service.service.*;
import com.yd.csf.service.dao.CommissionMapper; import com.yd.csf.service.dao.CommissionMapper;
import com.yd.csf.service.vo.CommissionExpectedVO;
import com.yd.csf.service.vo.CommissionStatisticsVO; import com.yd.csf.service.vo.CommissionStatisticsVO;
import com.yd.csf.service.vo.CommissionVO; import com.yd.csf.service.vo.CommissionVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -39,8 +36,6 @@ import org.springframework.transaction.support.TransactionTemplate; ...@@ -39,8 +36,6 @@ import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -122,7 +117,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -122,7 +117,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return commissionVOPage; return commissionVOPage;
} }
// 关联查询保单信息 // 1.关联查询保单信息
Set<String> policyNoSet = commissionList.stream().map(Commission::getPolicyNo).collect(Collectors.toSet()); Set<String> policyNoSet = commissionList.stream().map(Commission::getPolicyNo).collect(Collectors.toSet());
QueryWrapper<Policy> queryWrapper = new QueryWrapper<Policy>(); QueryWrapper<Policy> queryWrapper = new QueryWrapper<Policy>();
queryWrapper.select("policy_no", "payment_premium", "product_name", "insurance_company", "reconciliation_company"); queryWrapper.select("policy_no", "payment_premium", "product_name", "insurance_company", "reconciliation_company");
...@@ -130,6 +125,14 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -130,6 +125,14 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
List<Policy> policyList = policyService.list(queryWrapper); List<Policy> policyList = policyService.list(queryWrapper);
Map<String, Policy> policyMap = policyList.stream().collect(Collectors.toMap(Policy::getPolicyNo, a -> a, (oldValue, newValue) -> newValue)); Map<String, Policy> policyMap = policyList.stream().collect(Collectors.toMap(Policy::getPolicyNo, a -> a, (oldValue, newValue) -> newValue));
// 2.关联查询预计入账信息
Set<String> commissionExpectedBizIdSet = commissionList.stream().map(Commission::getCommissionExpectedBizId).collect(Collectors.toSet());
List<CommissionExpected> commissionExpectedList = commissionExpectedService.lambdaQuery()
.select(CommissionExpected::getCommissionExpectedBizId, CommissionExpected::getReceivableNo)
.in(CommissionExpected::getCommissionExpectedBizId, commissionExpectedBizIdSet)
.list();
Map<String, CommissionExpected> commissionExpectedMap = commissionExpectedList.stream().collect(Collectors.toMap(CommissionExpected::getCommissionExpectedBizId, a -> a, (oldValue, newValue) -> newValue));
// 填充信息 // 填充信息
List<CommissionVO> commissionVOList = commissionList.stream().map(commission -> { List<CommissionVO> commissionVOList = commissionList.stream().map(commission -> {
CommissionVO commissionVO = CommissionVO.objToVo(commission); CommissionVO commissionVO = CommissionVO.objToVo(commission);
...@@ -141,6 +144,11 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -141,6 +144,11 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commissionVO.setInsuranceCompany(policy.getInsuranceCompany()); commissionVO.setInsuranceCompany(policy.getInsuranceCompany());
commissionVO.setReconciliationCompany(policy.getReconciliationCompany()); commissionVO.setReconciliationCompany(policy.getReconciliationCompany());
} }
CommissionExpected commissionExpected = commissionExpectedMap.get(commission.getCommissionExpectedBizId());
if (commissionExpected != null) {
// 填充应收账款编号
commissionVO.setReceivableNo(commissionExpected.getReceivableNo());
}
return commissionVO; return commissionVO;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
...@@ -322,34 +330,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -322,34 +330,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return one; return one;
} }
/**
* 根据对应的所有来佣记录,统计已入账金额、已入账比例
*
* @param commission
* @param one
*/
@Override
public void calculatePaidAmountByCommissionList(Commission commission, CommissionExpected one) {
// 查询当前来佣对应的所有来佣记录
QueryWrapper<Commission> queryWrapperCommission = new QueryWrapper<>();
queryWrapperCommission.eq("policy_no", commission.getPolicyNo());
queryWrapperCommission.eq("commission_name", commission.getCommissionName());
queryWrapperCommission.eq("commission_period", commission.getCommissionPeriod());
queryWrapperCommission.eq("currency", commission.getCurrency());
List<Commission> commissionList = this.list(queryWrapperCommission);
// 统计已入账金额、已入账比例
BigDecimal paidRatio = BigDecimal.ZERO;
BigDecimal paidAmount = BigDecimal.ZERO;
for (Commission commission1 : commissionList) {
if (commission1.getStatus().equals(CommissionStatusEnum.COMPARE_SUCCESS.getItemValue())) {
paidRatio = paidRatio.add(commission1.getCurrentCommissionRatio());
paidAmount = paidAmount.add(commission1.getAmount());
one.setPaidAmount(paidAmount);
one.setPaidRatio(paidRatio);
}
}
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean generateFortune(GenerateFortuneRequest generateFortuneRequest) { public Boolean generateFortune(GenerateFortuneRequest generateFortuneRequest) {
...@@ -532,122 +512,10 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -532,122 +512,10 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Boolean addCommission(CommissionAddRequest commissionAddRequest) {
// 校验来佣所属保单是否存在
String policyNo = commissionAddRequest.getPolicyNo();
// 校验来佣所属保单跟进是否存在
PolicyFollow policyFollow = policyFollowService.getOne(new QueryWrapper<PolicyFollow>().eq("policy_no", policyNo));
if (policyFollow == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "新单跟进中不存在该保单号,请先创建新单跟进");
}
// 获取当前登录用户
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
String loginUserId = currentLoginUser.getId().toString();
Commission commission = new Commission();
BeanUtils.copyProperties(commissionAddRequest, commission);
// 生成新单编号
String commissionBizId = RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_COMMISSION.getCode());
commission.setCommissionBizId(commissionBizId);
// 计算当前来佣比例=当前入账金额/结算汇率/保费
BigDecimal currentCommissionRatio = commissionAddRequest.getAmount()
.divide(policyFollow.getPaymentPremium(), 4, RoundingMode.HALF_UP)
.divide(new BigDecimal(commissionAddRequest.getExchangeRate()), 4, RoundingMode.HALF_UP)
.multiply(new BigDecimal(100));
commission.setCurrentCommissionRatio(currentCommissionRatio);
// 关联业务id
commission.setReconciliationCompany(policyFollow.getReconciliationCompany());
commission.setReconciliationCompanyBizId(policyFollow.getReconciliationCompanyBizId());
commission.setProductLaunchBizId(policyFollow.getProductLaunchBizId());
commission.setInsuranceCompanyBizId(policyFollow.getInsuranceCompanyBizId());
commission.setPremium(Convert.toStr(policyFollow.getPaymentPremium()));
commission.setCreatorId(loginUserId);
commission.setCreateTime(new Date());
commission.setUpdaterId(loginUserId);
commission.setUpdateTime(new Date());
// 保存来佣
this.save(commission);
// 注册事务同步器,在主事务提交后执行比对
TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronization() {
@Override
public void afterCommit() {
try {
// 重新查询最新的数据,获取已提交的数据
commissionAsyncService.commissionCompare(commission);
} catch (Exception e) {
// 比对失败不影响主事务,记录日志即可
log.error("主事务提交后,比对操作执行失败,commissionBizId: {}",
commissionBizId, e);
}
}
}
);
return true;
}
@Override
public Commission getByCommissionBizId(String commissionBizId) { public Commission getByCommissionBizId(String commissionBizId) {
return this.getOne(new QueryWrapper<Commission>().eq("commission_biz_id", commissionBizId)); return this.getOne(new QueryWrapper<Commission>().eq("commission_biz_id", commissionBizId));
} }
/**
* 比对时,当前来佣比例=当前入账金额/结算汇率/保费 和预计来佣的来佣比例对比
*
* @param commission
* @param expected
*/
@Override
public void compareWithExpected(String premium, Commission commission, CommissionExpected expected) {
if (expected != null) {
if (ObjectUtils.isEmpty(expected.getCommissionRatio())) {
log.error("预计来佣的来佣比例不能为空,预计来佣业务id:{}", expected.getCommissionExpectedBizId());
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "预计来佣的来佣比例不能为空");
}
// 当前来佣比例=当前入账金额/结算汇率/保费 * 100
BigDecimal currentCommissionRatio = commission.getAmount()
.divide(new BigDecimal(premium), 4, RoundingMode.HALF_UP)
.divide(new BigDecimal(commission.getExchangeRate()), 4, RoundingMode.HALF_UP)
.multiply(new BigDecimal(100))
;
// 预计来佣比例
BigDecimal expectedCommissionRatio = expected.getCommissionRatio();
if (currentCommissionRatio.compareTo(expectedCommissionRatio) == 0) {
// 一致,来佣状态设置为 比对成功
commission.setStatus(CommissionStatusEnum.COMPARE_SUCCESS.getItemValue());
// 预计来佣的状态设置为 已来佣
expected.setStatus(CommissionExpectedStatusEnum.COMPARED.getItemValue());
} else {
// 不一致,来佣状态设置为 比对失败
commission.setStatus(CommissionStatusEnum.COMPARE_FAIL.getItemValue());
expected.setStatus(CommissionExpectedStatusEnum.PARTIAL.getItemValue());
}
// 设置来佣相关字段
commission.setCommissionExpectedBizId(expected.getCommissionExpectedBizId());
// commission.setExpectedAmount(expectedAmount.setScale(2, RoundingMode.HALF_UP));
// commission.setPaidAmount(paidAmount.setScale(2, RoundingMode.HALF_UP));
// // 待入账金额 = 预计来佣总金额 - 已入账金额
// commission.setPendingAmount(expectedAmount.subtract(paidAmount).setScale(2, RoundingMode.HALF_UP));
// 当前来佣比例
commission.setCurrentCommissionRatio(currentCommissionRatio);
// 当期已入账来佣比例 = 当前来佣比例 + 已入账来佣比例
// commission.setPeriodPaidRatio(currentCommissionRatio.add(ObjectUtils.defaultIfNull(expected.getPaidRatio(), BigDecimal.ZERO)).setScale(2, RoundingMode.HALF_UP));
// // 当期剩余来佣比例 = 预计来佣来佣比例 - 当期已入账来佣比例
// commission.setPeriodPendingRatio(expectedCommissionRatio.subtract(commission.getPeriodPaidRatio()).setScale(2, RoundingMode.HALF_UP));
// 保存比对记录
// saveCompareRecord(commission, expected);
}
}
public BigDecimal calculateCurrentCommissionRatio(BigDecimal amount, String premium, String exchangeRate) { public BigDecimal calculateCurrentCommissionRatio(BigDecimal amount, String premium, String exchangeRate) {
if (ObjectUtils.isEmpty(premium)) { if (ObjectUtils.isEmpty(premium)) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "保费不能为空"); throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "保费不能为空");
...@@ -706,12 +574,21 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -706,12 +574,21 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
} }
Set<String> policyNoSet = customerAddRequestList.stream().map(CommissionAddRequest::getPolicyNo).collect(Collectors.toSet()); Set<String> policyNoSet = customerAddRequestList.stream().map(CommissionAddRequest::getPolicyNo).collect(Collectors.toSet());
Map<String, PolicyFollow> policyFollowMap = null; // 关联查询保单信息、预计入账信息
if (!CollectionUtils.isEmpty(policyNoSet)) { Map<String, Policy> policyMap = new HashMap<>();
// 查询来佣所属保单跟进 Map<String, CommissionExpected> commissionExpectedMap = new HashMap<>();
List<PolicyFollow> policyFollowList = policyFollowService.list(new QueryWrapper<PolicyFollow>().in("policy_no", policyNoSet)); if (CollUtil.isNotEmpty(policyNoSet)) {
// policyFollowList 映射 // 查询保单信息
policyFollowMap = policyFollowList.stream().collect(Collectors.toMap(PolicyFollow::getPolicyNo, Function.identity())); List<Policy> policyList = policyService.lambdaQuery().in(Policy::getPolicyNo, policyNoSet).list();
// 保单映射
policyMap = policyList.stream().collect(Collectors.toMap(Policy::getPolicyNo, Function.identity()));
// 查询预计入账信息
List<CommissionExpected> commissionExpectedList = commissionExpectedService.lambdaQuery().in(CommissionExpected::getPolicyNo, policyNoSet).list();
// 预计入账映射, 根据保单号、期数、入账名称、币种映射
commissionExpectedMap = commissionExpectedList.stream()
.collect(Collectors.toMap(
key -> key.getPolicyNo() + "_" + key.getCommissionPeriod() + "_" + key.getCommissionName() + "_" + key.getCurrency(),
Function.identity()));
} }
List<Commission> commissionList = new ArrayList<>(); List<Commission> commissionList = new ArrayList<>();
...@@ -721,14 +598,25 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -721,14 +598,25 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
// 入账业务id // 入账业务id
commission.setCommissionBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_COMMISSION.getCode())); commission.setCommissionBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_COMMISSION.getCode()));
// 关联业务id // 关联业务id
if (MapUtils.isNotEmpty(policyFollowMap)) { if (MapUtils.isNotEmpty(policyMap)) {
PolicyFollow policyFollow = policyFollowMap.get(request.getPolicyNo()); Policy policy = policyMap.get(request.getPolicyNo());
if (policyFollow != null) { if (policy != null) {
commission.setReconciliationCompany(policyFollow.getReconciliationCompany()); commission.setReconciliationCompany(policy.getReconciliationCompany());
commission.setReconciliationCompanyBizId(policyFollow.getReconciliationCompanyBizId()); commission.setReconciliationCompanyBizId(policy.getReconciliationCompanyBizId());
commission.setProductLaunchBizId(policyFollow.getProductLaunchBizId()); commission.setProductLaunchBizId(policy.getProductLaunchBizId());
commission.setInsuranceCompanyBizId(policyFollow.getInsuranceCompanyBizId()); commission.setInsuranceCompanyBizId(policy.getInsuranceCompanyBizId());
commission.setPremium(Convert.toStr(policyFollow.getPaymentPremium())); commission.setPremium(Convert.toStr(policy.getPaymentPremium()));
}
}
// 关联预计来佣信息
if (MapUtils.isNotEmpty(commissionExpectedMap)) {
CommissionExpected expected = commissionExpectedMap.get(request.getPolicyNo() + "_" + request.getCommissionPeriod() + "_" + request.getCommissionName() + "_" + request.getCurrency());
if (expected != null) {
commission.setCommissionExpectedBizId(expected.getCommissionExpectedBizId());
} else {
log.warn("新增入账:未查询到预计来佣记录, policyNo: {}, commissionPeriod: {}, commissionName: {}, currency: {}",
request.getPolicyNo(), request.getCommissionPeriod(), request.getCommissionName(), request.getCurrency());
commission.setRemark("未查询到预计来佣记录");
} }
} }
commissionList.add(commission); commissionList.add(commission);
......
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