Commit 6344a0e3 by jianan

新单跟进

parent 0241c168
package com.yd.csf.api.controller;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.common.result.Result;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.api.dto.PolicyExcelDTO;
import com.yd.csf.api.listener.PolicyDataListener;
import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.dto.PolicyFollowQueryRequest;
import com.yd.csf.service.model.Customer;
import com.yd.csf.service.model.PolicyFollow;
import com.yd.csf.service.service.CustomerExpandService;
import com.yd.csf.service.service.PolicyFollowService;
import com.yd.user.feign.client.sysuser.ApiSysUserFeignClient;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* customer接口
*
* @author jianan
* @since 2025-07-31
*/
@RestController
@RequestMapping("/policy_follow")
@Tag(name = "新单跟进接口")
public class ApiPolicyFollowController {
private static final Logger log = LoggerFactory.getLogger(ApiPolicyFollowController.class);
@Resource
private PolicyFollowService policyFollowService;
@Resource
private PolicyDataListener policyDataListener;
@PostMapping("/upload/excel")
public Result<Boolean> uploadExcel(@RequestParam("file") MultipartFile file) throws IOException {
EasyExcel.read(file.getInputStream(), PolicyExcelDTO.class, policyDataListener).sheet("保单").doRead();
List<PolicyExcelDTO> dtoList = policyDataListener.getList();
log.info("导入成功,共 " + dtoList.size() + " 条数据");
List<PolicyFollow> list = convertToObj(dtoList);
for (PolicyFollow policyFollow : list) {
log.info("policyFollow = " + policyFollow);
}
return Result.success(policyFollowService.uploadExcel(list));
}
private List<PolicyFollow> convertToObj(List<PolicyExcelDTO> list) {
List<PolicyFollow> policyFollows = new ArrayList<>();
for (PolicyExcelDTO policyExcelDTO : list) {
PolicyFollow policyFollow = new PolicyFollow();
BeanUtils.copyProperties(policyExcelDTO, policyFollow);
policyFollow.setPolicyBizId(RandomStringGenerator.generateBizId16("policy"));
}
return policyFollows;
}
/**
* 创建新单跟进
*
* @param customerAddRequest
* @param request
* @return
*/
// @Operation(summary = "创建新单跟进")
// @PostMapping("/add")
// @Transactional(rollbackFor = Exception.class)
// public Result<Map<String, Object>> addCustomer(@RequestBody CustomerAddRequest customerAddRequest, HttpServletRequest request) {
// if (customerAddRequest == null) {
// return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage());
// }
// return Result.success(policyFollowService.addCustomer(customerAddRequest));
// }
/**
* 删除fna
*
* @param deleteRequest
* @param request
* @return
*/
// @PostMapping("/delete")
// public Result<Boolean> deleteFna(@RequestBody DeleteRequest deleteRequest, HttpServletRequest request) {
// if (deleteRequest == null || deleteRequest.getId() <= 0) {
// throw new BusinessException(ErrorCode.PARAMS_ERROR);
// }
// User user = userService.getLoginUser(request);
// long id = deleteRequest.getId();
// // 判断是否存在
// Customer oldFna = policyFollowService.getById(id);
// ThrowUtils.throwIf(oldFna == null, ErrorCode.NOT_FOUND_ERROR);
// // 仅本人或管理员可删除
// if (!oldFna.getUserId().equals(user.getId()) && !userService.isAdmin(request)) {
// throw new BusinessException(ErrorCode.NO_AUTH_ERROR);
// }
// // 操作数据库
// boolean result = policyFollowService.removeById(id);
// ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);
// return Result.success(true);
// }
/**
* 更新新单跟进
*
* @param customerUpdateRequest
* @return
*/
// @PostMapping("/update")
// @Operation(summary = "更新新单跟进信息")
// public Result<Boolean> updateCustomer(@RequestBody CustomerUpdateRequest customerUpdateRequest) {
// if (customerUpdateRequest == null || customerUpdateRequest.getCustomerBizId() == null) {
// throw new BusinessException(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage());
// }
// return Result.success(policyFollowService.updateCustomer(customerUpdateRequest));
// }
/**
* 根据 customerBizId 获取新单跟进(封装类)
*
* @param policyBizId
* @return
*/
@GetMapping("/get/vo")
@Operation(summary = "根据 policyBizId 获取新单跟进详情")
public Result<PolicyFollow> getPolicyFollowByPolicyBizId(@RequestParam("policyBizId") String policyBizId, HttpServletRequest request) {
if (policyBizId == null) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage());
}
// 查询数据库
PolicyFollow policyFollow = policyFollowService.getByPolicyBizId(policyBizId);
if (policyFollow == null) {
return Result.fail(ErrorCode.NOT_FOUND_ERROR.getCode(), ErrorCode.NOT_FOUND_ERROR.getMessage());
}
// 获取封装类
return Result.success(policyFollow);
}
/**
* 分页获取新单跟进列表(仅管理员可用)
*
* @param fnaQueryRequest
* @return
*/
// @PostMapping("/list/page")
// public Result<Page<Customer>> listFnaByPage(@RequestBody FnaQueryRequest fnaQueryRequest) {
// long current = fnaQueryRequest.getPageNo();
// long size = fnaQueryRequest.getPageSize();
// // 查询数据库
// Page<Customer> fnaPage = policyFollowService.page(new Page<>(current, size),
// policyFollowService.getQueryWrapper(fnaQueryRequest));
// return Result.success(fnaPage);
// }
/**
* 分页获取新单跟进列表(VO)
*
* @param policyFollowQueryRequest
* @param request
* @return
*/
@PostMapping("/list/page/vo")
@Operation(summary = "分页获取新单跟进列表")
public Result<Page<PolicyFollow>> listPolicyFollowByPage(@RequestBody PolicyFollowQueryRequest policyFollowQueryRequest,
HttpServletRequest request) {
long current = policyFollowQueryRequest.getPageNo();
long size = policyFollowQueryRequest.getPageSize();
// 查询数据库
Page<PolicyFollow> policyFollowPage = policyFollowService.page(new Page<>(current, size),
policyFollowService.getQueryWrapper(policyFollowQueryRequest));
// 获取封装类
// return Result.success(policyFollowService.getPolicyFollowVOPage(policyFollowPage));
return Result.success(policyFollowPage);
}
}
package com.yd.csf.api.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class Broker {
@ExcelProperty("简称")
private String shortName;
@ExcelProperty("英文名称")
private String englishName;
@ExcelProperty("中文名称")
private String chineseName;
@ExcelProperty("牌照號碼")
private String licenseNo;
@ExcelProperty("联系人")
private String contact;
}
package com.yd.csf.api.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class PolicyExcelDTO {
@ExcelProperty("序号")
private Integer id;
@ExcelProperty("状态")
private String status;
@ExcelProperty("保单号")
private String policyNo;
@ExcelProperty("签单日期")
private String signDate;
@ExcelProperty("生效日期")
private String effectiveDate;
@ExcelProperty("续保日期")
private String renewalDate;
@ExcelProperty("供款年期")
private Integer paymentTerm;
@ExcelProperty("是否预缴")
private String isPrepaid;
@ExcelProperty("预缴年期")
private Integer prepaidTerm;
@ExcelProperty("产品名称")
private String productName;
@ExcelProperty("产品类别")
private String productType;
@ExcelProperty("保险公司")
private String insurer;
@ExcelProperty("经纪公司")
private String broker;
@ExcelProperty("保單持有人")
private String policyHolder;
@ExcelProperty("受保人")
private String insured;
@ExcelProperty("转介人")
private String referrer;
@ExcelProperty("所属团队")
private String team;
@ExcelProperty("币种")
private String currency;
@ExcelProperty("首期保费(不含徽费,预缴保费)")
private BigDecimal initialPremium;
}
package com.yd.csf.api.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class Product {
@ExcelProperty("保险公司")
private String insurer;
@ExcelProperty("产品类别")
private String productType;
@ExcelProperty("产品名称")
private String productName;
@ExcelProperty("供款年期")
private Integer paymentTerm;
@ExcelProperty("币种")
private String currency;
@ExcelProperty("状态")
private String status;
}
package com.yd.csf.api.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class Team {
@ExcelProperty("团队名称")
private String teamName;
@ExcelProperty("团队长")
private String leader;
@ExcelProperty("团队成员")
private String member;
@ExcelProperty("") // 空列
private String extra;
}
\ No newline at end of file
package com.yd.csf.api.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.yd.csf.api.dto.PolicyExcelDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
@Slf4j
public class PolicyDataListener extends AnalysisEventListener<PolicyExcelDTO> {
private List<PolicyExcelDTO> list = new ArrayList<>();
@Override
public void invoke(PolicyExcelDTO policy, AnalysisContext context) {
list.add(policy);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
log.info("读取到 {} 条保单数据", list.size());
// 这里可以调用Service进行数据保存
}
public List<PolicyExcelDTO> getList() {
return list;
}
}
...@@ -12,6 +12,12 @@ ...@@ -12,6 +12,12 @@
<artifactId>yd-csf-service</artifactId> <artifactId>yd-csf-service</artifactId>
<dependencies> <dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
<!-- gson --> <!-- gson -->
<dependency> <dependency>
<groupId>com.google.code.gson</groupId> <groupId>com.google.code.gson</groupId>
......
package com.yd.csf.service.dto;
import com.yd.common.dto.PageDto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* 查询customer请求
*
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class PolicyFollowQueryRequest extends PageDto implements Serializable {
/**
* 新单状态
*/
@Schema(description = "新单状态 'CHECKING'-'审核中','UNDERWRITING'-'承保中','FINISHED'-'已完成','DECLINED'-'已拒绝','CANCELLED'-'已取消', 字典值: policy_follow_status")
private String status;
/**
* 新单编号
*/
@Schema(description = "新单编号")
private String policyBizId;
/**
* 保单号
*/
@Schema(description = "保单号")
private String policyNo;
/**
* 客户名称
*/
@Schema(description = "客户名称")
private String name;
/**
* 客户编号
*/
@Schema(description = "客户编号")
private String customerBizId;
/**
* 保险公司
*/
@Schema(description = "保险公司")
private String insurance;
/**
* 产品代码
*/
@Schema(description = "产品代码")
private String productCode;
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
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