Commit 998922da by zhangxingmin

push

parent d8e51c8c
......@@ -107,97 +107,155 @@ public class PolicyServiceImpl extends ServiceImpl<PolicyMapper, Policy>
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updatePolicy(PolicyUpdateRequest policyUpdateRequest) {
ApiProductPlanMainInfoDto apiProductPlanMainInfoDto = policyUpdateRequest.getApiProductPlanMainInfoDto();
if (apiProductPlanMainInfoDto == null) {
ApiProductPlanMainInfoDto dto = policyUpdateRequest.getApiProductPlanMainInfoDto();
if (dto == null) {
throw new BusinessException("产品计划对象不能为空");
}
String policyBizId = policyUpdateRequest.getPolicyBizId();
if (StringUtils.isBlank(policyBizId)) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "policyBizId不能为空");
}
Policy policy = this.getOne(new QueryWrapper<Policy>().eq("policy_biz_id", policyBizId));
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();
// 保单信息
BeanUtils.copyProperties(apiProductPlanMainInfoDto, policy, "policyBizId", "id");
policy.setPaymentPremium(apiProductPlanMainInfoDto.getEachIssuePremium());
policy.setTotalPaymentPremium(calculateTotalPaymentPremium(apiProductPlanMainInfoDto));
policy.setIsPrepaid(apiProductPlanMainInfoDto.getIsPrepay());
// 保单基本信息
policy.setPolicyBizId(policyBizId);
policy.setProductLaunchBizId(dto.getProductLaunchBizId());
policy.setProductName(dto.getProductLaunchMainName());
policy.setInsuranceCompany(dto.getCompanyName());
policy.setInsuranceCompanyBizId(dto.getCompanyId());
policy.setReconciliationCompany(dto.getReconciliationCompanyName());
policy.setReconciliationCompanyBizId(dto.getReconciliationCompanyId());
policy.setCurrency(dto.getPolicyCurrency());
policy.setProductCate(dto.getInsuranceTypeId());
policy.setPaymentTerm(dto.getIssueNumber());
// 保障年期
policy.setGuaranteePeriod(dto.getGuaranteePeriod());
// 保额
policy.setSumInsured(parseBigDecimal(dto.getSumInsured()));
// 期交保费
BigDecimal eachIssuePremium = parseBigDecimal(dto.getEachIssuePremium());
if (eachIssuePremium == null) {
throw new BusinessException("每期保费不能为空");
}
policy.setPaymentPremium(eachIssuePremium);
// 总保费计算
policy.setTotalPaymentPremium(calculateTotalPaymentPremium(dto));
// 保单征费
policy.setPolicyLevy(parseString(dto.getPolicyLevy()));
// 是否预缴
policy.setIsPrepaid(parseInteger(dto.getIsPrepay()));
// 预缴年期
policy.setPrepaidTerm(parseInteger(dto.getPrepaymentPeriod()));
// 是否回溯
policy.setIsBacktrack(parseInteger(dto.getIsTraceable()));
// 首期付款方式
policy.setInitialPaymentMethod(dto.getInitialPaymentMethod());
// 续期付款方式
policy.setRenewalPaymentMethod(dto.getRenewalPaymentMethod());
// 红利分配方式
policy.setDividendDistributionMethod(dto.getDividendDistributionMethod());
policy.setUpdateTime(now);
//对账公司名称
policy.setReconciliationCompany(apiProductPlanMainInfoDto.getReconciliationCompanyName());
//对账公司业务id
policy.setReconciliationCompanyBizId(apiProductPlanMainInfoDto.getReconciliationCompanyId());
policy.setProductCate(apiProductPlanMainInfoDto.getInsuranceTypeId());
policy.setPaymentTerm(apiProductPlanMainInfoDto.getIssueNumber());
policy.setCurrency(apiProductPlanMainInfoDto.getPolicyCurrency());
policy.setPaymentPremium(apiProductPlanMainInfoDto.getEachIssuePremium());
policy.setIsPrepaid(apiProductPlanMainInfoDto.getIsPrepay());
policy.setPrepaidTerm(apiProductPlanMainInfoDto.getPrepaymentPeriod());
policy.setIsBacktrack(apiProductPlanMainInfoDto.getIsTraceable());
policy.setInsuranceCompany(apiProductPlanMainInfoDto.getCompanyName());
policy.setInsuranceCompanyBizId(apiProductPlanMainInfoDto.getCompanyId());
// 更新保单
this.updateById(policy);
//更新新单跟进数据
// 更新 PolicyFollow
PolicyFollow policyFollow = policyFollowService.queryOneByPolicyBizId(policyBizId);
if (policyFollow == null) {
throw new BusinessException("新单跟进信息不存在");
}
BeanUtils.copyProperties(apiProductPlanMainInfoDto,policyFollow);
policyFollow.setReconciliationCompanyBizId(apiProductPlanMainInfoDto.getReconciliationCompanyId());
policyFollow.setReconciliationCompany(apiProductPlanMainInfoDto.getReconciliationCompanyName());
policyFollow.setProductCate(apiProductPlanMainInfoDto.getInsuranceTypeName());
policyFollow.setCategoryCode(apiProductPlanMainInfoDto.getInsuranceTypeCode());
policyFollow.setInsuranceCategoryBizId(apiProductPlanMainInfoDto.getInsuranceTypeId());
policyFollow.setProductName(apiProductPlanMainInfoDto.getProductLaunchMainName());
policyFollow.setPrepaidTerm(apiProductPlanMainInfoDto.getIsPrepay());
policyFollow.setInsuranceCompanyBizId(apiProductPlanMainInfoDto.getCompanyId());
policyFollow.setInsuranceCompany(apiProductPlanMainInfoDto.getCompanyName());
if (apiProductPlanMainInfoDto.getBacktrackDate() != null) {
policyFollow.setRetroactiveDate(
Date.from(apiProductPlanMainInfoDto.getBacktrackDate()
.atZone(ZoneId.systemDefault())
.toInstant())
);
//PolicyFollow 字段
policyFollow.setProductLaunchBizId(dto.getProductLaunchBizId());
policyFollow.setProductName(dto.getProductLaunchMainName());
policyFollow.setInsuranceCompany(dto.getCompanyName());
policyFollow.setInsuranceCompanyBizId(dto.getCompanyId());
policyFollow.setReconciliationCompany(dto.getReconciliationCompanyName());
policyFollow.setReconciliationCompanyBizId(dto.getReconciliationCompanyId());
policyFollow.setReconciliationCompanyCode(null);
policyFollow.setProductCate(dto.getInsuranceTypeName());
policyFollow.setCategoryCode(dto.getInsuranceTypeCode());
policyFollow.setInsuranceCategoryBizId(dto.getInsuranceTypeId());
policyFollow.setIssueNumber(dto.getIssueNumber());
policyFollow.setGuaranteePeriod(parseInteger(dto.getGuaranteePeriod()));
policyFollow.setSumInsured(parseBigDecimal(dto.getSumInsured()));
policyFollow.setPaymentFrequency(dto.getPaymentFrequency());
policyFollow.setEachIssuePremium(eachIssuePremium);
policyFollow.setIsPrepay(parseInteger(dto.getIsPrepay()));
policyFollow.setIsTraceable(parseInteger(dto.getIsTraceable()));
policyFollow.setPrepaidTerm(parseInteger(dto.getPrepaymentPeriod()));
policyFollow.setPolicyCurrency(dto.getPolicyCurrency());
policyFollow.setInitialPaymentMethod(dto.getInitialPaymentMethod());
policyFollow.setRenewalPaymentMethod(dto.getRenewalPaymentMethod());
policyFollow.setDividendDistributionMethod(dto.getDividendDistributionMethod());
policyFollow.setPolicyLevy(parseString(dto.getPolicyLevy()));
// 回溯日期处理
if (dto.getBacktrackDate() != null) {
policyFollow.setRetroactiveDate(Date.from(dto.getBacktrackDate().atZone(ZoneId.systemDefault()).toInstant()));
} else {
policyFollow.setRetroactiveDate(null);
}
// // 先删除旧的附加险
// policyAdditionalService.remove(new QueryWrapper<PolicyAdditional>().eq("policy_biz_id", policyBizId));
// // 保单附加险列表
// List<ApiProductPlanAdditionalInfoDto> apiProductPlanAdditionalInfoDtoList = policyUpdateRequest.getApiProductPlanAdditionalInfoDtoList();
// if (CollUtil.isNotEmpty(apiProductPlanAdditionalInfoDtoList)) {
// // 转换为实体类
// List<PolicyAdditional> policyAdditionalList = apiProductPlanAdditionalInfoDtoList.stream().map(additionalDto -> {
// PolicyAdditional policyAdditional = new PolicyAdditional();
// BeanUtils.copyProperties(additionalDto, policyAdditional);
//
// policyAdditional.setPolicyBizId(policyBizId);
// policyAdditional.setPolicyNo(policyNo);
// policyAdditional.setUpdateTime(now);
// policyAdditional.setCreateTime(now);
// return policyAdditional;
// }).collect(Collectors.toList());
// // 批量插入
// policyAdditionalService.saveBatch(policyAdditionalList);
// }
policyFollow.setUpdateTime(now);
policyFollowService.updateById(policyFollow);
return true;
}
// 类型转换辅助方法
private BigDecimal parseBigDecimal(Object obj) {
if (obj == null) return null;
if (obj instanceof BigDecimal) return (BigDecimal) obj;
if (obj instanceof String) {
String str = ((String) obj).trim();
if (str.isEmpty()) return null;
try {
return new BigDecimal(str);
} catch (NumberFormatException e) {
log.warn("解析 BigDecimal 失败: {}", str);
return null;
}
}
if (obj instanceof Number) {
return BigDecimal.valueOf(((Number) obj).doubleValue());
}
return null;
}
private Integer parseInteger(Object obj) {
if (obj == null) return null;
if (obj instanceof Integer) return (Integer) obj;
if (obj instanceof String) {
String str = ((String) obj).trim();
if (str.isEmpty()) return null;
try {
return Integer.valueOf(str);
} catch (NumberFormatException e) {
log.warn("解析 Integer 失败: {}", str);
return null;
}
}
if (obj instanceof Number) {
return ((Number) obj).intValue();
}
return null;
}
private String parseString(Object obj) {
if (obj == null) return null;
if (obj instanceof String) {
String str = ((String) obj).trim();
return str.isEmpty() ? null : str;
}
return obj.toString();
}
private BigDecimal calculateTotalPaymentPremium(ApiProductPlanMainInfoDto dto) {
// 校验每期保费(必填)
BigDecimal eachIssuePremium = dto.getEachIssuePremium();
......
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