Commit 506522ed by jianan

新单跟进72

parent cd9ce964
...@@ -12,19 +12,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -12,19 +12,18 @@ 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;
import com.yd.common.enums.CommonEnum; import com.yd.common.enums.CommonEnum;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result; import com.yd.common.result.Result;
import com.yd.common.utils.RandomStringGenerator; import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.api.dto.CommissionExcelDTO; import com.yd.csf.api.dto.CommissionExcelDTO;
import com.yd.csf.api.dto.PolicyExcelDTO; import com.yd.csf.api.dto.PolicyExcelDTO;
import com.yd.csf.api.dto.PolicyFollowDTO; import com.yd.csf.api.dto.PolicyFollowDTO;
import com.yd.csf.api.listener.PolicyDataListener; import com.yd.csf.api.listener.PolicyDataListener;
import com.yd.csf.api.service.ApiExpectedFortuneService;
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.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.utils.AsyncQueryUtil;
import com.yd.csf.service.vo.PolicyFollowDetailVO; import com.yd.csf.service.vo.PolicyFollowDetailVO;
import com.yd.csf.service.vo.PolicyFollowRecordVO; import com.yd.csf.service.vo.PolicyFollowRecordVO;
import com.yd.csf.service.vo.PolicyFollowVO; import com.yd.csf.service.vo.PolicyFollowVO;
...@@ -35,13 +34,15 @@ import org.apache.commons.lang3.StringUtils; ...@@ -35,13 +34,15 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.ParseException; import java.text.ParseException;
import java.util.*; import java.util.*;
...@@ -82,6 +83,10 @@ public class ApiPolicyFollowController { ...@@ -82,6 +83,10 @@ public class ApiPolicyFollowController {
private PolicyFollowFileService policyFollowFileService; private PolicyFollowFileService policyFollowFileService;
@Resource
private PolicyReportPdfService policyReportPdfService;
@PostMapping("/upload/excel") @PostMapping("/upload/excel")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result<Boolean> uploadExcel(@RequestParam("file") MultipartFile file) throws Exception { public Result<Boolean> uploadExcel(@RequestParam("file") MultipartFile file) throws Exception {
...@@ -549,4 +554,89 @@ public class ApiPolicyFollowController { ...@@ -549,4 +554,89 @@ public class ApiPolicyFollowController {
List<PolicyFollowRecord> policyFollowStatusList = policyFollowRecordService.list(queryWrapper); List<PolicyFollowRecord> policyFollowStatusList = policyFollowRecordService.list(queryWrapper);
return Result.success(policyFollowRecordService.getVOList(policyFollowStatusList)); return Result.success(policyFollowRecordService.getVOList(policyFollowStatusList));
} }
/**
* 生成签约单
*/
@GetMapping(value = "/report/download", produces = "application/pdf")
@Operation(summary = "生成签约单")
public void previewPolicyReport(@RequestParam("policyBizId") String policyBizId,
HttpServletResponse response) {
PolicyFollow policyFollow = policyFollowService.getByPolicyBizId(policyBizId);
if (policyFollow == null) {
throw new BusinessException(ErrorCode.NOT_FOUND_ERROR.getCode(), ErrorCode.NOT_FOUND_ERROR.getMessage());
}
PolicyReportData reportData = new PolicyReportData();
// 填充数据
// reportData.setStartTime("2025-10-30");
// reportData.setEndTime("2025-10-30");
// reportData.setLocation("香港");
// reportData.setServiceManager("Vickie");
// reportData.setPolicyHolder(policyFollow.getPolicyHolder());
// reportData.setPolicyNumber(policyFollow.getPolicyNo());
// reportData.setInsuranceCompany(policyFollow.getInsurer());
// reportData.setInsuredPerson(policyFollow.getInsured());
// reportData.setInsurancePlan(policyFollow.getProductName());
// reportData.setInsuredAge(0);
// reportData.setCurrency(policyFollow.getCurrency());
// reportData.setPaymentPeriod((Integer) policyFollow.getPaymentTerm());
// reportData.setAnnualAmount(policyFollow.getPaymentPremium());
// reportData.setTotalPrepayment(BigDecimal.ZERO);
// reportData.setPremiumFee(BigDecimal.ZERO);
reportData.setStartTime("2025-10-30");
reportData.setEndTime("2025-10-30");
reportData.setLocation("香港");
reportData.setServiceManager("Vickie");
reportData.setPolicyHolder("policyHolder");
reportData.setPolicyNumber("B635379588");
reportData.setInsuranceCompany("友邦保险");
reportData.setInsuredPerson("insuredPerson");
reportData.setInsurancePlan("环宇盈活储蓄保险计划");
reportData.setInsuredAge(1);
reportData.setCurrency("HKD");
reportData.setPaymentPeriod(5);
reportData.setAnnualAmount(BigDecimal.valueOf(30000.08));
reportData.setTotalPrepayment(BigDecimal.valueOf(150064.70));
reportData.setPremiumFee(BigDecimal.valueOf(12.86));
try {
log.info("收到PDF生成请求: {}", reportData);
log.info("PolicyReportData 内容检查:");
log.info("startTime: {}", reportData.getStartTime());
log.info("endTime: {}", reportData.getEndTime());
log.info("location: {}", reportData.getLocation());
log.info("serviceManager: {}", reportData.getServiceManager());
byte[] pdfBytes = policyReportPdfService.generatePolicyReport(reportData);
if (pdfBytes == null || pdfBytes.length == 0) {
log.error("生成的PDF为空");
throw new BusinessException("生成的PDF内容为空");
}
log.info("PDF生成成功,大小: {} bytes", pdfBytes.length);
// 设置下载响应头
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=policy-report-" +
reportData.getPolicyNumber() + ".pdf");
response.setContentLength(pdfBytes.length);
// 写入响应流
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(pdfBytes);
outputStream.flush();
log.info("PDF响应发送完成");
} catch (Exception e) {
log.error("PDF预览失败", e);
throw new BusinessException("PDF预览失败: " + e.getMessage());
}
}
} }
\ No newline at end of file
...@@ -12,6 +12,20 @@ ...@@ -12,6 +12,20 @@
<artifactId>yd-csf-service</artifactId> <artifactId>yd-csf-service</artifactId>
<dependencies> <dependencies>
<!-- 公共工具类 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<!-- itextpdf -->
<dependency>
<groupId>com.github.librepdf</groupId>
<artifactId>openpdf</artifactId>
<version>1.3.30</version>
</dependency>
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId> <artifactId>easyexcel</artifactId>
...@@ -104,5 +118,10 @@ ...@@ -104,5 +118,10 @@
<artifactId>yd-feign</artifactId> <artifactId>yd-feign</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<!-- 添加AOP依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>
package com.yd.csf.service.dto;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class PolicyReportData {
// 基本信息
private String startTime;
private String endTime;
private String location;
private String serviceManager;
// 保单详细信息
private String policyHolder;
private String policyNumber;
private String insuranceCompany;
private String insuredPerson;
private String insurancePlan;
private Integer insuredAge;
private String currency;
private Integer paymentPeriod;
private BigDecimal annualAmount;
private BigDecimal totalPrepayment;
private BigDecimal premiumFee;
// 附加险信息
private List<AdditionalInsurance> additionalInsurances;
@Data
public static class AdditionalInsurance {
private String name;
private String paymentTerm;
private String currency;
private BigDecimal firstYearAmount;
}
}
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