Commit 5f14a972 by jianan

新单跟进2

parent 6344a0e3
......@@ -5,19 +5,25 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.common.result.Result;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.api.dto.PolicyExcelDTO;
import com.yd.csf.api.dto.PolicyFollowDTO;
import com.yd.csf.api.listener.PolicyDataListener;
import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.dto.PolicyFollowQueryRequest;
import com.yd.csf.service.model.Customer;
import com.yd.csf.service.dto.PolicyFollowUpdateRequest;
import com.yd.csf.service.model.Policy;
import com.yd.csf.service.model.PolicyBroker;
import com.yd.csf.service.model.PolicyFollow;
import com.yd.csf.service.service.CustomerExpandService;
import com.yd.csf.service.service.PolicyBrokerService;
import com.yd.csf.service.service.PolicyFollowService;
import com.yd.user.feign.client.sysuser.ApiSysUserFeignClient;
import com.yd.csf.service.service.PolicyService;
import com.yd.csf.service.vo.PolicyFollowVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
......@@ -42,35 +48,94 @@ public class ApiPolicyFollowController {
@Resource
private PolicyFollowService policyFollowService;
@Resource
private PolicyService policyService;
@Resource
private PolicyBrokerService policyBrokerService;
@Resource
private PolicyDataListener policyDataListener;
@PostMapping("/upload/excel")
@Transactional(rollbackFor = Exception.class)
public Result<Boolean> uploadExcel(@RequestParam("file") MultipartFile file) throws IOException {
EasyExcel.read(file.getInputStream(), PolicyExcelDTO.class, policyDataListener).sheet("保单").doRead();
List<PolicyExcelDTO> dtoList = policyDataListener.getList();
log.info("导入成功,共 " + dtoList.size() + " 条数据");
List<PolicyFollow> list = convertToObj(dtoList);
// 转换为PolicyFollow对象
List<PolicyFollowDTO> list = convertToObj(dtoList);
for (PolicyFollow policyFollow : list) {
log.info("policyFollow = " + policyFollow);
List<PolicyFollow> policyFollowList = new ArrayList<>();
List<Policy> policyList = new ArrayList<>();
List<PolicyBroker> policyBrokerList = new ArrayList<>();
for (PolicyFollowDTO policyFollow : list) {
policyFollowList.add(policyFollow.getPolicyFollow());
policyBrokerList.addAll(policyFollow.getBrokerList());
policyList.add(policyFollow.getPolicy());
}
return Result.success(policyFollowService.uploadExcel(list));
policyFollowService.saveBatch(policyFollowList);
policyService.saveBatch(policyList);
policyBrokerService.saveBatch(policyBrokerList);
return Result.success(true);
}
private List<PolicyFollow> convertToObj(List<PolicyExcelDTO> list) {
List<PolicyFollow> policyFollows = new ArrayList<>();
private List<PolicyFollowDTO> convertToObj(List<PolicyExcelDTO> list) {
List<PolicyFollowDTO> policyFollowDTOList = new ArrayList<>();
for (PolicyExcelDTO policyExcelDTO : list) {
String policyNo = policyExcelDTO.getPolicyNo();
// 生成新单编号
String policyBizId = RandomStringGenerator.generateBizId16("policy");
// 转换为PolicyFollow对象
PolicyFollow policyFollow = new PolicyFollow();
BeanUtils.copyProperties(policyExcelDTO, policyFollow);
policyFollow.setPolicyBizId(RandomStringGenerator.generateBizId16("policy"));
policyFollow.setPolicyBizId(policyBizId);
// 转换为Policy对象
Policy policy = new Policy();
BeanUtils.copyProperties(policyExcelDTO, policy);
policy.setPolicyBizId(policyBizId);
// 转换为PolicyBroker对象
List<PolicyBroker> policyBrokerList = new ArrayList<>();
if (StringUtils.isNotBlank(policyExcelDTO.getBrokerName1())) {
policyBrokerList.add(getPolicyBroker(policyExcelDTO.getBrokerName1(), policyExcelDTO.getTeam1(), policyBizId, policyNo));
}
if (StringUtils.isNotBlank(policyExcelDTO.getBrokerName2())) {
policyBrokerList.add(getPolicyBroker(policyExcelDTO.getBrokerName2(), policyExcelDTO.getTeam2(), policyBizId, policyNo));
}
if (StringUtils.isNotBlank(policyExcelDTO.getBrokerName3())) {
policyBrokerList.add(getPolicyBroker(policyExcelDTO.getBrokerName3(), policyExcelDTO.getTeam3(), policyBizId, policyNo));
}
if (StringUtils.isNotBlank(policyExcelDTO.getBrokerName4())) {
policyBrokerList.add(getPolicyBroker(policyExcelDTO.getBrokerName4(), policyExcelDTO.getTeam4(), policyBizId, policyNo));
}
if (StringUtils.isNotBlank(policyExcelDTO.getBrokerName5())) {
policyBrokerList.add(getPolicyBroker(policyExcelDTO.getBrokerName5(), policyExcelDTO.getTeam5(), policyBizId, policyNo));
}
// 转换为PolicyFollowDTO对象
PolicyFollowDTO policyFollowDTO = new PolicyFollowDTO();
policyFollowDTO.setPolicyFollow(policyFollow);
policyFollowDTO.setPolicy(policy);
policyFollowDTO.setBrokerList(policyBrokerList);
policyFollowDTOList.add(policyFollowDTO);
}
return policyFollows;
return policyFollowDTOList;
}
private PolicyBroker getPolicyBroker(String brokerName, String team, String policyBizId, String policyNo) {
PolicyBroker policyBroker = new PolicyBroker();
policyBroker.setPolicyBizId(policyBizId);
policyBroker.setPolicyNo(policyNo);
policyBroker.setBrokerName(brokerName);
policyBroker.setTeam(team);
return policyBroker;
}
/**
......@@ -120,27 +185,27 @@ public class ApiPolicyFollowController {
/**
* 更新新单跟进
*
* @param customerUpdateRequest
* @param policyFollowUpdateRequest
* @return
*/
// @PostMapping("/update")
// @Operation(summary = "更新新单跟进信息")
// public Result<Boolean> updateCustomer(@RequestBody CustomerUpdateRequest customerUpdateRequest) {
// if (customerUpdateRequest == null || customerUpdateRequest.getCustomerBizId() == null) {
// throw new BusinessException(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage());
// }
// return Result.success(policyFollowService.updateCustomer(customerUpdateRequest));
// }
@PostMapping("/update")
@Operation(summary = "更新新单跟进信息")
public Result<Boolean> updatePolicyFollow(@RequestBody PolicyFollowUpdateRequest policyFollowUpdateRequest) {
if (policyFollowUpdateRequest == null || policyFollowUpdateRequest.getPolicyBizId() == null) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage());
}
return Result.success(policyFollowService.updatePolicyFollow(policyFollowUpdateRequest));
}
/**
* 根据 customerBizId 获取新单跟进(封装类)
* 根据 policyBizId 获取新单跟进(封装类)
*
* @param policyBizId
* @return
*/
@GetMapping("/get/vo")
@Operation(summary = "根据 policyBizId 获取新单跟进详情")
public Result<PolicyFollow> getPolicyFollowByPolicyBizId(@RequestParam("policyBizId") String policyBizId, HttpServletRequest request) {
public Result<PolicyFollowVO> getPolicyFollowByPolicyBizId(@RequestParam("policyBizId") String policyBizId, HttpServletRequest request) {
if (policyBizId == null) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage());
}
......@@ -151,7 +216,7 @@ public class ApiPolicyFollowController {
}
// 获取封装类
return Result.success(policyFollow);
return Result.success(policyFollowService.getPolicyFollowVO(policyFollow));
}
/**
......@@ -179,7 +244,7 @@ public class ApiPolicyFollowController {
*/
@PostMapping("/list/page/vo")
@Operation(summary = "分页获取新单跟进列表")
public Result<Page<PolicyFollow>> listPolicyFollowByPage(@RequestBody PolicyFollowQueryRequest policyFollowQueryRequest,
public Result<Page<PolicyFollowVO>> listPolicyFollowByPage(@RequestBody PolicyFollowQueryRequest policyFollowQueryRequest,
HttpServletRequest request) {
long current = policyFollowQueryRequest.getPageNo();
long size = policyFollowQueryRequest.getPageSize();
......@@ -188,8 +253,7 @@ public class ApiPolicyFollowController {
Page<PolicyFollow> policyFollowPage = policyFollowService.page(new Page<>(current, size),
policyFollowService.getQueryWrapper(policyFollowQueryRequest));
// 获取封装类
// return Result.success(policyFollowService.getPolicyFollowVOPage(policyFollowPage));
return Result.success(policyFollowPage);
return Result.success(policyFollowService.getPolicyFollowVOPage(policyFollowPage));
}
}
......@@ -3,16 +3,16 @@ package com.yd.csf.api.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
@Data
public class PolicyExcelDTO {
@ExcelProperty("序号")
private Integer id;
@ExcelProperty("状态")
@ExcelProperty("保单状态")
private String status;
@NotBlank(message = "保单号不能为空")
@ExcelProperty("保单号")
private String policyNo;
......@@ -38,13 +38,13 @@ public class PolicyExcelDTO {
private String productName;
@ExcelProperty("产品类别")
private String productType;
private String productCate;
@ExcelProperty("保险公司")
private String insurer;
@ExcelProperty("经纪公司")
private String broker;
@ExcelProperty("对账公司")
private String reconciliationCompany;
@ExcelProperty("保單持有人")
private String policyHolder;
......@@ -52,15 +52,42 @@ public class PolicyExcelDTO {
@ExcelProperty("受保人")
private String insured;
@ExcelProperty("转介人")
private String referrer;
@ExcelProperty("所属团队")
private String team;
@ExcelProperty("币种")
@ExcelProperty("保单币种")
private String currency;
@ExcelProperty("首期保费(不含徽费,预缴保费)")
private BigDecimal initialPremium;
@ExcelProperty("签单人")
private BigDecimal signer;
@ExcelProperty("转介人1")
private String brokerName1;
@ExcelProperty("所属团队1")
private String team1;
@ExcelProperty("转介人2")
private String brokerName2;
@ExcelProperty("所属团队2")
private String team2;
@ExcelProperty("转介人3")
private String brokerName3;
@ExcelProperty("所属团队3")
private String team3;
@ExcelProperty("转介人4")
private String brokerName4;
@ExcelProperty("所属团队4")
private String team4;
@ExcelProperty("转介人5")
private String brokerName5;
@ExcelProperty("所属团队5")
private String team5;
}
package com.yd.csf.api.dto;
import com.yd.csf.service.model.Policy;
import com.yd.csf.service.model.PolicyBroker;
import com.yd.csf.service.model.PolicyFollow;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 新单跟进视图
*
*/
@Data
public class PolicyFollowDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 新单跟进对象
*/
private PolicyFollow policyFollow;
/**
* 转介人
*/
private List<PolicyBroker> brokerList;
/**
* 保单信息
*/
private Policy policy;
}
package com.yd.csf.service.dao;
import com.yd.csf.service.model.PolicyBroker;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Zhang Jianan
* @description 针对表【policy_broker(保单转介人表)】的数据库操作Mapper
* @createDate 2025-09-18 15:06:03
* @Entity generator.domain.PolicyBroker
*/
public interface PolicyBrokerMapper extends BaseMapper<PolicyBroker> {
}
package com.yd.csf.service.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yd.csf.service.model.PolicyFollow;
/**
* @author Zhang Jianan
* @description 针对表【policy_follow(新单跟进表)】的数据库操作Mapper
* @createDate 2025-09-16 18:18:06
* @Entity generator.domain.PolicyFollow
*/
public interface PolicyFollowMapper extends BaseMapper<PolicyFollow> {
}
package com.yd.csf.service.dao;
import com.yd.csf.service.model.Policy;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Zhang Jianan
* @description 针对表【policy(保单表)】的数据库操作Mapper
* @createDate 2025-09-18 15:07:25
* @Entity generator.domain.Policy
*/
public interface PolicyMapper extends BaseMapper<Policy> {
}
......@@ -37,7 +37,7 @@ public class PolicyFollowQueryRequest extends PageDto implements Serializable {
* 客户名称
*/
@Schema(description = "客户名称")
private String name;
private String customerName;
/**
* 客户编号
......
package com.yd.csf.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class PolicyFollowUpdateRequest {
/**
* 新单编号
*/
@Schema(description = "新单编号", requiredMode = Schema.RequiredMode.REQUIRED)
private String policyBizId;
/**
* 新单状态
*/
@Schema(description = "新单状态 'CHECKING'-'审核中','UNDERWRITING'-'承保中','FINISHED'-'已完成','DECLINED'-'已拒绝','CANCELLED'-'已取消', 字典值: policy_follow_status")
private String status;
/**
* 客户名称
*/
@Schema(description = "客户名称")
private String customerName;
/**
* 客户编号
*/
@Schema(description = "客户编号")
private String customerBizId;
}
package com.yd.csf.service.model;
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
*/
@TableName(value ="policy")
@Data
public class Policy implements Serializable {
/**
* id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 新单跟进唯一业务ID
*/
private String policyBizId;
/**
* 保单号
*/
private String policyNo;
/**
* 用户业务id
*/
private String userBizId;
/**
* 产品代码
*/
private String productCode;
/**
* 产品名称
*/
private String productName;
/**
* 产品险种
*/
private String productCate;
/**
* 保险公司
*/
private String insurer;
/**
* 保险公司业务id
*/
private String insurerBizId;
/**
* 保單持有人
*/
private String policyHolder;
/**
* 受保人
*/
private String insured;
/**
* 供款年期
*/
private Integer paymentTerm;
/**
* 期交保费
*/
private BigDecimal paymentPremium;
/**
* 保单状态
*/
private String status;
/**
* 币种
*/
private String currency;
/**
* 首期保费(不含徽费,预缴保费)
*/
private Integer initialPremium;
/**
* 签单日期
*/
private Date signDate;
/**
* 缮发日期
*/
private Date issueDate;
/**
* 生效日期
*/
private Date effectiveDate;
/**
* 续保日期
*/
private Date renewalDate;
/**
* 是否预缴: 0-否, 1-是
*/
private Integer isPrepaid;
/**
* 预缴年期
*/
private Integer prepaidTerm;
/**
* 对账公司
*/
private String reconciliationCompany;
/**
* 对账公司业务id
*/
private String reconciliationCompanyBizId;
/**
* 通用备注
*/
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
private Integer isDeleted;
/**
* 创建人ID
*/
private String creatorId;
/**
* 更新人ID
*/
private String updaterId;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.yd.csf.service.model;
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.util.Date;
import lombok.Data;
/**
* 保单转介人表
* @TableName policy_broker
*/
@TableName(value ="policy_broker")
@Data
public class PolicyBroker implements Serializable {
/**
* id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 新单跟进唯一业务ID
*/
private String policyBizId;
/**
* 保单号
*/
private String policyNo;
/**
* 转介人名称
*/
private String brokerName;
/**
* 所属团队
*/
private String team;
/**
* 所属团队业务id
*/
private String teamBizId;
/**
* 通用备注
*/
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
private Integer isDeleted;
/**
* 创建人ID
*/
private String creatorId;
/**
* 更新人ID
*/
private String updaterId;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.yd.csf.service.model;
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")
@Data
public class PolicyFollow implements Serializable {
/**
* id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 新单跟进唯一业务ID
*/
private String policyBizId;
/**
* 保单号
*/
private String policyNo;
/**
* 用户业务id
*/
private String userBizId;
private String customerBizId;
private String customerName;
/**
* 签单日期
*/
private Date signDate;
/**
* 签单人
*/
private String signer;
/**
* 生效日期
*/
private Date effectiveDate;
/**
* 续保日期
*/
private Date renewalDate;
/**
* 供款年期
*/
private Integer paymentTerm;
/**
* 期交保费
*/
private BigDecimal paymentPremium;
/**
* 产品名称
*/
private String productName;
/**
* 保险公司
*/
private String insurer;
/**
* 保险公司业务id
*/
private String insurerBizId;
/**
* 对账公司
*/
private String reconciliationCompany;
/**
* 对账公司业务id
*/
private String reconciliationCompanyBizId;
/**
* 新单跟进状态
*/
private String status;
/**
* 保單持有人
*/
private String policyHolder;
/**
* 受保人
*/
private String insured;
/**
* 币种
*/
private String currency;
/**
* 首期保费(不含徽费,预缴保费)
*/
private Integer initialPremium;
/**
* 通用备注
*/
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
private Integer isDeleted;
/**
* 创建人ID
*/
private String creatorId;
/**
* 更新人ID
*/
private String updaterId;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.yd.csf.service.service;
import com.yd.csf.service.model.PolicyBroker;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Zhang Jianan
* @description 针对表【policy_broker(保单转介人表)】的数据库操作Service
* @createDate 2025-09-18 15:06:03
*/
public interface PolicyBrokerService extends IService<PolicyBroker> {
}
package com.yd.csf.service.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yd.csf.service.dto.PolicyFollowQueryRequest;
import com.yd.csf.service.dto.PolicyFollowUpdateRequest;
import com.yd.csf.service.model.PolicyFollow;
import com.yd.csf.service.vo.PolicyFollowVO;
/**
* @author Zhang Jianan
* @description 针对表【policy_follow(新单跟进表)】的数据库操作Service
* @createDate 2025-09-16 18:18:06
*/
public interface PolicyFollowService extends IService<PolicyFollow> {
PolicyFollow getByPolicyBizId(String policyBizId);
QueryWrapper<PolicyFollow> getQueryWrapper(PolicyFollowQueryRequest policyFollowQueryRequest);
Page<PolicyFollowVO> getPolicyFollowVOPage(Page<PolicyFollow> policyFollowPage);
Boolean updatePolicyFollow(PolicyFollowUpdateRequest policyFollowUpdateRequest);
PolicyFollowVO getPolicyFollowVO(PolicyFollow policyFollow);
}
package com.yd.csf.service.service;
import com.yd.csf.service.model.Policy;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Zhang Jianan
* @description 针对表【policy(保单表)】的数据库操作Service
* @createDate 2025-09-18 15:07:25
*/
public interface PolicyService extends IService<Policy> {
}
package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.csf.service.model.PolicyBroker;
import com.yd.csf.service.service.PolicyBrokerService;
import com.yd.csf.service.dao.PolicyBrokerMapper;
import org.springframework.stereotype.Service;
/**
* @author Zhang Jianan
* @description 针对表【policy_broker(保单转介人表)】的数据库操作Service实现
* @createDate 2025-09-18 15:06:03
*/
@Service
public class PolicyBrokerServiceImpl extends ServiceImpl<PolicyBrokerMapper, PolicyBroker>
implements PolicyBrokerService{
}
package com.yd.csf.service.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.dto.PolicyFollowQueryRequest;
import com.yd.csf.service.dto.PolicyFollowUpdateRequest;
import com.yd.csf.service.model.PolicyBroker;
import com.yd.csf.service.model.PolicyFollow;
import com.yd.csf.service.service.PolicyBrokerService;
import com.yd.csf.service.service.PolicyFollowService;
import com.yd.csf.service.dao.PolicyFollowMapper;
import com.yd.csf.service.vo.PolicyFollowVO;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author Zhang Jianan
* @description 针对表【policy_follow(新单跟进表)】的数据库操作Service实现
* @createDate 2025-09-16 18:18:06
*/
@Service
public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, PolicyFollow>
implements PolicyFollowService{
@Resource
private PolicyBrokerService policyBrokerService;
@Override
public PolicyFollow getByPolicyBizId(String policyBizId) {
return baseMapper.selectOne(new LambdaQueryWrapper<PolicyFollow>().eq(PolicyFollow::getPolicyBizId, policyBizId));
}
@Override
public QueryWrapper<PolicyFollow> getQueryWrapper(PolicyFollowQueryRequest policyFollowQueryRequest) {
QueryWrapper<PolicyFollow> queryWrapper = new QueryWrapper<>();
if (policyFollowQueryRequest == null) {
return queryWrapper;
}
String policyNo = policyFollowQueryRequest.getPolicyNo();
String customerName = policyFollowQueryRequest.getCustomerName();
String customerBizId = policyFollowQueryRequest.getCustomerBizId();
String status = policyFollowQueryRequest.getStatus();
String insurance = policyFollowQueryRequest.getInsurance();
String productCode = policyFollowQueryRequest.getProductCode();
queryWrapper.eq(ObjectUtils.isNotEmpty(policyNo), "policy_no", policyNo);
queryWrapper.eq(ObjectUtils.isNotEmpty(customerName), "customer_name", customerName);
queryWrapper.eq(ObjectUtils.isNotEmpty(customerBizId), "customer_biz_id", customerBizId);
queryWrapper.eq(ObjectUtils.isNotEmpty(status), "status", status);
queryWrapper.eq(ObjectUtils.isNotEmpty(insurance), "insurance", insurance);
queryWrapper.eq(ObjectUtils.isNotEmpty(productCode), "product_code", productCode);
// 排序
queryWrapper.orderByDesc("id");
return queryWrapper;
}
@Override
public Page<PolicyFollowVO> getPolicyFollowVOPage(Page<PolicyFollow> policyFollowPage) {
List<PolicyFollow> policyFollowList = policyFollowPage.getRecords();
Page<PolicyFollowVO> policyFollowVOPage = new Page<>(policyFollowPage.getCurrent(), policyFollowPage.getSize(), policyFollowPage.getTotal());
if (CollUtil.isEmpty(policyFollowList)) {
return policyFollowVOPage;
}
// 对象列表 => 封装对象列表
List<PolicyFollowVO> policyFollowVOList = policyFollowList.stream().map(PolicyFollowVO::objToVo).collect(Collectors.toList());
// 关联查询转介人
List<String> policyBizIdList = policyFollowVOList.stream().map(PolicyFollowVO::getPolicyBizId).collect(Collectors.toList());
if (CollUtil.isNotEmpty(policyBizIdList)) {
// 转介人业务id列表 => 转介人列表
List<PolicyBroker> policyBrokerList = policyBrokerService.list(new LambdaQueryWrapper<PolicyBroker>().in(PolicyBroker::getPolicyBizId, policyBizIdList));
// 转介人列表 => 转介人业务id列表
Map<String, List<PolicyBroker>> brokerMap = policyBrokerList.stream().collect(Collectors.groupingBy(PolicyBroker::getPolicyBizId));
// 转介人列表 => 封装转介人列表
policyFollowVOList.forEach(policyFollowVO -> {
List<PolicyBroker> brokerList = brokerMap.get(policyFollowVO.getPolicyBizId());
policyFollowVO.setBrokerList(brokerList);
});
}
return policyFollowVOPage.setRecords(policyFollowVOList);
}
@Override
public Boolean updatePolicyFollow(PolicyFollowUpdateRequest policyFollowUpdateRequest) {
if (policyFollowUpdateRequest == null || ObjectUtils.isEmpty(policyFollowUpdateRequest.getPolicyBizId())) {
throw new BusinessException(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage());
}
String policyBizId = policyFollowUpdateRequest.getPolicyBizId();
PolicyFollow policyFollow = getByPolicyBizId(policyBizId);
if (policyFollow == null) {
throw new BusinessException(ErrorCode.NOT_FOUND_ERROR.getCode(), ErrorCode.NOT_FOUND_ERROR.getMessage());
}
BeanUtils.copyProperties(policyFollowUpdateRequest, policyFollow, "policyBizId");
return updateById(policyFollow);
}
@Override
public PolicyFollowVO getPolicyFollowVO(PolicyFollow policyFollow) {
if (policyFollow == null) {
return null;
}
PolicyFollowVO policyFollowVO = PolicyFollowVO.objToVo(policyFollow);
// 关联查询转介人
QueryWrapper<PolicyBroker> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("policy_biz_id", policyFollow.getPolicyBizId());
List<PolicyBroker> policyBrokerList = policyBrokerService.list(queryWrapper);
policyFollowVO.setBrokerList(policyBrokerList);
return policyFollowVO;
}
}
package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.csf.service.model.Policy;
import com.yd.csf.service.service.PolicyService;
import com.yd.csf.service.dao.PolicyMapper;
import org.springframework.stereotype.Service;
/**
* @author Zhang Jianan
* @description 针对表【policy(保单表)】的数据库操作Service实现
* @createDate 2025-09-18 15:07:25
*/
@Service
public class PolicyServiceImpl extends ServiceImpl<PolicyMapper, Policy>
implements PolicyService{
}
package com.yd.csf.service.vo;
import com.yd.csf.service.model.Policy;
import com.yd.csf.service.model.PolicyBroker;
import com.yd.csf.service.model.PolicyFollow;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 新单跟进视图
*
*/
@Data
public class PolicyFollowVO implements Serializable {
/**
* 新单跟进唯一业务ID
*/
@Schema(description = "新单跟进唯一业务ID")
private String policyBizId;
/**
* 保单号
*/
@Schema(description = "保单号")
private String policyNo;
/**
* 用户业务id
*/
@Schema(description = "用户业务id")
private String userBizId;
/**
* 客户业务id
*/
@Schema(description = "客户业务id")
private String customerBizId;
/**
* 客户名称
*/
@Schema(description = "客户名称")
private String customerName;
/**
* 签单日期
*/
@Schema(description = "签单日期")
private Date signDate;
/**
* 签单人
*/
@Schema(description = "签单人")
private String signer;
/**
* 供款年期
*/
@Schema(description = "供款年期")
private Integer paymentTerm;
/**
* 期交保费
*/
@Schema(description = "期交保费")
private BigDecimal paymentPremium;
/**
* 产品名称
*/
@Schema(description = "产品名称")
private String productName;
/**
* 保险公司
*/
@Schema(description = "保险公司")
private String insurer;
/**
* 保险公司业务id
*/
@Schema(description = "保险公司业务id")
private String insurerBizId;
/**
* 对账公司
*/
@Schema(description = "对账公司")
private String reconciliationCompany;
/**
* 对账公司业务id
*/
@Schema(description = "对账公司业务id")
private String reconciliationCompanyBizId;
/**
* 新单跟进状态
*/
@Schema(description = "新单跟进状态 'CHECKING'-'审核中','UNDERWRITING'-'承保中','FINISHED'-'已完成','DECLINED'-'已拒绝','CANCELLED'-'已取消', 字典值: policy_follow_status")
private String status;
/**
* 保單持有人
*/
@Schema(description = "保單持有人")
private String policyHolder;
/**
* 受保人
*/
@Schema(description = "受保人")
private String insured;
/**
* 币种
*/
@Schema(description = "币种")
private String currency;
/**
* 首期保费(不含徽费,预缴保费)
*/
@Schema(description = "首期保费(不含徽费,预缴保费)")
private Integer initialPremium;
/**
* 转介人
*/
@Schema(description = "转介人")
private List<PolicyBroker> brokerList;
/**
* 保单信息
*/
// private Policy policy;
/**
* 对象转封装类
*
* @param policyFollow
* @return
*/
public static PolicyFollowVO objToVo(PolicyFollow policyFollow) {
if (policyFollow == null) {
return null;
}
PolicyFollowVO policyFollowVO = new PolicyFollowVO();
BeanUtils.copyProperties(policyFollow, policyFollowVO);
return policyFollowVO;
}
}
......@@ -14,7 +14,7 @@
<result property="appointmentBizId" column="appointment_biz_id" />
<result property="bookingStatusTip" column="booking_status_tip" />
<result property="underwritingNo" column="underwriting_no" />
<result property="policyBizId" column="policy_id" />
<result property="policyBizId" column="policy_biz_id" />
<result property="policyNo" column="policy_no" />
<result property="status" column="status" />
<result property="productCode" column="product_code" />
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="generator.mapper.PolicyFollowMapper">
<resultMap id="BaseResultMap" type="com.yd.csf.service.model.PolicyFollow">
<id property="id" column="id" />
<result property="policyBizId" column="policy_biz_id" />
<result property="policyNo" column="policy_no" />
<result property="userBizId" column="user_biz_id" />
<result property="customerBizId" column="customer_biz_id" />
<result property="customerName" column="customer_name" />
<result property="signDate" column="sign_date" />
<result property="signer" column="signer" />
<result property="effectiveDate" column="effective_date" />
<result property="renewalDate" column="renewal_date" />
<result property="paymentTerm" column="payment_term" />
<result property="paymentPremium" column="payment_premium" />
<result property="productName" column="product_name" />
<result property="insurer" column="insurer" />
<result property="insurerBizId" column="insurer_biz_id" />
<result property="reconciliationCompany" column="reconciliation_company" />
<result property="reconciliationCompanyBizId" column="reconciliation_company_biz_id" />
<result property="status" column="status" />
<result property="policyHolder" column="policy_holder" />
<result property="insured" column="insured" />
<result property="currency" column="currency" />
<result property="initialPremium" column="initial_premium" />
<result property="remark" column="remark" />
<result property="isDeleted" column="is_deleted" />
<result property="creatorId" column="creator_id" />
<result property="updaterId" column="updater_id" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
</resultMap>
<sql id="Base_Column_List">
id,policy_biz_id,policy_no,user_biz_id,customer_biz_id,customer_name,sign_date,signer,
effective_date,renewal_date,payment_term,payment_premium,product_name,
insurer,insurer_biz_id,reconciliation_company,reconciliation_company_biz_id,status,
policy_holder,insured,currency,initial_premium,remark,
is_deleted,creator_id,updater_id,create_time,update_time
</sql>
</mapper>
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