Commit bc285116 by zhangxingmin

Merge remote-tracking branch 'origin/test' into dev_zxm_wx

# Conflicts:
#	yd-csf-service/src/main/java/com/yd/csf/service/dto/PolicyDto.java
#	yd-csf-service/src/main/java/com/yd/csf/service/service/PolicyService.java
#	yd-csf-service/src/main/java/com/yd/csf/service/service/impl/PolicyServiceImpl.java
parents 247f8530 0c0237f2
...@@ -79,7 +79,7 @@ public class ApiFnaController { ...@@ -79,7 +79,7 @@ public class ApiFnaController {
@Operation(summary = "更新流程") @Operation(summary = "更新流程")
public Result<Boolean> updateFna(@RequestBody FnaUpdateRequest fnaUpdateRequest) { public Result<Boolean> updateFna(@RequestBody FnaUpdateRequest fnaUpdateRequest) {
if (fnaUpdateRequest == null || StringUtils.isBlank(fnaUpdateRequest.getFnaBizId())) { if (fnaUpdateRequest == null || StringUtils.isBlank(fnaUpdateRequest.getFnaBizId())) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), ResultCode.PARAMS_ERROR.getMessage()); throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "fnaBizId不能为空");
} }
String appointmentNo = null; String appointmentNo = null;
if (StringUtils.isNotBlank(fnaUpdateRequest.getAppointmentBizId())) { if (StringUtils.isNotBlank(fnaUpdateRequest.getAppointmentBizId())) {
...@@ -103,7 +103,7 @@ public class ApiFnaController { ...@@ -103,7 +103,7 @@ public class ApiFnaController {
@Operation(summary = "流程详情") @Operation(summary = "流程详情")
public Result<FnaVO> getFnaVOByBizId(String fnaBizId, HttpServletRequest request) { public Result<FnaVO> getFnaVOByBizId(String fnaBizId, HttpServletRequest request) {
if (StringUtils.isBlank(fnaBizId)) { if (StringUtils.isBlank(fnaBizId)) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), ResultCode.PARAMS_ERROR.getMessage()); return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "fnaBizId不能为空");
} }
// 查询数据库 // 查询数据库
Fna fna = fnaService.getByBizId(fnaBizId); Fna fna = fnaService.getByBizId(fnaBizId);
......
package com.yd.csf.api.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.common.enums.ResultCode;
import com.yd.common.result.Result;
import com.yd.csf.service.dto.*;
import com.yd.csf.service.model.PolicyAdditional;
import com.yd.csf.service.service.*;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
/**
* policy_additional接口
*
* @author jianan
* @since 2025-09-20
*/
@RestController
@RequestMapping("/policy_additional")
@Tag(name = "保单附加险接口")
public class ApiPolicyAdditionalController {
@Resource
private PolicyAdditionalService policyAdditionalService;
/**
* 创建保单附加险
*
* @param policyAdditionalAddRequest
* @param request
* @return
*/
@Operation(summary = "创建保单附加险")
@PostMapping("/add")
public Result<Map<String, Object>> addPolicyAdditional(@RequestBody PolicyAdditionalAddRequest policyAdditionalAddRequest, HttpServletRequest request) {
if (policyAdditionalAddRequest == null) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), ResultCode.PARAMS_ERROR.getMessage());
}
return Result.success(policyAdditionalService.addPolicyAdditional(policyAdditionalAddRequest));
}
/**
* 删除保单附加险
*
* @param policyAdditionalBizId
* @param request
* @return
*/
@DeleteMapping("/delete")
@Operation(summary = "删除保单附加险")
public Result<Boolean> deletePolicyAdditional(@RequestParam("policyAdditionalBizId") String policyAdditionalBizId, HttpServletRequest request) {
if (policyAdditionalBizId == null || StringUtils.isBlank(policyAdditionalBizId)) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "policyAdditionalBizId不能为空");
}
// User user = userService.getLoginUser(request);
// long id = deleteRequest.getId();
// 判断是否存在
PolicyAdditional policyAdditional = policyAdditionalService.getByBizId(policyAdditionalBizId);
if (policyAdditional == null) {
return Result.fail(ResultCode.NULL_ERROR.getCode(), ResultCode.NULL_ERROR.getMessage());
}
// 仅本人或管理员可删除
// if (!oldFna.getUserId().equals(user.getId()) && !userService.isAdmin(request)) {
// throw new BusinessException(ErrorCode.NO_AUTH_ERROR);
// }
// 操作数据库
return Result.success(policyAdditionalService.removeById(policyAdditional.getId()));
}
/**
* 更新保单附加险(产品计划)
*
* @param policyUpdateRequest
* @return
*/
@PostMapping("/update")
@Operation(summary = "更新保单附加险信息")
public Result<Boolean> updatePolicyAdditional(@RequestBody PolicyAdditionalUpdateRequest policyUpdateRequest) {
if (policyUpdateRequest == null || policyUpdateRequest.getPolicyAdditionalBizId() == null) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), ResultCode.PARAMS_ERROR.getMessage());
}
return Result.success(policyAdditionalService.updatePolicyAdditional(policyUpdateRequest));
}
/**
* 根据 policyBizId 获取保单附加险(封装类)
*
* @param policyAdditionalBizId
* @return
*/
@GetMapping("/get/vo")
@Operation(summary = "根据 policyBizId 获取保单附加险详情")
public Result<PolicyAdditional> getPolicyByPolicyAdditionalBizId(@RequestParam("policyAdditionalBizId") String policyAdditionalBizId, HttpServletRequest request) {
if (policyAdditionalBizId == null) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), ResultCode.PARAMS_ERROR.getMessage());
}
// 查询数据库
PolicyAdditional policyAdditional = policyAdditionalService.getByBizId(policyAdditionalBizId);
if (policyAdditional == null) {
return Result.fail(ResultCode.NULL_ERROR.getCode(), ResultCode.NULL_ERROR.getMessage());
}
// 获取封装类
return Result.success(policyAdditional);
}
/**
* 分页获取保单附加险列表
*
* @param PolicyQueryRequest
* @param request
* @return
*/
@PostMapping("/list")
@Operation(summary = "分页获取保单附加险列表")
public Result<Page<PolicyAdditional>> listPolicyByPage(@RequestBody PolicyAdditionalQueryRequest PolicyQueryRequest,
HttpServletRequest request) {
long current = PolicyQueryRequest.getPageNo();
long size = PolicyQueryRequest.getPageSize();
// 查询数据库
QueryWrapper<PolicyAdditional> queryWrapper = new QueryWrapper<PolicyAdditional>();
queryWrapper.eq("policy_biz_id", PolicyQueryRequest.getPolicyBizId());
queryWrapper.orderByAsc("id");
Page<PolicyAdditional> policyAdditionalPage = policyAdditionalService.page(new Page<>(current, size),
queryWrapper);
// 获取封装类
return Result.success(policyAdditionalPage);
}
}
...@@ -2,14 +2,14 @@ package com.yd.csf.api.controller; ...@@ -2,14 +2,14 @@ package com.yd.csf.api.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.common.enums.ResultCode;
import com.yd.common.result.Result; import com.yd.common.result.Result;
import com.yd.csf.service.dto.CommissionExpectedQueryRequest; import com.yd.csf.service.dao.PolicyMapper;
import com.yd.csf.service.dto.PolicyQueryRequest; 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.model.Policy;
import com.yd.csf.service.service.CommissionExpectedService; import com.yd.csf.service.service.*;
import com.yd.csf.service.service.PolicyService;
import com.yd.csf.service.vo.CommissionExpectedVO; import com.yd.csf.service.vo.CommissionExpectedVO;
import com.yd.csf.service.vo.PolicyVO; import com.yd.csf.service.vo.PolicyVO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
...@@ -34,7 +34,10 @@ public class ApiPolicyController { ...@@ -34,7 +34,10 @@ public class ApiPolicyController {
private PolicyService policyService; private PolicyService policyService;
@Resource @Resource
private CommissionExpectedService commissionExpectedService; private CommissionExpectedService commissionExpectedService;
@Resource
private PolicyPolicyholderService policyPolicyholderService;
@Resource
private PolicyInsurantService policyInsurantService;
/** /**
* 创建保单 * 创建保单
...@@ -81,19 +84,49 @@ public class ApiPolicyController { ...@@ -81,19 +84,49 @@ public class ApiPolicyController {
// } // }
/** /**
* 更新保单 * 更新保单(产品计划)
* *
* @param PolicyUpdateRequest * @param policyUpdateRequest
* @return * @return
*/ */
// @PostMapping("/update") @PostMapping("/update")
// @Operation(summary = "更新保单信息") @Operation(summary = "更新保单信息")
// public Result<Boolean> updatePolicy(@RequestBody PolicyUpdateRequest PolicyUpdateRequest) { public Result<Boolean> updatePolicy(@RequestBody PolicyUpdateRequest policyUpdateRequest) {
// if (PolicyUpdateRequest == null || PolicyUpdateRequest.getPolicyBizId() == null) { if (policyUpdateRequest == null || policyUpdateRequest.getPolicyBizId() == null) {
// return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage()); return Result.fail(ResultCode.PARAMS_ERROR.getCode(), ResultCode.PARAMS_ERROR.getMessage());
// } }
// return Result.success(PolicyService.updatePolicy(PolicyUpdateRequest)); return Result.success(policyService.updatePolicy(policyUpdateRequest));
// } }
/**
* 更新投保人信息
*
* @param policyPolicyholderUpdateRequest
* @return
*/
@PostMapping("/update_policyholder")
@Operation(summary = "更新保单投保人信息")
public Result<Boolean> updatePolicyholder(@RequestBody PolicyPolicyholderUpdateRequest policyPolicyholderUpdateRequest) {
if (policyPolicyholderUpdateRequest == null || policyPolicyholderUpdateRequest.getPolicyPolicyholderBizId() == null) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), ResultCode.PARAMS_ERROR.getMessage());
}
return Result.success(policyPolicyholderService.update(policyPolicyholderUpdateRequest));
}
/**
* 更新受保人信息
*
* @param policyInsurantUpdateRequest
* @return
*/
@PostMapping("/update_policy_insurant")
@Operation(summary = "更新保单受保人信息")
public Result<Boolean> updatePolicyInsurant(@RequestBody PolicyInsurantUpdateRequest policyInsurantUpdateRequest) {
if (policyInsurantUpdateRequest == null || policyInsurantUpdateRequest.getPolicyInsurantBizId() == null) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "policyInsurantBizId不能为空");
}
return Result.success(policyInsurantService.update(policyInsurantUpdateRequest));
}
/** /**
* 根据 policyBizId 获取保单(封装类) * 根据 policyBizId 获取保单(封装类)
......
...@@ -5,6 +5,7 @@ import com.alibaba.excel.ExcelReader; ...@@ -5,6 +5,7 @@ import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.read.metadata.ReadSheet; import com.alibaba.excel.read.metadata.ReadSheet;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.auth.core.dto.AuthUserDto; import com.yd.auth.core.dto.AuthUserDto;
import com.yd.auth.core.utils.SecurityUtil; import com.yd.auth.core.utils.SecurityUtil;
...@@ -20,6 +21,7 @@ import com.yd.csf.service.dto.*; ...@@ -20,6 +21,7 @@ import com.yd.csf.service.dto.*;
import com.yd.csf.service.enums.PolicyFollowStatusEnum; import com.yd.csf.service.enums.PolicyFollowStatusEnum;
import com.yd.csf.service.model.*; import com.yd.csf.service.model.*;
import com.yd.csf.service.service.*; import com.yd.csf.service.service.*;
import com.yd.csf.service.vo.PolicyFollowRecordVO;
import com.yd.csf.service.vo.PolicyFollowVO; import com.yd.csf.service.vo.PolicyFollowVO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
...@@ -68,6 +70,10 @@ public class ApiPolicyFollowController { ...@@ -68,6 +70,10 @@ public class ApiPolicyFollowController {
private CustomerService customerService; private CustomerService customerService;
@Resource @Resource
private ReconciliationCompanyService reconciliationCompanyService; private ReconciliationCompanyService reconciliationCompanyService;
@Resource
private PolicyFollowRecordService policyFollowRecordService;
@Resource
private PolicyFollowFileService policyFollowFileService;
@PostMapping("/upload/excel") @PostMapping("/upload/excel")
...@@ -365,13 +371,65 @@ public class ApiPolicyFollowController { ...@@ -365,13 +371,65 @@ public class ApiPolicyFollowController {
@PostMapping("/update") @PostMapping("/update")
@Operation(summary = "更新新单跟进信息") @Operation(summary = "更新新单跟进信息")
public Result<Boolean> updatePolicyFollow(@RequestBody PolicyFollowUpdateRequest policyFollowUpdateRequest) { public Result<Boolean> updatePolicyFollow(@RequestBody PolicyFollowUpdateRequest policyFollowUpdateRequest) {
if (policyFollowUpdateRequest == null || policyFollowUpdateRequest.getPolicyBizId() == null) { if (policyFollowUpdateRequest == null || StringUtils.isBlank(policyFollowUpdateRequest.getPolicyBizId())) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage()); return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "policyBizId不能为空");
} }
return Result.success(policyFollowService.updatePolicyFollow(policyFollowUpdateRequest)); return Result.success(policyFollowService.updatePolicyFollow(policyFollowUpdateRequest));
} }
/** /**
* 新单跟进上传附件
*
* @param attachmentUploadRequest
* @return
*/
@PostMapping("/attachment/upload")
@Operation(summary = "新单跟进上传附件")
public Result<Boolean> attachmentUpload(@RequestBody AttachmentUploadRequest attachmentUploadRequest) {
if (StringUtils.isBlank(attachmentUploadRequest.getPolicyBizId())) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "policyBizId不能为空");
}
return Result.success(policyFollowService.uploadAttachment(attachmentUploadRequest));
}
/**
* 新单跟进附件列表分页查询
*
* @param queryRequest
* @return
*/
@PostMapping("/attachment/list/page")
@Operation(summary = "新单跟进附件列表分页查询")
public Result<Page<PolicyFollowFile>> attachmentListPage(@RequestBody PolicyFollowFileQueryRequest queryRequest) {
if (StringUtils.isBlank(queryRequest.getPolicyBizId())) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "policyBizId不能为空");
}
long current = queryRequest.getPageNo();
long size = queryRequest.getPageSize();
QueryWrapper<PolicyFollowFile> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("policy_biz_id", queryRequest.getPolicyBizId());
queryWrapper.eq("is_deleted", 0);
Page<PolicyFollowFile> policyFollowFilePage = policyFollowFileService.page(new Page<>(current, size), queryWrapper);
return Result.success(policyFollowFilePage);
}
/**
* 删除新单跟进附件
*
* @param fileId
* @return
*/
@DeleteMapping("/attachment/delete")
@Operation(summary = "删除新单跟进附件")
public Result<Boolean> deletePolicyFollowAttachment(@RequestParam("fileId") Long fileId) {
if (fileId == null) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "fileId不能为空");
}
return Result.success(policyFollowFileService.removeById(fileId));
}
/**
* 根据 policyBizId 获取新单跟进(封装类) * 根据 policyBizId 获取新单跟进(封装类)
* *
* @param policyBizId * @param policyBizId
...@@ -380,8 +438,8 @@ public class ApiPolicyFollowController { ...@@ -380,8 +438,8 @@ public class ApiPolicyFollowController {
@GetMapping("/get/vo") @GetMapping("/get/vo")
@Operation(summary = "根据 policyBizId 获取新单跟进详情") @Operation(summary = "根据 policyBizId 获取新单跟进详情")
public Result<PolicyFollowVO> getPolicyFollowByPolicyBizId(@RequestParam("policyBizId") String policyBizId, HttpServletRequest request) { public Result<PolicyFollowVO> getPolicyFollowByPolicyBizId(@RequestParam("policyBizId") String policyBizId, HttpServletRequest request) {
if (policyBizId == null) { if (StringUtils.isBlank(policyBizId)) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage()); return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "policyBizId不能为空");
} }
// 查询数据库 // 查询数据库
PolicyFollow policyFollow = policyFollowService.getByPolicyBizId(policyBizId); PolicyFollow policyFollow = policyFollowService.getByPolicyBizId(policyBizId);
...@@ -393,6 +451,18 @@ public class ApiPolicyFollowController { ...@@ -393,6 +451,18 @@ public class ApiPolicyFollowController {
return Result.success(policyFollowService.getPolicyFollowVO(policyFollow)); 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());
}
}
/** /**
* 分页获取新单跟进列表(仅管理员可用) * 分页获取新单跟进列表(仅管理员可用)
* *
...@@ -410,7 +480,7 @@ public class ApiPolicyFollowController { ...@@ -410,7 +480,7 @@ public class ApiPolicyFollowController {
// } // }
/** /**
* 分页获取新单跟进列表(VO) * 分页获取新单跟进列表
* *
* @param policyFollowQueryRequest * @param policyFollowQueryRequest
* @param request * @param request
...@@ -418,7 +488,7 @@ public class ApiPolicyFollowController { ...@@ -418,7 +488,7 @@ public class ApiPolicyFollowController {
*/ */
@PostMapping("/list/page/vo") @PostMapping("/list/page/vo")
@Operation(summary = "分页获取新单跟进列表") @Operation(summary = "分页获取新单跟进列表")
public Result<Page<PolicyFollowVO>> listPolicyFollowByPage(@RequestBody PolicyFollowQueryRequest policyFollowQueryRequest, public Result<Page<PolicyFollow>> listPolicyFollowByPage(@RequestBody PolicyFollowQueryRequest policyFollowQueryRequest,
HttpServletRequest request) { HttpServletRequest request) {
long current = policyFollowQueryRequest.getPageNo(); long current = policyFollowQueryRequest.getPageNo();
long size = policyFollowQueryRequest.getPageSize(); long size = policyFollowQueryRequest.getPageSize();
...@@ -427,7 +497,42 @@ public class ApiPolicyFollowController { ...@@ -427,7 +497,42 @@ public class ApiPolicyFollowController {
Page<PolicyFollow> policyFollowPage = policyFollowService.page(new Page<>(current, size), Page<PolicyFollow> policyFollowPage = policyFollowService.page(new Page<>(current, size),
policyFollowService.getQueryWrapper(policyFollowQueryRequest)); policyFollowService.getQueryWrapper(policyFollowQueryRequest));
// 获取封装类 // 获取封装类
return Result.success(policyFollowService.getPolicyFollowVOPage(policyFollowPage)); return Result.success(policyFollowPage);
}
/**
* 修改跟进状态
*
* @param changePolicyFollowStatusRequest
* @param request
* @return
*/
@PostMapping("/change_status")
@Operation(summary = "修改跟进状态")
public Result<Boolean> changePolicyFollowStatus(@RequestBody ChangePolicyFollowStatusRequest changePolicyFollowStatusRequest,
HttpServletRequest request) {
if (changePolicyFollowStatusRequest == null || StringUtils.isBlank(changePolicyFollowStatusRequest.getPolicyBizId())) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "policyBizId不能为空");
}
return Result.success(policyFollowService.changePolicyFollowStatus(changePolicyFollowStatusRequest));
} }
/**
* 新单跟进状态列表查询
*
* @param policyBizId
* @return
*/
@GetMapping("/status/list")
@Operation(summary = "新单跟进状态列表查询")
public Result<List<PolicyFollowRecordVO>> getPolicyFollowRecordList(@RequestParam("policyBizId") String policyBizId) {
if (policyBizId == null) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "policyBizId不能为空");
}
QueryWrapper<PolicyFollowRecord> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("policy_biz_id", policyBizId);
queryWrapper.orderByDesc("id");
List<PolicyFollowRecord> policyFollowStatusList = policyFollowRecordService.list(queryWrapper);
return Result.success(policyFollowRecordService.getVOList(policyFollowStatusList));
}
} }
\ No newline at end of file
...@@ -24,4 +24,14 @@ public class CustomerTypeIndividualCheckCommonDto { ...@@ -24,4 +24,14 @@ public class CustomerTypeIndividualCheckCommonDto {
* 性别(字典) * 性别(字典)
*/ */
private String gender; private String gender;
/**
* 证件类型(字典)
*/
private String documentType;
/**
* 证件号码
*/
private String idNumber;
} }
...@@ -282,9 +282,9 @@ public class ApiAppointmentCheckServiceImpl implements ApiAppointmentCheckServic ...@@ -282,9 +282,9 @@ public class ApiAppointmentCheckServiceImpl implements ApiAppointmentCheckServic
if (Objects.isNull(dto.getEachIssuePremium())) { if (Objects.isNull(dto.getEachIssuePremium())) {
throw new BusinessException(tipStr+"每期保费不能为空"); throw new BusinessException(tipStr+"每期保费不能为空");
} }
if (Objects.isNull(dto.getSumInsured())) { // if (Objects.isNull(dto.getSumInsured())) {
throw new BusinessException(tipStr+"保额不能为空"); // throw new BusinessException(tipStr+"保额不能为空");
} // }
if (Objects.isNull(dto.getIsPrepay())) { if (Objects.isNull(dto.getIsPrepay())) {
throw new BusinessException(tipStr+"是否预缴保费不能为空"); throw new BusinessException(tipStr+"是否预缴保费不能为空");
} }
...@@ -326,9 +326,9 @@ public class ApiAppointmentCheckServiceImpl implements ApiAppointmentCheckServic ...@@ -326,9 +326,9 @@ public class ApiAppointmentCheckServiceImpl implements ApiAppointmentCheckServic
if (Objects.isNull(dto.getPremium())) { if (Objects.isNull(dto.getPremium())) {
throw new BusinessException(tipStr+"第"+i+"项的保费不能为空"); throw new BusinessException(tipStr+"第"+i+"项的保费不能为空");
} }
if (Objects.isNull(dto.getSumInsured())) { // if (Objects.isNull(dto.getSumInsured())) {
throw new BusinessException(tipStr+"第"+i+"项的保额不能为空"); // throw new BusinessException(tipStr+"第"+i+"项的保额不能为空");
} // }
i++; i++;
} }
return Result.success(); return Result.success();
...@@ -362,9 +362,9 @@ public class ApiAppointmentCheckServiceImpl implements ApiAppointmentCheckServic ...@@ -362,9 +362,9 @@ public class ApiAppointmentCheckServiceImpl implements ApiAppointmentCheckServic
if (Objects.isNull(dto.getPremium())) { if (Objects.isNull(dto.getPremium())) {
throw new BusinessException(tipStr+"保费不能为空"); throw new BusinessException(tipStr+"保费不能为空");
} }
if (Objects.isNull(dto.getSumInsured())) { // if (Objects.isNull(dto.getSumInsured())) {
throw new BusinessException(tipStr+"保额不能为空"); // throw new BusinessException(tipStr+"保额不能为空");
} // }
return Result.success(); return Result.success();
} }
...@@ -578,9 +578,9 @@ public class ApiAppointmentCheckServiceImpl implements ApiAppointmentCheckServic ...@@ -578,9 +578,9 @@ public class ApiAppointmentCheckServiceImpl implements ApiAppointmentCheckServic
if (CustomerTypeEnum.INDIVIDUAL.getItemValue().equals(dto.getCustomerType())) { if (CustomerTypeEnum.INDIVIDUAL.getItemValue().equals(dto.getCustomerType())) {
//客户类型为个人的字段校验 //客户类型为个人的字段校验
//校验客户类型为个人类型的公共参数字段 //校验客户类型为个人类型的公共参数字段
if (StringUtils.isBlank(dto.getName())) { // if (StringUtils.isBlank(dto.getName())) {
throw new BusinessException(tipStr+"第"+i+"项的名字不能为空"); // throw new BusinessException(tipStr+"第"+i+"项的名字不能为空");
} // }
if (StringUtils.isBlank(dto.getNameEn())) { if (StringUtils.isBlank(dto.getNameEn())) {
throw new BusinessException(tipStr+"第"+i+"项的名字-英文不能为空"); throw new BusinessException(tipStr+"第"+i+"项的名字-英文不能为空");
} }
...@@ -825,15 +825,21 @@ public class ApiAppointmentCheckServiceImpl implements ApiAppointmentCheckServic ...@@ -825,15 +825,21 @@ public class ApiAppointmentCheckServiceImpl implements ApiAppointmentCheckServic
* @return * @return
*/ */
public Result checkCustomerTypeIndividualCheckCommonDto(CustomerTypeIndividualCheckCommonDto dto,String tipStr){ public Result checkCustomerTypeIndividualCheckCommonDto(CustomerTypeIndividualCheckCommonDto dto,String tipStr){
if (StringUtils.isBlank(dto.getName())) { // if (StringUtils.isBlank(dto.getName())) {
throw new BusinessException(tipStr+"名字不能为空"); // throw new BusinessException(tipStr+"名字不能为空");
} // }
if (StringUtils.isBlank(dto.getNameEn())) { if (StringUtils.isBlank(dto.getNameEn())) {
throw new BusinessException(tipStr+"名字-英文不能为空"); throw new BusinessException(tipStr+"名字-英文不能为空");
} }
if (StringUtils.isBlank(dto.getGender())) { if (StringUtils.isBlank(dto.getGender())) {
throw new BusinessException(tipStr+"性别不能为空"); throw new BusinessException(tipStr+"性别不能为空");
} }
if (StringUtils.isBlank(dto.getDocumentType())) {
throw new BusinessException(tipStr+"证件类型不能为空");
}
if (StringUtils.isBlank(dto.getIdNumber())) {
throw new BusinessException(tipStr+"证件号码不能为空");
}
return Result.success(); return Result.success();
} }
} }
...@@ -2,7 +2,6 @@ package com.yd.csf.api.service.impl; ...@@ -2,7 +2,6 @@ package com.yd.csf.api.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage; 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.sun.org.apache.bcel.internal.generic.I2F;
import com.yd.auth.core.dto.AuthUserDto; import com.yd.auth.core.dto.AuthUserDto;
import com.yd.auth.core.utils.SecurityUtil; import com.yd.auth.core.utils.SecurityUtil;
import com.yd.common.constant.CodeGeneratorConstants; import com.yd.common.constant.CodeGeneratorConstants;
...@@ -20,15 +19,13 @@ import com.yd.csf.feign.response.appointment.ApiAppointmentAddResponse; ...@@ -20,15 +19,13 @@ import com.yd.csf.feign.response.appointment.ApiAppointmentAddResponse;
import com.yd.csf.feign.response.appointment.ApiAppointmentDetailResponse; import com.yd.csf.feign.response.appointment.ApiAppointmentDetailResponse;
import com.yd.csf.feign.response.appointment.ApiAppointmentPageResponse; import com.yd.csf.feign.response.appointment.ApiAppointmentPageResponse;
import com.yd.csf.service.enums.AppointmentStatusEnum; import com.yd.csf.service.enums.AppointmentStatusEnum;
import com.yd.csf.service.model.Appointment; import com.yd.csf.service.enums.PolicyFollowStatusEnum;
import com.yd.csf.service.model.Fna; import com.yd.csf.service.enums.PolicyStatusEnum;
import com.yd.csf.service.model.ProductPlan; import com.yd.csf.service.model.*;
import com.yd.csf.service.service.FnaService; import com.yd.csf.service.service.*;
import com.yd.csf.service.service.IAppointmentService;
import com.yd.question.feign.client.ApiQuestionnairesFeignClient; import com.yd.question.feign.client.ApiQuestionnairesFeignClient;
import com.yd.question.feign.request.ApiAnswerSaveRequest; import com.yd.question.feign.request.ApiAnswerSaveRequest;
import com.yd.question.feign.request.ApiObjectSaveRequest; import com.yd.question.feign.request.ApiObjectSaveRequest;
import com.yd.question.feign.response.ApiQuestionnairesDetailResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -37,6 +34,10 @@ import org.springframework.stereotype.Service; ...@@ -37,6 +34,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
...@@ -80,8 +81,24 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -80,8 +81,24 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
@Autowired @Autowired
private ApiQuestionnairesFeignClient apiQuestionnairesFeignClient; private ApiQuestionnairesFeignClient apiQuestionnairesFeignClient;
@Autowired
private PolicyFollowService policyFollowService;
@Resource
private PolicyService policyService;
@Resource
private PolicyPolicyholderService policyPolicyholderService;
@Resource
private PolicyInsurantService policyInsurantService;
@Resource
private PolicyBeneficiaryService policyBeneficiaryService;
@Resource
private PolicySecondHolderService policySecondHolderService;
@Resource
private PolicyAdditionalService policyAdditionalService;
/** /**
* 预约分页查询 * 预约分页查询
*
* @param request * @param request
* @return * @return
*/ */
...@@ -94,6 +111,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -94,6 +111,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
/** /**
* 预约详情(聚合信息详情) * 预约详情(聚合信息详情)
*
* @param appointmentBizId * @param appointmentBizId
* @return * @return
*/ */
...@@ -104,22 +122,22 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -104,22 +122,22 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
Result<Appointment> result = checkAppointmentIsExist(appointmentBizId); Result<Appointment> result = checkAppointmentIsExist(appointmentBizId);
Appointment appointment = result.getData(); Appointment appointment = result.getData();
ApiAppointmentInfoDto dto = new ApiAppointmentInfoDto(); ApiAppointmentInfoDto dto = new ApiAppointmentInfoDto();
BeanUtils.copyProperties(appointment,dto); BeanUtils.copyProperties(appointment, dto);
response.setApiAppointmentInfoDto(dto); response.setApiAppointmentInfoDto(dto);
//产品计划信息 //产品计划信息
Result<ApiProductPlanInfoDto> result1 = apiProductPlanService.detail(appointmentBizId,""); Result<ApiProductPlanInfoDto> result1 = apiProductPlanService.detail(appointmentBizId, "");
response.setApiProductPlanInfoDto(result1.getData()); response.setApiProductPlanInfoDto(result1.getData());
//投保人信息 //投保人信息
Result<ApiPolicyholderInfoDto> result2 = apiPolicyholderService.detail(appointmentBizId,""); Result<ApiPolicyholderInfoDto> result2 = apiPolicyholderService.detail(appointmentBizId, "");
response.setApiPolicyholderInfoDto(result2.getData()); response.setApiPolicyholderInfoDto(result2.getData());
//受保人信息 //受保人信息
Result<ApiInsurantInfoDto> result3 = apiInsurantService.detail(appointmentBizId,""); Result<ApiInsurantInfoDto> result3 = apiInsurantService.detail(appointmentBizId, "");
response.setApiInsurantInfoDto(result3.getData()); response.setApiInsurantInfoDto(result3.getData());
//受益人列表信息 //受益人列表信息
Result<List<ApiBeneficiaryInfoDto>> result4 = apiBeneficiaryService.list(appointmentBizId); Result<List<ApiBeneficiaryInfoDto>> result4 = apiBeneficiaryService.list(appointmentBizId);
response.setApiBeneficiaryInfoDtoList(result4.getData()); response.setApiBeneficiaryInfoDtoList(result4.getData());
//第二持有人信息 //第二持有人信息
Result<ApiSecondHolderInfoDto> result5 = apiSecondHolderService.detail(appointmentBizId,""); Result<ApiSecondHolderInfoDto> result5 = apiSecondHolderService.detail(appointmentBizId, "");
response.setApiSecondHolderInfoDto(result5.getData()); response.setApiSecondHolderInfoDto(result5.getData());
//预约附件信息列表 //预约附件信息列表
Result<List<ApiAppointmentFileDto>> result6 = apiAppointmentFileService.list(appointmentBizId); Result<List<ApiAppointmentFileDto>> result6 = apiAppointmentFileService.list(appointmentBizId);
...@@ -134,6 +152,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -134,6 +152,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
/** /**
* 预约主体信息详情(单个对象详情) * 预约主体信息详情(单个对象详情)
*
* @param appointmentBizId * @param appointmentBizId
* @return * @return
*/ */
...@@ -142,12 +161,13 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -142,12 +161,13 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
Result<Appointment> result = checkAppointmentIsExist(appointmentBizId); Result<Appointment> result = checkAppointmentIsExist(appointmentBizId);
Appointment appointment = result.getData(); Appointment appointment = result.getData();
ApiAppointmentInfoDto dto = new ApiAppointmentInfoDto(); ApiAppointmentInfoDto dto = new ApiAppointmentInfoDto();
BeanUtils.copyProperties(appointment,dto); BeanUtils.copyProperties(appointment, dto);
return Result.success(dto); return Result.success(dto);
} }
/** /**
* 新增预约提交 * 新增预约提交
*
* @param request * @param request
* @return * @return
*/ */
...@@ -158,32 +178,32 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -158,32 +178,32 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
apiAppointmentCheckService.checkAddRequest(request); apiAppointmentCheckService.checkAddRequest(request);
//新增预约-添加预约信息主表数据 - 预约状态为待预约 //新增预约-添加预约信息主表数据 - 预约状态为待预约
Result<Appointment> appointmentResult = addAppointmentData(request.getApiAppointmentInfoDto(),AppointmentStatusEnum.DYY.getItemValue()); Result<Appointment> appointmentResult = addAppointmentData(request.getApiAppointmentInfoDto(), AppointmentStatusEnum.DYY.getItemValue());
Appointment appointment = appointmentResult.getData(); Appointment appointment = appointmentResult.getData();
//添加产品计划信息表数据 //添加产品计划信息表数据
Result<ProductPlan> productPlanResult = apiProductPlanService.addProductPlanData(request.getApiProductPlanInfoDto(),appointment.getAppointmentBizId()); Result<ProductPlan> productPlanResult = apiProductPlanService.addProductPlanData(request.getApiProductPlanInfoDto(), appointment.getAppointmentBizId());
ProductPlan productPlan = productPlanResult.getData(); ProductPlan productPlan = productPlanResult.getData();
//批量添加产品计划-附加险信息表数据 //批量添加产品计划-附加险信息表数据
apiAdditionalService.batchAddAdditionalData(request.getApiProductPlanInfoDto(),productPlan.getPlanBizId()); apiAdditionalService.batchAddAdditionalData(request.getApiProductPlanInfoDto(), productPlan.getPlanBizId());
//添加投保人信息表数据 //添加投保人信息表数据
apiPolicyholderService.addPolicyholderData(request.getApiPolicyholderInfoDto(),appointment.getAppointmentBizId()); apiPolicyholderService.addPolicyholderData(request.getApiPolicyholderInfoDto(), appointment.getAppointmentBizId());
//添加受保人信息表数据 //添加受保人信息表数据
apiInsurantService.addInsurantData(request.getApiInsurantInfoDto(),appointment.getAppointmentBizId()); apiInsurantService.addInsurantData(request.getApiInsurantInfoDto(), appointment.getAppointmentBizId());
//批量添加受益人信息表数据 //批量添加受益人信息表数据
apiBeneficiaryService.batchAddBeneficiaryData(request.getApiBeneficiaryInfoDtoList(),appointment.getAppointmentBizId()); apiBeneficiaryService.batchAddBeneficiaryData(request.getApiBeneficiaryInfoDtoList(), appointment.getAppointmentBizId());
//添加第二持有人信息表数据 //添加第二持有人信息表数据
apiSecondHolderService.addSecondHolderData(request.getApiSecondHolderInfoDto(),appointment.getAppointmentBizId()); apiSecondHolderService.addSecondHolderData(request.getApiSecondHolderInfoDto(), appointment.getAppointmentBizId());
//新增健康问卷和预约对象关系绑定 //新增健康问卷和预约对象关系绑定
objectSaveJkQuestion(appointment.getAppointmentBizId()); objectSaveJkQuestion(appointment.getAppointmentBizId());
//预约编号和预约业务id更新到FNA表(提交待预约状态,预约信息的预约业务id和预约编号更新到Fna表的预约业务id和预约编号) //预约编号和预约业务id更新到FNA表(提交待预约状态,预约信息的预约业务id和预约编号更新到Fna表的预约业务id和预约编号)
updateFnaBizIdAndNo(appointment.getFnaBizId(),appointment.getAppointmentBizId(),appointment.getAppointmentNo()); updateFnaBizIdAndNo(appointment.getFnaBizId(), appointment.getAppointmentBizId(), appointment.getAppointmentNo());
ApiAppointmentAddResponse response = new ApiAppointmentAddResponse(); ApiAppointmentAddResponse response = new ApiAppointmentAddResponse();
response.setAppointmentBizId(appointment.getAppointmentBizId()); response.setAppointmentBizId(appointment.getAppointmentBizId());
return Result.success(response); return Result.success(response);
...@@ -191,9 +211,11 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -191,9 +211,11 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
/** /**
* 提交待预约状态,预约信息更新到Fna表的预约业务id和预约编号 * 提交待预约状态,预约信息更新到Fna表的预约业务id和预约编号
*
* @return * @return
*/ */
public Result updateFnaBizIdAndNo(String fnaBizId,String appointmentBizId,String appointmentNo) { @Transactional(rollbackFor = Exception.class)
public Result updateFnaBizIdAndNo(String fnaBizId, String appointmentBizId, String appointmentNo) {
Fna fna = fnaService.queryOne(fnaBizId); Fna fna = fnaService.queryOne(fnaBizId);
if (!Objects.isNull(fna)) { if (!Objects.isNull(fna)) {
//预约编号 //预约编号
...@@ -206,41 +228,43 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -206,41 +228,43 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
/** /**
* 新增预约暂存 * 新增预约暂存
*
* @param request * @param request
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Result addStorage(ApiAppointmentAddStorageRequest request) { public Result addStorage(ApiAppointmentAddStorageRequest request) {
if (Objects.isNull(request.getApiAppointmentInfoDto())) { if (Objects.isNull(request.getApiAppointmentInfoDto())) {
request.setApiAppointmentInfoDto(new ApiAppointmentInfoDto()); request.setApiAppointmentInfoDto(new ApiAppointmentInfoDto());
} }
//校验预约信息-客户和fna入参 //校验预约信息-客户和fna入参
apiAppointmentCheckService.checkCustomerAndFna(request.getApiAppointmentInfoDto(),"预约信息-"); apiAppointmentCheckService.checkCustomerAndFna(request.getApiAppointmentInfoDto(), "预约信息-");
//新增预约暂存-添加预约信息主表数据为暂存状态 //新增预约暂存-添加预约信息主表数据为暂存状态
Result<Appointment> appointmentResult = addAppointmentData(request.getApiAppointmentInfoDto(), AppointmentStatusEnum.ZC.getItemValue()); Result<Appointment> appointmentResult = addAppointmentData(request.getApiAppointmentInfoDto(), AppointmentStatusEnum.ZC.getItemValue());
Appointment appointment = appointmentResult.getData(); Appointment appointment = appointmentResult.getData();
//添加产品计划信息表数据 //添加产品计划信息表数据
Result<ProductPlan> productPlanResult = apiProductPlanService.addProductPlanData(request.getApiProductPlanInfoDto(),appointment.getAppointmentBizId()); Result<ProductPlan> productPlanResult = apiProductPlanService.addProductPlanData(request.getApiProductPlanInfoDto(), appointment.getAppointmentBizId());
ProductPlan productPlan = productPlanResult.getData(); ProductPlan productPlan = productPlanResult.getData();
//批量添加产品计划-附加险信息表数据 //批量添加产品计划-附加险信息表数据
apiAdditionalService.batchAddAdditionalData(request.getApiProductPlanInfoDto(),productPlan.getPlanBizId()); apiAdditionalService.batchAddAdditionalData(request.getApiProductPlanInfoDto(), productPlan.getPlanBizId());
//添加投保人信息表数据 //添加投保人信息表数据
apiPolicyholderService.addPolicyholderData(request.getApiPolicyholderInfoDto(),appointment.getAppointmentBizId()); apiPolicyholderService.addPolicyholderData(request.getApiPolicyholderInfoDto(), appointment.getAppointmentBizId());
//添加受保人信息表数据 //添加受保人信息表数据
apiInsurantService.addInsurantData(request.getApiInsurantInfoDto(),appointment.getAppointmentBizId()); apiInsurantService.addInsurantData(request.getApiInsurantInfoDto(), appointment.getAppointmentBizId());
//批量添加受益人信息表数据 //批量添加受益人信息表数据
apiBeneficiaryService.batchAddBeneficiaryData(request.getApiBeneficiaryInfoDtoList(),appointment.getAppointmentBizId()); apiBeneficiaryService.batchAddBeneficiaryData(request.getApiBeneficiaryInfoDtoList(), appointment.getAppointmentBizId());
//添加第二持有人信息表数据 //添加第二持有人信息表数据
apiSecondHolderService.addSecondHolderData(request.getApiSecondHolderInfoDto(),appointment.getAppointmentBizId()); apiSecondHolderService.addSecondHolderData(request.getApiSecondHolderInfoDto(), appointment.getAppointmentBizId());
//预约编号和预约业务id更新到FNA表(提交待预约状态,预约信息的预约业务id和预约编号更新到Fna表的预约业务id和预约编号) //预约编号和预约业务id更新到FNA表(提交待预约状态,预约信息的预约业务id和预约编号更新到Fna表的预约业务id和预约编号)
updateFnaBizIdAndNo(appointment.getFnaBizId(),appointment.getAppointmentBizId(),appointment.getAppointmentNo()); updateFnaBizIdAndNo(appointment.getFnaBizId(), appointment.getAppointmentBizId(), appointment.getAppointmentNo());
//新增健康问卷和预约对象关系绑定 //新增健康问卷和预约对象关系绑定
objectSaveJkQuestion(appointment.getAppointmentBizId()); objectSaveJkQuestion(appointment.getAppointmentBizId());
...@@ -250,10 +274,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -250,10 +274,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
/** /**
* 新增预约-添加预约信息主表数据 * 新增预约-添加预约信息主表数据
*
* @param dto * @param dto
* @return * @return
*/ */
public Result<Appointment> addAppointmentData(ApiAppointmentInfoDto dto,Integer status) { @Transactional(rollbackFor = Exception.class)
public Result<Appointment> addAppointmentData(ApiAppointmentInfoDto dto, Integer status) {
if (Objects.isNull(dto)) { if (Objects.isNull(dto)) {
//为空设置,方便新建暂存公用方法 //为空设置,方便新建暂存公用方法
dto = new ApiAppointmentInfoDto(); dto = new ApiAppointmentInfoDto();
...@@ -261,7 +287,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -261,7 +287,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
//获取Security上下文当前用户的登录信息 //获取Security上下文当前用户的登录信息
AuthUserDto authUserDto = SecurityUtil.getCurrentLoginUser(); AuthUserDto authUserDto = SecurityUtil.getCurrentLoginUser();
Appointment appointment = new Appointment(); Appointment appointment = new Appointment();
BeanUtils.copyProperties(dto,appointment); BeanUtils.copyProperties(dto, appointment);
//生成预约信息主表唯一业务ID //生成预约信息主表唯一业务ID
appointment.setAppointmentBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_APPOINTMENT.getCode())); appointment.setAppointmentBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_APPOINTMENT.getCode()));
//生成预约编号 //生成预约编号
...@@ -275,10 +301,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -275,10 +301,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
/** /**
* 编辑预约提交 (聚合信息编辑预约提交) * 编辑预约提交 (聚合信息编辑预约提交)
*
* @param request * @param request
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Result edit(ApiAppointmentEditRequest request) { public Result edit(ApiAppointmentEditRequest request) {
//编辑预约入参字段校验(非库校验) //编辑预约入参字段校验(非库校验)
apiAppointmentCheckService.checkEditRequest(request); apiAppointmentCheckService.checkEditRequest(request);
...@@ -289,7 +317,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -289,7 +317,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
//校验预约信息是否存在 //校验预约信息是否存在
Result<Appointment> result = checkAppointmentIsExist(request.getApiAppointmentInfoDto().getAppointmentBizId()); Result<Appointment> result = checkAppointmentIsExist(request.getApiAppointmentInfoDto().getAppointmentBizId());
appointmentCheck = result.getData(); appointmentCheck = result.getData();
if (AppointmentStatusEnum.ZC.getItemValue().equals(appointmentCheck.getStatus())){ if (AppointmentStatusEnum.ZC.getItemValue().equals(appointmentCheck.getStatus())) {
//当前为暂存状态——>提交更新为待预约状态 //当前为暂存状态——>提交更新为待预约状态
status = AppointmentStatusEnum.DYY.getItemValue(); status = AppointmentStatusEnum.DYY.getItemValue();
} }
...@@ -305,31 +333,31 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -305,31 +333,31 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
} }
//编辑预约提交-编辑预约信息主表数据 //编辑预约提交-编辑预约信息主表数据
Result<Appointment> appointmentResult = editAppointmentData(request.getApiAppointmentInfoDto(),status); Result<Appointment> appointmentResult = editAppointmentData(request.getApiAppointmentInfoDto(), status);
Appointment appointment = appointmentResult.getData(); Appointment appointment = appointmentResult.getData();
//编辑产品计划信息表数据 //编辑产品计划信息表数据
Result<ProductPlan> productPlanResult = apiProductPlanService.editProductPlanData(request.getApiProductPlanInfoDto(),appointment.getAppointmentBizId()); Result<ProductPlan> productPlanResult = apiProductPlanService.editProductPlanData(request.getApiProductPlanInfoDto(), appointment.getAppointmentBizId());
ProductPlan productPlan = productPlanResult.getData(); ProductPlan productPlan = productPlanResult.getData();
//批量编辑产品计划-附加险信息表数据 //批量编辑产品计划-附加险信息表数据
apiAdditionalService.batchEditAdditionalData(request.getApiProductPlanInfoDto(),productPlan.getPlanBizId()); apiAdditionalService.batchEditAdditionalData(request.getApiProductPlanInfoDto(), productPlan.getPlanBizId());
//编辑投保人信息表数据 //编辑投保人信息表数据
apiPolicyholderService.editPolicyholderData(request.getApiPolicyholderInfoDto(),appointment.getAppointmentBizId()); apiPolicyholderService.editPolicyholderData(request.getApiPolicyholderInfoDto(), appointment.getAppointmentBizId());
//编辑受保人信息表数据 //编辑受保人信息表数据
apiInsurantService.editInsurantData(request.getApiInsurantInfoDto(),appointment.getAppointmentBizId()); apiInsurantService.editInsurantData(request.getApiInsurantInfoDto(), appointment.getAppointmentBizId());
//批量编辑受益人信息表数据 //批量编辑受益人信息表数据
apiBeneficiaryService.batchEditBeneficiaryData(request.getApiBeneficiaryInfoDtoList(),appointment.getAppointmentBizId()); apiBeneficiaryService.batchEditBeneficiaryData(request.getApiBeneficiaryInfoDtoList(), appointment.getAppointmentBizId());
//编辑第二持有人信息表数据 //编辑第二持有人信息表数据
apiSecondHolderService.editSecondHolderData(request.getApiSecondHolderInfoDto(),appointment.getAppointmentBizId()); apiSecondHolderService.editSecondHolderData(request.getApiSecondHolderInfoDto(), appointment.getAppointmentBizId());
if (!Objects.isNull(status) && AppointmentStatusEnum.DYY.getItemValue().equals(status)) { if (!Objects.isNull(status) && AppointmentStatusEnum.DYY.getItemValue().equals(status)) {
//当前为暂存状态——>提交更新为待预约状态需要更新Fna表的编号和业务id完成绑定关联 //当前为暂存状态——>提交更新为待预约状态需要更新Fna表的编号和业务id完成绑定关联
//预约编号和预约业务id更新到FNA表(提交待预约状态,预约信息的预约业务id和预约编号更新到Fna表的预约业务id和预约编号) //预约编号和预约业务id更新到FNA表(提交待预约状态,预约信息的预约业务id和预约编号更新到Fna表的预约业务id和预约编号)
updateFnaBizIdAndNo(appointment.getFnaBizId(),appointment.getAppointmentBizId(),appointment.getAppointmentNo()); updateFnaBizIdAndNo(appointment.getFnaBizId(), appointment.getAppointmentBizId(), appointment.getAppointmentNo());
} }
//远程调用-问卷-答题提交接口 //远程调用-问卷-答题提交接口
...@@ -346,10 +374,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -346,10 +374,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
/** /**
* 确定预约时间提交 (流程流转到新单跟进) * 确定预约时间提交 (流程流转到新单跟进)
*
* @param request * @param request
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Result editConfirmTime(ApiAppointmentEditConfirmTimeRequest request) { public Result editConfirmTime(ApiAppointmentEditConfirmTimeRequest request) {
//校验预约信息是否存在 //校验预约信息是否存在
Result<Appointment> result = checkAppointmentIsExist(request.getAppointmentBizId()); Result<Appointment> result = checkAppointmentIsExist(request.getAppointmentBizId());
...@@ -359,7 +389,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -359,7 +389,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
if (AppointmentStatusEnum.ZC.getItemValue().equals(appointment.getStatus())) { if (AppointmentStatusEnum.ZC.getItemValue().equals(appointment.getStatus())) {
//暂存 //暂存
throw new BusinessException("当前为暂存状态,不能提交到新单跟进!"); throw new BusinessException("当前为暂存状态,不能提交到新单跟进!");
}else { } else {
//其他状态 //其他状态
throw new BusinessException("你已经提交到新单跟进,不能再次提交!"); throw new BusinessException("你已经提交到新单跟进,不能再次提交!");
} }
...@@ -368,31 +398,218 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -368,31 +398,218 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
//流转到新单跟进(这里的预约状态为待签署) //流转到新单跟进(这里的预约状态为待签署)
appointment.setStatus(AppointmentStatusEnum.DQS.getItemValue()); appointment.setStatus(AppointmentStatusEnum.DQS.getItemValue());
iAppointmentService.saveOrUpdate(appointment); iAppointmentService.saveOrUpdate(appointment);
//确定预约时间提交 (流程流转到新单跟进) - 新增新单跟进记录
savePolicyFollow(appointment);
return Result.success();
}
/**
* 确定预约时间提交 (流程流转到新单跟进) - 新增新单跟进记录
*
* @return
*/
@Transactional(rollbackFor = Exception.class)
public Result savePolicyFollow(Appointment appointment) {
Result<ApiAppointmentDetailResponse> result = detail(appointment.getAppointmentBizId());
ApiAppointmentDetailResponse response = result.getData();
ApiProductPlanMainInfoDto apiProductPlanMainInfoDto = null;
List<ApiProductPlanAdditionalInfoDto> apiProductPlanAdditionalInfoDtoList = new ArrayList<>();
ApiInsurantInfoDto apiInsurantInfoDto = null;
String policyTransfer = null;
if (!Objects.isNull(response)
&& !Objects.isNull(response.getApiProductPlanInfoDto())
&& !Objects.isNull(response.getApiProductPlanInfoDto().getApiProductPlanMainInfoDto())) {
apiProductPlanMainInfoDto = response.getApiProductPlanInfoDto().getApiProductPlanMainInfoDto();
//转保声明选项(字典)
policyTransfer = response.getApiAppointmentInfoDto().getPolicyTransfer();
// 产品计划附加险列表
apiProductPlanAdditionalInfoDtoList = response.getApiProductPlanInfoDto().getApiProductPlanAdditionalInfoDtoList();
}
if (!Objects.isNull(response)
&& !Objects.isNull(response.getApiInsurantInfoDto())) {
apiInsurantInfoDto = response.getApiInsurantInfoDto();
}
PolicyFollow follow = new PolicyFollow();
String policyBizId = RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_POLICY.getCode());
//新单跟进唯一业务ID
follow.setPolicyBizId(policyBizId);
follow.setAppointmentBizId(appointment.getAppointmentBizId());
follow.setAppointmentNo(appointment.getAppointmentNo());
//客户信息表唯一业务ID
follow.setCustomerBizId(appointment.getCustomerBizId());
//待跟进
follow.setStatus(PolicyFollowStatusEnum.FOLLOW_UP.getItemValue());
follow.setNextStatusList(policyFollowService.getNextStatus(PolicyFollowStatusEnum.CHECKING));
//TODO 保险公司业务id
// follow.setInsurerBizId();
//TODO 期交保费
// follow.setPaymentPremium();
//TODO 保單持有人
// follow.setPolicyHolder();
//TODO 预缴年期
// follow.setPrepaidTerm();
//TODO 产品类别
// follow.setProductCate();
//TODO 对账公司
// follow.setReconciliationCompany();
//TODO 对账公司业务id
// follow.setReconciliationCompanyBizId();
//TODO 续保日期
// follow.setRenewalDate();
// 用户业务员id
follow.setUserBizId(appointment.getCreatorId());
if (!Objects.isNull(apiInsurantInfoDto)) {
//受保人
follow.setInsured(apiInsurantInfoDto.getName());
}
if (!Objects.isNull(apiProductPlanMainInfoDto)) {
//币种
follow.setCurrency(apiProductPlanMainInfoDto.getCurrency());
//生效日期
if (!Objects.isNull(apiProductPlanMainInfoDto.getPolicyEffectiveDate())) {
follow.setEffectiveDate(Date.from(apiProductPlanMainInfoDto.getPolicyEffectiveDate().atZone(ZoneId.systemDefault()).toInstant()));
}
//首期保费(不含徽费,预缴保费)每期保费
follow.setInitialPremium(apiProductPlanMainInfoDto.getEachIssuePremium());
//保险公司
follow.setInsurer(apiProductPlanMainInfoDto.getCompanyName());
//是否预缴
follow.setIsPrepaid(apiProductPlanMainInfoDto.getIsPrepay());
//供款年期
if (StringUtils.isNotBlank(apiProductPlanMainInfoDto.getPaymentTerm())) {
follow.setPaymentTerm(Integer.getInteger(apiProductPlanMainInfoDto.getPaymentTerm()));
}
//产品名称
follow.setProductName(apiProductPlanMainInfoDto.getProductName());
}
policyFollowService.saveOrUpdate(follow);
// 同步保存保单(产品计划)
savePolicy(follow, apiProductPlanMainInfoDto, policyBizId, policyTransfer);
// 同步保存保单产品计划附加险
savePolicyAdditional(apiProductPlanAdditionalInfoDtoList, policyBizId);
// 同步保存保单投保人
savePolicyPolicyholder(apiInsurantInfoDto, policyBizId);
// 同步保存保单受保人
savePolicyInsurant(apiInsurantInfoDto, policyBizId);
// 同步保存保单受益人
savePolicyBeneficiary(apiInsurantInfoDto, policyBizId);
// 同步保存保单第二持有人
savePolicySecondHolder(apiInsurantInfoDto, policyBizId);
// 同步问卷信息
savePolicyQuestionnaire(apiInsurantInfoDto, policyBizId);
return Result.success(); return Result.success();
} }
private void savePolicyQuestionnaire(ApiInsurantInfoDto apiInsurantInfoDto, String policyBizId) {
//远程调用-问卷-答题提交接口
ApiAnswerSaveRequest answerSaveRequest = new ApiAnswerSaveRequest();
answerSaveRequest.setObjectBizId(policyBizId);
answerSaveRequest.setQuestionnaireBizId("questionnaires_1001");
apiQuestionnairesFeignClient.answerSave(answerSaveRequest);
}
private void savePolicyAdditional(List<ApiProductPlanAdditionalInfoDto> apiProductPlanAdditionalInfoDtoList, String policyBizId) {
if (!CollectionUtils.isEmpty(apiProductPlanAdditionalInfoDtoList)) {
apiProductPlanAdditionalInfoDtoList.forEach(apiProductPlanAdditionalInfoDto -> {
PolicyAdditional policyAdditional = new PolicyAdditional();
BeanUtils.copyProperties(apiProductPlanAdditionalInfoDto, policyAdditional);
policyAdditional.setId(null);
policyAdditional.setPolicyBizId(policyBizId);
policyAdditional.setPolicyAdditionalBizId(RandomStringGenerator.generateBizId16("policy_additional"));
policyAdditionalService.saveOrUpdate(policyAdditional);
});
}
}
private boolean savePolicySecondHolder(ApiInsurantInfoDto apiInsurantInfoDto, String policyBizId) {
PolicySecondHolder policySecondHolder = new PolicySecondHolder();
BeanUtils.copyProperties(apiInsurantInfoDto, policySecondHolder);
policySecondHolder.setId(null);
policySecondHolder.setPolicyBizId(policyBizId);
policySecondHolder.setPolicySecondHolderBizId(RandomStringGenerator.generateBizId16("policy_second_holder"));
return policySecondHolderService.saveOrUpdate(policySecondHolder);
}
private boolean savePolicyBeneficiary(ApiInsurantInfoDto apiInsurantInfoDto, String policyBizId) {
PolicyBeneficiary policyBeneficiary = new PolicyBeneficiary();
BeanUtils.copyProperties(apiInsurantInfoDto, policyBeneficiary);
policyBeneficiary.setId(null);
policyBeneficiary.setPolicyBizId(policyBizId);
policyBeneficiary.setPolicyBeneficiaryBizId(RandomStringGenerator.generateBizId16("policy_beneficiary"));
return policyBeneficiaryService.saveOrUpdate(policyBeneficiary);
}
private boolean savePolicyInsurant(ApiInsurantInfoDto apiInsurantInfoDto, String policyBizId) {
PolicyInsurant policyInsurant = new PolicyInsurant();
BeanUtils.copyProperties(apiInsurantInfoDto, policyInsurant);
policyInsurant.setId(null);
policyInsurant.setPolicyBizId(policyBizId);
policyInsurant.setPolicyInsurantBizId(RandomStringGenerator.generateBizId16("policy_insurant"));
return policyInsurantService.saveOrUpdate(policyInsurant);
}
private boolean savePolicyPolicyholder(ApiInsurantInfoDto apiInsurantInfoDto, String policyBizId) {
PolicyPolicyholder policyPolicyholder = new PolicyPolicyholder();
BeanUtils.copyProperties(apiInsurantInfoDto, policyPolicyholder);
policyPolicyholder.setId(null);
policyPolicyholder.setPolicyBizId(policyBizId);
policyPolicyholder.setPolicyPolicyholderBizId(RandomStringGenerator.generateBizId16("policy_policyholder"));
return policyPolicyholderService.saveOrUpdate(policyPolicyholder);
}
private boolean savePolicy(PolicyFollow policyFollow, ApiProductPlanMainInfoDto apiProductPlanMainInfoDto, String policyBizId, String policyTransfer) {
// 同步保存保单(产品计划)
Policy policy = new Policy();
BeanUtils.copyProperties(policyFollow, policy);
BeanUtils.copyProperties(apiProductPlanMainInfoDto, policy);
policy.setId(null);
policy.setPolicyBizId(policyBizId);
policy.setPlanBizId(apiProductPlanMainInfoDto.getPlanBizId());
policy.setStatus(PolicyStatusEnum.INFORCE.getItemValue());
//转保声明选项(字典)
policy.setPolicyTransfer(policyTransfer);
policy.setCreateTime(new Date());
policy.setUpdateTime(new Date());
return policyService.saveOrUpdate(policy);
}
/** /**
* 单个对象编辑-编辑预约主体信息 * 单个对象编辑-编辑预约主体信息
*
* @param apiAppointmentInfoDto * @param apiAppointmentInfoDto
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Result singleEdit(ApiAppointmentInfoDto apiAppointmentInfoDto) { public Result singleEdit(ApiAppointmentInfoDto apiAppointmentInfoDto) {
//编辑预约入参字段校验 - 预约信息字段校验 //编辑预约入参字段校验 - 预约信息字段校验
apiAppointmentCheckService.checkEditApiAppointmentInfoDto(apiAppointmentInfoDto); apiAppointmentCheckService.checkEditApiAppointmentInfoDto(apiAppointmentInfoDto);
//编辑预约-编辑预约信息主表数据 //编辑预约-编辑预约信息主表数据
editAppointmentData(apiAppointmentInfoDto,null); editAppointmentData(apiAppointmentInfoDto, null);
return Result.success(); return Result.success();
} }
/** /**
* 编辑预约-编辑预约信息主表数据 * 编辑预约-编辑预约信息主表数据
*
* @param dto * @param dto
* @return * @return
*/ */
public Result<Appointment> editAppointmentData(ApiAppointmentInfoDto dto,Integer status) { @Transactional(rollbackFor = Exception.class)
public Result<Appointment> editAppointmentData(ApiAppointmentInfoDto dto, Integer status) {
if (Objects.isNull(dto)) { if (Objects.isNull(dto)) {
//预约信息对象不能为空 //预约信息对象不能为空
throw new BusinessException("预约信息对象不能为空"); throw new BusinessException("预约信息对象不能为空");
...@@ -401,7 +618,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -401,7 +618,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
Result<Appointment> result = checkAppointmentIsExist(dto.getAppointmentBizId()); Result<Appointment> result = checkAppointmentIsExist(dto.getAppointmentBizId());
Appointment appointment = result.getData(); Appointment appointment = result.getData();
BeanUtils.copyProperties(dto,appointment); BeanUtils.copyProperties(dto, appointment);
if (!Objects.isNull(status)) { if (!Objects.isNull(status)) {
//不为空设置状态 //不为空设置状态
appointment.setStatus(status); appointment.setStatus(status);
...@@ -412,10 +629,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -412,10 +629,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
/** /**
* 预约编辑关联FNA * 预约编辑关联FNA
*
* @param request * @param request
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Result editFna(ApiAppointmentEditFnaRequest request) { public Result editFna(ApiAppointmentEditFnaRequest request) {
//校验预约信息是否存在 //校验预约信息是否存在
Result<Appointment> result = checkAppointmentIsExist(request.getAppointmentBizId()); Result<Appointment> result = checkAppointmentIsExist(request.getAppointmentBizId());
...@@ -430,10 +649,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -430,10 +649,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
/** /**
* 预约解除关联FNA * 预约解除关联FNA
*
* @param request * @param request
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Result removeFna(ApiAppointmentRemoveFnaRequest request) { public Result removeFna(ApiAppointmentRemoveFnaRequest request) {
//校验预约信息是否存在 //校验预约信息是否存在
Result<Appointment> result = checkAppointmentIsExist(request.getAppointmentBizId()); Result<Appointment> result = checkAppointmentIsExist(request.getAppointmentBizId());
...@@ -448,10 +669,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -448,10 +669,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
/** /**
* 预约编辑关联计划书 * 预约编辑关联计划书
*
* @param request * @param request
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Result editProposal(ApiAppointmentEditProposalRequest request) { public Result editProposal(ApiAppointmentEditProposalRequest request) {
//校验预约信息是否存在 //校验预约信息是否存在
Result<Appointment> result = checkAppointmentIsExist(request.getAppointmentBizId()); Result<Appointment> result = checkAppointmentIsExist(request.getAppointmentBizId());
...@@ -466,10 +689,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -466,10 +689,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
/** /**
* 预约解除关联计划书 * 预约解除关联计划书
*
* @param request * @param request
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Result removeProposal(ApiAppointmentRemoveProposalRequest request) { public Result removeProposal(ApiAppointmentRemoveProposalRequest request) {
//校验预约信息是否存在 //校验预约信息是否存在
Result<Appointment> result = checkAppointmentIsExist(request.getAppointmentBizId()); Result<Appointment> result = checkAppointmentIsExist(request.getAppointmentBizId());
...@@ -484,10 +709,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -484,10 +709,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
/** /**
* 预约编辑转保声明 * 预约编辑转保声明
*
* @param request * @param request
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Result editPolicyTransfer(ApiPolicyTransferRequest request) { public Result editPolicyTransfer(ApiPolicyTransferRequest request) {
//校验预约信息是否存在 //校验预约信息是否存在
Result<Appointment> result = checkAppointmentIsExist(request.getAppointmentBizId()); Result<Appointment> result = checkAppointmentIsExist(request.getAppointmentBizId());
...@@ -500,10 +727,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -500,10 +727,12 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
/** /**
* 删除预约信息 * 删除预约信息
*
* @param appointmentBizId * @param appointmentBizId
* @return * @return
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Result del(String appointmentBizId) { public Result del(String appointmentBizId) {
//校验预约信息是否存在 //校验预约信息是否存在
Result<Appointment> result = checkAppointmentIsExist(appointmentBizId); Result<Appointment> result = checkAppointmentIsExist(appointmentBizId);
...@@ -514,8 +743,10 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -514,8 +743,10 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
/** /**
* 新增健康问卷和预约对象关系绑定 * 新增健康问卷和预约对象关系绑定
*
* @return * @return
*/ */
@Transactional(rollbackFor = Exception.class)
public Result objectSaveJkQuestion(String appointmentBizId) { public Result objectSaveJkQuestion(String appointmentBizId) {
ApiObjectSaveRequest apiObjectSaveRequest = new ApiObjectSaveRequest(); ApiObjectSaveRequest apiObjectSaveRequest = new ApiObjectSaveRequest();
apiObjectSaveRequest.setObjectBizId(appointmentBizId); apiObjectSaveRequest.setObjectBizId(appointmentBizId);
...@@ -528,6 +759,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -528,6 +759,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
/** /**
* 校验预约信息是否存在 * 校验预约信息是否存在
*
* @param appointmentBizId * @param appointmentBizId
* @return * @return
*/ */
...@@ -535,7 +767,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -535,7 +767,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
Appointment appointment = iAppointmentService.queryOne(appointmentBizId); Appointment appointment = iAppointmentService.queryOne(appointmentBizId);
if (Objects.isNull(appointment)) { if (Objects.isNull(appointment)) {
//数据不存在 //数据不存在
throw new BusinessException(ResultCode.NULL_ERROR.getCode(),ResultCode.NULL_ERROR.getMessage()); throw new BusinessException(ResultCode.NULL_ERROR.getCode(), ResultCode.NULL_ERROR.getMessage());
} }
return Result.success(appointment); return Result.success(appointment);
} }
......
...@@ -3,6 +3,8 @@ package com.yd.csf.feign.dto.appointmentfile; ...@@ -3,6 +3,8 @@ package com.yd.csf.feign.dto.appointmentfile;
import com.yd.oss.feign.annotation.PdfField; import com.yd.oss.feign.annotation.PdfField;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime;
/** /**
* 预约行程单PDF字段映射实体类 * 预约行程单PDF字段映射实体类
*/ */
...@@ -104,4 +106,10 @@ public class ItineraryDto { ...@@ -104,4 +106,10 @@ public class ItineraryDto {
*/ */
@PdfField("remark") @PdfField("remark")
private String remark; private String remark;
/**
* 确定预约时间(年月日,时分)
*/
@PdfField("confirmAppointmentTime")
private String confirmAppointmentTime;
} }
package com.yd.csf.service.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
@Configuration
@EnableAsync
public class AsyncConfig {
/**
* 异步聚合查询线程池
*/
@Bean("asyncQueryExecutor")
public Executor asyncQueryExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 核心线程数(根据CPU核心数动态设置)
executor.setCorePoolSize(Runtime.getRuntime().availableProcessors());
// 最大线程数
executor.setMaxPoolSize(Runtime.getRuntime().availableProcessors() * 2);
// 队列容量
executor.setQueueCapacity(100);
// 线程名前缀
executor.setThreadNamePrefix("async-query-");
// 拒绝策略:由调用线程处理(保证不会丢失任务)
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 等待任务完成再关闭
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.setAwaitTerminationSeconds(60);
// 空闲线程存活时间
executor.setKeepAliveSeconds(60);
executor.initialize();
return executor;
}
/**
* 通用异步任务线程池
*/
@Bean("commonAsyncExecutor")
public Executor commonAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(50);
executor.setThreadNamePrefix("common-async-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.setAwaitTerminationSeconds(30);
executor.setKeepAliveSeconds(30);
executor.initialize();
return executor;
}
}
\ No newline at end of file
package com.yd.csf.service.dao;
import com.yd.csf.service.model.PolicyAdditional;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Zhang Jianan
* @description 针对表【policy_additional(保单附加险信息表)】的数据库操作Mapper
* @createDate 2025-11-03 11:05:09
* @Entity generator.domain.PolicyAdditional
*/
public interface PolicyAdditionalMapper extends BaseMapper<PolicyAdditional> {
}
package com.yd.csf.service.dao;
import com.yd.csf.service.model.PolicyBeneficiary;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Zhang Jianan
* @description 针对表【policy_beneficiary(受益人信息表)】的数据库操作Mapper
* @createDate 2025-10-31 11:43:16
* @Entity generator.domain.PolicyBeneficiary
*/
public interface PolicyBeneficiaryMapper extends BaseMapper<PolicyBeneficiary> {
}
package com.yd.csf.service.dao;
import com.yd.csf.service.model.PolicyFollowFile;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Zhang Jianan
* @description 针对表【policy_follow_file(新单跟进附件信息表)】的数据库操作Mapper
* @createDate 2025-10-29 13:32:29
* @Entity generator.domain.PolicyFollowFile
*/
public interface PolicyFollowFileMapper extends BaseMapper<PolicyFollowFile> {
}
package com.yd.csf.service.dao;
import com.yd.csf.service.model.PolicyFollowRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Zhang Jianan
* @description 针对表【policy_follow_record(新单跟进记录表)】的数据库操作Mapper
* @createDate 2025-10-28 17:29:50
* @Entity generator.domain.PolicyFollowRecord
*/
public interface PolicyFollowRecordMapper extends BaseMapper<PolicyFollowRecord> {
}
package com.yd.csf.service.dao;
import com.yd.csf.service.model.PolicyInsurant;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Zhang Jianan
* @description 针对表【policy_insurant(保单受保人信息表)】的数据库操作Mapper
* @createDate 2025-10-31 13:29:18
* @Entity generator.domain.PolicyInsurant
*/
public interface PolicyInsurantMapper extends BaseMapper<PolicyInsurant> {
}
package com.yd.csf.service.dao;
import com.yd.csf.service.model.PolicyPolicyholder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Zhang Jianan
* @description 针对表【policy_policyholder(保单投保人信息表)】的数据库操作Mapper
* @createDate 2025-10-31 11:43:10
* @Entity generator.domain.PolicyPolicyholder
*/
public interface PolicyPolicyholderMapper extends BaseMapper<PolicyPolicyholder> {
}
package com.yd.csf.service.dao;
import com.yd.csf.service.model.PolicySecondHolder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Zhang Jianan
* @description 针对表【policy_second_holder(第二持有人信息表)】的数据库操作Mapper
* @createDate 2025-10-31 13:29:23
* @Entity generator.domain.PolicySecondHolder
*/
public interface PolicySecondHolderMapper extends BaseMapper<PolicySecondHolder> {
}
package com.yd.csf.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
@Data
public class AttachmentUploadRequest implements Serializable {
/**
* 新单跟进bizId
*/
@Schema(description = "新单跟进bizId", requiredMode = Schema.RequiredMode.REQUIRED)
private String policyBizId;
/**
* 中台文件元数据表唯一业务ID
*/
@NotBlank(message = "中台文件元数据表唯一业务ID不能为空")
@Schema(description = "中台文件元数据表唯一业务ID", requiredMode = Schema.RequiredMode.REQUIRED)
private String ossFileBizId;
/**
* 文件名
*/
@NotBlank(message = "文件名不能为空")
@Schema(description = "文件名", requiredMode = Schema.RequiredMode.REQUIRED)
private String fileName;
/**
* 文件访问路径
*/
@NotBlank(message = "文件访问路径为空")
@Schema(description = "文件访问路径", requiredMode = Schema.RequiredMode.REQUIRED)
private String fileUrl;
private static final long serialVersionUID = 1L;
}
package com.yd.csf.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Data
public class ChangePolicyFollowStatusRequest {
/**
* 新单编号
*/
@Schema(description = "新单编号", requiredMode = Schema.RequiredMode.REQUIRED)
private String policyBizId;
/**
* 跟进状态
*/
@Schema(description = "跟进状态 通过`PolicyFollowVO`中的nextStatusList下拉框选择")
private String status;
/**
* 跟进信息
*/
@Schema(description = "跟进信息")
private String message;
}
...@@ -5,13 +5,13 @@ import lombok.Data; ...@@ -5,13 +5,13 @@ import lombok.Data;
@Data @Data
public class PersonalData { public class PersonalData {
@Schema(description = "陪同顾问姓名", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "转介人", requiredMode = Schema.RequiredMode.REQUIRED)
private String accountName; private String accountName;
@Schema(description = "理财顾问注册编号", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "签单员注册编号", requiredMode = Schema.RequiredMode.REQUIRED)
private String registrationNumber; private String registrationNumber;
@Schema(description = "理财顾问内部编码") @Schema(description = "签单员内部编码")
private String number; private String number;
@Schema(description = "客户姓名", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "客户姓名", requiredMode = Schema.RequiredMode.REQUIRED)
......
package com.yd.csf.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class PolicyAdditionalAddRequest implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 新单跟进业务ID
*/
@Schema(description = "新单跟进业务ID", requiredMode = Schema.RequiredMode.REQUIRED)
private String policyBizId;
/**
* 保单号
*/
@Schema(description = "保单号")
private String policyNo;
/**
* 产品计划信息表唯一业务ID
*/
@Schema(description = "产品计划信息表唯一业务ID")
private String planBizId;
/**
* 保险附加产品唯一业务ID(中台保险附加产品业务id,冗余)
*/
@Schema(description = "保险附加产品唯一业务ID(中台保险附加产品业务id,冗余)")
private String additionalProductBizId;
/**
* 保险附加产品名称(中台保险附加产品名称,冗余)
*/
@Schema(description = "保险附加产品名称(中台保险附加产品名称,冗余)")
private String addProductName;
/**
* 货币(字典)
*/
@Schema(description = "货币(字典)")
private String currency;
/**
* 保费
*/
@Schema(description = "保费")
private BigDecimal premium;
/**
* 保额
*/
@Schema(description = "保额")
private BigDecimal sumInsured;
/**
* 保障地区(字典)
*/
@Schema(description = "保障地区(字典)")
private String guaranteeRegion;
/**
* 等级(字典)
*/
@Schema(description = "等级(字典)")
private String level;
/**
* 自付额(字典)
*/
@Schema(description = "自付额(字典)")
private String deductibles;
/**
* 附加保障(json串)
*/
@Schema(description = "附加保障(json串)")
private String additionalSafeguards;
/**
* 备注
*/
@Schema(description = "备注")
private String remark;
}
package com.yd.csf.service.dto;
import com.yd.common.dto.PageDto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
public class PolicyAdditionalQueryRequest extends PageDto implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 保单业务ID
*/
@Schema(description = "保单业务ID", requiredMode = Schema.RequiredMode.REQUIRED)
private String policyBizId;
}
package com.yd.csf.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
public class PolicyAdditionalUpdateRequest extends PolicyAdditionalAddRequest implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 保单附加险业务ID
*/
@Schema(description = "保单附加险业务ID", requiredMode = Schema.RequiredMode.REQUIRED)
private String policyAdditionalBizId;
}
package com.yd.csf.service.dto; package com.yd.csf.service.dto;
import lombok.AllArgsConstructor; import com.yd.csf.feign.dto.appointment.ApiProductPlanAdditionalInfoDto;
import lombok.Builder; import com.yd.csf.service.model.Policy;
import com.yd.csf.service.model.PolicyAdditional;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List; import java.util.List;
@Data @Data
@Builder public class PolicyDto implements Serializable {
@NoArgsConstructor private static final long serialVersionUID = 1L;
@AllArgsConstructor
public class PolicyDto {
/** /**
* 保单号列表 * 产品计划(保单信息)
*/ */
private List<String> policyNoList; @Schema(description = "产品计划(保单信息)")
private Policy apiProductPlanMainInfoDto;
/**
* 保单附加险列表
*/
@Schema(description = "保单附加险列表")
private List<ApiProductPlanAdditionalInfoDto> apiProductPlanAdditionalInfoDtoList;
} }
...@@ -25,6 +25,18 @@ public class PolicyFollowAddRequest implements Serializable { ...@@ -25,6 +25,18 @@ public class PolicyFollowAddRequest implements Serializable {
private Date signDate; private Date signDate;
/** /**
* 预约业务id
*/
@Schema(description = "预约业务id")
private String appointmentBizId;
/**
* 预约单号
*/
@Schema(description = "预约单号")
private String appointmentNo;
/**
* 签单人 * 签单人
*/ */
@Schema(description = "签单人") @Schema(description = "签单人")
......
package com.yd.csf.service.dto;
import com.yd.csf.feign.dto.appointment.*;
import com.yd.csf.service.model.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.BeanUtils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 新单跟进聚合查询结果DTO
*/
@Data
public class PolicyFollowAggregateDto implements Serializable {
/**
* 新单跟进业务ID
*/
@Schema(description = "新单跟进业务ID")
private String policyBizId;
/**
* 客户业务ID
*/
@Schema(description = "客户业务ID")
private String customerBizId;
/**
* 问卷业务ID
*/
@Schema(description = "问卷业务ID 新单跟进问卷中,objectBizId为policyBizId")
private String questionnaireBizId;
/**
* 保单产品计划(保单)
*/
@Schema(description = "保单产品计划(保单)")
private PolicyDto apiProductPlanInfoDto;
/**
* 保单投保人
*/
@Schema(description = "保单投保人")
private ApiPolicyholderInfoDto apiPolicyholderInfoDto;
/**
* 保单受保人
*/
@Schema(description = "保单受保人")
private ApiInsurantInfoDto apiInsurantInfoDto;
/**
* 保单受益人
*/
@Schema(description = "保单受益人")
private List<ApiBeneficiaryInfoDto> apiBeneficiaryInfoDtoList;
/**
* 保单第二持有人
*/
@Schema(description = "保单第二持有人")
private ApiSecondHolderInfoDto apiSecondHolderInfoDto;
// todo 健康问卷
// private Object policyholderInfo;
// 错误信息(如果有查询失败的情况)
private String errorMessage;
private static final long serialVersionUID = 1L;
public static PolicyFollowAggregateDto convertToDto(Policy policy,
List<PolicyAdditional> policyAdditionals,
PolicyPolicyholder policyPolicyholder,
PolicyInsurant policyInsurant,
List<PolicyBeneficiary> beneficiaryList,
PolicySecondHolder policySecondHolder) {
PolicyFollowAggregateDto dto = new PolicyFollowAggregateDto();
if (ObjectUtils.isEmpty(policy)) {
return dto;
}
// 设置保单产品计划(保单)
if (ObjectUtils.isNotEmpty(policy)) {
PolicyDto apiProductPlanInfoDto = new PolicyDto();
// 产品计划主信息
apiProductPlanInfoDto.setApiProductPlanMainInfoDto(policy);
// 附加险列表
List<ApiProductPlanAdditionalInfoDto> apiProductPlanAdditionalInfoDtoList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(policyAdditionals)) {
policyAdditionals.forEach(policyAdditional -> {
ApiProductPlanAdditionalInfoDto apiProductPlanAdditionalInfoDto = new ApiProductPlanAdditionalInfoDto();
BeanUtils.copyProperties(policyAdditional, apiProductPlanAdditionalInfoDto);
apiProductPlanAdditionalInfoDtoList.add(apiProductPlanAdditionalInfoDto);
});
}
apiProductPlanInfoDto.setApiProductPlanAdditionalInfoDtoList(apiProductPlanAdditionalInfoDtoList);
dto.setApiProductPlanInfoDto(apiProductPlanInfoDto);
}
// 设置保单投保人
if (ObjectUtils.isNotEmpty(policyPolicyholder)) {
ApiPolicyholderInfoDto apiPolicyholderInfoDto = new ApiPolicyholderInfoDto();
BeanUtils.copyProperties(policyPolicyholder, apiPolicyholderInfoDto);
dto.setApiPolicyholderInfoDto(apiPolicyholderInfoDto);
}
// 设置保单受保人
if (ObjectUtils.isNotEmpty(policyInsurant)) {
ApiInsurantInfoDto apiInsurantInfoDto = new ApiInsurantInfoDto();
BeanUtils.copyProperties(policyInsurant, apiInsurantInfoDto);
dto.setApiInsurantInfoDto(apiInsurantInfoDto);
}
// 设置保单受益人
if (CollectionUtils.isNotEmpty(beneficiaryList)) {
List<ApiBeneficiaryInfoDto> apiBeneficiaryInfoDtoList = new ArrayList<>();
beneficiaryList.forEach(beneficiary -> {
ApiBeneficiaryInfoDto apiBeneficiaryInfoDto = new ApiBeneficiaryInfoDto();
BeanUtils.copyProperties(beneficiary, apiBeneficiaryInfoDto);
apiBeneficiaryInfoDtoList.add(apiBeneficiaryInfoDto);
});
dto.setApiBeneficiaryInfoDtoList(apiBeneficiaryInfoDtoList);
}
// 设置保单第二持有人
if (ObjectUtils.isNotEmpty(policySecondHolder)) {
ApiSecondHolderInfoDto apiSecondHolderInfoDto = new ApiSecondHolderInfoDto();
BeanUtils.copyProperties(policySecondHolder, apiSecondHolderInfoDto);
dto.setApiSecondHolderInfoDto(apiSecondHolderInfoDto);
}
return dto;
}
}
\ No newline at end of file
package com.yd.csf.service.dto;
import com.yd.common.dto.PageDto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
public class PolicyFollowFileQueryRequest extends PageDto implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 新单跟进唯一业务ID
*/
@Schema(description = "新单跟进唯一业务ID", requiredMode = Schema.RequiredMode.REQUIRED)
private String policyBizId;
}
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;
import java.util.List;
@Data
public class PolicyFollowUpdateDto implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 新单编号
*/
@Schema(description = "新单编号", requiredMode = Schema.RequiredMode.REQUIRED)
private String policyBizId;
/**
* 客户名称
*/
@Schema(description = "客户名称")
private String customerName;
/**
* 客户编号
*/
@Schema(description = "客户编号")
private String customerBizId;
/**
* 保单号
*/
@Schema(description = "保单号")
private String policyNo;
/**
* 签单日期
*/
@Schema(description = "签单日期", format = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date signDate;
/**
* 签单人
*/
@Schema(description = "签单人")
private String signer;
/**
* 生效日期
*/
@Schema(description = "生效日期", format = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date effectiveDate;
/**
* 续保日期
*/
@Schema(description = "续保日期", format = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date renewalDate;
/**
* 供款年期
*/
@Schema(description = "供款年期")
private Integer paymentTerm;
/**
* 期交保费
*/
@Schema(description = "期交保费")
private BigDecimal paymentPremium;
/**
* 是否预缴: 0-否, 1-是
*/
@Schema(description = "是否预缴: 0-否, 1-是")
private Integer isPrepaid;
/**
* 预缴年期
*/
@Schema(description = "预缴年期")
private Integer prepaidTerm;
/**
* 产品业务id
*/
@Schema(description = "产品业务id")
private String productBizId;
/**
* 产品名称
*/
@Schema(description = "产品名称")
private String productName;
/**
* 产品类别
*/
@Schema(description = "产品类别")
private String productCate;
/**
* 保险公司
*/
@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 = "保單持有人")
private String policyHolder;
/**
* 受保人
*/
@Schema(description = "受保人")
private String insured;
/**
* 币种
*/
@Schema(description = "币种")
private String currency;
/**
* 首期保费(不含徽费,预缴保费)
*/
@Schema(description = "首期保费(不含徽费,预缴保费)")
private Object initialPremium;
/**
* 备注
*/
@Schema(description = "备注")
private String remark;
}
package com.yd.csf.service.dto; package com.yd.csf.service.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yd.csf.service.dto.PolicyBrokerDto;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List; import java.util.List;
@Data @Data
public class PolicyFollowUpdateRequest { public class PolicyFollowUpdateRequest {
/** /**
* 新单编号 * 新单编号
*/ */
...@@ -19,139 +14,10 @@ public class PolicyFollowUpdateRequest { ...@@ -19,139 +14,10 @@ public class PolicyFollowUpdateRequest {
private String policyBizId; private String policyBizId;
/** /**
* 新单状态 * 新单修改Dto
*/
@Schema(description = "新单状态 'CHECKING'-'审核中','UNDERWRITING'-'承保中','FINISHED'-'已完成','DECLINED'-'已拒绝','CANCELLED'-'已取消', 字典值: policy_follow_status")
private String status;
/**
* 客户名称
*/
@Schema(description = "客户名称")
private String customerName;
/**
* 客户编号
*/
@Schema(description = "客户编号")
private String customerBizId;
/**
* 保单号
*/
@Schema(description = "保单号")
private String policyNo;
/**
* 签单日期
*/
@Schema(description = "签单日期", format = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date signDate;
/**
* 签单人
*/
@Schema(description = "签单人")
private String signer;
/**
* 生效日期
*/
@Schema(description = "生效日期", format = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date effectiveDate;
/**
* 续保日期
*/
@Schema(description = "续保日期", format = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date renewalDate;
/**
* 供款年期
*/
@Schema(description = "供款年期")
private Integer paymentTerm;
/**
* 期交保费
*/
@Schema(description = "期交保费")
private BigDecimal paymentPremium;
/**
* 是否预缴: 0-否, 1-是
*/
@Schema(description = "是否预缴: 0-否, 1-是")
private Integer isPrepaid;
/**
* 预缴年期
*/ */
@Schema(description = "预缴年期") @Schema(description = "新单修改Dto")
private Integer prepaidTerm; private PolicyFollowUpdateDto policyFollowUpdateDto;
/**
* 产品名称
*/
@Schema(description = "产品名称")
private String productName;
/**
* 产品类别
*/
@Schema(description = "产品类别")
private String productCate;
/**
* 保险公司
*/
@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 = "保單持有人")
private String policyHolder;
/**
* 受保人
*/
@Schema(description = "受保人")
private String insured;
/**
* 币种
*/
@Schema(description = "币种")
private String currency;
/**
* 首期保费(不含徽费,预缴保费)
*/
@Schema(description = "首期保费(不含徽费,预缴保费)")
private Object initialPremium;
/** /**
* 转介人列表 * 转介人列表
...@@ -160,8 +26,14 @@ public class PolicyFollowUpdateRequest { ...@@ -160,8 +26,14 @@ public class PolicyFollowUpdateRequest {
private List<PolicyBrokerDto> brokerList; private List<PolicyBrokerDto> brokerList;
/** /**
* 备注 * 核保信息
*/
@Schema(description = "核保信息")
private VerifyPolicyInfo verifyPolicyInfo;
/**
* 保单邮寄
*/ */
@Schema(description = "备注") @Schema(description = "保单邮寄")
private String remark; private PolicyMailing policyMailing;
} }
package com.yd.csf.service.dto;
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 PolicyInsurantUpdateRequest implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 保单受保人BizId
*/
@Schema(description = "保单受保人BizId", requiredMode = Schema.RequiredMode.REQUIRED)
private String policyInsurantBizId;
/**
* 保单号
*/
@Schema(description = "保单号")
private String policyNo;
/**
* 客户类型(字典)
*/
@Schema(description = "客户类型(字典)")
private String customerType;
/**
* 关联客户信息表唯一业务ID(冗余字段)
*/
@Schema(description = "关联客户信息表唯一业务ID(冗余字段)")
private String customerBizId;
/**
* 关联客户编号(和客户信息表唯一业务ID是一对,唯一,冗余字段)
*/
@Schema(description = "关联客户编号(和客户信息表唯一业务ID是一对,唯一,冗余字段)")
private String customerNo;
/**
* 与投保人关系(字典)
*/
@Schema(description = "与投保人关系(字典)")
private String policyholderRel;
/**
* 受保人姓名
*/
@Schema(description = "受保人姓名")
private String name;
/**
* 名字-英文
*/
@Schema(description = "名字-英文")
private String nameEn;
/**
* 性别(字典)
*/
@Schema(description = "性别(字典)")
private String gender;
/**
* 证件类型(字典)
*/
@Schema(description = "证件类型(字典)")
private String documentType;
/**
* 证件号码
*/
@Schema(description = "证件号码")
private String idNumber;
/**
* 出生日期
*/
@Schema(description = "出生日期")
private Date birthday;
/**
* 年龄
*/
@Schema(description = "年龄")
private String age;
/**
* 居住地址
*/
@Schema(description = "居住地址")
private String residentialAddress;
/**
* 通讯地址
*/
@Schema(description = "通讯地址")
private String mailingAddress;
/**
* 移动电话区号
*/
@Schema(description = "移动电话区号")
private String mobileCode;
/**
* 移动电话
*/
@Schema(description = "移动电话")
private String mobile;
/**
* 邮箱
*/
@Schema(description = "邮箱")
private String email;
/**
* 公司名称
*/
@Schema(description = "公司名称")
private String companyName;
/**
* 公司地址
*/
@Schema(description = "公司地址")
private String companyAddress;
/**
* 行业
*/
@Schema(description = "行业")
private String industry;
/**
* 职位
*/
@Schema(description = "职位")
private String position;
/**
* 风险偏好(字典)
*/
@Schema(description = "风险偏好(字典)")
private String riskAppetite;
/**
* 是否VIP: 0-否, 1-是(字典)
*/
@Schema(description = "是否VIP: 0-否, 1-是(字典)")
private Integer isVip;
/**
* vip备注
*/
@Schema(description = "vip备注")
private String vipRemark;
/**
* 称谓(字典)
*/
@Schema(description = "称谓(字典)")
private String appellation;
/**
* 是否区分吸烟(字典)
*/
@Schema(description = "是否区分吸烟(字典)")
private String smokingAllowed;
/**
* 出生地(省市)
*/
@Schema(description = "出生地(省市)")
private String birthplace;
/**
* 国籍
*/
@Schema(description = "国籍")
private String nationality;
/**
* 护照号码
*/
@Schema(description = "护照号码")
private String passportNo;
/**
* 通行证号码
*/
@Schema(description = "通行证号码")
private String passNo;
/**
* 身高
*/
@Schema(description = "身高")
private String height;
/**
* 体重
*/
@Schema(description = "体重")
private String weight;
/**
* BMI
*/
@Schema(description = "BMI")
private String bmi;
/**
* 受雇于现职年期
*/
@Schema(description = "受雇于现职年期")
private BigDecimal currentTenure;
/**
* 总负债额
*/
@Schema(description = "总负债额")
private BigDecimal totalDebt;
/**
* 受供养人数目
*/
@Schema(description = "受供养人数目")
private Integer dependentsNum;
/**
* 婚姻状况(字典)
*/
@Schema(description = "婚姻状况(字典)")
private String maritalStatus;
/**
* 教育程度(字典)
*/
@Schema(description = "教育程度(字典)")
private String educationLevel;
/**
* 总工作年期
*/
@Schema(description = "总工作年期")
private BigDecimal totalWorkingYears;
/**
* 现时每月收入
*/
@Schema(description = "现时每月收入")
private BigDecimal currentMonthlyIncome;
/**
* 公司电话区号
*/
@Schema(description = "公司电话区号")
private String companyMobileCode;
/**
* 公司电话
*/
@Schema(description = "公司电话")
private String companyMobile;
/**
* 固定电话区号
*/
@Schema(description = "固定电话区号")
private String landlineCode;
/**
* 固定电话
*/
@Schema(description = "固定电话")
private String landline;
/**
* 其他电话
*/
@Schema(description = "其他电话")
private String otherMobile;
/**
* 过往一年是否所属国家以外地区居住超过182日: 0-否, 1-是(字典)
*/
@Schema(description = "过往一年是否所属国家以外地区居住超过182日: 0-否, 1-是(字典)")
private Integer isExceed;
/**
* 是否拥有其他国家公民身份(如美国、日本等): 0-否, 1-是(字典)
*/
@Schema(description = "是否拥有其他国家公民身份(如美国、日本等): 0-否, 1-是(字典)")
private Integer isOtherCountry;
/**
* 是否接受推广信息: 0-否, 1-是(字典)
*/
@Schema(description = "是否接受推广信息: 0-否, 1-是(字典)")
private Integer isPromotion;
/**
* 旅行(字典)
*/
@Schema(description = "旅行(字典)")
private String travel;
/**
* 运动(字典)
*/
@Schema(description = "运动(字典)")
private String exercise;
/**
* 游戏(字典)
*/
@Schema(description = "游戏(字典)")
private String game;
/**
* 电影/戏剧(字典)
*/
@Schema(description = "电影/戏剧(字典)")
private String movieDrama;
/**
* 美食(字典)
*/
@Schema(description = "美食(字典)")
private String delicacy;
/**
* 地址列表(json串)
*/
@Schema(description = "地址列表(json串)")
private String addressList;
/**
* 备注
*/
@Schema(description = "备注")
private String remark;
/**
* 吸烟量(支/天)
*/
@Schema(description = "吸烟量(支/天)")
private String smokingVolume;
/**
* 货币(字典)
*/
@Schema(description = "货币(字典)")
private String currency;
/**
* 公司名称(英文)
*/
@Schema(description = "公司名称(英文)")
private String companyNameEn;
/**
* 公司商业登记号码
*/
@Schema(description = "公司商业登记号码")
private String companyBusinessNo;
/**
* 公司注册日期
*/
@Schema(description = "公司注册日期")
private Date companyRegisterTime;
/**
* 公司注册地区(字典)
*/
@Schema(description = "公司注册地区(字典)")
private String companyRegisterRegion;
/**
* 公司邮箱
*/
@Schema(description = "公司邮箱")
private String companyEmail;
/**
* 公司登记地址
*/
@Schema(description = "公司登记地址")
private String companyEnterAddress;
/**
* 授权代表姓名中文-名字
*/
@Schema(description = "授权代表姓名中文-名字")
private String authNameCn;
/**
* 授权代表姓名英文-名字
*/
@Schema(description = "授权代表姓名英文-名字")
private String authNameEn;
/**
* 授权代表职称
*/
@Schema(description = "授权代表职称")
private String authProfessional;
/**
* 授权代表电话区号
*/
@Schema(description = "授权代表电话区号")
private String authMobileCode;
/**
* 授权代表电话
*/
@Schema(description = "授权代表电话")
private String authMobile;
}
package com.yd.csf.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
public class PolicyMailing implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 寄送方式
*/
@Schema(description = "寄送方式")
private String mailingMethod;
/**
* 经纪公司签收日期
*/
@Schema(description = "经纪公司签收日期")
private String brokerSignDate;
/**
* 保险公司寄出日期
*/
@Schema(description = "保险公司寄出日期")
private String insurerMailingDate;
/**
* 客户签收日期
*/
@Schema(description = "客户签收日期")
private String customerSignDate;
}
package com.yd.csf.service.dto;
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 PolicyPolicyholderUpdateRequest implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 保单投保人信息表唯一业务ID
*/
@Schema(description = "保单投保人信息表唯一业务ID", requiredMode = Schema.RequiredMode.REQUIRED)
private String policyPolicyholderBizId;
/**
* 保单号
*/
@Schema(description = "保单号")
private String policyNo;
/**
* 客户类型(字典)
*/
@Schema(description = "客户类型(字典)")
private String customerType;
/**
* 关联客户信息表唯一业务ID(冗余字段)
*/
@Schema(description = "关联客户信息表唯一业务ID(冗余字段)")
private String customerBizId;
/**
* 关联客户编号(和客户信息表唯一业务ID是一对,唯一,冗余字段)
*/
@Schema(description = "关联客户编号(和客户信息表唯一业务ID是一对,唯一,冗余字段)")
private String customerNo;
/**
* 名字
*/
@Schema(description = "名字")
private String name;
/**
* 名字-英文
*/
@Schema(description = "名字-英文")
private String nameEn;
/**
* 性别(字典)
*/
@Schema(description = "性别(字典)")
private String gender;
/**
* 证件类型(字典)
*/
@Schema(description = "证件类型(字典)")
private String documentType;
/**
* 证件号码
*/
@Schema(description = "证件号码")
private String idNumber;
/**
* 出生日期
*/
@Schema(description = "出生日期")
private Date birthday;
/**
* 年龄
*/
@Schema(description = "年龄")
private String age;
/**
* 居住地址
*/
@Schema(description = "居住地址")
private String residentialAddress;
/**
* 通讯地址
*/
@Schema(description = "通讯地址")
private String mailingAddress;
/**
* 移动电话区号
*/
@Schema(description = "移动电话区号")
private String mobileCode;
/**
* 移动电话
*/
@Schema(description = "移动电话")
private String mobile;
/**
* 邮箱
*/
@Schema(description = "邮箱")
private String email;
/**
* 公司名称
*/
@Schema(description = "公司名称")
private String companyName;
/**
* 公司地址
*/
@Schema(description = "公司地址")
private String companyAddress;
/**
* 行业
*/
@Schema(description = "行业")
private String industry;
/**
* 职位
*/
@Schema(description = "职位")
private String position;
/**
* 风险偏好(字典)
*/
@Schema(description = "风险偏好(字典)")
private String riskAppetite;
/**
* 是否VIP: 0-否, 1-是(字典)
*/
@Schema(description = "是否VIP: 0-否, 1-是(字典)")
private Integer isVip;
/**
* vip备注
*/
@Schema(description = "vip备注")
private String vipRemark;
/**
* 称谓(字典)
*/
@Schema(description = "称谓(字典)")
private String appellation;
/**
* 是否区分吸烟(字典)
*/
@Schema(description = "是否区分吸烟(字典)")
private String smokingAllowed;
/**
* 出生地(省市)
*/
@Schema(description = "出生地(省市)")
private String birthplace;
/**
* 国籍
*/
@Schema(description = "国籍")
private String nationality;
/**
* 护照号码
*/
@Schema(description = "护照号码")
private String passportNo;
/**
* 通行证号码
*/
@Schema(description = "通行证号码")
private String passNo;
/**
* 身高
*/
@Schema(description = "身高")
private String height;
/**
* 体重
*/
@Schema(description = "体重")
private String weight;
/**
* BMI
*/
@Schema(description = "BMI")
private String bmi;
/**
* 平均每月支出
*/
@Schema(description = "平均每月支出")
private BigDecimal monthExpenditure;
/**
* 平均每月收入
*/
@Schema(description = "平均每月收入")
private BigDecimal monthIncome;
/**
* 受雇于现职年期
*/
@Schema(description = "受雇于现职年期")
private BigDecimal currentTenure;
/**
* 总流动资产
*/
@Schema(description = "总流动资产")
private BigDecimal totalCurrentAssets;
/**
* 总负债额
*/
@Schema(description = "总负债额")
private BigDecimal totalDebt;
/**
* 受供养人数目
*/
@Schema(description = "受供养人数目")
private Integer dependentsNum;
/**
* 婚姻状况(字典)
*/
@Schema(description = "婚姻状况(字典)")
private String maritalStatus;
/**
* 教育程度(字典)
*/
@Schema(description = "教育程度(字典)")
private String educationLevel;
/**
* 总工作年期
*/
@Schema(description = "总工作年期")
private BigDecimal totalWorkingYears;
/**
* 现时每月收入
*/
@Schema(description = "现时每月收入")
private BigDecimal currentMonthlyIncome;
/**
* 公司电话区号
*/
@Schema(description = "公司电话区号")
private String companyMobileCode;
/**
* 公司电话
*/
@Schema(description = "公司电话")
private String companyMobile;
/**
* 固定电话区号
*/
@Schema(description = "固定电话区号")
private String landlineCode;
/**
* 固定电话
*/
@Schema(description = "固定电话")
private String landline;
/**
* 其他电话
*/
@Schema(description = "其他电话")
private String otherMobile;
/**
* 过往一年是否所属国家以外地区居住超过182日: 0-否, 1-是(字典)
*/
@Schema(description = "过往一年是否所属国家以外地区居住超过182日: 0-否, 1-是(字典)")
private Integer isExceed;
/**
* 是否拥有其他国家公民身份(如美国、日本等): 0-否, 1-是(字典)
*/
@Schema(description = "是否拥有其他国家公民身份(如美国、日本等): 0-否, 1-是(字典)")
private Integer isOtherCountry;
/**
* 是否接受推广信息: 0-否, 1-是(字典)
*/
@Schema(description = "是否接受推广信息: 0-否, 1-是(字典)")
private Integer isPromotion;
/**
* 投保人邮政编码
*/
@Schema(description = "投保人邮政编码")
private String postalCode;
/**
* 旅行(字典)
*/
@Schema(description = "旅行(字典)")
private String travel;
/**
* 运动(字典)
*/
@Schema(description = "运动(字典)")
private String exercise;
/**
* 游戏(字典)
*/
@Schema(description = "游戏(字典)")
private String game;
/**
* 电影/戏剧(字典)
*/
@Schema(description = "电影/戏剧(字典)")
private String movieDrama;
/**
* 美食(字典)
*/
@Schema(description = "美食(字典)")
private String delicacy;
/**
* 地址列表(json串)
*/
@Schema(description = "地址列表(json串)")
private String addressList;
/**
* 吸烟量(支/天)
*/
@Schema(description = "吸烟量(支/天)")
private String smokingVolume;
/**
* 货币(字典)
*/
@Schema(description = "货币(字典)")
private String currency;
/**
* 公司名称(英文)
*/
@Schema(description = "公司名称(英文)")
private String companyNameEn;
/**
* 公司商业登记号码
*/
@Schema(description = "公司商业登记号码")
private String companyBusinessNo;
/**
* 公司注册日期
*/
@Schema(description = "公司注册日期")
private Date companyRegisterTime;
/**
* 公司注册地区(字典)
*/
@Schema(description = "公司注册地区(字典)")
private String companyRegisterRegion;
/**
* 公司邮箱
*/
@Schema(description = "公司邮箱")
private String companyEmail;
/**
* 公司登记地址
*/
@Schema(description = "公司登记地址")
private String companyEnterAddress;
/**
* 授权代表姓名中文-名字
*/
@Schema(description = "授权代表姓名中文-名字")
private String authNameCn;
/**
* 授权代表姓名英文-名字
*/
@Schema(description = "授权代表姓名英文-名字")
private String authNameEn;
/**
* 授权代表职称
*/
@Schema(description = "授权代表职称")
private String authProfessional;
/**
* 授权代表电话区号
*/
@Schema(description = "授权代表电话区号")
private String authMobileCode;
/**
* 授权代表电话
*/
@Schema(description = "授权代表电话")
private String authMobile;
/**
* 转保声明选项(字典)
*/
@Schema(description = "转保声明选项(字典)")
private String policyTransfer;
/**
* 备注
*/
@Schema(description = "备注")
private String remark;
}
package com.yd.csf.service.dto;
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 PolicyUpdateRequest implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 新单跟进唯一业务ID
*/
@Schema(description = "新单跟进唯一业务ID", requiredMode = Schema.RequiredMode.REQUIRED)
private String policyBizId;
/**
* 保单号
*/
@Schema(description = "保单号")
private String policyNo;
/**
* 产品业务id
*/
@Schema(description = "产品业务id")
private String planBizId;
/**
* 产品代码
*/
@Schema(description = "产品代码")
private String productCode;
/**
* 产品名称
*/
@Schema(description = "产品名称")
private String productName;
/**
* 产品险种
*/
@Schema(description = "产品险种")
private String productCate;
/**
* 保险公司
*/
@Schema(description = "保险公司")
private String insurer;
/**
* 保险公司业务id
*/
@Schema(description = "保险公司业务id")
private String insurerBizId;
/**
* 地区
*/
@Schema(description = "地区")
private String region;
/**
* 保單投保人业务id
*/
@Schema(description = "保單投保人业务id")
private String policyPolicyholderBizId;
/**
* 保單持有人名称
*/
@Schema(description = "保單持有人名称")
private String policyHolder;
/**
* 保单受保人业务id
*/
@Schema(description = "保单受保人业务id")
private String policyInsurantBizId;
/**
* 保单受保人名称
*/
@Schema(description = "保单受保人名称")
private String insured;
/**
* 供款年期(字典)
*/
@Schema(description = "供款年期(字典)")
private Integer paymentTerm;
/**
* 付款频率(字典)
*/
@Schema(description = "付款频率(字典)")
private String paymentFrequency;
/**
* 期交保费
*/
@Schema(description = "期交保费")
private BigDecimal paymentPremium;
/**
* 保单状态
*/
@Schema(description = "保单状态 字典值:csf_policy_status")
private String status;
/**
* 币种
*/
@Schema(description = "币种")
private String currency;
/**
* 首期保费(不含徽费,预缴保费)
*/
@Schema(description = "首期保费(不含徽费,预缴保费)")
private Integer initialPremium;
/**
* 签单日期
*/
@Schema(description = "签单日期 格式:yyyy-MM-dd")
private Date signDate;
/**
* 缮发日期
*/
@Schema(description = "缮发日期 格式:yyyy-MM-dd")
private Date issueDate;
/**
* 生效日期
*/
@Schema(description = "生效日期 格式:yyyy-MM-dd")
private Date effectiveDate;
/**
* 续保日期
*/
@Schema(description = "续保日期 格式:yyyy-MM-dd")
private Date renewalDate;
/**
* 是否预缴: 0-否, 1-是
*/
@Schema(description = "是否预缴: 0-否, 1-是")
private Integer isPrepaid;
/**
* 预付额
*/
@Schema(description = "预付额")
private String deductibles;
/**
* 预缴年期
*/
@Schema(description = "预缴年期")
private Integer prepaidTerm;
/**
* 首期付款方式(字典)
*/
@Schema(description = "首期付款方式(字典)")
private String initialPaymentMethod;
/**
* 续期付款方式(字典)
*/
@Schema(description = "续期付款方式(字典)")
private String renewalPaymentMethod;
/**
* 红利分配方式(字典)
*/
@Schema(description = "红利分配方式(字典)")
private String dividendDistributionMethod;
/**
* 保单日期回溯: 0-否, 1-是(字典)
*/
@Schema(description = "保单日期回溯: 0-否, 1-是(字典)")
private Integer isBacktrack;
/**
* 是否参加递增保障权益: 0-否, 1-是(字典)
*/
@Schema(description = "是否参加递增保障权益: 0-否, 1-是(字典)")
private Integer isJoin;
/**
* 对账公司
*/
@Schema(description = "对账公司")
private String reconciliationCompany;
/**
* 对账公司业务id
*/
@Schema(description = "对账公司业务id")
private String reconciliationCompanyBizId;
/**
* 备注
*/
@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.util.Date;
@Data
public class VerifyPolicyInfo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 保险种类
*/
@Schema(description = "保险种类")
private String productCate;
/**
* 递交日期
*/
@Schema(description = "递交日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date submitDate;
/**
* 签单日期
*/
@Schema(description = "签单日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date signDate;
/**
* 缮发日期
*/
@Schema(description = "缮发日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date issueDate;
/**
* 保单生效日
*/
@Schema(description = "保单生效日")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date effectiveDate;
/**
* 是否预缴: 0-否, 1-是
*/
@Schema(description = "是否预缴: 0-否, 1-是")
private Integer isPrepaid;
/**
* 预付额
*/
@Schema(description = "预付额")
private String prepaidAmount;
/**
* 折扣后预付额
*/
@Schema(description = "折扣后预付额")
private String prepaidAmountAfterDiscount;
/**
* 保单截止日期
*/
@Schema(description = "保单截止日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date policyExpirationDate;
/**
* 缴费编号
*/
@Schema(description = "缴费编号")
private String paymentNumber;
}
...@@ -6,7 +6,8 @@ import org.apache.commons.lang3.ObjectUtils; ...@@ -6,7 +6,8 @@ import org.apache.commons.lang3.ObjectUtils;
* 新单跟进状态枚举 'CHECKING'-'审核中','UNDERWRITING'-'承保中','FINISHED'-'已完成','DECLINED'-'已拒绝','CANCELLED'-'已取消' * 新单跟进状态枚举 'CHECKING'-'审核中','UNDERWRITING'-'承保中','FINISHED'-'已完成','DECLINED'-'已拒绝','CANCELLED'-'已取消'
*/ */
public enum PolicyFollowStatusEnum { public enum PolicyFollowStatusEnum {
CHECKING("审核中", "CHECKING"), FOLLOW_UP("待跟进", "FOLLOW_UP"),
CHECKING("文件检查中", "CHECKING"),
UNDERWRITING("承保中", "UNDERWRITING"), UNDERWRITING("承保中", "UNDERWRITING"),
FINISHED("已完成", "FINISHED"), FINISHED("已完成", "FINISHED"),
DECLINED("已拒绝", "DECLINED"), DECLINED("已拒绝", "DECLINED"),
...@@ -48,4 +49,23 @@ public enum PolicyFollowStatusEnum { ...@@ -48,4 +49,23 @@ public enum PolicyFollowStatusEnum {
public String getItemValue() { public String getItemValue() {
return itemValue; return itemValue;
} }
/**
* 根据 value 获取枚举
*
* @param value
* @return
*/
public static PolicyFollowStatusEnum getEnumByValue(String value) {
if (ObjectUtils.isEmpty(value)) {
return null;
}
for (PolicyFollowStatusEnum anEnum : PolicyFollowStatusEnum.values()) {
if (anEnum.getItemValue().equals(value)) {
return anEnum;
}
}
return null;
}
} }
package com.yd.csf.service.enums;
import org.apache.commons.lang3.ObjectUtils;
public enum PolicyStatusEnum {
INFORCE("生效中", "INFORCE"),
LAPSED("保单失效", "LAPSED"),
MATURED("期满终止", "MATURED"),
;
//字典项标签(名称)
private String itemLabel;
//字典项值
private String itemValue;
//构造函数
PolicyStatusEnum(String itemLabel, String itemValue) {
this.itemLabel = itemLabel;
this.itemValue = itemValue;
}
/**
* 根据 itemLabel 获取枚举
*
* @param itemLabel
* @return
*/
public static PolicyStatusEnum getEnumByItemLabel(String itemLabel) {
if (ObjectUtils.isEmpty(itemLabel)) {
return null;
}
for (PolicyStatusEnum anEnum : PolicyStatusEnum.values()) {
if (anEnum.itemLabel.equals(itemLabel)) {
return anEnum;
}
}
return null;
}
public String getItemLabel() {
return itemLabel;
}
public String getItemValue() {
return itemValue;
}
/**
* 根据 value 获取枚举
*
* @param value
* @return
*/
public static PolicyStatusEnum getEnumByValue(String value) {
if (ObjectUtils.isEmpty(value)) {
return null;
}
for (PolicyStatusEnum anEnum : PolicyStatusEnum.values()) {
if (anEnum.getItemValue().equals(value)) {
return anEnum;
}
}
return null;
}
}
...@@ -38,6 +38,11 @@ public class Policy implements Serializable { ...@@ -38,6 +38,11 @@ public class Policy implements Serializable {
private String userBizId; private String userBizId;
/** /**
* 产品业务id
*/
private String planBizId;
/**
* 产品代码 * 产品代码
*/ */
private String productCode; private String productCode;
...@@ -48,7 +53,7 @@ public class Policy implements Serializable { ...@@ -48,7 +53,7 @@ public class Policy implements Serializable {
private String productName; private String productName;
/** /**
* 产品类别 * 产品险种
*/ */
private String productCate; private String productCate;
...@@ -63,6 +68,11 @@ public class Policy implements Serializable { ...@@ -63,6 +68,11 @@ public class Policy implements Serializable {
private String insurerBizId; private String insurerBizId;
/** /**
* 地区
*/
private String region;
/**
* 保單持有人 * 保單持有人
*/ */
private String policyHolder; private String policyHolder;
...@@ -73,11 +83,16 @@ public class Policy implements Serializable { ...@@ -73,11 +83,16 @@ public class Policy implements Serializable {
private String insured; private String insured;
/** /**
* 供款年期 * 供款年期(字典)
*/ */
private Integer paymentTerm; private Integer paymentTerm;
/** /**
* 付款频率(字典)
*/
private String paymentFrequency;
/**
* 期交保费 * 期交保费
*/ */
private BigDecimal paymentPremium; private BigDecimal paymentPremium;
...@@ -123,11 +138,41 @@ public class Policy implements Serializable { ...@@ -123,11 +138,41 @@ public class Policy implements Serializable {
private Integer isPrepaid; private Integer isPrepaid;
/** /**
* 预付额
*/
private String deductibles;
/**
* 预缴年期 * 预缴年期
*/ */
private Integer prepaidTerm; private Integer prepaidTerm;
/** /**
* 首期付款方式(字典)
*/
private String initialPaymentMethod;
/**
* 续期付款方式(字典)
*/
private String renewalPaymentMethod;
/**
* 红利分配方式(字典)
*/
private String dividendDistributionMethod;
/**
* 保单日期回溯: 0-否, 1-是(字典)
*/
private Integer isBacktrack;
/**
* 是否参加递增保障权益: 0-否, 1-是(字典)
*/
private Integer isJoin;
/**
* 对账公司 * 对账公司
*/ */
private String reconciliationCompany; private String reconciliationCompany;
...@@ -138,6 +183,11 @@ public class Policy implements Serializable { ...@@ -138,6 +183,11 @@ public class Policy implements Serializable {
private String reconciliationCompanyBizId; private String reconciliationCompanyBizId;
/** /**
* 转保声明选项(字典)
*/
private String policyTransfer;
/**
* 通用备注 * 通用备注
*/ */
private String remark; private String remark;
......
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_additional
*/
@TableName(value ="policy_additional")
@Data
public class PolicyAdditional implements Serializable {
/**
*
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 保单附加险信息表唯一业务ID
*/
private String policyAdditionalBizId;
/**
* 新单跟进业务ID
*/
private String policyBizId;
/**
* 保单号
*/
private String policyNo;
/**
* 产品计划信息表唯一业务ID
*/
private String planBizId;
/**
* 保险附加产品唯一业务ID(中台保险附加产品业务id,冗余)
*/
private String additionalProductBizId;
/**
* 保险附加产品名称(中台保险附加产品名称,冗余)
*/
private String addProductName;
/**
* 货币(字典)
*/
private String currency;
/**
* 保费
*/
private BigDecimal premium;
/**
* 保额
*/
private BigDecimal sumInsured;
/**
* 保障地区(字典)
*/
private String guaranteeRegion;
/**
* 等级(字典)
*/
private String level;
/**
* 自付额(字典)
*/
private String deductibles;
/**
* 附加保障(json串)
*/
private String additionalSafeguards;
/**
* 通用备注
*/
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_beneficiary
*/
@TableName(value ="policy_beneficiary")
@Data
public class PolicyBeneficiary implements Serializable {
/**
*
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 保单受益人信息表唯一业务ID
*/
private String policyBeneficiaryBizId;
/**
* 新单跟进业务ID
*/
private String policyBizId;
/**
* 保单号
*/
private String policyNo;
/**
* 客户类型(字典)(个人或者公司)
*/
private String customerType;
/**
* 与受保人关系(字典)
*/
private String insurantRel;
/**
* 受益比例
*/
private BigDecimal benefitRatio;
/**
* 名字
*/
private String name;
/**
* 名字-英文
*/
private String nameEn;
/**
* 性别(字典)
*/
private String gender;
/**
* 证件类型(字典)
*/
private String documentType;
/**
* 证件号码
*/
private String idNumber;
/**
* 护照号码
*/
private String passportNumber;
/**
* 出生日期
*/
private Date birthTime;
/**
* 公司名称
*/
private String companyName;
/**
* 公司名称(英文)
*/
private String companyNameEn;
/**
* 公司商业登记号码
*/
private String companyBusinessNo;
/**
* 公司注册日期
*/
private Date companyRegisterTime;
/**
* 公司注册地区(字典)
*/
private String companyRegisterRegion;
/**
* 公司电话区号
*/
private String companyMobileCode;
/**
* 公司电话
*/
private String companyMobile;
/**
* 公司邮箱
*/
private String companyEmail;
/**
* 公司登记地址
*/
private String companyEnterAddress;
/**
* 通讯地址
*/
private String mailingAddress;
/**
* 授权代表姓名中文-名字
*/
private String authNameCn;
/**
* 授权代表姓名英文-名字
*/
private String authNameEn;
/**
* 授权代表职称
*/
private String authProfessional;
/**
* 授权代表电话区号
*/
private String authMobileCode;
/**
* 授权代表电话
*/
private String authMobile;
/**
* 地址列表(json串)
*/
private String addressList;
/**
* 通用备注
*/
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
...@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.annotation.*; ...@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date; import java.util.Date;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
...@@ -34,15 +33,36 @@ public class PolicyFollow implements Serializable { ...@@ -34,15 +33,36 @@ public class PolicyFollow implements Serializable {
private String policyNo; private String policyNo;
/** /**
* 预约信息主表唯一业务ID
*/
private String appointmentBizId;
/**
* 预约编号
*/
private String appointmentNo;
/**
* 用户业务id * 用户业务id
*/ */
private String userBizId; private String userBizId;
/**
* 客户业务id
*/
private String customerBizId; private String customerBizId;
/**
* 客户名称
*/
private String customerName; private String customerName;
/** /**
* 递交日期
*/
private Date submitDate;
/**
* 签单日期 * 签单日期
*/ */
private Date signDate; private Date signDate;
...@@ -53,6 +73,11 @@ public class PolicyFollow implements Serializable { ...@@ -53,6 +73,11 @@ public class PolicyFollow implements Serializable {
private String signer; private String signer;
/** /**
* 缮发日期
*/
private Date issueDate;
/**
* 生效日期 * 生效日期
*/ */
private Date effectiveDate; private Date effectiveDate;
...@@ -83,6 +108,31 @@ public class PolicyFollow implements Serializable { ...@@ -83,6 +108,31 @@ public class PolicyFollow implements Serializable {
private Integer prepaidTerm; private Integer prepaidTerm;
/** /**
* 预付额
*/
private String prepaidAmount;
/**
* 折扣后预付额
*/
private String prepaidAmountAfterDiscount;
/**
* 保单截止日期
*/
private Date policyExpirationDate;
/**
* 缴费编号
*/
private String paymentNumber;
/**
* 产品业务id
*/
private String productBizId;
/**
* 产品名称 * 产品名称
*/ */
private String productName; private String productName;
...@@ -118,6 +168,11 @@ public class PolicyFollow implements Serializable { ...@@ -118,6 +168,11 @@ public class PolicyFollow implements Serializable {
private String status; private String status;
/** /**
* 下一步跟进状态列表
*/
private String nextStatusList;
/**
* 保單持有人 * 保單持有人
*/ */
private String policyHolder; private String policyHolder;
...@@ -138,14 +193,44 @@ public class PolicyFollow implements Serializable { ...@@ -138,14 +193,44 @@ public class PolicyFollow implements Serializable {
private Object initialPremium; private Object initialPremium;
/** /**
* 通用备注 * 寄送方式 1-自提, 2-快递
*/
private String mailingMethod;
/**
* 快递单号
*/
private String deliveryNo;
/**
* 经纪公司签收日期
*/
private String brokerSignDate;
/**
* 保险公司寄出日期
*/
private String insurerMailingDate;
/**
* 客户签收日期
*/
private String customerSignDate;
/**
* 附件列表
*/
private String attachments;
/**
* 备注
*/ */
private String remark; private String remark;
/** /**
* 删除标识: 0-正常, 1-删除 * 删除标识: 0-正常, 1-删除
*/ */
@TableLogic @TableField()
private Integer isDeleted; private Integer isDeleted;
/** /**
......
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_follow_file
*/
@TableName(value ="policy_follow_file")
@Data
public class PolicyFollowFile implements Serializable {
/**
*
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 新单跟进唯一业务ID
*/
private String policyBizId;
/**
* 中台文件元数据表唯一业务ID
*/
private String ossFileBizId;
/**
* 文件名
*/
private String fileName;
/**
* 文件访问路径
*/
private String fileUrl;
/**
* 通用备注
*/
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
private Integer isDeleted;
/**
* 创建人ID
*/
private String creatorId;
/**
* 创建人名称
*/
private String creatorName;
/**
* 更新人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_follow_record
*/
@TableName(value ="policy_follow_record")
@Data
public class PolicyFollowRecord implements Serializable {
/**
* id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 新单跟进唯一业务ID
*/
private String policyBizId;
/**
* 跟进状态
*/
private String title;
/**
* 跟进信息
*/
private String message;
/**
* 删除标识: 0-正常, 1-删除
*/
private Integer isDeleted;
/**
* 创建人ID
*/
private String creatorId;
/**
* 创建人名称
*/
private String creatorName;
/**
* 创建时间
*/
private Date createTime;
@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_insurant
*/
@TableName(value ="policy_insurant")
@Data
public class PolicyInsurant implements Serializable {
/**
*
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 受保人信息表唯一业务ID
*/
private String policyInsurantBizId;
/**
* 新单跟进业务ID
*/
private String policyBizId;
/**
* 保单号
*/
private String policyNo;
/**
* 客户类型(字典)
*/
private String customerType;
/**
* 关联客户信息表唯一业务ID(冗余字段)
*/
private String customerBizId;
/**
* 关联客户编号(和客户信息表唯一业务ID是一对,唯一,冗余字段)
*/
private String customerNo;
/**
* 与投保人关系(字典)
*/
private String policyholderRel;
/**
* 名字
*/
private String name;
/**
* 名字-英文
*/
private String nameEn;
/**
* 性别(字典)
*/
private String gender;
/**
* 证件类型(字典)
*/
private String documentType;
/**
* 证件号码
*/
private String idNumber;
/**
* 出生日期
*/
private Date birthday;
/**
* 年龄
*/
private String age;
/**
* 居住地址
*/
private String residentialAddress;
/**
* 通讯地址
*/
private String mailingAddress;
/**
* 移动电话区号
*/
private String mobileCode;
/**
* 移动电话
*/
private String mobile;
/**
* 邮箱
*/
private String email;
/**
* 公司名称
*/
private String companyName;
/**
* 公司地址
*/
private String companyAddress;
/**
* 行业
*/
private String industry;
/**
* 职位
*/
private String position;
/**
* 风险偏好(字典)
*/
private String riskAppetite;
/**
* 是否VIP: 0-否, 1-是(字典)
*/
private Integer isVip;
/**
* vip备注
*/
private String vipRemark;
/**
* 称谓(字典)
*/
private String appellation;
/**
* 是否区分吸烟(字典)
*/
private String smokingAllowed;
/**
* 出生地(省市)
*/
private String birthplace;
/**
* 国籍
*/
private String nationality;
/**
* 护照号码
*/
private String passportNo;
/**
* 通行证号码
*/
private String passNo;
/**
* 身高
*/
private String height;
/**
* 体重
*/
private String weight;
/**
* BMI
*/
private String bmi;
/**
* 受雇于现职年期
*/
private BigDecimal currentTenure;
/**
* 总负债额
*/
private BigDecimal totalDebt;
/**
* 受供养人数目
*/
private Integer dependentsNum;
/**
* 婚姻状况(字典)
*/
private String maritalStatus;
/**
* 教育程度(字典)
*/
private String educationLevel;
/**
* 总工作年期
*/
private BigDecimal totalWorkingYears;
/**
* 现时每月收入
*/
private BigDecimal currentMonthlyIncome;
/**
* 公司电话区号
*/
private String companyMobileCode;
/**
* 公司电话
*/
private String companyMobile;
/**
* 固定电话区号
*/
private String landlineCode;
/**
* 固定电话
*/
private String landline;
/**
* 其他电话
*/
private String otherMobile;
/**
* 过往一年是否所属国家以外地区居住超过182日: 0-否, 1-是(字典)
*/
private Integer isExceed;
/**
* 是否拥有其他国家公民身份(如美国、日本等): 0-否, 1-是(字典)
*/
private Integer isOtherCountry;
/**
* 是否接受推广信息: 0-否, 1-是(字典)
*/
private Integer isPromotion;
/**
* 旅行(字典)
*/
private String travel;
/**
* 运动(字典)
*/
private String exercise;
/**
* 游戏(字典)
*/
private String game;
/**
* 电影/戏剧(字典)
*/
private String movieDrama;
/**
* 美食(字典)
*/
private String delicacy;
/**
* 地址列表(json串)
*/
private String addressList;
/**
* 通用备注
*/
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
private Integer isDeleted;
/**
* 创建人ID
*/
private String creatorId;
/**
* 更新人ID
*/
private String updaterId;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 吸烟量(支/天)
*/
private String smokingVolume;
/**
* 货币(字典)
*/
private String currency;
/**
* 公司名称(英文)
*/
private String companyNameEn;
/**
* 公司商业登记号码
*/
private String companyBusinessNo;
/**
* 公司注册日期
*/
private Date companyRegisterTime;
/**
* 公司注册地区(字典)
*/
private String companyRegisterRegion;
/**
* 公司邮箱
*/
private String companyEmail;
/**
* 公司登记地址
*/
private String companyEnterAddress;
/**
* 授权代表姓名中文-名字
*/
private String authNameCn;
/**
* 授权代表姓名英文-名字
*/
private String authNameEn;
/**
* 授权代表职称
*/
private String authProfessional;
/**
* 授权代表电话区号
*/
private String authMobileCode;
/**
* 授权代表电话
*/
private String authMobile;
@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_policyholder
*/
@TableName(value ="policy_policyholder")
@Data
public class PolicyPolicyholder implements Serializable {
/**
*
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 投保人信息表唯一业务ID
*/
private String policyPolicyholderBizId;
/**
* 新单跟进业务ID
*/
private String policyBizId;
/**
* 保单号
*/
private String policyNo;
/**
* 客户类型(字典)
*/
private String customerType;
/**
* 关联客户信息表唯一业务ID(冗余字段)
*/
private String customerBizId;
/**
* 关联客户编号(和客户信息表唯一业务ID是一对,唯一,冗余字段)
*/
private String customerNo;
/**
* 名字
*/
private String name;
/**
* 名字-英文
*/
private String nameEn;
/**
* 性别(字典)
*/
private String gender;
/**
* 证件类型(字典)
*/
private String documentType;
/**
* 证件号码
*/
private String idNumber;
/**
* 出生日期
*/
private Date birthday;
/**
* 年龄
*/
private String age;
/**
* 居住地址
*/
private String residentialAddress;
/**
* 通讯地址
*/
private String mailingAddress;
/**
* 移动电话区号
*/
private String mobileCode;
/**
* 移动电话
*/
private String mobile;
/**
* 邮箱
*/
private String email;
/**
* 公司名称
*/
private String companyName;
/**
* 公司地址
*/
private String companyAddress;
/**
* 行业
*/
private String industry;
/**
* 职位
*/
private String position;
/**
* 风险偏好(字典)
*/
private String riskAppetite;
/**
* 是否VIP: 0-否, 1-是(字典)
*/
private Integer isVip;
/**
* vip备注
*/
private String vipRemark;
/**
* 称谓(字典)
*/
private String appellation;
/**
* 是否区分吸烟(字典)
*/
private String smokingAllowed;
/**
* 出生地(省市)
*/
private String birthplace;
/**
* 国籍
*/
private String nationality;
/**
* 护照号码
*/
private String passportNo;
/**
* 通行证号码
*/
private String passNo;
/**
* 身高
*/
private String height;
/**
* 体重
*/
private String weight;
/**
* BMI
*/
private String bmi;
/**
* 平均每月支出
*/
private BigDecimal monthExpenditure;
/**
* 平均每月收入
*/
private BigDecimal monthIncome;
/**
* 受雇于现职年期
*/
private BigDecimal currentTenure;
/**
* 总流动资产
*/
private BigDecimal totalCurrentAssets;
/**
* 总负债额
*/
private BigDecimal totalDebt;
/**
* 受供养人数目
*/
private Integer dependentsNum;
/**
* 婚姻状况(字典)
*/
private String maritalStatus;
/**
* 教育程度(字典)
*/
private String educationLevel;
/**
* 总工作年期
*/
private BigDecimal totalWorkingYears;
/**
* 现时每月收入
*/
private BigDecimal currentMonthlyIncome;
/**
* 公司电话区号
*/
private String companyMobileCode;
/**
* 公司电话
*/
private String companyMobile;
/**
* 固定电话区号
*/
private String landlineCode;
/**
* 固定电话
*/
private String landline;
/**
* 其他电话
*/
private String otherMobile;
/**
* 过往一年是否所属国家以外地区居住超过182日: 0-否, 1-是(字典)
*/
private Integer isExceed;
/**
* 是否拥有其他国家公民身份(如美国、日本等): 0-否, 1-是(字典)
*/
private Integer isOtherCountry;
/**
* 是否接受推广信息: 0-否, 1-是(字典)
*/
private Integer isPromotion;
/**
* 投保人邮政编码
*/
private String postalCode;
/**
* 旅行(字典)
*/
private String travel;
/**
* 运动(字典)
*/
private String exercise;
/**
* 游戏(字典)
*/
private String game;
/**
* 电影/戏剧(字典)
*/
private String movieDrama;
/**
* 美食(字典)
*/
private String delicacy;
/**
* 地址列表(json串)
*/
private String addressList;
/**
* 吸烟量(支/天)
*/
private String smokingVolume;
/**
* 货币(字典)
*/
private String currency;
/**
* 公司名称(英文)
*/
private String companyNameEn;
/**
* 公司商业登记号码
*/
private String companyBusinessNo;
/**
* 公司注册日期
*/
private Date companyRegisterTime;
/**
* 公司注册地区(字典)
*/
private String companyRegisterRegion;
/**
* 公司邮箱
*/
private String companyEmail;
/**
* 公司登记地址
*/
private String companyEnterAddress;
/**
* 授权代表姓名中文-名字
*/
private String authNameCn;
/**
* 授权代表姓名英文-名字
*/
private String authNameEn;
/**
* 授权代表职称
*/
private String authProfessional;
/**
* 授权代表电话区号
*/
private String authMobileCode;
/**
* 授权代表电话
*/
private String authMobile;
/**
* 通用备注
*/
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_second_holder
*/
@TableName(value ="policy_second_holder")
@Data
public class PolicySecondHolder implements Serializable {
/**
*
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 第二持有人信息表唯一业务ID
*/
private String policySecondHolderBizId;
/**
* 新单跟进业务ID
*/
private String policyBizId;
/**
* 保单号
*/
private String policyNo;
/**
* 与受保人关系(字典)
*/
private String insurantRel;
/**
* 名字
*/
private String name;
/**
* 名字-英文
*/
private String nameEn;
/**
* 性别(字典)
*/
private String gender;
/**
* 证件类型(字典)
*/
private String documentType;
/**
* 证件号码
*/
private String idNumber;
/**
* 护照号码
*/
private String passportNumber;
/**
* 出生日期
*/
private Date birthTime;
/**
* 年龄
*/
private String age;
/**
* 通用备注
*/
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.dto.PolicyAdditionalAddRequest;
import com.yd.csf.service.dto.PolicyAdditionalUpdateRequest;
import com.yd.csf.service.model.PolicyAdditional;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Map;
/**
* @author Zhang Jianan
* @description 针对表【policy_additional(保单附加险信息表)】的数据库操作Service
* @createDate 2025-11-03 11:05:09
*/
public interface PolicyAdditionalService extends IService<PolicyAdditional> {
Map<String, Object> addPolicyAdditional(PolicyAdditionalAddRequest policyAdditionalAddRequest);
PolicyAdditional getByBizId(String policyAdditionalBizId);
Boolean updatePolicyAdditional(PolicyAdditionalUpdateRequest policyUpdateRequest);
}
package com.yd.csf.service.service;
import com.yd.csf.service.model.PolicyBeneficiary;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Zhang Jianan
* @description 针对表【policy_beneficiary(受益人信息表)】的数据库操作Service
* @createDate 2025-10-31 11:43:16
*/
public interface PolicyBeneficiaryService extends IService<PolicyBeneficiary> {
}
package com.yd.csf.service.service;
import com.yd.csf.service.model.PolicyFollowFile;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Zhang Jianan
* @description 针对表【policy_follow_file(新单跟进附件信息表)】的数据库操作Service
* @createDate 2025-10-29 13:32:29
*/
public interface PolicyFollowFileService extends IService<PolicyFollowFile> {
}
package com.yd.csf.service.service;
import com.yd.csf.service.model.PolicyFollowRecord;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yd.csf.service.vo.PolicyFollowRecordVO;
import java.util.List;
/**
* @author Zhang Jianan
* @description 针对表【policy_follow_record(新单跟进记录表)】的数据库操作Service
* @createDate 2025-10-28 17:29:50
*/
public interface PolicyFollowRecordService extends IService<PolicyFollowRecord> {
List<PolicyFollowRecordVO> getVOList(List<PolicyFollowRecord> policyFollowStatusList);
}
...@@ -3,10 +3,8 @@ package com.yd.csf.service.service; ...@@ -3,10 +3,8 @@ package com.yd.csf.service.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.yd.csf.service.dto.AddToPolicyRequest; import com.yd.csf.service.dto.*;
import com.yd.csf.service.dto.PolicyFollowAddRequest; import com.yd.csf.service.enums.PolicyFollowStatusEnum;
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.model.PolicyFollow;
import com.yd.csf.service.vo.PolicyFollowVO; import com.yd.csf.service.vo.PolicyFollowVO;
...@@ -32,4 +30,12 @@ public interface PolicyFollowService extends IService<PolicyFollow> { ...@@ -32,4 +30,12 @@ public interface PolicyFollowService extends IService<PolicyFollow> {
Map<String, Object> addPolicyFollow(PolicyFollowAddRequest policyFollowAddRequest); Map<String, Object> addPolicyFollow(PolicyFollowAddRequest policyFollowAddRequest);
Boolean addToPolicy(AddToPolicyRequest addToPolicyRequest); Boolean addToPolicy(AddToPolicyRequest addToPolicyRequest);
Boolean changePolicyFollowStatus(ChangePolicyFollowStatusRequest changePolicyFollowStatusRequest);
Boolean uploadAttachment(AttachmentUploadRequest attachmentUploadRequest);
String getNextStatus(PolicyFollowStatusEnum policyFollowStatusEnum);
PolicyFollowAggregateDto getPolicyFollowAggregate(String policyBizId);
} }
package com.yd.csf.service.service;
import com.yd.csf.service.dto.PolicyInsurantUpdateRequest;
import com.yd.csf.service.model.PolicyInsurant;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Zhang Jianan
* @description 针对表【policy_insurant(保单受保人信息表)】的数据库操作Service
* @createDate 2025-10-31 13:29:18
*/
public interface PolicyInsurantService extends IService<PolicyInsurant> {
/**
* 更新受保人信息
*
* @param policyInsurantUpdateRequest
* @return
*/
boolean update(PolicyInsurantUpdateRequest policyInsurantUpdateRequest);
}
package com.yd.csf.service.service;
import com.yd.csf.service.dto.PolicyPolicyholderUpdateRequest;
import com.yd.csf.service.model.PolicyPolicyholder;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Zhang Jianan
* @description 针对表【policy_policyholder(保单投保人信息表)】的数据库操作Service
* @createDate 2025-10-31 11:43:10
*/
public interface PolicyPolicyholderService extends IService<PolicyPolicyholder> {
/**
* 更新保单投保人信息
*
* @param policyPolicyholderUpdateRequest
* @return
*/
boolean update(PolicyPolicyholderUpdateRequest policyPolicyholderUpdateRequest);
}
package com.yd.csf.service.service;
import com.yd.csf.service.model.PolicySecondHolder;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Zhang Jianan
* @description 针对表【policy_second_holder(第二持有人信息表)】的数据库操作Service
* @createDate 2025-10-31 13:29:23
*/
public interface PolicySecondHolderService extends IService<PolicySecondHolder> {
}
package com.yd.csf.service.service; package com.yd.csf.service.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.csf.service.dto.PolicyDto; import com.yd.csf.service.dto.PolicyDto;
import com.yd.csf.service.dto.PolicyQueryRequest; import com.yd.csf.service.dto.PolicyQueryRequest;
import com.yd.csf.service.dto.PolicyUpdateRequest;
import com.yd.csf.service.model.Policy; import com.yd.csf.service.model.Policy;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.yd.csf.service.vo.PolicyVO; import com.yd.csf.service.vo.PolicyVO;
...@@ -22,5 +22,8 @@ public interface PolicyService extends IService<Policy> { ...@@ -22,5 +22,8 @@ public interface PolicyService extends IService<Policy> {
Page<PolicyVO> getPolicyVOPage(Page<Policy> policyPage); Page<PolicyVO> getPolicyVOPage(Page<Policy> policyPage);
Boolean updatePolicy(PolicyUpdateRequest policyUpdateRequest);
List<Policy> queryList(PolicyDto dto); List<Policy> queryList(PolicyDto dto);
} }
...@@ -70,7 +70,7 @@ public class FnaServiceImpl extends ServiceImpl<FnaMapper, Fna> implements FnaSe ...@@ -70,7 +70,7 @@ public class FnaServiceImpl extends ServiceImpl<FnaMapper, Fna> implements FnaSe
fna.setFnaBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_FNA.getCode())); fna.setFnaBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_FNA.getCode()));
fna.setCreatorId(userBizId); fna.setCreatorId(userBizId);
fna.setUpdaterId(userBizId); fna.setUpdaterId(userBizId);
fna.setStatus(FnaStatusEnum.DRAFT.getItemValue()); fna.setStatus(FnaStatusEnum.UNCOMPLETED.getItemValue());
Date date = new Date(); Date date = new Date();
fna.setCreateTime(date); fna.setCreateTime(date);
...@@ -289,7 +289,7 @@ public class FnaServiceImpl extends ServiceImpl<FnaMapper, Fna> implements FnaSe ...@@ -289,7 +289,7 @@ public class FnaServiceImpl extends ServiceImpl<FnaMapper, Fna> implements FnaSe
if (StringUtils.isNotBlank(fnaUpdateRequest.getCustomerBizId())) { if (StringUtils.isNotBlank(fnaUpdateRequest.getCustomerBizId())) {
Customer customer = customerService.getByCustomerBizId(fnaUpdateRequest.getCustomerBizId()); Customer customer = customerService.getByCustomerBizId(fnaUpdateRequest.getCustomerBizId());
fna.setCustomerName(customer.getName()); fna.setCustomerName(customer.getFirstNamePinyin());
} }
// 设置 状态 // 设置 状态
String customerBizId = fnaUpdateRequest.getCustomerBizId(); String customerBizId = fnaUpdateRequest.getCustomerBizId();
......
package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.service.dto.PolicyAdditionalAddRequest;
import com.yd.csf.service.dto.PolicyAdditionalUpdateRequest;
import com.yd.csf.service.model.PolicyAdditional;
import com.yd.csf.service.service.PolicyAdditionalService;
import com.yd.csf.service.dao.PolicyAdditionalMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.Date;
import java.util.Map;
/**
* @author Zhang Jianan
* @description 针对表【policy_additional(保单附加险信息表)】的数据库操作Service实现
* @createDate 2025-11-03 11:05:09
*/
@Service
public class PolicyAdditionalServiceImpl extends ServiceImpl<PolicyAdditionalMapper, PolicyAdditional>
implements PolicyAdditionalService{
@Override
public Map<String, Object> addPolicyAdditional(PolicyAdditionalAddRequest policyAdditionalAddRequest) {
// 校验请求参数
if (policyAdditionalAddRequest == null) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), ResultCode.PARAMS_ERROR.getMessage());
}
// 转换为实体类
PolicyAdditional policyAdditional = new PolicyAdditional();
BeanUtils.copyProperties(policyAdditionalAddRequest, policyAdditional);
policyAdditional.setAdditionalProductBizId(RandomStringGenerator.generateBizId16("policy_additional"));
Date now = new Date();
policyAdditional.setCreateTime(now);
policyAdditional.setUpdateTime(now);
// 保存到数据库
this.saveOrUpdate(policyAdditional);
// 返回结果
return Collections.singletonMap("policyAdditionalBizId", policyAdditional.getPolicyAdditionalBizId());
}
@Override
public PolicyAdditional getByBizId(String policyAdditionalBizId) {
return this.getOne(new QueryWrapper<PolicyAdditional>().eq("policy_additional_biz_id", policyAdditionalBizId));
}
@Override
public Boolean updatePolicyAdditional(PolicyAdditionalUpdateRequest policyUpdateRequest) {
// 校验请求参数
if (policyUpdateRequest == null || policyUpdateRequest.getPolicyAdditionalBizId() == null) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), ResultCode.PARAMS_ERROR.getMessage());
}
// 转换为实体类
PolicyAdditional policyAdditional = new PolicyAdditional();
BeanUtils.copyProperties(policyUpdateRequest, policyAdditional);
policyAdditional.setUpdateTime(new Date());
// 保存到数据库
return this.updateById(policyAdditional);
}
}
package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.csf.service.model.PolicyBeneficiary;
import com.yd.csf.service.service.PolicyBeneficiaryService;
import com.yd.csf.service.dao.PolicyBeneficiaryMapper;
import org.springframework.stereotype.Service;
/**
* @author Zhang Jianan
* @description 针对表【policy_beneficiary(受益人信息表)】的数据库操作Service实现
* @createDate 2025-10-31 11:43:16
*/
@Service
public class PolicyBeneficiaryServiceImpl extends ServiceImpl<PolicyBeneficiaryMapper, PolicyBeneficiary>
implements PolicyBeneficiaryService{
}
package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.csf.service.model.PolicyFollowFile;
import com.yd.csf.service.service.PolicyFollowFileService;
import com.yd.csf.service.dao.PolicyFollowFileMapper;
import org.springframework.stereotype.Service;
/**
* @author Zhang Jianan
* @description 针对表【policy_follow_file(新单跟进附件信息表)】的数据库操作Service实现
* @createDate 2025-10-29 13:32:29
*/
@Service
public class PolicyFollowFileServiceImpl extends ServiceImpl<PolicyFollowFileMapper, PolicyFollowFile>
implements PolicyFollowFileService{
}
package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.csf.service.model.PolicyFollowRecord;
import com.yd.csf.service.service.PolicyFollowRecordService;
import com.yd.csf.service.dao.PolicyFollowRecordMapper;
import com.yd.csf.service.vo.PolicyFollowRecordVO;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Zhang Jianan
* @description 针对表【policy_follow_record(新单跟进记录表)】的数据库操作Service实现
* @createDate 2025-10-28 17:29:50
*/
@Service
public class PolicyFollowRecordServiceImpl extends ServiceImpl<PolicyFollowRecordMapper, PolicyFollowRecord>
implements PolicyFollowRecordService{
@Override
public List<PolicyFollowRecordVO> getVOList(List<PolicyFollowRecord> policyFollowStatusList) {
if (CollectionUtils.isEmpty(policyFollowStatusList)) {
return Collections.emptyList();
}
return policyFollowStatusList.stream()
.map(PolicyFollowRecordVO::objToVO)
.collect(Collectors.toList());
}
}
package com.yd.csf.service.service.impl; package com.yd.csf.service.service.impl;
import cn.hutool.core.collection.CollUtil; 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.core.conditions.query.QueryWrapper;
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.auth.core.dto.AuthUserDto; import com.yd.auth.core.dto.AuthUserDto;
import com.yd.auth.core.utils.SecurityUtil; import com.yd.auth.core.utils.SecurityUtil;
import com.yd.common.enums.CommonEnum; import com.yd.common.enums.CommonEnum;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException; import com.yd.common.exception.BusinessException;
import com.yd.common.utils.RandomStringGenerator; import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.feign.dto.appointment.ApiProductPlanAdditionalInfoDto;
import com.yd.csf.feign.dto.appointment.ApiProductPlanInfoDto;
import com.yd.csf.feign.dto.appointment.ApiProductPlanMainInfoDto;
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.Policy; import com.yd.csf.service.enums.PolicyFollowStatusEnum;
import com.yd.csf.service.model.PolicyBroker; import com.yd.csf.service.model.*;
import com.yd.csf.service.model.PolicyFollow; import com.yd.csf.service.service.*;
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.dao.PolicyFollowMapper;
import com.yd.csf.service.service.PolicyService; import com.yd.csf.service.utils.AsyncQueryUtil;
import com.yd.csf.service.vo.PolicyFollowVO; import com.yd.csf.service.vo.PolicyFollowVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Collections; import java.util.*;
import java.util.Date; import java.util.concurrent.CompletableFuture;
import java.util.List; import java.util.concurrent.TimeUnit;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -38,6 +41,7 @@ import java.util.stream.Collectors; ...@@ -38,6 +41,7 @@ import java.util.stream.Collectors;
* @createDate 2025-09-16 18:18:06 * @createDate 2025-09-16 18:18:06
*/ */
@Service @Service
@Slf4j
public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, PolicyFollow> public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, PolicyFollow>
implements PolicyFollowService{ implements PolicyFollowService{
...@@ -45,6 +49,25 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -45,6 +49,25 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
private PolicyBrokerService policyBrokerService; private PolicyBrokerService policyBrokerService;
@Resource @Resource
private PolicyService policyService; private PolicyService policyService;
@Resource
private PolicyFollowService policyFollowService;
@Resource
private PolicyFollowRecordService policyFollowRecordService;
@Resource
private PolicyFollowFileService policyFollowFileService;
@Resource
private AsyncQueryUtil asyncQueryUtil;
@Resource
private PolicyPolicyholderService policyPolicyholderService;
@Resource
private PolicyInsurantService policyInsurantService;
@Resource
private PolicyBeneficiaryService policyBeneficiaryService;
@Resource
private PolicySecondHolderService policySecondHolderService;
@Resource
private PolicyAdditionalService policyAdditionalService;
@Override @Override
public PolicyFollow getByPolicyBizId(String policyBizId) { public PolicyFollow getByPolicyBizId(String policyBizId) {
...@@ -92,7 +115,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -92,7 +115,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
List<PolicyFollowVO> policyFollowVOList = policyFollowList.stream().map(PolicyFollowVO::objToVo).collect(Collectors.toList()); List<PolicyFollowVO> policyFollowVOList = policyFollowList.stream().map(PolicyFollowVO::objToVo).collect(Collectors.toList());
// 关联查询转介人 // 关联查询转介人
List<String> policyBizIdList = policyFollowVOList.stream().map(PolicyFollowVO::getPolicyBizId).collect(Collectors.toList()); List<String> policyBizIdList = policyFollowList.stream().map(PolicyFollow::getPolicyBizId).collect(Collectors.toList());
if (CollUtil.isNotEmpty(policyBizIdList)) { if (CollUtil.isNotEmpty(policyBizIdList)) {
// 转介人业务id列表 => 转介人列表 // 转介人业务id列表 => 转介人列表
List<PolicyBroker> policyBrokerList = policyBrokerService.list(new QueryWrapper<PolicyBroker>().in("policy_biz_id", policyBizIdList)); List<PolicyBroker> policyBrokerList = policyBrokerService.list(new QueryWrapper<PolicyBroker>().in("policy_biz_id", policyBizIdList));
...@@ -111,15 +134,24 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -111,15 +134,24 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean updatePolicyFollow(PolicyFollowUpdateRequest policyFollowUpdateRequest) { public Boolean updatePolicyFollow(PolicyFollowUpdateRequest policyFollowUpdateRequest) {
if (policyFollowUpdateRequest == null || ObjectUtils.isEmpty(policyFollowUpdateRequest.getPolicyBizId())) { // 校验参数
throw new BusinessException(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage()); if (StringUtils.isBlank(policyFollowUpdateRequest.getPolicyBizId())) {
throw new BusinessException(ErrorCode.PARAMS_ERROR.getCode(), "policyBizId不能为空");
} }
String policyBizId = policyFollowUpdateRequest.getPolicyBizId(); String policyBizId = policyFollowUpdateRequest.getPolicyBizId();
PolicyFollow policyFollow = getByPolicyBizId(policyBizId); PolicyFollow policyFollow = getByPolicyBizId(policyBizId);
if (policyFollow == null) { if (policyFollow == null) {
throw new BusinessException(ErrorCode.NOT_FOUND_ERROR.getCode(), ErrorCode.NOT_FOUND_ERROR.getMessage()); throw new BusinessException(ErrorCode.NOT_FOUND_ERROR.getCode(), ErrorCode.NOT_FOUND_ERROR.getMessage());
} }
BeanUtils.copyProperties(policyFollowUpdateRequest, policyFollow, "id", "policyBizId"); // 跟进信息
PolicyFollowUpdateDto policyFollowUpdateDto = policyFollowUpdateRequest.getPolicyFollowUpdateDto();
if (policyFollowUpdateDto != null) {
BeanUtils.copyProperties(policyFollowUpdateDto, policyFollow, "id", "policyBizId");
}
// 设置核保信息
setValidPolicyInfo(policyFollow, policyFollowUpdateRequest.getVerifyPolicyInfo());
// 设置保单邮寄
setPolicyMailing(policyFollow, policyFollowUpdateRequest.getPolicyMailing());
// 获取当前登录用户 // 获取当前登录用户
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser(); AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
...@@ -127,10 +159,12 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -127,10 +159,12 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
policyFollow.setUpdaterId(loginUserId); policyFollow.setUpdaterId(loginUserId);
policyFollow.setUpdateTime(new Date()); policyFollow.setUpdateTime(new Date());
// 修改转介人
List<PolicyBrokerDto> brokerList = policyFollowUpdateRequest.getBrokerList();
if (CollUtil.isNotEmpty(brokerList)) {
// 先删除原有的转介人 // 先删除原有的转介人
policyBrokerService.remove(new QueryWrapper<PolicyBroker>().eq("policy_biz_id", policyBizId)); policyBrokerService.remove(new QueryWrapper<PolicyBroker>().eq("policy_biz_id", policyBizId));
// 保存转介人
List<PolicyBrokerDto> brokerList = policyFollowUpdateRequest.getBrokerList();
List<PolicyBroker> policyBrokerList = brokerList.stream().map(policyBrokerDto -> { List<PolicyBroker> policyBrokerList = brokerList.stream().map(policyBrokerDto -> {
PolicyBroker policyBroker = new PolicyBroker(); PolicyBroker policyBroker = new PolicyBroker();
BeanUtils.copyProperties(policyBrokerDto, policyBroker); BeanUtils.copyProperties(policyBrokerDto, policyBroker);
...@@ -145,9 +179,34 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -145,9 +179,34 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
if (CollUtil.isNotEmpty(policyBrokerList)) { if (CollUtil.isNotEmpty(policyBrokerList)) {
policyBrokerService.saveBatch(policyBrokerList); policyBrokerService.saveBatch(policyBrokerList);
} }
}
return updateById(policyFollow); return updateById(policyFollow);
} }
private void setPolicyMailing(PolicyFollow policyFollow, PolicyMailing policyMailing) {
if (policyMailing == null) {
return;
}
policyFollow.setMailingMethod(policyMailing.getMailingMethod());
policyFollow.setBrokerSignDate(policyMailing.getBrokerSignDate());
policyFollow.setInsurerMailingDate(policyMailing.getInsurerMailingDate());
policyFollow.setCustomerSignDate(policyMailing.getCustomerSignDate());
}
private void setValidPolicyInfo(PolicyFollow policyFollow, VerifyPolicyInfo verifyPolicyInfo) {
if (verifyPolicyInfo == null) {
return;
}
policyFollow.setSubmitDate(verifyPolicyInfo.getSubmitDate());
policyFollow.setSignDate(verifyPolicyInfo.getSignDate());
policyFollow.setIssueDate(verifyPolicyInfo.getIssueDate());
policyFollow.setEffectiveDate(verifyPolicyInfo.getEffectiveDate());
policyFollow.setIsPrepaid(verifyPolicyInfo.getIsPrepaid());
policyFollow.setPrepaidAmount(verifyPolicyInfo.getPrepaidAmount());
policyFollow.setPrepaidAmountAfterDiscount(verifyPolicyInfo.getPrepaidAmountAfterDiscount());
policyFollow.setPolicyExpirationDate(verifyPolicyInfo.getPolicyExpirationDate());
}
@Override @Override
public PolicyFollowVO getPolicyFollowVO(PolicyFollow policyFollow) { public PolicyFollowVO getPolicyFollowVO(PolicyFollow policyFollow) {
if (policyFollow == null) { if (policyFollow == null) {
...@@ -228,6 +287,217 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -228,6 +287,217 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
return true; return true;
} }
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean changePolicyFollowStatus(ChangePolicyFollowStatusRequest changePolicyFollowStatusRequest) {
if (changePolicyFollowStatusRequest == null || StringUtils.isBlank(changePolicyFollowStatusRequest.getPolicyBizId())) {
throw new BusinessException(ErrorCode.PARAMS_ERROR.getCode(), "policyBizId不能为空");
}
String policyBizId = changePolicyFollowStatusRequest.getPolicyBizId();
PolicyFollow policyFollow = getByPolicyBizId(policyBizId);
if (policyFollow == null) {
throw new BusinessException(ErrorCode.NOT_FOUND_ERROR.getCode(), ErrorCode.NOT_FOUND_ERROR.getMessage());
}
// 校验状态是否存在
PolicyFollowStatusEnum policyFollowStatusEnum = PolicyFollowStatusEnum.getEnumByValue(changePolicyFollowStatusRequest.getStatus());
if (policyFollowStatusEnum == null) {
throw new BusinessException(ResultCode.PARAM_CHECK_ERROR.getCode(), "跟进状态不存在");
}
// 获取当前跟进状态
PolicyFollowStatusEnum currentStatusEnum = PolicyFollowStatusEnum.getEnumByValue(policyFollow.getStatus());
// 校验状态是否可变更
if (PolicyFollowStatusEnum.FINISHED.equals(currentStatusEnum)
|| PolicyFollowStatusEnum.DECLINED.equals(currentStatusEnum)
|| PolicyFollowStatusEnum.CANCELLED.equals(currentStatusEnum)
) {
throw new BusinessException(ResultCode.PARAM_CHECK_ERROR.getCode(), "已完成、已拒绝、已取消状态不能变更");
}
// 校验状态
validPolicyFollowStatus(currentStatusEnum, policyFollowStatusEnum);
// 获取当前登录用户
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
String loginUserId = currentLoginUser.getId().toString();
policyFollow.setStatus(changePolicyFollowStatusRequest.getStatus());
policyFollow.setNextStatusList(getNextStatus(policyFollowStatusEnum));
policyFollow.setUpdaterId(loginUserId);
policyFollowService.updateById(policyFollow);
// 新增新单状态记录
PolicyFollowRecord policyFollowRecord = new PolicyFollowRecord();
policyFollowRecord.setId(null);
policyFollowRecord.setPolicyBizId(policyBizId);
policyFollowRecord.setTitle(Objects.requireNonNull(policyFollowStatusEnum.getItemLabel()));
policyFollowRecord.setMessage(changePolicyFollowStatusRequest.getMessage());
policyFollowRecord.setCreatorId(loginUserId);
policyFollowRecord.setCreateTime(new Date());
policyFollowRecordService.save(policyFollowRecord);
return true;
}
@Override
public String getNextStatus(PolicyFollowStatusEnum policyFollowStatusEnum) {
switch (policyFollowStatusEnum) {
case CHECKING:
return PolicyFollowStatusEnum.UNDERWRITING.getItemValue() + ","
+ PolicyFollowStatusEnum.CANCELLED.getItemValue();
case UNDERWRITING:
return PolicyFollowStatusEnum.FINISHED.getItemValue() + ","
+ PolicyFollowStatusEnum.DECLINED.getItemValue() + ","
+ PolicyFollowStatusEnum.CANCELLED.getItemValue();
default:
return null;
}
}
/**
* 异步聚合查询新单跟进详情
*/
@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)
.get(5, TimeUnit.SECONDS); // 5秒超时
// 3. 构建聚合结果
PolicyFollowAggregateDto aggregateDto = PolicyFollowAggregateDto.convertToDto(
policyFuture.get(),
additionalListFuture.get(),
policyholderFuture.get(),
insurantListFuture.get(),
beneficiaryListFuture.get(),
policySecondHolderFuture.get()
);
aggregateDto.setPolicyBizId(policyBizId);
aggregateDto.setCustomerBizId(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 Boolean uploadAttachment(AttachmentUploadRequest attachmentUploadRequest) {
String policyBizId = attachmentUploadRequest.getPolicyBizId();
if (policyBizId == null) {
throw new BusinessException(ErrorCode.PARAMS_ERROR.getCode(), "policyBizId不能为空");
}
String fileName = attachmentUploadRequest.getFileName();
if (fileName == null) {
throw new BusinessException(ErrorCode.PARAMS_ERROR.getCode(), "fileName不能为空");
}
String fileUrl = attachmentUploadRequest.getFileUrl();
if (fileUrl == null) {
throw new BusinessException(ErrorCode.PARAMS_ERROR.getCode(), "fileUrl不能为空");
}
String ossFileBizId = attachmentUploadRequest.getOssFileBizId();
if (ossFileBizId == null) {
throw new BusinessException(ErrorCode.PARAMS_ERROR.getCode(), "ossFileBizId不能为空");
}
PolicyFollowFile policyFollowFile = new PolicyFollowFile();
policyFollowFile.setPolicyBizId(attachmentUploadRequest.getPolicyBizId());
policyFollowFile.setOssFileBizId(attachmentUploadRequest.getOssFileBizId());
policyFollowFile.setFileName(attachmentUploadRequest.getFileName());
policyFollowFile.setFileUrl(attachmentUploadRequest.getFileUrl());
return policyFollowFileService.save(policyFollowFile);
}
private static void validPolicyFollowStatus(PolicyFollowStatusEnum currentStatusEnum, PolicyFollowStatusEnum policyFollowStatusEnum) {
// 如果是已取消,则不校验
if (PolicyFollowStatusEnum.CANCELLED.equals(policyFollowStatusEnum)) {
return;
}
if (PolicyFollowStatusEnum.FOLLOW_UP.equals(currentStatusEnum) && !PolicyFollowStatusEnum.CHECKING.equals(policyFollowStatusEnum)) {
throw new BusinessException(ResultCode.PARAM_CHECK_ERROR.getCode(), "待跟进状态只能改为文件检查中");
}
if (PolicyFollowStatusEnum.CHECKING.equals(currentStatusEnum) && !PolicyFollowStatusEnum.UNDERWRITING.equals(policyFollowStatusEnum)) {
throw new BusinessException(ResultCode.PARAM_CHECK_ERROR.getCode(), "文件检查中状态只能改为承保中");
}
if (PolicyFollowStatusEnum.UNDERWRITING.equals(currentStatusEnum)) {
if (!(PolicyFollowStatusEnum.FINISHED.equals(policyFollowStatusEnum) || PolicyFollowStatusEnum.DECLINED.equals(policyFollowStatusEnum))) {
throw new BusinessException(ResultCode.PARAM_CHECK_ERROR.getCode(), "承保中状态只能改为已完成或已拒绝");
}
}
}
} }
......
package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.csf.service.dto.PolicyInsurantUpdateRequest;
import com.yd.csf.service.model.PolicyInsurant;
import com.yd.csf.service.service.PolicyInsurantService;
import com.yd.csf.service.dao.PolicyInsurantMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
* @author Zhang Jianan
* @description 针对表【policy_insurant(保单受保人信息表)】的数据库操作Service实现
* @createDate 2025-10-31 13:29:18
*/
@Service
public class PolicyInsurantServiceImpl extends ServiceImpl<PolicyInsurantMapper, PolicyInsurant>
implements PolicyInsurantService{
@Override
public boolean update(PolicyInsurantUpdateRequest policyInsurantUpdateRequest) {
if (policyInsurantUpdateRequest == null || policyInsurantUpdateRequest.getPolicyInsurantBizId() == null) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), ResultCode.PARAMS_ERROR.getMessage());
}
PolicyInsurant policyInsurant = this.getOne(new QueryWrapper<PolicyInsurant>().eq("policy_insurant_biz_id", policyInsurantUpdateRequest.getPolicyInsurantBizId()));
if (policyInsurant == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), ResultCode.NULL_ERROR.getMessage());
}
BeanUtils.copyProperties(policyInsurantUpdateRequest, policyInsurant, "policyBizId", "policyInsurantBizId", "id");
policyInsurant.setUpdateTime(new Date());
return this.updateById(policyInsurant);
}
}
package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.csf.service.dto.PolicyPolicyholderUpdateRequest;
import com.yd.csf.service.model.PolicyPolicyholder;
import com.yd.csf.service.service.PolicyPolicyholderService;
import com.yd.csf.service.dao.PolicyPolicyholderMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
* @author Zhang Jianan
* @description 针对表【policy_policyholder(保单投保人信息表)】的数据库操作Service实现
* @createDate 2025-10-31 11:43:10
*/
@Service
public class PolicyPolicyholderServiceImpl extends ServiceImpl<PolicyPolicyholderMapper, PolicyPolicyholder>
implements PolicyPolicyholderService{
@Override
public boolean update(PolicyPolicyholderUpdateRequest policyPolicyholderUpdateRequest) {
if (policyPolicyholderUpdateRequest == null || policyPolicyholderUpdateRequest.getPolicyPolicyholderBizId() == null) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), ResultCode.PARAMS_ERROR.getMessage());
}
PolicyPolicyholder policyPolicyholder = this.getOne(new QueryWrapper<PolicyPolicyholder>().eq("policy_policyholder_biz_id", policyPolicyholderUpdateRequest.getPolicyPolicyholderBizId()));
if (policyPolicyholder == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), ResultCode.NULL_ERROR.getMessage());
}
BeanUtils.copyProperties(policyPolicyholderUpdateRequest, policyPolicyholder, "policyBizId", "policyPolicyholderBizId", "id");
policyPolicyholder.setUpdateTime(new Date());
return this.updateById(policyPolicyholder);
}
}
package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.csf.service.model.PolicySecondHolder;
import com.yd.csf.service.service.PolicySecondHolderService;
import com.yd.csf.service.dao.PolicySecondHolderMapper;
import org.springframework.stereotype.Service;
/**
* @author Zhang Jianan
* @description 针对表【policy_second_holder(第二持有人信息表)】的数据库操作Service实现
* @createDate 2025-10-31 13:29:23
*/
@Service
public class PolicySecondHolderServiceImpl extends ServiceImpl<PolicySecondHolderMapper, PolicySecondHolder>
implements PolicySecondHolderService{
}
...@@ -5,21 +5,24 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -5,21 +5,24 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.csf.service.dto.PolicyDto; import com.yd.csf.service.dto.PolicyDto;
import com.yd.csf.service.dto.PolicyQueryRequest; import com.yd.csf.service.dto.PolicyQueryRequest;
import com.yd.csf.service.dto.PolicyUpdateRequest;
import com.yd.csf.service.model.AppointmentFile; import com.yd.csf.service.model.AppointmentFile;
import com.yd.csf.service.model.Policy; import com.yd.csf.service.model.Policy;
import com.yd.csf.service.service.PolicyPolicyholderService;
import com.yd.csf.service.service.PolicyService; import com.yd.csf.service.service.PolicyService;
import com.yd.csf.service.dao.PolicyMapper; import com.yd.csf.service.dao.PolicyMapper;
import com.yd.csf.service.vo.PolicyVO; import com.yd.csf.service.vo.PolicyVO;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.HashMap; import javax.annotation.Resource;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -31,6 +34,9 @@ import java.util.stream.Collectors; ...@@ -31,6 +34,9 @@ import java.util.stream.Collectors;
public class PolicyServiceImpl extends ServiceImpl<PolicyMapper, Policy> public class PolicyServiceImpl extends ServiceImpl<PolicyMapper, Policy>
implements PolicyService{ implements PolicyService{
@Resource
private PolicyPolicyholderService policyPolicyholderService;
@Override @Override
public QueryWrapper<Policy> getQueryWrapper(PolicyQueryRequest policyQueryRequest) { public QueryWrapper<Policy> getQueryWrapper(PolicyQueryRequest policyQueryRequest) {
QueryWrapper<Policy> queryWrapper = new QueryWrapper<>(); QueryWrapper<Policy> queryWrapper = new QueryWrapper<>();
...@@ -78,6 +84,22 @@ public class PolicyServiceImpl extends ServiceImpl<PolicyMapper, Policy> ...@@ -78,6 +84,22 @@ public class PolicyServiceImpl extends ServiceImpl<PolicyMapper, Policy>
return policyVOPage; return policyVOPage;
} }
@Override
public Boolean updatePolicy(PolicyUpdateRequest policyUpdateRequest) {
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(), "保单不存在");
}
BeanUtils.copyProperties(policyUpdateRequest, policy, "policyBizId", "id");
policy.setUpdateTime(new Date());
return this.updateById(policy);
}
/** /**
* 查询列表 * 查询列表
* @param dto * @param dto
......
package com.yd.csf.service.utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
import java.util.stream.Collectors;
/**
* 异步聚合查询工具类
* 专门用于接口中聚合查询多个数据实体的场景
*/
@Slf4j
@Component
public class AsyncQueryUtil {
/**
* 异步执行单个查询任务
*
* @param supplier 查询任务
* @param taskName 任务名称(用于日志)
* @return CompletableFuture
*/
@Async("asyncQueryExecutor")
public <T> CompletableFuture<T> asyncQuery(Supplier<T> supplier, String taskName) {
long startTime = System.currentTimeMillis();
try {
log.info("开始异步查询任务: {}", taskName);
T result = supplier.get();
long costTime = System.currentTimeMillis() - startTime;
log.info("异步查询任务完成: {}, 耗时: {}ms", taskName, costTime);
return CompletableFuture.completedFuture(result);
} catch (Exception e) {
log.error("异步查询任务失败: {}, 错误: {}", taskName, e.getMessage(), e);
// 使用兼容性工具类替代CompletableFuture.failedFuture()
return CompletableFutureUtil.failedFuture(e);
}
}
/**
* 批量异步查询,等待所有任务完成
*
* @param tasks 查询任务列表
* @return 所有查询结果的CompletableFuture
*/
public <T> CompletableFuture<List<T>> batchAsyncQuery(List<CompletableFuture<T>> tasks) {
return CompletableFutureUtil.allOf(tasks.toArray(new CompletableFuture[0]))
.thenApply(v -> tasks.stream()
.map(CompletableFutureUtil::safeJoin) // 使用安全的join方法
.collect(Collectors.toList()));
}
/**
* 异步查询并设置超时时间
*
* @param supplier 查询任务
* @param taskName 任务名称
* @param timeoutMs 超时时间(毫秒)
* @return CompletableFuture
*/
@Async("asyncQueryExecutor")
public <T> CompletableFuture<T> asyncQueryWithTimeout(Supplier<T> supplier, String taskName, long timeoutMs) {
// 使用兼容性工具类的超时方法
return CompletableFutureUtil.supplyAsyncWithTimeout(supplier, timeoutMs, TimeUnit.MILLISECONDS)
.whenComplete((result, throwable) -> {
if (throwable != null) {
log.error("异步查询任务超时或失败: {}, 错误: {}", taskName, throwable.getMessage());
} else {
log.info("异步查询任务完成: {}", taskName);
}
});
}
/**
* 增强的异步查询方法,支持自定义异常处理
*/
@Async("asyncQueryExecutor")
public <T> CompletableFuture<T> enhancedAsyncQuery(Supplier<T> supplier, String taskName,
java.util.function.Function<Exception, T> exceptionHandler) {
long startTime = System.currentTimeMillis();
try {
log.info("开始增强异步查询任务: {}", taskName);
T result = supplier.get();
long costTime = System.currentTimeMillis() - startTime;
log.info("增强异步查询任务完成: {}, 耗时: {}ms", taskName, costTime);
return CompletableFuture.completedFuture(result);
} catch (Exception e) {
log.error("增强异步查询任务失败: {}, 错误: {}", taskName, e.getMessage(), e);
try {
// 使用自定义异常处理器
T fallbackResult = exceptionHandler.apply(e);
return CompletableFuture.completedFuture(fallbackResult);
} catch (Exception handlerException) {
log.error("异常处理器执行失败: {}, 错误: {}", taskName, handlerException.getMessage(), handlerException);
return CompletableFutureUtil.failedFuture(handlerException);
}
}
}
/**
* 并行执行多个查询任务,返回第一个成功的结果
*/
@SafeVarargs
public final <T> CompletableFuture<T> firstSuccessAsyncQuery(String taskName, Supplier<T>... suppliers) {
@SuppressWarnings("unchecked")
CompletableFuture<T>[] futures = new CompletableFuture[suppliers.length];
for (int i = 0; i < suppliers.length; i++) {
final int index = i;
futures[i] = asyncQuery(suppliers[i], taskName + "-" + (i + 1))
.exceptionally(e -> {
log.warn("查询任务 {} 失败: {}", taskName + "-" + (index + 1), e.getMessage());
return null; // 返回null表示失败,让其他任务继续
});
}
return CompletableFutureUtil.anyOf(futures)
.thenApply(result -> {
if (result == null) {
throw new RuntimeException("所有查询任务都失败了: " + taskName);
}
return result;
});
}
/**
* 重试机制的异步查询
*/
@Async("asyncQueryExecutor")
public <T> CompletableFuture<T> retryAsyncQuery(Supplier<T> supplier, String taskName, int maxRetries, long retryDelayMs) {
return retryAsyncQueryInternal(supplier, taskName, maxRetries, retryDelayMs, 0);
}
private <T> CompletableFuture<T> retryAsyncQueryInternal(Supplier<T> supplier, String taskName,
int maxRetries, long retryDelayMs, int currentRetry) {
long startTime = System.currentTimeMillis();
try {
log.info("开始重试异步查询任务: {}, 重试次数: {}/{}", taskName, currentRetry, maxRetries);
T result = supplier.get();
long costTime = System.currentTimeMillis() - startTime;
log.info("重试异步查询任务完成: {}, 重试次数: {}, 耗时: {}ms", taskName, currentRetry, costTime);
return CompletableFuture.completedFuture(result);
} catch (Exception e) {
log.warn("重试异步查询任务失败: {}, 重试次数: {}, 错误: {}", taskName, currentRetry, e.getMessage());
if (currentRetry < maxRetries) {
// 延迟重试 - 使用thenCompose展平嵌套的CompletableFuture
return CompletableFutureUtil.delayedFuture(retryDelayMs, TimeUnit.MILLISECONDS, () -> null)
.thenCompose(ignored -> retryAsyncQueryInternal(supplier, taskName, maxRetries, retryDelayMs, currentRetry + 1));
} else {
log.error("重试异步查询任务最终失败: {}, 最大重试次数: {}", taskName, maxRetries);
return CompletableFutureUtil.failedFuture(e);
}
}
}
}
\ No newline at end of file
package com.yd.csf.service.utils;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.function.Supplier;
/**
* CompletableFuture兼容性工具类
* 提供Java 8兼容的CompletableFuture方法
*/
public class CompletableFutureUtil {
/**
* Java 8兼容的failedFuture方法
* 替代Java 9+的CompletableFuture.failedFuture()
*/
public static <T> CompletableFuture<T> failedFuture(Throwable ex) {
CompletableFuture<T> future = new CompletableFuture<>();
future.completeExceptionally(ex);
return future;
}
/**
* 创建已完成的异常Future(别名方法)
*/
public static <T> CompletableFuture<T> completedExceptionally(Throwable ex) {
return failedFuture(ex);
}
/**
* 安全的join方法,避免CompletionException包装
* 直接抛出原始异常
*/
public static <T> T safeJoin(CompletableFuture<T> future) {
try {
return future.join();
} catch (CompletionException e) {
Throwable cause = e.getCause();
if (cause instanceof RuntimeException) {
throw (RuntimeException) cause;
} else if (cause instanceof Error) {
throw (Error) cause;
} else {
throw new RuntimeException(cause);
}
}
}
/**
* 带超时的supplyAsync方法(Java 8兼容)
*/
public static <T> CompletableFuture<T> supplyAsyncWithTimeout(Supplier<T> supplier, long timeout, java.util.concurrent.TimeUnit unit) {
CompletableFuture<T> future = CompletableFuture.supplyAsync(supplier);
// 使用定时器模拟超时
java.util.Timer timeoutTimer = new java.util.Timer();
timeoutTimer.schedule(new java.util.TimerTask() {
@Override
public void run() {
if (!future.isDone()) {
future.completeExceptionally(new java.util.concurrent.TimeoutException("Operation timed out after " + timeout + " " + unit.name().toLowerCase()));
}
}
}, unit.toMillis(timeout));
return future.whenComplete((result, throwable) -> timeoutTimer.cancel());
}
/**
* 批量等待所有Future完成
*/
@SafeVarargs
public static CompletableFuture<Void> allOf(CompletableFuture<?>... futures) {
return CompletableFuture.allOf(futures);
}
/**
* 批量等待任意Future完成
*/
@SafeVarargs
public static <T> CompletableFuture<T> anyOf(CompletableFuture<T>... futures) {
return CompletableFuture.anyOf(futures).thenApply(obj -> (T) obj);
}
/**
* 延迟执行的CompletableFuture
*/
public static <T> CompletableFuture<T> delayedFuture(long delay, java.util.concurrent.TimeUnit unit, Supplier<T> supplier) {
CompletableFuture<T> future = new CompletableFuture<>();
java.util.Timer timer = new java.util.Timer();
timer.schedule(new java.util.TimerTask() {
@Override
public void run() {
try {
T result = supplier.get();
future.complete(result);
} catch (Exception e) {
future.completeExceptionally(e);
} finally {
timer.cancel();
}
}
}, unit.toMillis(delay));
return future;
}
}
\ No newline at end of file
package com.yd.csf.service.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yd.csf.service.model.PolicyFollowRecord;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Data
public class PolicyFollowRecordVO implements Serializable {
@Schema(description = "id")
private Long id;
/**
* 新单跟进唯一业务ID
*/
@Schema(description = "新单跟进唯一业务ID")
private String policyBizId;
/**
* 跟进状态
*/
@Schema(description = "跟进状态")
private String title;
/**
* 跟进信息
*/
@Schema(description = "跟进信息")
private String message;
/**
* 创建人ID
*/
@Schema(description = "创建人ID")
private String creatorId;
/**
* 创建人姓名
*/
@Schema(description = "创建人姓名")
private String creatorName;
/**
* 创建时间
*/
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private static final long serialVersionUID = 1L;
public static PolicyFollowRecordVO objToVO(PolicyFollowRecord policyFollowRecord) {
if (policyFollowRecord == null) {
return null;
}
PolicyFollowRecordVO policyFollowRecordVO = new PolicyFollowRecordVO();
BeanUtils.copyProperties(policyFollowRecord, policyFollowRecordVO);
return policyFollowRecordVO;
}
}
package com.yd.csf.service.vo; package com.yd.csf.service.vo;
import com.fasterxml.jackson.annotation.JsonFormat; import com.yd.csf.service.dto.PolicyFollowUpdateDto;
import com.yd.csf.service.model.Policy; import com.yd.csf.service.dto.PolicyMailing;
import com.yd.csf.service.dto.VerifyPolicyInfo;
import com.yd.csf.service.model.PolicyBroker; import com.yd.csf.service.model.PolicyBroker;
import com.yd.csf.service.model.PolicyFollow; import com.yd.csf.service.model.PolicyFollow;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
...@@ -9,8 +10,7 @@ import lombok.Data; ...@@ -9,8 +10,7 @@ import lombok.Data;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.util.Arrays;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
...@@ -20,6 +20,8 @@ import java.util.List; ...@@ -20,6 +20,8 @@ import java.util.List;
@Data @Data
public class PolicyFollowVO implements Serializable { public class PolicyFollowVO implements Serializable {
private static final long serialVersionUID = 1L;
/** /**
* 新单跟进唯一业务ID * 新单跟进唯一业务ID
*/ */
...@@ -27,119 +29,34 @@ public class PolicyFollowVO implements Serializable { ...@@ -27,119 +29,34 @@ public class PolicyFollowVO implements Serializable {
private String policyBizId; 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 = "签单日期")
@JsonFormat(pattern = "yyyy-MM-dd")
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 = "保险公司") @Schema(description = "下一步跟进状态列表, 下拉框")
private String insurer; private List<String> nextStatusList;
/** /**
* 保险公司业务id * 新单跟进Dto
*/ */
@Schema(description = "保险公司业务id") @Schema(description = "新单跟进Dto")
private String insurerBizId; private PolicyFollowUpdateDto policyFollowUpdateDto;
/** /**
* 对账公司 * 转介人
*/
@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 = "币种") @Schema(description = "转介人")
private String currency; private List<PolicyBroker> brokerList;
/** /**
* 首期保费(不含徽费,预缴保费) * 核保信息
*/ */
@Schema(description = "首期保费(不含徽费,预缴保费)") @Schema(description = "核保信息")
private Object initialPremium; private VerifyPolicyInfo verifyPolicyInfo;
/** /**
* 转介人 * 保单邮寄
*/ */
@Schema(description = "转介人") @Schema(description = "保单邮寄")
private List<PolicyBroker> brokerList; private PolicyMailing policyMailing;
/** /**
* 保单信息 * 保单信息
...@@ -158,7 +75,25 @@ public class PolicyFollowVO implements Serializable { ...@@ -158,7 +75,25 @@ public class PolicyFollowVO implements Serializable {
return null; return null;
} }
PolicyFollowVO policyFollowVO = new PolicyFollowVO(); PolicyFollowVO policyFollowVO = new PolicyFollowVO();
BeanUtils.copyProperties(policyFollow, policyFollowVO); policyFollowVO.setPolicyBizId(policyFollow.getPolicyBizId());
// 转换PolicyFollowUpdateDto
PolicyFollowUpdateDto policyFollowUpdateDto = new PolicyFollowUpdateDto();
BeanUtils.copyProperties(policyFollow, policyFollowUpdateDto);
policyFollowVO.setPolicyFollowUpdateDto(policyFollowUpdateDto);
if (policyFollow.getNextStatusList() != null) {
policyFollowVO.setNextStatusList(Arrays.asList(policyFollow.getNextStatusList().split(",")));
}
VerifyPolicyInfo verifyPolicyInfo = new VerifyPolicyInfo();
BeanUtils.copyProperties(policyFollow, verifyPolicyInfo);
policyFollowVO.setVerifyPolicyInfo(verifyPolicyInfo);
PolicyMailing policyMailing = new PolicyMailing();
BeanUtils.copyProperties(policyFollow, policyMailing);
policyFollowVO.setPolicyMailing(policyMailing);
return policyFollowVO; return policyFollowVO;
} }
} }
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
<select id="getItineraryDto" resultType="com.yd.csf.feign.dto.appointmentfile.ItineraryDto"> <select id="getItineraryDto" resultType="com.yd.csf.feign.dto.appointmentfile.ItineraryDto">
select select
a.arrival_time,a.meeting_point, a.arrival_time,a.meeting_point,a.confirm_appointment_time,
a.signing_address,a.business_represent_name1, a.signing_address,a.business_represent_name1,
a.business_represent_mobile1_code,a.business_represent_mobile1, a.business_represent_mobile1_code,a.business_represent_mobile1,
t.name,i.name as insurantName,pp.payment_term,pp.each_issue_premium, t.name,i.name as insurantName,pp.payment_term,pp.each_issue_premium,
......
<?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="com.yd.csf.service.dao.PolicyAdditionalMapper">
<resultMap id="BaseResultMap" type="com.yd.csf.service.model.PolicyAdditional">
<id property="id" column="id" />
<result property="policyAdditionalBizId" column="policy_additional_biz_id" />
<result property="policyBizId" column="policy_biz_id" />
<result property="policyNo" column="policy_no" />
<result property="planBizId" column="plan_biz_id" />
<result property="additionalProductBizId" column="additional_product_biz_id" />
<result property="addProductName" column="add_product_name" />
<result property="currency" column="currency" />
<result property="premium" column="premium" />
<result property="sumInsured" column="sum_insured" />
<result property="guaranteeRegion" column="guarantee_region" />
<result property="level" column="level" />
<result property="deductibles" column="deductibles" />
<result property="additionalSafeguards" column="additional_safeguards" />
<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_additional_biz_id,policy_biz_id,policy_no,plan_biz_id,additional_product_biz_id,
add_product_name,currency,premium,sum_insured,guarantee_region,
level,deductibles,additional_safeguards,remark,is_deleted,
creator_id,updater_id,create_time,update_time
</sql>
</mapper>
<?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="com.yd.csf.service.dao.PolicyBeneficiaryMapper">
<resultMap id="BaseResultMap" type="com.yd.csf.service.model.PolicyBeneficiary">
<id property="id" column="id" />
<result property="policyBeneficiaryBizId" column="policy_beneficiary_biz_id" />
<result property="policyBizId" column="policy_biz_id" />
<result property="policyNo" column="policy_no" />
<result property="customerType" column="customer_type" />
<result property="insurantRel" column="insurant_rel" />
<result property="benefitRatio" column="benefit_ratio" />
<result property="name" column="name" />
<result property="nameEn" column="name_en" />
<result property="gender" column="gender" />
<result property="documentType" column="document_type" />
<result property="idNumber" column="id_number" />
<result property="passportNumber" column="passport_number" />
<result property="birthTime" column="birth_time" />
<result property="companyName" column="company_name" />
<result property="companyNameEn" column="company_name_en" />
<result property="companyBusinessNo" column="company_business_no" />
<result property="companyRegisterTime" column="company_register_time" />
<result property="companyRegisterRegion" column="company_register_region" />
<result property="companyMobileCode" column="company_mobile_code" />
<result property="companyMobile" column="company_mobile" />
<result property="companyEmail" column="company_email" />
<result property="companyEnterAddress" column="company_enter_address" />
<result property="mailingAddress" column="mailing_address" />
<result property="authNameCn" column="auth_name_cn" />
<result property="authNameEn" column="auth_name_en" />
<result property="authProfessional" column="auth_professional" />
<result property="authMobileCode" column="auth_mobile_code" />
<result property="authMobile" column="auth_mobile" />
<result property="addressList" column="address_list" />
<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_beneficiary_biz_id,policy_biz_id,policy_no,customer_type,insurant_rel,
benefit_ratio,name,name_en,gender,document_type,
id_number,passport_number,birth_time,company_name,company_name_en,
company_business_no,company_register_time,company_register_region,company_mobile_code,company_mobile,
company_email,company_enter_address,mailing_address,auth_name_cn,auth_name_en,
auth_professional,auth_mobile_code,auth_mobile,address_list,remark,
is_deleted,creator_id,updater_id,create_time,update_time
</sql>
</mapper>
<?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="com.yd.csf.service.dao.PolicyFollowFileMapper">
<resultMap id="BaseResultMap" type="com.yd.csf.service.model.PolicyFollowFile">
<id property="id" column="id" />
<result property="policyBizId" column="policy_biz_id" />
<result property="ossFileBizId" column="oss_file_biz_id" />
<result property="fileName" column="file_name" />
<result property="fileUrl" column="file_url" />
<result property="remark" column="remark" />
<result property="isDeleted" column="is_deleted" />
<result property="creatorId" column="creator_id" />
<result property="creatorName" column="creator_name" />
<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,oss_file_biz_id,file_name,file_url,remark,
is_deleted,creator_id,creator_name,updater_id,create_time,
update_time
</sql>
</mapper>
...@@ -8,17 +8,26 @@ ...@@ -8,17 +8,26 @@
<id property="id" column="id" /> <id property="id" column="id" />
<result property="policyBizId" column="policy_biz_id" /> <result property="policyBizId" column="policy_biz_id" />
<result property="policyNo" column="policy_no" /> <result property="policyNo" column="policy_no" />
<result property="appointmentBizId" column="appointment_biz_id" />
<result property="appointmentNo" column="appointment_no" />
<result property="userBizId" column="user_biz_id" /> <result property="userBizId" column="user_biz_id" />
<result property="customerBizId" column="customer_biz_id" /> <result property="customerBizId" column="customer_biz_id" />
<result property="submitDate" column="submit_date" />
<result property="customerName" column="customer_name" /> <result property="customerName" column="customer_name" />
<result property="signDate" column="sign_date" /> <result property="signDate" column="sign_date" />
<result property="signer" column="signer" /> <result property="signer" column="signer" />
<result property="issueDate" column="issue_date" />
<result property="effectiveDate" column="effective_date" /> <result property="effectiveDate" column="effective_date" />
<result property="renewalDate" column="renewal_date" /> <result property="renewalDate" column="renewal_date" />
<result property="paymentTerm" column="payment_term" /> <result property="paymentTerm" column="payment_term" />
<result property="paymentPremium" column="payment_premium" /> <result property="paymentPremium" column="payment_premium" />
<result property="isPrepaid" column="is_prepaid" /> <result property="isPrepaid" column="is_prepaid" />
<result property="prepaidTerm" column="prepaid_term" /> <result property="prepaidTerm" column="prepaid_term" />
<result property="prepaidAmount" column="prepaid_amount" />
<result property="prepaidAmountAfterDiscount" column="prepaid_amount_after_discount" />
<result property="policyExpirationDate" column="policy_expiration_date" />
<result property="paymentNumber" column="payment_number" />
<result property="productBizId" column="product_biz_id" />
<result property="productName" column="product_name" /> <result property="productName" column="product_name" />
<result property="productCate" column="product_cate" /> <result property="productCate" column="product_cate" />
<result property="insurer" column="insurer" /> <result property="insurer" column="insurer" />
...@@ -26,10 +35,17 @@ ...@@ -26,10 +35,17 @@
<result property="reconciliationCompany" column="reconciliation_company" /> <result property="reconciliationCompany" column="reconciliation_company" />
<result property="reconciliationCompanyBizId" column="reconciliation_company_biz_id" /> <result property="reconciliationCompanyBizId" column="reconciliation_company_biz_id" />
<result property="status" column="status" /> <result property="status" column="status" />
<result property="nextStatusList" column="next_status_list" />
<result property="policyHolder" column="policy_holder" /> <result property="policyHolder" column="policy_holder" />
<result property="insured" column="insured" /> <result property="insured" column="insured" />
<result property="currency" column="currency" /> <result property="currency" column="currency" />
<result property="initialPremium" column="initial_premium" /> <result property="initialPremium" column="initial_premium" />
<result property="mailingMethod" column="mailing_method" />
<result property="deliveryNo" column="delivery_no" />
<result property="brokerSignDate" column="broker_sign_date" />
<result property="insurerMailingDate" column="insurer_mailing_date" />
<result property="customerSignDate" column="customer_sign_date" />
<result property="attachments" column="attachments" />
<result property="remark" column="remark" /> <result property="remark" column="remark" />
<result property="isDeleted" column="is_deleted" /> <result property="isDeleted" column="is_deleted" />
<result property="creatorId" column="creator_id" /> <result property="creatorId" column="creator_id" />
...@@ -39,10 +55,15 @@ ...@@ -39,10 +55,15 @@
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id,policy_biz_id,policy_no,user_biz_id,customer_biz_id,customer_name,sign_date,signer, id,policy_biz_id,policy_no,appointment_biz_id,appointment_no,user_biz_id,
effective_date,renewal_date,payment_term,payment_premium,is_prepaid,prepaid_term,product_name,product_cate, customer_biz_id,submit_date,customer_name,sign_date,signer,
insurer,insurer_biz_id,reconciliation_company,reconciliation_company_biz_id,status, issue_date,effective_date,renewal_date,payment_term,payment_premium,
policy_holder,insured,currency,initial_premium,remark, is_prepaid,prepaid_term,prepaid_amount,prepaid_amount_after_discount,policy_expiration_date,
is_deleted,creator_id,updater_id,create_time,update_time payment_number,product_biz_id,product_name,product_cate,insurer,
insurer_biz_id,reconciliation_company,reconciliation_company_biz_id,status,next_status_list,
policy_holder,insured,currency,initial_premium,mailing_method,
delivery_no,broker_sign_date,insurer_mailing_date,customer_sign_date,attachments,
remark,is_deleted,creator_id,updater_id,create_time,
update_time
</sql> </sql>
</mapper> </mapper>
<?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="com.yd.csf.service.dao.PolicyFollowRecordMapper">
<resultMap id="BaseResultMap" type="com.yd.csf.service.model.PolicyFollowRecord">
<id property="id" column="id" />
<result property="policyBizId" column="policy_biz_id" />
<result property="title" column="title" />
<result property="message" column="message" />
<result property="isDeleted" column="is_deleted" />
<result property="creatorId" column="creator_id" />
<result property="creatorName" column="creator_name" />
<result property="createTime" column="create_time" />
</resultMap>
<sql id="Base_Column_List">
id,policy_biz_id,title,message,is_deleted,creator_id,
creator_name,create_time
</sql>
</mapper>
<?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="com.yd.csf.service.dao.PolicyInsurantMapper">
<resultMap id="BaseResultMap" type="com.yd.csf.service.model.PolicyInsurant">
<id property="id" column="id" />
<result property="policyInsurantBizId" column="policy_insurant_biz_id" />
<result property="policyBizId" column="policy_biz_id" />
<result property="policyNo" column="policy_no" />
<result property="customerType" column="customer_type" />
<result property="customerBizId" column="customer_biz_id" />
<result property="customerNo" column="customer_no" />
<result property="policyholderRel" column="policyholder_rel" />
<result property="name" column="name" />
<result property="nameEn" column="name_en" />
<result property="gender" column="gender" />
<result property="documentType" column="document_type" />
<result property="idNumber" column="id_number" />
<result property="birthday" column="birthday" />
<result property="age" column="age" />
<result property="residentialAddress" column="residential_address" />
<result property="mailingAddress" column="mailing_address" />
<result property="mobileCode" column="mobile_code" />
<result property="mobile" column="mobile" />
<result property="email" column="email" />
<result property="companyName" column="company_name" />
<result property="companyAddress" column="company_address" />
<result property="industry" column="industry" />
<result property="position" column="position" />
<result property="riskAppetite" column="risk_appetite" />
<result property="isVip" column="is_vip" />
<result property="vipRemark" column="vip_remark" />
<result property="appellation" column="appellation" />
<result property="smokingAllowed" column="smoking_allowed" />
<result property="birthplace" column="birthplace" />
<result property="nationality" column="nationality" />
<result property="passportNo" column="passport_no" />
<result property="passNo" column="pass_no" />
<result property="height" column="height" />
<result property="weight" column="weight" />
<result property="bmi" column="bmi" />
<result property="currentTenure" column="current_tenure" />
<result property="totalDebt" column="total_debt" />
<result property="dependentsNum" column="dependents_num" />
<result property="maritalStatus" column="marital_status" />
<result property="educationLevel" column="education_level" />
<result property="totalWorkingYears" column="total_working_years" />
<result property="currentMonthlyIncome" column="current_monthly_income" />
<result property="companyMobileCode" column="company_mobile_code" />
<result property="companyMobile" column="company_mobile" />
<result property="landlineCode" column="landline_code" />
<result property="landline" column="landline" />
<result property="otherMobile" column="other_mobile" />
<result property="isExceed" column="is_exceed" />
<result property="isOtherCountry" column="is_other_country" />
<result property="isPromotion" column="is_promotion" />
<result property="travel" column="travel" />
<result property="exercise" column="exercise" />
<result property="game" column="game" />
<result property="movieDrama" column="movie_drama" />
<result property="delicacy" column="delicacy" />
<result property="addressList" column="address_list" />
<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" />
<result property="smokingVolume" column="smoking_volume" />
<result property="currency" column="currency" />
<result property="companyNameEn" column="company_name_en" />
<result property="companyBusinessNo" column="company_business_no" />
<result property="companyRegisterTime" column="company_register_time" />
<result property="companyRegisterRegion" column="company_register_region" />
<result property="companyEmail" column="company_email" />
<result property="companyEnterAddress" column="company_enter_address" />
<result property="authNameCn" column="auth_name_cn" />
<result property="authNameEn" column="auth_name_en" />
<result property="authProfessional" column="auth_professional" />
<result property="authMobileCode" column="auth_mobile_code" />
<result property="authMobile" column="auth_mobile" />
</resultMap>
<sql id="Base_Column_List">
id,policy_insurant_biz_id,policy_biz_id,policy_no,customer_type,customer_biz_id,
customer_no,policyholder_rel,name,name_en,gender,
document_type,id_number,birthday,age,residential_address,
mailing_address,mobile_code,mobile,email,company_name,
company_address,industry,position,risk_appetite,is_vip,
vip_remark,appellation,smoking_allowed,birthplace,nationality,
passport_no,pass_no,height,weight,bmi,
current_tenure,total_debt,dependents_num,marital_status,education_level,
total_working_years,current_monthly_income,company_mobile_code,company_mobile,landline_code,
landline,other_mobile,is_exceed,is_other_country,is_promotion,
travel,exercise,game,movie_drama,delicacy,
address_list,remark,is_deleted,creator_id,updater_id,
create_time,update_time,smoking_volume,currency,company_name_en,
company_business_no,company_register_time,company_register_region,company_email,company_enter_address,
auth_name_cn,auth_name_en,auth_professional,auth_mobile_code,auth_mobile
</sql>
</mapper>
...@@ -9,14 +9,17 @@ ...@@ -9,14 +9,17 @@
<result property="policyBizId" column="policy_biz_id" /> <result property="policyBizId" column="policy_biz_id" />
<result property="policyNo" column="policy_no" /> <result property="policyNo" column="policy_no" />
<result property="userBizId" column="user_biz_id" /> <result property="userBizId" column="user_biz_id" />
<result property="planBizId" column="plan_biz_id" />
<result property="productCode" column="product_code" /> <result property="productCode" column="product_code" />
<result property="productName" column="product_name" /> <result property="productName" column="product_name" />
<result property="productCate" column="product_cate" /> <result property="productCate" column="product_cate" />
<result property="insurer" column="insurer" /> <result property="insurer" column="insurer" />
<result property="insurerBizId" column="insurer_biz_id" /> <result property="insurerBizId" column="insurer_biz_id" />
<result property="region" column="region" />
<result property="policyHolder" column="policy_holder" /> <result property="policyHolder" column="policy_holder" />
<result property="insured" column="insured" /> <result property="insured" column="insured" />
<result property="paymentTerm" column="payment_term" /> <result property="paymentTerm" column="payment_term" />
<result property="paymentFrequency" column="payment_frequency" />
<result property="paymentPremium" column="payment_premium" /> <result property="paymentPremium" column="payment_premium" />
<result property="status" column="status" /> <result property="status" column="status" />
<result property="currency" column="currency" /> <result property="currency" column="currency" />
...@@ -26,9 +29,16 @@ ...@@ -26,9 +29,16 @@
<result property="effectiveDate" column="effective_date" /> <result property="effectiveDate" column="effective_date" />
<result property="renewalDate" column="renewal_date" /> <result property="renewalDate" column="renewal_date" />
<result property="isPrepaid" column="is_prepaid" /> <result property="isPrepaid" column="is_prepaid" />
<result property="deductibles" column="deductibles" />
<result property="prepaidTerm" column="prepaid_term" /> <result property="prepaidTerm" column="prepaid_term" />
<result property="initialPaymentMethod" column="initial_payment_method" />
<result property="renewalPaymentMethod" column="renewal_payment_method" />
<result property="dividendDistributionMethod" column="dividend_distribution_method" />
<result property="isBacktrack" column="is_backtrack" />
<result property="isJoin" column="is_join" />
<result property="reconciliationCompany" column="reconciliation_company" /> <result property="reconciliationCompany" column="reconciliation_company" />
<result property="reconciliationCompanyBizId" column="reconciliation_company_biz_id" /> <result property="reconciliationCompanyBizId" column="reconciliation_company_biz_id" />
<result property="policyTransfer" column="policy_transfer" />
<result property="remark" column="remark" /> <result property="remark" column="remark" />
<result property="isDeleted" column="is_deleted" /> <result property="isDeleted" column="is_deleted" />
<result property="creatorId" column="creator_id" /> <result property="creatorId" column="creator_id" />
...@@ -38,11 +48,13 @@ ...@@ -38,11 +48,13 @@
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id,policy_biz_id,policy_no,user_biz_id,product_code,product_name, id,policy_biz_id,policy_no,user_biz_id,plan_biz_id,product_code,
product_cate,insurer,insurer_biz_id,policy_holder,insured, product_name,product_cate,insurer,insurer_biz_id,region,
payment_term,payment_premium,status,currency,initial_premium, policy_holder,insured,payment_term,payment_frequency,payment_premium,
sign_date,issue_date,effective_date,renewal_date,is_prepaid, status,currency,initial_premium,sign_date,issue_date,
prepaid_term,reconciliation_company,reconciliation_company_biz_id,remark,is_deleted, effective_date,renewal_date,is_prepaid,deductibles,prepaid_term,
creator_id,updater_id,create_time,update_time initial_payment_method,renewal_payment_method,dividend_distribution_method,is_backtrack,is_join,
reconciliation_company,reconciliation_company_biz_id,policy_transfer,remark,is_deleted,creator_id,
updater_id,create_time,update_time
</sql> </sql>
</mapper> </mapper>
<?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="com.yd.csf.service.dao.PolicyPolicyholderMapper">
<resultMap id="BaseResultMap" type="com.yd.csf.service.model.PolicyPolicyholder">
<id property="id" column="id" />
<result property="policyPolicyholderBizId" column="policy_policyholder_biz_id" />
<result property="policyBizId" column="policy_biz_id" />
<result property="policyNo" column="policy_no" />
<result property="customerType" column="customer_type" />
<result property="customerBizId" column="customer_biz_id" />
<result property="customerNo" column="customer_no" />
<result property="name" column="name" />
<result property="nameEn" column="name_en" />
<result property="gender" column="gender" />
<result property="documentType" column="document_type" />
<result property="idNumber" column="id_number" />
<result property="birthday" column="birthday" />
<result property="age" column="age" />
<result property="residentialAddress" column="residential_address" />
<result property="mailingAddress" column="mailing_address" />
<result property="mobileCode" column="mobile_code" />
<result property="mobile" column="mobile" />
<result property="email" column="email" />
<result property="companyName" column="company_name" />
<result property="companyAddress" column="company_address" />
<result property="industry" column="industry" />
<result property="position" column="position" />
<result property="riskAppetite" column="risk_appetite" />
<result property="isVip" column="is_vip" />
<result property="vipRemark" column="vip_remark" />
<result property="appellation" column="appellation" />
<result property="smokingAllowed" column="smoking_allowed" />
<result property="birthplace" column="birthplace" />
<result property="nationality" column="nationality" />
<result property="passportNo" column="passport_no" />
<result property="passNo" column="pass_no" />
<result property="height" column="height" />
<result property="weight" column="weight" />
<result property="bmi" column="bmi" />
<result property="monthExpenditure" column="month_expenditure" />
<result property="monthIncome" column="month_income" />
<result property="currentTenure" column="current_tenure" />
<result property="totalCurrentAssets" column="total_current_assets" />
<result property="totalDebt" column="total_debt" />
<result property="dependentsNum" column="dependents_num" />
<result property="maritalStatus" column="marital_status" />
<result property="educationLevel" column="education_level" />
<result property="totalWorkingYears" column="total_working_years" />
<result property="currentMonthlyIncome" column="current_monthly_income" />
<result property="companyMobileCode" column="company_mobile_code" />
<result property="companyMobile" column="company_mobile" />
<result property="landlineCode" column="landline_code" />
<result property="landline" column="landline" />
<result property="otherMobile" column="other_mobile" />
<result property="isExceed" column="is_exceed" />
<result property="isOtherCountry" column="is_other_country" />
<result property="isPromotion" column="is_promotion" />
<result property="postalCode" column="postal_code" />
<result property="travel" column="travel" />
<result property="exercise" column="exercise" />
<result property="game" column="game" />
<result property="movieDrama" column="movie_drama" />
<result property="delicacy" column="delicacy" />
<result property="addressList" column="address_list" />
<result property="smokingVolume" column="smoking_volume" />
<result property="currency" column="currency" />
<result property="companyNameEn" column="company_name_en" />
<result property="companyBusinessNo" column="company_business_no" />
<result property="companyRegisterTime" column="company_register_time" />
<result property="companyRegisterRegion" column="company_register_region" />
<result property="companyEmail" column="company_email" />
<result property="companyEnterAddress" column="company_enter_address" />
<result property="authNameCn" column="auth_name_cn" />
<result property="authNameEn" column="auth_name_en" />
<result property="authProfessional" column="auth_professional" />
<result property="authMobileCode" column="auth_mobile_code" />
<result property="authMobile" column="auth_mobile" />
<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_policyholder_biz_id,policy_biz_id,policy_no,customer_type,customer_biz_id,
customer_no,name,name_en,gender,document_type,
id_number,birthday,age,residential_address,mailing_address,
mobile_code,mobile,email,company_name,company_address,
industry,position,risk_appetite,is_vip,vip_remark,
appellation,smoking_allowed,birthplace,nationality,passport_no,
pass_no,height,weight,bmi,month_expenditure,
month_income,current_tenure,total_current_assets,total_debt,dependents_num,
marital_status,education_level,total_working_years,current_monthly_income,company_mobile_code,
company_mobile,landline_code,landline,other_mobile,is_exceed,
is_other_country,is_promotion,postal_code,travel,exercise,
game,movie_drama,delicacy,address_list,smoking_volume,
currency,company_name_en,company_business_no,company_register_time,company_register_region,
company_email,company_enter_address,auth_name_cn,auth_name_en,auth_professional,
auth_mobile_code,auth_mobile,remark,is_deleted,creator_id,
updater_id,create_time,update_time
</sql>
</mapper>
<?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="com.yd.csf.service.dao.PolicySecondHolderMapper">
<resultMap id="BaseResultMap" type="com.yd.csf.service.model.PolicySecondHolder">
<id property="id" column="id" />
<result property="policySecondHolderBizId" column="policy_second_holder_biz_id" />
<result property="policyBizId" column="policy_biz_id" />
<result property="policyNo" column="policy_no" />
<result property="insurantRel" column="insurant_rel" />
<result property="name" column="name" />
<result property="nameEn" column="name_en" />
<result property="gender" column="gender" />
<result property="documentType" column="document_type" />
<result property="idNumber" column="id_number" />
<result property="passportNumber" column="passport_number" />
<result property="birthTime" column="birth_time" />
<result property="age" column="age" />
<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_second_holder_biz_id,policy_biz_id,policy_no,insurant_rel,name,
name_en,gender,document_type,id_number,passport_number,
birth_time,age,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