Commit 84d81828 by jianan

新单跟进同步预约信息18-保单总保费

parent 371ba432
......@@ -144,6 +144,18 @@ public class ApiExpectedFortunePageResponse {
private String currency;
/**
* 默认结算汇率
*/
@Schema(description = "默认结算汇率")
private BigDecimal defaultExchangeRate;
/**
* 港币预计出账金额
*/
@Schema(description = "港币预计出账金额")
private BigDecimal hkdAmount;
/**
* 出账状态
*/
@Schema(description = "出账状态 0=待出账 1=可出帐,待检核 2=完成出账 3=部分出账 4=保留 5=已失效 6=可出账, 已检核 7=未找到当前预计出账对应的来佣 字典值: csf_expected_fortune_status")
......
......@@ -118,6 +118,11 @@ public class Policy implements Serializable {
private BigDecimal paymentPremium;
/**
* 总保费
*/
private BigDecimal totalPaymentPremium;
/**
* 保单状态
*/
private String status;
......
package com.yd.csf.service.service.impl;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
......@@ -496,6 +499,14 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
if (policy == null) {
throw new BusinessException(ErrorCode.NOT_FOUND_ERROR.getCode(), "policy不存在");
}
BigDecimal paymentPremium = policy.getPaymentPremium();
if (paymentPremium == null) {
throw new BusinessException("期交保费不能为空");
}
Object paymentTerm = policy.getPaymentTerm();
if (paymentTerm == null) {
throw new BusinessException("供款期数不能为空");
}
policy.setPolicyNo(policyFollow.getPolicyNo());
policy.setPolicyHolderAge(calculatePolicyHolderAge(policyFollow.getCustomerBizId()));
policy.setCoolingOffEndDate(policyFollow.getCoolingOffEndDate());
......@@ -507,6 +518,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
policy.setPaymentPremium(policyFollow.getInitialPremium());
policy.setCurrency(policyFollow.getPolicyCurrency());
policy.setPaymentTerm(policyFollow.getIssueNumber());
policy.setTotalPaymentPremium(calculateTotalPaymentPremium(policy));
policy.setUnderwritingDate(changePolicyFollowStatusRequest.getUnderwritingDate());
policy.setEffectiveDate(changePolicyFollowStatusRequest.getEffectiveDate());
......@@ -554,6 +566,13 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
return true;
}
private BigDecimal calculateTotalPaymentPremium(Policy policy) {
BigDecimal paymentPremium = policy.getPaymentPremium();
Object paymentTerm = policy.getPaymentTerm();
// 计算总保费 = 每期保费 * 供款期数
return paymentPremium.multiply(Convert.toBigDecimal(paymentTerm)).setScale(4, RoundingMode.HALF_UP);
}
private Integer calculatePolicyHolderAge(String customerBizId) {
Customer customer = customerService.getByCustomerBizId(customerBizId);
if (customer == null) {
......
package com.yd.csf.service.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.common.enums.ResultCode;
......@@ -23,11 +21,7 @@ import com.yd.csf.service.service.PolicyService;
import com.yd.csf.service.dao.PolicyMapper;
import com.yd.csf.service.vo.PolicyVO;
import com.yd.product.feign.client.relprojectproductlaunch.ApiRelProjectProductLaunchFeignClient;
import com.yd.product.feign.request.productlaunch.ApiProductLaunchParameterPageRequest;
import com.yd.product.feign.request.relprojectproductlaunch.ApiRelProjectProductLaunchPageRequest;
import com.yd.product.feign.response.productlaunch.ApiAttributeSettingDto;
import com.yd.product.feign.response.relprojectproductlaunch.ApiRelProjectProductLaunchPageResponse;
import io.swagger.v3.core.util.Json;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -37,6 +31,8 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
......@@ -114,12 +110,22 @@ public class PolicyServiceImpl extends ServiceImpl<PolicyMapper, Policy>
if (policy == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "保单不存在");
}
BigDecimal paymentPremium = policy.getPaymentPremium();
if (paymentPremium == null) {
throw new BusinessException("期交保费不能为空");
}
Object paymentTerm = policy.getPaymentTerm();
if (paymentTerm == null) {
throw new BusinessException("供款期数不能为空");
}
Date now = new Date();
// 保单信息
ApiProductPlanMainInfoDto apiProductPlanMainInfoDto = policyUpdateRequest.getApiProductPlanMainInfoDto();
if (apiProductPlanMainInfoDto != null) {
BeanUtils.copyProperties(apiProductPlanMainInfoDto, policy, "policyBizId", "id");
policy.setPaymentPremium(apiProductPlanMainInfoDto.getEachIssuePremium());
policy.setTotalPaymentPremium(calculateTotalPaymentPremium(apiProductPlanMainInfoDto));
policy.setIsPrepaid(apiProductPlanMainInfoDto.getIsPrepay());
policy.setUpdateTime(now);
// 更新保单
......@@ -150,6 +156,13 @@ public class PolicyServiceImpl extends ServiceImpl<PolicyMapper, Policy>
return true;
}
private BigDecimal calculateTotalPaymentPremium(ApiProductPlanMainInfoDto apiProductPlanMainInfoDto) {
// 计算总保费
return apiProductPlanMainInfoDto.getEachIssuePremium()
.multiply(new BigDecimal(apiProductPlanMainInfoDto.getPaymentFrequency()))
.setScale(4, RoundingMode.HALF_UP);
}
/**
* 查询列表
......
......@@ -29,11 +29,11 @@
ifnull(sum(ef.hkd_amount),0) as totalExpectedAmount,
ifnull(sum(ef.paid_amount),0) as totalPaidAmount,
ifnull(sum(ef.unpaid_amount),0) as totalUnpaidAmount,
ifnull(sum(e.totalPremiumAmount),0) as totalPremiumAmount,
MAX(e.total_payment_premium) * MAX(ef.default_exchange_rate) as totalPremiumAmount,
count(distinct ef.policy_no) as totalPolicyCount
from expected_fortune ef
LEFT JOIN (
SELECT p.policy_no, SUM(p.payment_premium*p.payment_term) as totalPremiumAmount
SELECT p.policy_no, p.total_payment_premium
FROM policy p
GROUP BY policy_no
) e ON ef.policy_no = e.policy_no
......
......@@ -24,6 +24,7 @@
<result property="paymentTerm" column="payment_term" />
<result property="paymentFrequency" column="payment_frequency" />
<result property="paymentPremium" column="payment_premium" />
<result property="totalPaymentPremium" column="total_payment_premium" />
<result property="status" column="status" />
<result property="currency" column="currency" />
<result property="initialPremium" column="initial_premium" />
......@@ -57,7 +58,7 @@
<sql id="Base_Column_List">
id,policy_biz_id,policy_no,user_biz_id,product_launch_biz_id,product_code,
product_name,product_cate,insurance_company,insurance_company_biz_id,region,
policy_holder,policy_holder_age,insured,guarantee_period,sum_insured,payment_term,payment_frequency,payment_premium,
policy_holder,policy_holder_age,insured,guarantee_period,sum_insured,payment_term,payment_frequency,payment_premium,total_payment_premium,
status,currency,initial_premium,sign_date,issue_date,
effective_date,cooling_off_end_date,cooling_off_days,renewal_date,is_prepaid,deductibles,prepaid_term,
initial_payment_method,renewal_payment_method,dividend_distribution_method,is_backtrack,is_join,
......
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