Commit f087e6d8 by jianan

新单跟进v2

parent ea3a0adc
......@@ -524,18 +524,6 @@ public class ApiPolicyFollowController {
return Result.success(policyFollowService.getPolicyFollowVO(policyFollow));
}
@GetMapping("/detail/{policyBizId}")
@Operation(summary = "根据 policyBizId 获取新单跟进聚合详情")
public Result<PolicyFollowAggregateDto> getPolicyFollowAggregate(@PathVariable String policyBizId) {
try {
PolicyFollowAggregateDto result = policyFollowService.getPolicyFollowAggregate(policyBizId);
return Result.success(result);
} catch (Exception e) {
log.error("获取新单跟进聚合详情失败, policyBizId: {}", policyBizId, e);
return Result.fail("查询失败: " + e.getMessage());
}
}
/**
* 分页获取新单跟进列表(仅管理员可用)
*
......@@ -679,4 +667,28 @@ public class ApiPolicyFollowController {
}
}
@PostMapping("/save_initial_payment")
@Operation(summary = "保存首期缴费信息")
public Result<Boolean> saveInitialPayment(@RequestBody InitialPaymentSaveRequest initialPaymentSaveRequest) {
log.info("保存首期缴费信息, policyBizId: {}", initialPaymentSaveRequest.getPolicyBizId());
Boolean result = policyFollowService.saveInitialPayment(initialPaymentSaveRequest);
return Result.success(result);
}
@PostMapping("/save_mailing_info")
@Operation(summary = "保存邮寄信息")
public Result<Boolean> saveMailingInfo(@RequestBody MailingInfoSaveRequest mailingInfoSaveRequest) {
log.info("保存邮寄信息, policyBizId: {}", mailingInfoSaveRequest.getPolicyBizId());
Boolean result = policyFollowService.saveMailingInfo(mailingInfoSaveRequest);
return Result.success(result);
}
@PostMapping("/batch_save_brokers")
@Operation(summary = "批量保存介绍人信息")
public Result<Boolean> batchSaveBrokers(@RequestBody BrokerBatchSaveRequest brokerBatchSaveRequest) {
log.info("批量保存介绍人信息, policyBizId: {}", brokerBatchSaveRequest.getPolicyBizId());
Boolean result = policyFollowService.batchSaveBrokers(brokerBatchSaveRequest);
return Result.success(result);
}
}
\ No newline at end of file
package com.yd.csf.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 介绍人批量保存请求
*/
@Data
public class BrokerBatchSaveRequest implements Serializable {
private static final long serialVersionUID = 1L;
@Schema(description = "新单跟进唯一业务ID", requiredMode = Schema.RequiredMode.REQUIRED)
private String policyBizId;
@Schema(description = "介绍人列表")
private List<BrokerInfo> brokerList;
@Data
public static class BrokerInfo implements Serializable {
private static final long serialVersionUID = 1L;
@Schema(description = "介绍人姓名")
private String brokerName;
@Schema(description = "介绍人业务id")
private String brokerBizId;
@Schema(description = "性别")
private String gender;
@Schema(description = "内部编号")
private String internalCode;
@Schema(description = "所属团队")
private String team;
@Schema(description = "团队业务id")
private String teamBizId;
@Schema(description = "分配比例")
private String brokerRatio;
@Schema(description = "备注")
private String remark;
}
}
package com.yd.csf.service.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 首期缴费保存请求
*/
@Data
public class InitialPaymentSaveRequest implements Serializable {
private static final long serialVersionUID = 1L;
@Schema(description = "新单跟进唯一业务ID", requiredMode = Schema.RequiredMode.REQUIRED)
private String policyBizId;
@Schema(description = "首期保费(不含徽费,预缴保费)")
private BigDecimal initialPremium;
@Schema(description = "保单征费")
private String policyLevy;
@Schema(description = "首期付款方式(字典)")
private String initialPaymentMethod;
@Schema(description = "首期已缴保费")
private BigDecimal initialPremiumPaid;
@Schema(description = "首期待缴保费")
private BigDecimal initialPremiumDue;
@Schema(description = "首期缴费总额")
private BigDecimal initialPremiumTotal;
@Schema(description = "缴费状态")
private String initialPaymentStatus;
@Schema(description = "最晚缴费日期", format = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date latestPaymentDate;
@Schema(description = "首期保费优惠金额")
private BigDecimal initialPremiumDiscount;
}
package com.yd.csf.service.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 邮寄信息保存请求
*/
@Data
public class MailingInfoSaveRequest implements Serializable {
private static final long serialVersionUID = 1L;
@Schema(description = "新单跟进唯一业务ID", requiredMode = Schema.RequiredMode.REQUIRED)
private String policyBizId;
@Schema(description = "寄送方式(字典值:1-自提 2-快递)")
private String mailingMethod;
@Schema(description = "快递单号")
private String deliveryNo;
@Schema(description = "经纪公司签收日期", format = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date brokerSignDate;
@Schema(description = "客户签收日期", format = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date customerSignDate;
}
......@@ -20,6 +20,18 @@ public class PolicyBrokerDto implements Serializable {
private String brokerBizId;
/**
* 性别
*/
@Schema(description = "性别")
private String gender;
/**
* 内部编号
*/
@Schema(description = "内部编号")
private String internalCode;
/**
* 所属团队
*/
@Schema(description = "所属团队")
......
......@@ -179,6 +179,22 @@ public class PolicyFollowDto implements Serializable {
@Schema(description = "首期保费(不含徽费,预缴保费)")
private BigDecimal initialPremium;
@Schema(description = "首期已缴保费")
private BigDecimal initialPremiumPaid;
@Schema(description = "首期待缴保费")
private BigDecimal initialPremiumDue;
@Schema(description = "首期缴费总额")
private BigDecimal initialPremiumTotal;
@Schema(description = "最晚缴费日期", format = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date latestPaymentDate;
@Schema(description = "首期保费优惠金额")
private BigDecimal initialPremiumDiscount;
@Schema(description = "寄送方式(字典): 1-自提 2-快递")
private String mailingMethod;
......@@ -194,16 +210,6 @@ public class PolicyFollowDto implements Serializable {
@Schema(description = "保单征费")
private String policyLevy;
@Schema(description = "首期保费已付")
private String initialPremiumPaid;
@Schema(description = "首期保费应付")
private String initialPremiumDue;
@Schema(description = "最近付款日期", format = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date latestPaymentDate;
@Schema(description = "经纪公司签收日期", format = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date brokerSignDate;
......
......@@ -6,17 +6,17 @@ import org.apache.commons.lang3.ObjectUtils;
* 新单跟进状态枚举
*/
public enum PolicyFollowStatusEnum {
PENDING_SIGN("待签单", "PENDING_SIGN"),
SIGNED("已签单", "SIGNED"),
WAITING_PAYMENT("等待汇款", "WAITING_PAYMENT"),
PREMIUM_RECONCILING("首期保费对账中", "PREMIUM_RECONCILING"),
PREMIUM_RECONCILED_UNDERWRITING("保费对账成功,核保中", "PREMIUM_RECONCILED_UNDERWRITING"),
EFFECTIVE("生效", "EFFECTIVE"),
CANCELLED("取消投保", "CANCELLED"),
DECLINED("拒保", "DECLINED"),
DELAYED_UNDERWRITING("延缓承保", "DELAYED_UNDERWRITING"),
LAPSED("失效", "LAPSED"),
CLOSED("关闭", "CLOSED"),
PENDING_SIGN("待签单", "PENDING_SIGNATURE"),
SIGNED("已签单", "SIGNED_ORDER"),
WAITING_PAYMENT("等待汇款", "WAITING_REMITTANCE"),
PREMIUM_RECONCILING("首期保费对账中", "IN_RECONCILIATION"),
PREMIUM_RECONCILED_UNDERWRITING("保费对账成功,核保中", "UNDERWRITING_PROGRESS"),
EFFECTIVE("生效", "TAKE_EFFECT"),
CANCELLED("取消投保", "CANCEL_COVERAGE"),
DECLINED("拒保", "REJECTION_INSURANCE"),
DELAYED_UNDERWRITING("延缓承保", "DELAY_UNDERWRITING"),
LAPSED("失效", "FAILURE"),
CLOSED("关闭", "CLOSE"),
;
//字典项标签(名称)
......
......@@ -42,6 +42,16 @@ public class PolicyBroker implements Serializable {
private String brokerBizId;
/**
* 性别
*/
private String gender;
/**
* 内部编号
*/
private String internalCode;
/**
* 所属团队
*/
private String team;
......
......@@ -4,16 +4,19 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import lombok.Data;
/**
* 新单跟进表
*
* @TableName policy_follow
*/
@TableName(value ="policy_follow")
@TableName(value = "policy_follow")
@Data
public class PolicyFollow implements Serializable {
/**
......@@ -278,6 +281,31 @@ public class PolicyFollow implements Serializable {
private BigDecimal initialPremium;
/**
* 首期已缴保费
*/
private BigDecimal initialPremiumPaid;
/**
* 首期待缴保费
*/
private BigDecimal initialPremiumDue;
/**
* 首期缴费总额
*/
private BigDecimal initialPremiumTotal;
/**
* 首期缴费状态
*/
private String initialPaymentStatus;
/**
* 首期保费优惠金额
*/
private BigDecimal initialPremiumDiscount;
/**
* 寄送方式 字典值:1-自提 2-快递
*/
private String mailingMethod;
......@@ -303,17 +331,7 @@ public class PolicyFollow implements Serializable {
private String policyLevy;
/**
*
*/
private String initialPremiumPaid;
/**
*
*/
private String initialPremiumDue;
/**
*
* 最晚缴费日期
*/
private Date latestPaymentDate;
......
......@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.yd.csf.service.dto.*;
import com.yd.csf.service.enums.PolicyFollowStatusEnum;
import com.yd.csf.service.model.PolicyFollow;
import com.yd.csf.service.vo.PolicyFollowDetailVO;
import com.yd.csf.service.vo.PolicyFollowVO;
import java.util.List;
......@@ -49,13 +48,24 @@ public interface PolicyFollowService extends IService<PolicyFollow> {
String getNextStatus(PolicyFollowStatusEnum policyFollowStatusEnum);
PolicyFollowAggregateDto getPolicyFollowAggregate(String policyBizId);
Page<PolicyFollowDetailVO> getPolicyFollowDetailVOList(Page<PolicyFollow> policyFollowPage);
String getCurrencyValue(String currency);
PolicyReportData queryPolicyReportData(String policyBizId);
PolicyFollow queryOneByPolicyNo(String policyNo);
/**
* 保存首期缴费信息
*/
Boolean saveInitialPayment(InitialPaymentSaveRequest initialPaymentSaveRequest);
/**
* 保存邮寄信息
*/
Boolean saveMailingInfo(MailingInfoSaveRequest mailingInfoSaveRequest);
/**
* 批量保存介绍人信息
*/
Boolean batchSaveBrokers(BrokerBatchSaveRequest brokerBatchSaveRequest);
}
package com.yd.csf.service.service.impl;
import java.math.BigDecimal;
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;
......@@ -15,25 +13,16 @@ import com.yd.auth.core.utils.SecurityUtil;
import com.yd.common.enums.CommonEnum;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.service.common.ErrorCode;
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.PolicyFollowStatusEnum;
import com.yd.csf.service.model.*;
import com.yd.csf.service.service.*;
import com.yd.csf.service.dao.PolicyFollowMapper;
import com.yd.csf.service.utils.AsyncQueryUtil;
import com.yd.csf.service.utils.GSONUtil;
import com.yd.csf.service.vo.PolicyFollowDetailVO;
import com.yd.csf.service.vo.PolicyFollowVO;
import com.yd.product.feign.client.expectedcommissionratio.ApiExpectedCommissionRatioFeignClient;
import com.yd.product.feign.client.expectedspecies.ApiExpectedSpeciesFeignClient;
import com.yd.product.feign.client.product.ApiProductFeignClient;
import com.yd.product.feign.request.expectedspecies.ApiExpectedSpeciesListRequest;
import com.yd.product.feign.response.expectedspecies.ApiExpectedSpeciesListResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
......@@ -44,11 +33,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
......@@ -459,126 +444,6 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
}
}
/**
* 异步聚合查询新单跟进详情
*/
@Override
public PolicyFollowAggregateDto getPolicyFollowAggregate(String policyBizId) {
long startTime = System.currentTimeMillis();
try {
// 1. 异步查询保单信息
CompletableFuture<Policy> policyFuture = asyncQueryUtil.asyncQuery(
() -> policyService.getOne(new QueryWrapper<Policy>().eq("policy_biz_id", policyBizId)),
"查询保单信息"
);
// 1.1 异步查询附加险列表
CompletableFuture<List<PolicyAdditional>> additionalListFuture = asyncQueryUtil.asyncQuery(
() -> policyAdditionalService.list(new QueryWrapper<PolicyAdditional>().eq("policy_biz_id", policyBizId)),
"查询附加险列表"
);
// 1.2 异步查询保单投保人
CompletableFuture<PolicyPolicyholder> policyholderFuture = asyncQueryUtil.asyncQuery(
() -> {
QueryWrapper<PolicyPolicyholder> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("policy_biz_id", policyBizId);
return policyPolicyholderService.getOne(queryWrapper);
},
"查询保单投保人"
);
// 1.3 异步查询保单受保人
CompletableFuture<PolicyInsurant> insurantListFuture = asyncQueryUtil.asyncQuery(
() -> {
QueryWrapper<PolicyInsurant> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("policy_biz_id", policyBizId);
return policyInsurantService.getOne(queryWrapper);
},
"查询保单受保人"
);
// 1.4 异步查询保单受益人
CompletableFuture<List<PolicyBeneficiary>> beneficiaryListFuture = asyncQueryUtil.asyncQuery(
() -> {
QueryWrapper<PolicyBeneficiary> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("policy_biz_id", policyBizId);
return policyBeneficiaryService.list(queryWrapper);
},
"查询保单受益人"
);
// 1.5 异步查询保单第二持有人
CompletableFuture<PolicySecondHolder> policySecondHolderFuture = asyncQueryUtil.asyncQuery(
() -> {
QueryWrapper<PolicySecondHolder> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("policy_biz_id", policyBizId);
return policySecondHolderService.getOne(queryWrapper);
},
"查询保单第二持有人"
);
// 1.6 异步查询客户业务ID
CompletableFuture<String> customerBizIdFuture = asyncQueryUtil.asyncQuery(
() -> {
QueryWrapper<PolicyFollow> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("policy_biz_id", policyBizId);
PolicyFollow policyFollow = policyFollowService.getOne(queryWrapper);
return policyFollow != null ? policyFollow.getCustomerBizId() : null;
},
"查询客户业务ID"
);
// 2. 等待所有异步任务完成(设置超时时间)
CompletableFuture.allOf(
policyFuture,
additionalListFuture,
policyholderFuture,
insurantListFuture,
beneficiaryListFuture,
policySecondHolderFuture,
customerBizIdFuture)
.get(5, TimeUnit.SECONDS); // 5秒超时
// 3. 构建聚合结果
PolicyFollowAggregateDto aggregateDto = PolicyFollowAggregateDto.convertToDto(
policyFuture.get(),
additionalListFuture.get(),
policyholderFuture.get(),
insurantListFuture.get(),
beneficiaryListFuture.get(),
policySecondHolderFuture.get(),
customerBizIdFuture.get()
);
long costTime = System.currentTimeMillis() - startTime;
log.info("新单跟进聚合查询完成, policyBizId: {}, 总耗时: {}ms", policyBizId, costTime);
return aggregateDto;
} catch (Exception e) {
log.error("新单跟进聚合查询失败, policyBizId: {}, 错误: {}", policyBizId, e.getMessage(), e);
PolicyFollowAggregateDto errorDto = new PolicyFollowAggregateDto();
errorDto.setErrorMessage("查询失败: " + e.getMessage());
return errorDto;
}
}
@Override
public Page<PolicyFollowDetailVO> getPolicyFollowDetailVOList(Page<PolicyFollow> policyFollowPage) {
List<PolicyFollow> policyFollowList = policyFollowPage.getRecords();
Page<PolicyFollowDetailVO> policyFollowDetailVOPage = new Page<>(policyFollowPage.getCurrent(), policyFollowPage.getSize(), policyFollowPage.getTotal());
if (CollUtil.isEmpty(policyFollowList)) {
return policyFollowDetailVOPage;
}
// 对象列表 => 封装对象列表
List<PolicyFollowDetailVO> policyFollowDetailVOList = policyFollowList.stream().map(PolicyFollowDetailVO::objToVo).collect(Collectors.toList());
policyFollowDetailVOPage.setRecords(policyFollowDetailVOList);
return policyFollowDetailVOPage;
}
@Override
public String getCurrencyValue(String currency) {
if (StringUtils.isBlank(currency)) {
......@@ -686,5 +551,126 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
return policyFollowFileService.save(policyFollowFile);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean saveInitialPayment(InitialPaymentSaveRequest initialPaymentSaveRequest) {
// 校验参数
if (StringUtils.isBlank(initialPaymentSaveRequest.getPolicyBizId())) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "policyBizId不能为空");
}
String policyBizId = initialPaymentSaveRequest.getPolicyBizId();
PolicyFollow policyFollow = getByPolicyBizId(policyBizId);
if (policyFollow == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "新单跟进记录不存在");
}
// 获取当前登录用户
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
String loginUserId = currentLoginUser.getId().toString();
// 更新相关字段
boolean result = this.lambdaUpdate()
.eq(PolicyFollow::getPolicyBizId, policyBizId)
.set(initialPaymentSaveRequest.getInitialPremium() != null, PolicyFollow::getInitialPremium, initialPaymentSaveRequest.getInitialPremium())
.set(initialPaymentSaveRequest.getPolicyLevy() != null, PolicyFollow::getPolicyLevy, initialPaymentSaveRequest.getPolicyLevy())
.set(initialPaymentSaveRequest.getInitialPaymentMethod() != null, PolicyFollow::getInitialPaymentMethod, initialPaymentSaveRequest.getInitialPaymentMethod())
.set(initialPaymentSaveRequest.getInitialPremiumPaid() != null, PolicyFollow::getInitialPremiumPaid, initialPaymentSaveRequest.getInitialPremiumPaid())
.set(initialPaymentSaveRequest.getInitialPremiumDue() != null, PolicyFollow::getInitialPremiumDue, initialPaymentSaveRequest.getInitialPremiumDue())
.set(initialPaymentSaveRequest.getInitialPremiumTotal() != null, PolicyFollow::getInitialPremiumTotal, initialPaymentSaveRequest.getInitialPremiumTotal())
.set(initialPaymentSaveRequest.getLatestPaymentDate() != null, PolicyFollow::getLatestPaymentDate, initialPaymentSaveRequest.getLatestPaymentDate())
.set(initialPaymentSaveRequest.getInitialPremiumDiscount() != null, PolicyFollow::getInitialPremiumDiscount, initialPaymentSaveRequest.getInitialPremiumDiscount())
.set(initialPaymentSaveRequest.getInitialPaymentStatus() != null, PolicyFollow::getInitialPaymentStatus, initialPaymentSaveRequest.getInitialPaymentStatus())
.set(PolicyFollow::getUpdaterId, loginUserId)
.set(PolicyFollow::getUpdateTime, new Date())
.update();
return result;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean saveMailingInfo(MailingInfoSaveRequest mailingInfoSaveRequest) {
// 校验参数
if (StringUtils.isBlank(mailingInfoSaveRequest.getPolicyBizId())) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "policyBizId不能为空");
}
String policyBizId = mailingInfoSaveRequest.getPolicyBizId();
PolicyFollow policyFollow = getByPolicyBizId(policyBizId);
if (policyFollow == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "新单跟进记录不存在");
}
// 获取当前登录用户
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
String loginUserId = currentLoginUser.getId().toString();
// 更新邮寄信息相关字段
boolean result = this.lambdaUpdate()
.eq(PolicyFollow::getPolicyBizId, policyBizId)
.set(mailingInfoSaveRequest.getMailingMethod() != null, PolicyFollow::getMailingMethod, mailingInfoSaveRequest.getMailingMethod())
.set(mailingInfoSaveRequest.getDeliveryNo() != null, PolicyFollow::getDeliveryNo, mailingInfoSaveRequest.getDeliveryNo())
.set(mailingInfoSaveRequest.getBrokerSignDate() != null, PolicyFollow::getBrokerSignDate, mailingInfoSaveRequest.getBrokerSignDate())
.set(mailingInfoSaveRequest.getCustomerSignDate() != null, PolicyFollow::getCustomerSignDate, mailingInfoSaveRequest.getCustomerSignDate())
.set(PolicyFollow::getUpdaterId, loginUserId)
.set(PolicyFollow::getUpdateTime, new Date())
.update();
return result;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean batchSaveBrokers(BrokerBatchSaveRequest brokerBatchSaveRequest) {
// 校验参数
if (StringUtils.isBlank(brokerBatchSaveRequest.getPolicyBizId())) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "policyBizId不能为空");
}
String policyBizId = brokerBatchSaveRequest.getPolicyBizId();
PolicyFollow policyFollow = getByPolicyBizId(policyBizId);
if (policyFollow == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "新单跟进记录不存在");
}
if (org.apache.commons.collections4.CollectionUtils.isEmpty(brokerBatchSaveRequest.getBrokerList())) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "介绍人列表不能为空");
}
// 获取当前登录用户
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
String loginUserId = currentLoginUser.getId().toString();
// 删除该 policyBizId 下的所有现有介绍人
policyBrokerService.lambdaUpdate()
.eq(PolicyBroker::getPolicyBizId, policyBizId)
.remove();
// 批量插入新的介绍人记录
List<PolicyBroker> brokerList = new ArrayList<>();
for (BrokerBatchSaveRequest.BrokerInfo brokerInfo : brokerBatchSaveRequest.getBrokerList()) {
PolicyBroker policyBroker = new PolicyBroker();
policyBroker.setPolicyBizId(policyBizId);
policyBroker.setPolicyNo(policyFollow.getPolicyNo());
policyBroker.setBrokerName(brokerInfo.getBrokerName());
policyBroker.setBrokerBizId(brokerInfo.getBrokerBizId());
policyBroker.setGender(brokerInfo.getGender());
policyBroker.setInternalCode(brokerInfo.getInternalCode());
policyBroker.setTeam(brokerInfo.getTeam());
policyBroker.setTeamBizId(brokerInfo.getTeamBizId());
policyBroker.setBrokerRatio(brokerInfo.getBrokerRatio());
policyBroker.setRemark(brokerInfo.getRemark());
policyBroker.setIsDeleted(0);
policyBroker.setCreatorId(loginUserId);
policyBroker.setCreateTime(new Date());
policyBroker.setUpdaterId(loginUserId);
policyBroker.setUpdateTime(new Date());
brokerList.add(policyBroker);
}
return policyBrokerService.saveBatch(brokerList);
}
}
......@@ -193,6 +193,26 @@ public class PolicyFollowDetailVO implements Serializable {
private Object initialPremium;
/**
* 首期已缴保费
*/
private Object initialPremiumPaid;
/**
* 首期待缴保费
*/
private Object initialPremiumDue;
/**
* 首期缴费总额
*/
private Object initialPremiumTotal;
/**
* 首期保费优惠金额
*/
private Object initialPremiumDiscount;
/**
* 寄送方式 1-自提, 2-快递
*/
private String mailingMethod;
......
......@@ -10,6 +10,8 @@
<result property="policyNo" column="policy_no" />
<result property="brokerName" column="broker_name" />
<result property="brokerBizId" column="broker_biz_id" />
<result property="gender" column="gender" />
<result property="internalCode" column="internal_code" />
<result property="team" column="team" />
<result property="teamBizId" column="team_biz_id" />
<result property="brokerRatio" column="broker_ratio" />
......@@ -22,8 +24,8 @@
</resultMap>
<sql id="Base_Column_List">
id,policy_biz_id,policy_no,broker_name,broker_biz_id,team,broker_ratio,
team_biz_id,remark,is_deleted,creator_id,updater_id,
id,policy_biz_id,policy_no,broker_name,broker_biz_id,gender,internal_code,
team,broker_ratio,team_biz_id,remark,is_deleted,creator_id,updater_id,
create_time,update_time
</sql>
</mapper>
......@@ -57,6 +57,9 @@
<result property="policyCurrency" column="policy_currency" />
<result property="initialPaymentMethod" column="initial_payment_method" />
<result property="initialPremium" column="initial_premium" />
<result property="initialPremiumTotal" column="initial_premium_total" />
<result property="initialPaymentStatus" column="initial_payment_status" />
<result property="initialPremiumDiscount" column="initial_premium_discount" />
<result property="mailingMethod" column="mailing_method" />
<result property="renewalPaymentMethod" column="renewal_payment_method" />
<result property="dividendPaymentMethod" column="dividend_payment_method" />
......@@ -88,7 +91,8 @@
product_name,product_cate,insurance_company,insurance_company_biz_id,reconciliation_company,
reconciliation_company_biz_id,status,next_status_list,policy_holder,insured,
insured_age,grace_period,is_join,policy_currency,initial_payment_method,
initial_premium,mailing_method,renewal_payment_method,dividend_payment_method,delivery_no,
initial_premium,initial_premium_total,initial_payment_status,initial_premium_discount,
mailing_method,renewal_payment_method,dividend_payment_method,delivery_no,
policy_levy,initial_premium_paid,initial_premium_due,latest_payment_date,broker_sign_date,
insurer_mailing_date,customer_sign_date,attachments,remark,is_deleted,
creator_id,updater_id,create_time,update_time
......
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