Commit 363d4114 by jianan

新单跟进v2

parent 58804ca6
...@@ -13,7 +13,9 @@ import com.yd.csf.api.dto.ReceivableReportResponse; ...@@ -13,7 +13,9 @@ import com.yd.csf.api.dto.ReceivableReportResponse;
import com.yd.csf.service.common.ErrorCode; import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.dto.*; import com.yd.csf.service.dto.*;
import com.yd.csf.service.model.CommissionExpected; import com.yd.csf.service.model.CommissionExpected;
import com.yd.csf.service.model.Policy;
import com.yd.csf.service.service.CommissionExpectedService; import com.yd.csf.service.service.CommissionExpectedService;
import com.yd.csf.service.service.PolicyService;
import com.yd.csf.service.vo.CommissionExpectedExportDTO; import com.yd.csf.service.vo.CommissionExpectedExportDTO;
import com.yd.csf.service.vo.CommissionExpectedStatisticsVO; import com.yd.csf.service.vo.CommissionExpectedStatisticsVO;
import com.yd.csf.service.vo.CommissionExpectedVO; import com.yd.csf.service.vo.CommissionExpectedVO;
...@@ -45,6 +47,8 @@ public class ApiCommissionExpectedController { ...@@ -45,6 +47,8 @@ public class ApiCommissionExpectedController {
@Resource @Resource
private CommissionExpectedService commissionExpectedService; private CommissionExpectedService commissionExpectedService;
@Resource
private PolicyService policyService;
/** /**
* 批量新增预计入账 * 批量新增预计入账
...@@ -225,8 +229,12 @@ public class ApiCommissionExpectedController { ...@@ -225,8 +229,12 @@ public class ApiCommissionExpectedController {
if (request == null) { if (request == null) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage()); return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage());
} }
Policy policy = policyService.lambdaQuery().eq(Policy::getPolicyNo, request.getPolicyNo()).one();
if (policy == null) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "保单不存在");
}
commissionExpectedService.getExpectedCommissionByProductlaunchId( commissionExpectedService.getExpectedCommissionByProductlaunchId(
request.getPolicyNo(), policy,
request.getProductLaunchBizId(), request.getProductLaunchBizId(),
request.getInsuranceCompanyBizId(), request.getInsuranceCompanyBizId(),
request.getReconciliationCompany(), request.getReconciliationCompany(),
......
...@@ -9,9 +9,7 @@ import java.io.Serializable; ...@@ -9,9 +9,7 @@ import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import com.yd.csf.service.vo.FnaVO;
import lombok.Data; import lombok.Data;
import org.springframework.beans.BeanUtils;
/** /**
* 预计来佣表 * 预计来佣表
......
...@@ -8,6 +8,7 @@ import com.yd.csf.service.dto.CommissionExpectedQueryRequest; ...@@ -8,6 +8,7 @@ import com.yd.csf.service.dto.CommissionExpectedQueryRequest;
import com.yd.csf.service.dto.CommissionExpectedUpdateRequest; import com.yd.csf.service.dto.CommissionExpectedUpdateRequest;
import com.yd.csf.service.model.CommissionExpected; import com.yd.csf.service.model.CommissionExpected;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.yd.csf.service.model.Policy;
import com.yd.csf.service.vo.CommissionExpectedStatisticsVO; import com.yd.csf.service.vo.CommissionExpectedStatisticsVO;
import com.yd.csf.service.vo.CommissionExpectedVO; import com.yd.csf.service.vo.CommissionExpectedVO;
import com.yd.csf.service.vo.ReceivableReportVO; import com.yd.csf.service.vo.ReceivableReportVO;
...@@ -59,7 +60,7 @@ public interface CommissionExpectedService extends IService<CommissionExpected> ...@@ -59,7 +60,7 @@ public interface CommissionExpectedService extends IService<CommissionExpected>
CommissionExpected getByBizId(String commissionExpectedBizId); CommissionExpected getByBizId(String commissionExpectedBizId);
void getExpectedCommissionByProductlaunchId(String policyNo, String productLaunchBizId, String insuranceCompanyBizId, String reconciliationCompany, String reconciliationCompanyCode, String reconciliationCompanyBizId); void getExpectedCommissionByProductlaunchId(Policy policy, String productLaunchBizId, String insuranceCompanyBizId, String reconciliationCompany, String reconciliationCompanyCode, String reconciliationCompanyBizId);
/** /**
* 应收款报表 - 按保单号和期数维度统计(分页) * 应收款报表 - 按保单号和期数维度统计(分页)
......
...@@ -7,17 +7,19 @@ import com.baomidou.mybatisplus.core.metadata.IPage; ...@@ -7,17 +7,19 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.common.constant.CommonConstant; import com.yd.common.constant.CommonConstant;
import com.yd.common.constant.RedisConstants;
import com.yd.common.enums.DictTypeEnum;
import com.yd.common.enums.ResultCode; import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException; import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result; import com.yd.common.result.Result;
import com.yd.common.utils.RandomStringGenerator; import com.yd.common.utils.RandomStringGenerator;
import com.yd.common.utils.RedisUtil;
import com.yd.csf.service.component.ReceivableService; 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.CommissionExpectedStatusEnum;
import com.yd.csf.service.model.Commission; import com.yd.csf.service.model.Commission;
import com.yd.csf.service.model.CommissionExpected; import com.yd.csf.service.model.CommissionExpected;
import com.yd.csf.service.model.Policy; import com.yd.csf.service.model.Policy;
import com.yd.csf.service.model.PolicyFollow;
import com.yd.csf.service.service.*; import com.yd.csf.service.service.*;
import com.yd.csf.service.dao.CommissionExpectedMapper; import com.yd.csf.service.dao.CommissionExpectedMapper;
import com.yd.csf.service.vo.CommissionExpectedStatisticsVO; import com.yd.csf.service.vo.CommissionExpectedStatisticsVO;
...@@ -28,9 +30,7 @@ import com.yd.product.feign.request.expectedspecies.ApiExpectedSpeciesListReques ...@@ -28,9 +30,7 @@ import com.yd.product.feign.request.expectedspecies.ApiExpectedSpeciesListReques
import com.yd.product.feign.response.expectedspecies.ApiExpectedSpeciesListResponse; import com.yd.product.feign.response.expectedspecies.ApiExpectedSpeciesListResponse;
import com.yd.user.feign.client.sysdict.ApiSysDictFeignClient; import com.yd.user.feign.client.sysdict.ApiSysDictFeignClient;
import com.yd.user.feign.response.sysdict.GetDictItemListByDictTypeResponse; import com.yd.user.feign.response.sysdict.GetDictItemListByDictTypeResponse;
import com.yd.user.service.model.SysDictItem;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -66,6 +66,8 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -66,6 +66,8 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
private ApiSysDictFeignClient apiSysDictFeignClient; private ApiSysDictFeignClient apiSysDictFeignClient;
@Resource @Resource
private ApiExpectedSpeciesFeignClient apiExpectedSpeciesFeignClient; private ApiExpectedSpeciesFeignClient apiExpectedSpeciesFeignClient;
@Resource
private RedisUtil redisUtil;
@Override @Override
...@@ -466,8 +468,23 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -466,8 +468,23 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void getExpectedCommissionByProductlaunchId(String policyNo, String productLaunchBizId, public void getExpectedCommissionByProductlaunchId(Policy policy, String productLaunchBizId,
String insuranceCompanyBizId, String reconciliationCompany, String reconciliationCompanyCode, String reconciliationCompanyBizId) { String insuranceCompanyBizId, String reconciliationCompany, String reconciliationCompanyCode, String reconciliationCompanyBizId) {
String policyNo = policy.getPolicyNo();
if (ObjectUtils.isEmpty(policyNo)) {
throw new BusinessException("保单号不能为空");
}
BigDecimal paymentPremium = policy.getPaymentPremium();
if (paymentPremium == null) {
throw new BusinessException("保费不能为空");
}
Date effectiveDate = policy.getEffectiveDate();
if (effectiveDate == null) {
throw new BusinessException("保单生效日期不能为空");
}
//查询redis缓存的字典列表信息
List<GetDictItemListByDictTypeResponse> dictTypeResponses = redisUtil.getCacheObject(RedisConstants.DICT_LIST);
if (StringUtils.isNotBlank(productLaunchBizId)) { if (StringUtils.isNotBlank(productLaunchBizId)) {
ApiExpectedSpeciesListRequest apiExpectedSpeciesListRequest = new ApiExpectedSpeciesListRequest(); ApiExpectedSpeciesListRequest apiExpectedSpeciesListRequest = new ApiExpectedSpeciesListRequest();
apiExpectedSpeciesListRequest.setProductLaunchBizId(productLaunchBizId); apiExpectedSpeciesListRequest.setProductLaunchBizId(productLaunchBizId);
...@@ -476,12 +493,19 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -476,12 +493,19 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
List<ApiExpectedSpeciesListResponse> expectedSpeciesList = result.getData(); List<ApiExpectedSpeciesListResponse> expectedSpeciesList = result.getData();
List<CommissionExpected> commissionExpectedList = new ArrayList<>(); List<CommissionExpected> commissionExpectedList = new ArrayList<>();
if (CollUtil.isNotEmpty(expectedSpeciesList)) { if (CollUtil.isNotEmpty(expectedSpeciesList)) {
// 计算佣金总期数 list 中 endPeriod最大值
Integer maxEndPeriod = expectedSpeciesList.stream()
.map(item -> Convert.toInt(item.getEndPeriod()))
.max(Integer::compareTo)
.orElse(0);
for (ApiExpectedSpeciesListResponse item : expectedSpeciesList) { for (ApiExpectedSpeciesListResponse item : expectedSpeciesList) {
CommissionExpected commissionExpected = new CommissionExpected(); CommissionExpected commissionExpected = new CommissionExpected();
commissionExpected.setCommissionExpectedBizId(RandomStringGenerator.generateBizId16("commission_expected")); commissionExpected.setCommissionExpectedBizId(RandomStringGenerator.generateBizId16("commission_expected"));
commissionExpected.setReceivableNo(receivableService.generateReceivableNo("R", reconciliationCompanyCode, reconciliationCompany)); commissionExpected.setReceivableNo(receivableService.generateReceivableNo("R", reconciliationCompanyCode, reconciliationCompany));
commissionExpected.setCommissionBizType("R"); commissionExpected.setCommissionBizType("R");
commissionExpected.setPolicyNo(policyNo); commissionExpected.setPolicyNo(policyNo);
commissionExpected.setPremium(paymentPremium);
commissionExpected.setInsuranceCompanyBizId(insuranceCompanyBizId); commissionExpected.setInsuranceCompanyBizId(insuranceCompanyBizId);
commissionExpected.setProductLaunchBizId(productLaunchBizId); commissionExpected.setProductLaunchBizId(productLaunchBizId);
commissionExpected.setReconciliationCompany(reconciliationCompany); commissionExpected.setReconciliationCompany(reconciliationCompany);
...@@ -489,19 +513,25 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -489,19 +513,25 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
commissionExpected.setReconciliationCompanyBizId(reconciliationCompanyBizId); commissionExpected.setReconciliationCompanyBizId(reconciliationCompanyBizId);
commissionExpected.setCommissionPeriod(Convert.toInt(item.getIssueNumber())); commissionExpected.setCommissionPeriod(Convert.toInt(item.getIssueNumber()));
commissionExpected.setTotalPeriod(Convert.toInt(item.getEndPeriod())); commissionExpected.setTotalPeriod(Convert.toInt(item.getEndPeriod()));
commissionExpected.setCommissionName(item.getExpenseName()); commissionExpected.setCommissionName(GetDictItemListByDictTypeResponse.getItemLabel(dictTypeResponses,
"csf_commission_type", item.getExpenseName()));
commissionExpected.setCommissionType(item.getExpenseName()); commissionExpected.setCommissionType(item.getExpenseName());
commissionExpected.setCommissionRatio(item.getCommissionRate()); commissionExpected.setCommissionRatio(item.getCommissionRate());
commissionExpected.setAmount(null); commissionExpected.setAmount(null);
commissionExpected.setCurrency(item.getCurrency()); commissionExpected.setCurrency(item.getCurrency());
commissionExpected.setCommissionDate(new Date()); commissionExpected.setCommissionDate(calculateCommissionDate(item.getEndPeriod(), effectiveDate));
commissionExpected.setActualCommissionDate(new Date());
commissionExpected.setStatus(CommissionExpectedStatusEnum.PENDING.getItemValue()); commissionExpected.setStatus(CommissionExpectedStatusEnum.PENDING.getItemValue());
commissionExpected.setStatusDesc(null); commissionExpected.setStatusDesc(null);
commissionExpected.setDefaultExchangeRate(queryDefaultExchangeRate(item.getCurrency())); commissionExpected.setDefaultExchangeRate(queryDefaultExchangeRate(item.getCurrency()));
commissionExpected.setExpectedAmount(null); commissionExpected.setExpectedAmount(calculateExpectedAmount(
commissionExpected.setPaidAmount(null); paymentPremium,
commissionExpected.setPaidRatio(null); item.getCommissionRate(),
"R",
null,
item.getCurrency(),
commissionExpected.getDefaultExchangeRate()));
commissionExpected.setPaidAmount(BigDecimal.ZERO);
commissionExpected.setPaidRatio(BigDecimal.ZERO);
commissionExpected.setRemark(""); commissionExpected.setRemark("");
commissionExpected.setIsDeleted(0); commissionExpected.setIsDeleted(0);
commissionExpected.setCreatorId(""); commissionExpected.setCreatorId("");
...@@ -518,6 +548,56 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -518,6 +548,56 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
} }
} }
private BigDecimal calculateExpectedAmount(BigDecimal premium, BigDecimal commissionRatio, String commissionBizType,
BigDecimal amount, String currency, BigDecimal defaultExchangeRate) {
if ("R".equals(commissionBizType)) {
// 关联保单应收单:保费 × 佣金比例 × 默认结算汇率 ÷ 100
BigDecimal exchangeRate = defaultExchangeRate;
if (exchangeRate == null) {
exchangeRate = queryDefaultExchangeRate(currency);
}
return premium
.multiply(commissionRatio)
.multiply(exchangeRate)
.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP);
} else {
// 非关联保单应收单:金额 × 默认结算汇率
BigDecimal exchangeRate = defaultExchangeRate;
if (exchangeRate == null) {
exchangeRate = queryDefaultExchangeRate(currency);
}
return amount.multiply(exchangeRate);
}
}
/**
* 根据保单生效日期和佣金期数计算预计来佣日期,首期为保单生效日次月,后续期数为首期的次年
* @param endPeriod 佣金期数
* @param effectiveDate 保单生效日期
* @return 预计来佣日期
*/
private Date calculateCommissionDate(String endPeriod, Date effectiveDate) {
if (effectiveDate == null || StringUtils.isBlank(endPeriod)) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTime(effectiveDate);
// 首期:保单生效日次月
cal.add(Calendar.MONTH, 1);
Integer period = Convert.toInt(endPeriod);
if (period == null || period <= 0) {
return cal.getTime();
}
// 后续期数:在首期基础上增加 (period - 1) 年
// 例如:第2期为首期次年,第3期为首期+2年
cal.add(Calendar.YEAR, period - 1);
return cal.getTime();
}
@Override @Override
public IPage<ReceivableReportVO> receivableReportPage(Page<ReceivableReportVO> page, List<Long> expectedIds) { public IPage<ReceivableReportVO> receivableReportPage(Page<ReceivableReportVO> page, List<Long> expectedIds) {
return baseMapper.receivableReportPage(page, expectedIds); return baseMapper.receivableReportPage(page, expectedIds);
......
...@@ -827,7 +827,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -827,7 +827,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
// 调用预计入账服务生成记录 // 调用预计入账服务生成记录
commissionExpectedService.getExpectedCommissionByProductlaunchId( commissionExpectedService.getExpectedCommissionByProductlaunchId(
policyNo, policy,
productLaunchBizId, productLaunchBizId,
insuranceCompanyBizId, insuranceCompanyBizId,
reconciliationCompany, reconciliationCompany,
......
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