Răsfoiți Sursa

提交获取保单路径接口

hxl13994548489 1 an în urmă
părinte
comite
58e60b9cf4
32 a modificat fișierele cu 1365 adăugiri și 22 ștergeri
  1. 40 0
      src/main/java/com/ydtech/constants/enums/InsuranceOrderPdf.java
  2. 28 0
      src/main/java/com/ydtech/modules/order/components/FileComponents.java
  3. 57 4
      src/main/java/com/ydtech/modules/order/controller/InsAreaCompanyController.java
  4. 7 0
      src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java
  5. 7 0
      src/main/java/com/ydtech/modules/order/entity/api/zhongmei/response/SubmitResponse.java
  6. 44 0
      src/main/java/com/ydtech/modules/order/entity/dto/ReadPdfUrlDto.java
  7. 93 0
      src/main/java/com/ydtech/modules/order/entity/dto/ReadPdfUrlListDto.java
  8. 10 0
      src/main/java/com/ydtech/modules/order/service/BoHaiOrderApiService.java
  9. 10 0
      src/main/java/com/ydtech/modules/order/service/DaJiaOrderService.java
  10. 10 0
      src/main/java/com/ydtech/modules/order/service/GuorenOrderApiService.java
  11. 10 0
      src/main/java/com/ydtech/modules/order/service/HuaTaiOrderApiService.java
  12. 11 0
      src/main/java/com/ydtech/modules/order/service/InsAreaCompanyExternalPolicyService.java
  13. 10 0
      src/main/java/com/ydtech/modules/order/service/InsCrawlerOrderService.java
  14. 10 0
      src/main/java/com/ydtech/modules/order/service/PingAnOrderApiService.java
  15. 11 0
      src/main/java/com/ydtech/modules/order/service/YongAnOrderService.java
  16. 10 0
      src/main/java/com/ydtech/modules/order/service/YongchengOrderApiService.java
  17. 10 0
      src/main/java/com/ydtech/modules/order/service/ZhongMeiOrderApiService.java
  18. 9 1
      src/main/java/com/ydtech/modules/order/service/ZijinOrderApiService.java
  19. 73 0
      src/main/java/com/ydtech/modules/order/service/impl/BoHaiOrderApiServiceImpl.java
  20. 104 4
      src/main/java/com/ydtech/modules/order/service/impl/DaJiaOrderServiceImpl.java
  21. 55 0
      src/main/java/com/ydtech/modules/order/service/impl/GuorenOrderApiServiceImpl.java
  22. 82 1
      src/main/java/com/ydtech/modules/order/service/impl/HuaTaiOrderApiServiceImpl.java
  23. 59 0
      src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyExternalPolicyServiceImpl.java
  24. 65 0
      src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java
  25. 113 4
      src/main/java/com/ydtech/modules/order/service/impl/PingAnOrderApiServiceImpl.java
  26. 64 0
      src/main/java/com/ydtech/modules/order/service/impl/YongAnOrderServiceImpl.java
  27. 66 0
      src/main/java/com/ydtech/modules/order/service/impl/YongchengOrderApiServiceImpl.java
  28. 84 4
      src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderApiServiceImpl.java
  29. 61 4
      src/main/java/com/ydtech/modules/order/service/impl/ZijinOrderApiServiceImpl.java
  30. 8 0
      src/main/java/com/ydtech/utils/OrderUtils.java
  31. 103 0
      src/main/java/com/ydtech/utils/baidu/FileUtil.java
  32. 41 0
      src/main/java/com/ydtech/utils/baidu/HtppsUtils.java

+ 40 - 0
src/main/java/com/ydtech/constants/enums/InsuranceOrderPdf.java

@@ -0,0 +1,40 @@
+package com.ydtech.constants.enums;
+
+
+import com.ydtech.constants.enums.dict.agreement.ProductsType;
+import com.ydtech.modules.ins.model.vo.KindInfoVo;
+import com.ydtech.modules.ins.model.vo.RiskInfoVo;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @description: 晋掌柜 险种代码
+ * @author: wenks
+ * @date: 2023/8/11 10:24
+ **/
+@Getter
+@AllArgsConstructor
+public enum InsuranceOrderPdf {
+
+    JQBD("jqbd", "交强险保单.pdf"),
+
+    JQBZ("jqbz", "交强险标志.pdf"),
+
+    SYBD("sybd", "商业险保单.pdf"),
+
+    JYBD("jybd", "非车险保单.pdf");
+
+
+
+    private final String code;
+
+    private final String desc;
+
+
+
+
+}

+ 28 - 0
src/main/java/com/ydtech/modules/order/components/FileComponents.java

@@ -27,6 +27,34 @@ public class FileComponents {
     @Value("${api.url}")
     private String apiUrl;
 
+    public String gainCarInsPolicyNew(String url, String fileName, String subOrderId, String password,boolean flag) {
+        try {
+            String dir = uploadFilePath + "carInsPolicyNew/" + subOrderId + "/";
+            String showPath = apiUrl + showFileUrl + "carInsPolicyNew/" + subOrderId + "/" + fileName;
+            File existFile = new File(dir + fileName);
+
+            if (existFile.exists()) {
+                if(!flag){
+                    return showPath;
+                }else{
+                    //刪除重新生成
+                    existFile.delete();
+                }
+            }
+
+            File folder = new File(dir);
+            if (!folder.isDirectory()) {
+                folder.mkdirs();
+            }
+
+            unzipFile(url, dir, password + ".zip", password, fileName);
+            return showPath;
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new SystemException("文件异常");
+        }
+    }
+
     public String gainCarInsPolicy(String url, String fileName, String licensePlate, String password) {
         try {
             String dir = uploadFilePath + "carInsPolicy/" + licensePlate + "/";

+ 57 - 4
src/main/java/com/ydtech/modules/order/controller/InsAreaCompanyController.java

@@ -8,10 +8,9 @@ import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrdersTrack;
-import com.ydtech.modules.order.service.InsAreaCompanyService;
-import com.ydtech.modules.order.service.InsOrderQrCodeService;
-import com.ydtech.modules.order.service.InsOrdersTrackService;
-import com.ydtech.modules.order.service.InsuranceCompanyPolymerizationService;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
+import com.ydtech.modules.order.entity.po.InsOrderPayDateRecord;
+import com.ydtech.modules.order.service.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -36,6 +35,10 @@ public class InsAreaCompanyController {
 
     private final InsuranceCompanyPolymerizationService insuranceCompanyPolymerizationService;
 
+    private final InsOrderPdfUrlService  insOrderPdfUrlService;
+
+    private  InsOrderPayDateRecordService  insOrderPayDateRecordService;
+
     @GetMapping("/statusInquiry/{subOrderNo}")
     @ApiOperation("状态查询")
     public HttpResult<String> statusInquiry(@PathVariable String subOrderNo) {
@@ -112,4 +115,54 @@ public class InsAreaCompanyController {
         return HttpResult.ok("订单正在更新中,请稍后刷新列表");
     }
 
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 10:14
+     *  @Description:  统一读取保单信息返回统一格式和前台匹配
+     *    this.oldfileList = [];
+     *    let businessList = []
+     *    let accidentList = []
+     *    fileTitle: "商业电子保单",
+     *    filename: this.orderInfo.sypolicyno,
+     *    fileurl: path,
+     */
+    @GetMapping("/readPdfUrlList")
+    @ApiOperation("统一读取保单信息返回统一格式和前台匹配")
+    public HttpResult<ReadPdfUrlListDto> readPdfUrlList(String subOrderId) {
+        ReadPdfUrlListDto dto= insOrderPdfUrlService.readPdfUrlList(subOrderId,false);
+        return HttpResult.ok(dto);
+    }
+
+    @GetMapping("/productOrderPdf")
+    @ApiOperation("重新生成保单")
+    public HttpResult<ReadPdfUrlListDto> productOrderPdf(String subOrderId) {
+        ReadPdfUrlListDto dto= insOrderPdfUrlService.productOrderPdf(subOrderId);
+        return HttpResult.ok(dto);
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/21 14:54
+     *  @Description: 更新保单的签单日期和缴费时间
+     */
+    @GetMapping("/udapteOrderDate")
+    @ApiOperation("更新保单的签单日期和缴费时间")
+    public HttpResult udapteOrderDate(String subOrderId) {
+        insOrderPayDateRecordService.udapteOrderDate(subOrderId);
+        return HttpResult.ok("更新成功");
+    }
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/21 14:54
+     *  @Description: 更新保单的签单日期和缴费时间
+     */
+    @GetMapping("/udapteOrderDateRecord")
+    @ApiOperation("更新保单的签单日期和缴费时间列表")
+    public HttpResult<List<InsOrderPayDateRecord>> udapteOrderDateRecord(String subOrderId) {
+        List<InsOrderPayDateRecord> list=insOrderPayDateRecordService.udapteOrderDateRecord(subOrderId);
+        return HttpResult.ok(list);
+    }
 }

+ 7 - 0
src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java

@@ -567,6 +567,13 @@ public class InsAreaCompany implements Serializable {
     @TableField(exist = false)
     private BigDecimal exportAllFee;
 
+
+    /***
+     *  驾意险编号  add by  hxl 2024-10-21
+     */
+    @TableField(exist = false)
+    private String jyPolicyNo;
+
     public InsAreaCompany(QuoteRespVo quoteRespVo, PtlAgreementAttribution ptlAgreementAttribution) {
         this.id = IdGenerate.nextId();
         this.orderno = quoteRespVo.getOrderno();

+ 7 - 0
src/main/java/com/ydtech/modules/order/entity/api/zhongmei/response/SubmitResponse.java

@@ -61,5 +61,12 @@ public class SubmitResponse extends BaseResponse {
         @JsonProperty("rideProposalNo")
         private String rideProposalNo;
 
+        /**
+         * 意外险单号 错误保单号
+         * add  by  hxl  2024-10-18
+         */
+        @JsonProperty("ridePolicyNo")
+        private String ridePolicyNo;
+
     }
 }

+ 44 - 0
src/main/java/com/ydtech/modules/order/entity/dto/ReadPdfUrlDto.java

@@ -0,0 +1,44 @@
+package com.ydtech.modules.order.entity.dto;
+
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/10/16 10:16
+ *  @Description: 返回pdf路径  和前台返回字段一致
+ *
+ *   fileTitle: "商业电子保单",
+ *      *    filename: this.orderInfo.sypolicyno,
+ *      *    fileurl: path,
+ */
+@Data
+@ApiModel(value = "pdf返回实体类")
+public class ReadPdfUrlDto implements Serializable {
+
+    /***
+     * 名称
+     */
+    private  String  fileTitle;
+    /***
+     * 保单号
+     */
+    private  String  filename;
+    /***
+     *  文件路径
+     */
+    private  String  fileurl;
+
+    public ReadPdfUrlDto() {
+    }
+
+    public ReadPdfUrlDto(String fileTitle, String filename, String fileurl) {
+        this.fileTitle = fileTitle;
+        this.filename = filename;
+        this.fileurl = fileurl;
+    }
+}

+ 93 - 0
src/main/java/com/ydtech/modules/order/entity/dto/ReadPdfUrlListDto.java

@@ -0,0 +1,93 @@
+package com.ydtech.modules.order.entity.dto;
+
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsAreaCompanyExternalPolicy;
+import com.ydtech.modules.order.entity.po.InsOrderPdfUrl;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import com.ydtech.utils.OrderUtils;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/10/16 10:16
+ *  @Description: 返回pdf路径
+ *
+ *  this.oldfileList = [];
+ *  let businessList = []
+ *  let accidentList = []
+ */
+@Data
+@ApiModel(value = "pdf返回集合实体类")
+public class ReadPdfUrlListDto implements Serializable {
+    /***
+     * 交强
+     */
+    private ArrayList<ReadPdfUrlDto> oldfileList=new ArrayList<ReadPdfUrlDto>();
+
+    /***
+     *  商业
+     */
+    private ArrayList<ReadPdfUrlDto> businessList=new ArrayList<ReadPdfUrlDto>();
+
+    /***
+     *  非车
+     */
+    private ArrayList<ReadPdfUrlDto> accidentList=new ArrayList<ReadPdfUrlDto>();
+
+    private  String  jqPolicyNo;
+
+    private  String  syPolicyNo;
+
+    private  String  jyPolicyNo;
+
+    public ReadPdfUrlListDto() {
+    }
+
+    public ReadPdfUrlListDto(ArrayList<ReadPdfUrlDto> oldfileList, ArrayList<ReadPdfUrlDto> businessList, ArrayList<ReadPdfUrlDto> accidentList) {
+        this.oldfileList = oldfileList;
+        this.businessList = businessList;
+        this.accidentList = accidentList;
+    }
+
+    public ReadPdfUrlListDto(InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy, InsAreaCompany insAreaCompany,String isExternal) {
+        if(insAreaCompanyExternalPolicy!=null){
+            String jqpolicyNo = insAreaCompany.getJqpolicyno();
+            String jqPolicyPath = insAreaCompanyExternalPolicy.getJqPolicy();
+            String jqSignPath = insAreaCompanyExternalPolicy.getJqSign();
+            if(StringUtils.isNotBlank(jqpolicyNo)){
+                ReadPdfUrlDto jqDto  =new  ReadPdfUrlDto("交强电子保单",jqpolicyNo,jqPolicyPath);
+                if(StringUtils.isNotBlank(jqSignPath)){
+                    ReadPdfUrlDto jqbzDto  =new  ReadPdfUrlDto("交强电子标志",jqpolicyNo,jqSignPath);
+                    this.oldfileList.add(jqbzDto);
+                }
+                this.oldfileList.add(jqDto);
+                this.jqPolicyNo =jqpolicyNo;
+            }
+            String syPolicyPath = insAreaCompanyExternalPolicy.getSyPolicy();
+            String sypolicyNo = insAreaCompany.getSypolicyno();
+            if(StringUtils.isNotBlank(sypolicyNo)){
+                ReadPdfUrlDto syDto  =new  ReadPdfUrlDto("商业电子保单",sypolicyNo,syPolicyPath);
+                this.businessList.add(syDto);
+                this.syPolicyNo =sypolicyNo;
+            }
+            String jyPolicyPath = insAreaCompanyExternalPolicy.getNoPolicy();
+            String jyPolicyNo = insAreaCompany.getJyPolicyNo();
+            if(StringUtils.isNotBlank(jyPolicyNo) && StringUtils.isNotBlank(jyPolicyPath)){
+                ReadPdfUrlDto jyDto  =new  ReadPdfUrlDto("驾意险保单",jyPolicyNo,jyPolicyPath);
+                this.jyPolicyNo = jyPolicyNo;
+                this.accidentList.add(jyDto);
+            }
+        }
+    }
+}

+ 10 - 0
src/main/java/com/ydtech/modules/order/service/BoHaiOrderApiService.java

@@ -3,12 +3,14 @@ package com.ydtech.modules.order.service;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.ins.model.vo.QuoteRespVo;
 import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.api.bohai.request.ManualReviewRequest;
 import com.ydtech.modules.order.entity.api.bohai.request.PaymentCallbackRequest;
 import com.ydtech.modules.order.entity.api.bohai.request.PolicyResultCallbackRequest;
 import com.ydtech.modules.order.entity.api.bohai.response.NonAutomotiveProductsDetailsResponse;
 import com.ydtech.modules.order.entity.api.bohai.response.NonAutomotiveProductsResponse;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.entity.vo.bohai.BoHaiQuoteAccidentVo;
@@ -122,4 +124,12 @@ public interface BoHaiOrderApiService {
      * @return 是否成功
      */
     boolean cancelOrder(InsAreaCompany insAreaCompany);
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 16:56
+     *  @Description: 获取保单路径
+     */
+    ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag);
 }

+ 10 - 0
src/main/java/com/ydtech/modules/order/service/DaJiaOrderService.java

@@ -3,6 +3,8 @@ package com.ydtech.modules.order.service;
 
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
 import com.ydtech.modules.order.entity.vo.dajia.AccidentalInsuranceQueryVo;
 
@@ -64,4 +66,12 @@ public interface DaJiaOrderService extends BaseOrderService<Object> {
      * @return 是否成功
      */
     boolean cancelOrder(InsAreaCompany insAreaCompany);
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 17:38
+     *  @Description: 获取保单的pdf
+     */
+    ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag);
 }

+ 10 - 0
src/main/java/com/ydtech/modules/order/service/GuorenOrderApiService.java

@@ -4,6 +4,8 @@ import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.ins.model.guoren.CarModelResp;
 import com.ydtech.modules.ins.model.vo.CarInfoVo;
 import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
 import com.ydtech.modules.order.entity.vo.guoren.*;
 
@@ -103,4 +105,12 @@ public interface GuorenOrderApiService {
      * @return 是否成功
      */
     boolean cancelOrder(InsAreaCompany insAreaCompany);
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 16:32
+     *  @Description: 获取表单路径
+     */
+    ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag);
 }

+ 10 - 0
src/main/java/com/ydtech/modules/order/service/HuaTaiOrderApiService.java

@@ -3,7 +3,9 @@ package com.ydtech.modules.order.service;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.ins.model.vo.QuoteRespVo;
 import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.po.InsHuataiContributing;
 import com.ydtech.modules.order.entity.vo.*;
 import com.ydtech.modules.order.entity.vo.huatai.InsHuataiContributingVo;
@@ -94,4 +96,12 @@ public interface HuaTaiOrderApiService{
      * @return 是否成功
      */
     boolean cancelOrder(InsAreaCompany insAreaCompany);
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 15:19
+     *  @Description:  获取保单pdf路径
+     */
+    public ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag);
 }

+ 11 - 0
src/main/java/com/ydtech/modules/order/service/InsAreaCompanyExternalPolicyService.java

@@ -1,7 +1,10 @@
 package com.ydtech.modules.order.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsAreaCompanyExternalPolicy;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 
 /**
  * @author Administrator
@@ -18,4 +21,12 @@ public interface InsAreaCompanyExternalPolicyService extends IService<InsAreaCom
      *  @Description:  根据保单号跟新数据
      */
     void updateBySuOrderNo(InsAreaCompanyExternalPolicy externalPolicy);
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 14:02
+     *  @Description:  外部订单保单pdf封装
+     */
+    ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany subOrder, InsOrders insOrders);
 }

+ 10 - 0
src/main/java/com/ydtech/modules/order/service/InsCrawlerOrderService.java

@@ -2,7 +2,9 @@ package com.ydtech.modules.order.service;
 
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementAttributionDto;
 
 public interface InsCrawlerOrderService extends BaseOrderService<Object> {
@@ -83,4 +85,12 @@ public interface InsCrawlerOrderService extends BaseOrderService<Object> {
      */
     boolean cancelOrder(InsAreaCompany insAreaCompany);
 
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 17:11
+     *  @Description: 获取保单pdf路径
+     */
+    ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag);
+
 }

+ 10 - 0
src/main/java/com/ydtech/modules/order/service/PingAnOrderApiService.java

@@ -2,10 +2,13 @@ package com.ydtech.modules.order.service;
 
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.ins.model.vo.QuoteRespVo;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.api.pingan.request.*;
 import com.ydtech.modules.order.entity.api.pingan.response.UnAutoProductDetailResponse;
 import com.ydtech.modules.order.entity.api.zijin.request.SubmitVerifyRequest;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.InsDrivingIntentionInsuranceVo;
 import com.ydtech.modules.order.entity.vo.SpecialAuditVo;
@@ -277,4 +280,11 @@ public interface PingAnOrderApiService {
      *  @Description:  判断是否有需要补传的资料
      */
     HttpResult<Object> checkAdditional(String companyId);
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/21 15:57
+     *  @Description:  封装保单路径
+     */
+    ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany subOrder, InsOrders insOrders, boolean flag);
 }

+ 11 - 0
src/main/java/com/ydtech/modules/order/service/YongAnOrderService.java

@@ -1,6 +1,9 @@
 package com.ydtech.modules.order.service;
 
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.vo.ya.YaPayUrlVo;
 
 import java.util.Map;
@@ -25,5 +28,13 @@ public interface YongAnOrderService extends BaseOrderService<Object> {
      */
     public void getOrderDetailNew(String subOrderNo);
 
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 14:51
+     *  @Description: 获取保单pdf路径
+     */
+    public ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag);
+
 
 }

+ 10 - 0
src/main/java/com/ydtech/modules/order/service/YongchengOrderApiService.java

@@ -5,6 +5,8 @@ import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.esm.model.EsmInsAttachInsure;
 import com.ydtech.modules.ins.model.yc.pay.response.AccidentResponse;
 import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.vo.AccidentalDrivingQueryVo;
 import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
@@ -87,4 +89,12 @@ public interface YongchengOrderApiService {
      * @return 是否成功
      */
     boolean cancelOrder(InsAreaCompany insAreaCompany);
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 16:14
+     *  @Description:  获取保单的pdf路径
+     */
+    ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag);
 }

+ 10 - 0
src/main/java/com/ydtech/modules/order/service/ZhongMeiOrderApiService.java

@@ -5,9 +5,11 @@ import com.ydtech.modules.ins.model.vo.GeneralNonCarProductReqVo;
 import com.ydtech.modules.ins.model.vo.GeneralNonCarProductResVo;
 import com.ydtech.modules.ins.model.ya.CarModelDTO;
 import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.api.zhongmei.request.ApprovedRequest;
 import com.ydtech.modules.order.entity.api.zhongmei.request.CoverageRequest;
 import com.ydtech.modules.order.entity.api.zhongmei.response.RideAccidentQueryResponse;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
 import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
 
@@ -102,4 +104,12 @@ public interface ZhongMeiOrderApiService extends BaseOrderService<AccidentalDriv
      * @return 是否成功
      */
     boolean cancelOrder(InsAreaCompany insAreaCompany);
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 15:56
+     *  @Description:  读取保单pdf路径
+     */
+    public ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag);
 }

+ 9 - 1
src/main/java/com/ydtech/modules/order/service/ZijinOrderApiService.java

@@ -3,10 +3,12 @@ package com.ydtech.modules.order.service;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.ins.model.vo.QuoteRespVo;
 import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.api.zijin.request.PaymentCallbacksRequest;
 import com.ydtech.modules.order.entity.api.zijin.request.SubmitVerifyRequest;
 import com.ydtech.modules.order.entity.api.zijin.response.QueryClauseDataResponse;
 import com.ydtech.modules.order.entity.api.zijin.response.QueryVehicProductsResponse;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
@@ -117,5 +119,11 @@ public interface ZijinOrderApiService {
      */
     HttpResult sendCheckCarLink(String companyId);
 
-
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/17 17:23
+     *  @Description: 获取保单信息
+     */
+    ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany subOrder, InsOrders insOrders, boolean flag);
 }

+ 73 - 0
src/main/java/com/ydtech/modules/order/service/impl/BoHaiOrderApiServiceImpl.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.order.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
+import com.ydtech.constants.enums.InsuranceOrderPdf;
 import com.ydtech.constants.enums.InsuranceRisk;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.core.page.HttpResult;
@@ -20,9 +21,11 @@ import com.ydtech.modules.order.entity.api.bohai.response.*;
 import com.ydtech.modules.order.entity.config.BoHaiConfigureParameters;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
 import com.ydtech.modules.order.entity.dto.DrivingInsuranceDto;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
+import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
 import com.ydtech.modules.order.entity.vo.bohai.BoHaiQuoteAccidentVo;
 import com.ydtech.modules.order.entity.vo.bohai.ProductDetailsQueryVo;
 import com.ydtech.modules.order.entity.vo.bohai.ProductQueryVo;
@@ -32,9 +35,13 @@ import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
 import com.ydtech.utils.CalculateUtils;
 import com.ydtech.utils.DateUtil_N;
+import com.ydtech.utils.OrderUtils;
 import com.ydtech.utils.StringUtils;
+import com.ydtech.utils.baidu.FileUtil;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
@@ -70,7 +77,14 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
     @Autowired
     private InsSubOrderUpdateDetailService insSubOrderUpdateDetailService;
 
+    @Value("${upload.file.path}")
+    private String uploadFilePath;
 
+    @Value("${upload.file.url}")
+    private String showFileUrl;
+
+    @Value("${api.url}")
+    private String apiUrl;
 
     @Override
     public HttpResult<List<NonAutomotiveProductsResponse.DataDTO.ProductsDTO>> productQuery(ProductQueryVo productQueryVo) throws Exception {
@@ -761,5 +775,64 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
             return false;
         }
     }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 16:20
+     *  @Description: 获取保单路径
+     */
+    @Override
+    public ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag)  {
+        CrawlerPolicyPrintVo vo = getPdfUrl(insAreaCompany, insOrders,flag);
+        String jqPath = vo.getJqxPolicyUrl();
+        String jqSignPath = vo.getJqxFlagUrl();
+        String syPath = vo.getSyxPolicyUrl();
+        String jyPath = vo.getJyxInfoList()==null?null:vo.getJyxInfoList().get(0).getJyxPolicyUrl();
+        InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy =new InsAreaCompanyExternalPolicy(insAreaCompany.getId(),jqPath,syPath,jyPath,jqSignPath);
+        return new ReadPdfUrlListDto(insAreaCompanyExternalPolicy,insAreaCompany,null);
+    }
+
+    public CrawlerPolicyPrintVo getPdfUrl(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag) {
+        CrawlerPolicyPrintVo crawlerPolicyPrintVo = new CrawlerPolicyPrintVo();
+        try{
+            //文件前缀
+            String  pathPrefix = insAreaCompany.getInscompany()+"-"+insAreaCompany.getId()+"-"+insOrders.getLicenseno() +"-";
+            CustomerInfoVo customerInfoVo = insOrders.getApplyinfo().toJavaObject(CustomerInfoVo.class);
+            // 账号信息
+            PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(insAreaCompany.getAgreementId());
+            // 通过 协议id获取配置实体
+            BoHaiConfigureParameters parameters = configureParametersComponents.toEntity(BoHaiConfigureParameters.class,
+                    ptlAgreementAttribution);
+            ElectronicPolicyRequest electronicPolicyRequest = new ElectronicPolicyRequest(parameters, insAreaCompany.getId(),
+                    insAreaCompany.getJqpolicyno(), insAreaCompany.getSypolicyno());
+            ElectronicPolicyResponse response = boHaiRequestApiComponent.electronicPolicy(electronicPolicyRequest,
+                    parameters.getSysSourceCode());
+            ElectronicPolicyResponse.DataDTO data = response.getData();
+
+            String licenseno = insOrders.getLicenseno();
+            if (StringUtils.isNotEmpty(data.getTrafficEPolicyUrl())) {
+                crawlerPolicyPrintVo.setJqxPolicyUrl(fileComponents.gainCarInsPolicyNew(data.getTrafficEPolicyUrl(),
+                        pathPrefix + insAreaCompany.getJqpolicyno() + "-" + InsuranceOrderPdf.JQBD.getDesc(), insAreaCompany.getId(), customerInfoVo.getIdentifyNumber(),flag));
+                crawlerPolicyPrintVo.setJqxFlagUrl(fileComponents.gainCarInsPolicyNew(data.getTrafficEFlagUrl(),
+                        pathPrefix + insAreaCompany.getJqpolicyno() + "-" + InsuranceOrderPdf.JQBZ.getDesc(), insAreaCompany.getId(), customerInfoVo.getIdentifyNumber(),flag));
 
+            }
+            if (StringUtils.isNotEmpty(data.getBusinessEPolicyUrl())) {
+                crawlerPolicyPrintVo.setSyxPolicyUrl(fileComponents.gainCarInsPolicyNew(data.getBusinessEPolicyUrl(),
+                        pathPrefix + insAreaCompany.getJqpolicyno() + "-" + InsuranceOrderPdf.SYBD.getDesc(), insAreaCompany.getId(), customerInfoVo.getIdentifyNumber(),flag));
+            }
+
+            if (StringUtils.isNotEmpty(data.getAcciEPolicyUrl())) {
+                List<CrawlerPolicyPrintVo.JyxInfoListDTO> jyxInfoListDTOS = new ArrayList<>();
+                CrawlerPolicyPrintVo.JyxInfoListDTO jyxInfoListDTO = new CrawlerPolicyPrintVo.JyxInfoListDTO();
+                jyxInfoListDTO.setJyxPolicyUrl(fileComponents.gainCarInsPolicyNew(data.getAcciEPolicyUrl(),
+                        pathPrefix + insAreaCompany.getJyPolicyNo() + "-" + InsuranceOrderPdf.JYBD.getDesc(), insAreaCompany.getId(), customerInfoVo.getIdentifyNumber(),flag));
+                jyxInfoListDTOS.add(jyxInfoListDTO);
+                crawlerPolicyPrintVo.setJyxInfoList(jyxInfoListDTOS);
+            }
+        }catch(Exception e){
+
+        }
+        return crawlerPolicyPrintVo;
+    }
 }

+ 104 - 4
src/main/java/com/ydtech/modules/order/service/impl/DaJiaOrderServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ydtech.constants.enums.InsuranceOrderPdf;
 import com.ydtech.constants.enums.InsuranceRisk;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.core.page.HttpResult;
@@ -18,16 +19,15 @@ import com.ydtech.modules.order.components.ConfigureParametersComponents;
 import com.ydtech.modules.order.components.InsImagesUploadCacheComponents;
 import com.ydtech.modules.order.components.dajia.DaJiaRequestApiComponents;
 import com.ydtech.modules.order.constants.UnderwritingStatus;
-import com.ydtech.modules.order.entity.InsAreaCompany;
-import com.ydtech.modules.order.entity.InsAreaCompanyAccidentalDriving;
-import com.ydtech.modules.order.entity.InsOrders;
-import com.ydtech.modules.order.entity.TaxArrears;
+import com.ydtech.modules.order.entity.*;
 import com.ydtech.modules.order.entity.api.dajia.DaJiaConfigureParameters;
 import com.ydtech.modules.order.entity.api.dajia.constants.CCvrgNo;
 import com.ydtech.modules.order.entity.api.dajia.constants.CProdNo;
 import com.ydtech.modules.order.entity.api.dajia.constants.Message;
 import com.ydtech.modules.order.entity.api.dajia.request.*;
 import com.ydtech.modules.order.entity.api.dajia.response.*;
+import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
@@ -42,6 +42,7 @@ import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
 import com.ydtech.modules.protocol.service.PtlAgreementService;
 import com.ydtech.utils.CalculateUtils;
 import com.ydtech.utils.DateTimeUtil;
+import com.ydtech.utils.OrderUtils;
 import com.ydtech.utils.baidu.FileUtil;
 import com.ydtech.utils.idgen.IdGenerate;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -1000,5 +1001,104 @@ public class DaJiaOrderServiceImpl implements DaJiaOrderService {
         }
         return false;
     }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 16:20
+     *  @Description: 获取保单路径
+     */
+    @Override
+    public ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag)  {
+        String jqPath = getPdfUrl(insAreaCompany, insOrders,InsuranceRisk.TRAFFIC_CODE,PolicyPrintVo.PolicyPrintType.PPT_2.getCode(),insAreaCompany.getJqpolicyno(),flag);
+        String jqSignPath = getPdfUrl(insAreaCompany, insOrders,InsuranceRisk.TRAFFIC_CODE,PolicyPrintVo.PolicyPrintType.PPT_1.getCode(),insAreaCompany.getJqpolicyno(),flag);
+        String syPath = getPdfUrl(insAreaCompany, insOrders,InsuranceRisk.BUSINESS_CODE,PolicyPrintVo.PolicyPrintType.PPT_2.getCode(),insAreaCompany.getSypolicyno(),flag);
+        String jyPath = getPdfUrl(insAreaCompany, insOrders,InsuranceRisk.ACCIDENT_CODE,PolicyPrintVo.PolicyPrintType.PPT_2.getCode(),insAreaCompany.getJyPolicyNo(),flag);
+        InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy =new InsAreaCompanyExternalPolicy(insAreaCompany.getId(),jqPath,syPath,jyPath,jqSignPath);
+        return new ReadPdfUrlListDto(insAreaCompanyExternalPolicy,insAreaCompany,null);
+    }
+
+    public String getPdfUrl(InsAreaCompany insAreaCompany, InsOrders insOrders,String jqFlag,String jqSignFlag,String policyNo,boolean flag) {
+        try {
+            //文件前缀
+            String  pathPrefix = insAreaCompany.getInscompany()+"-"+insAreaCompany.getId()+"-"+insOrders.getLicenseno() +"-"+policyNo+"-";
+            if(org.apache.commons.lang3.StringUtils.isBlank(policyNo)){
+                return null;
+            }
+            ArrayList<String> warrantys = new ArrayList<String>();
+            String templateName = "";
+            String url = "";
+            //获取公司配置信息
+            DaJiaConfigureParameters daJiaConfigureParameters = new DaJiaConfigureParameters();
+            configureParametersComponents.toEntity(daJiaConfigureParameters, insAreaCompany.getAgreementId());
+            // 被保人信息
+            JSONObject ownerInfo = insOrders.getInsureinfo();
+            CustomerInfoVo customerInfoVo = ownerInfo.toJavaObject(CustomerInfoVo.class);
+            String identifyNo = customerInfoVo.getIdentifyNumber();
+            //交强险
+            if (InsuranceRisk.TRAFFIC.getCode().equals(jqFlag)) {
+                if (policyNo != null) {
+                    warrantys.add(policyNo);
+                }
+                if (PolicyPrintVo.PolicyPrintType.PPT_1.getCode().equals(jqSignFlag)) {
+                    templateName = pathPrefix+ InsuranceOrderPdf.JQBZ.getDesc();
+                } else {
+                    templateName = pathPrefix+ InsuranceOrderPdf.JQBD.getDesc();
+                }
+            } else if (InsuranceRisk.BUSINESS.getCode().equals(jqFlag)) {
+                if (policyNo != null) {
+                    warrantys.add(policyNo);
+                }
+                //商业险
+                templateName = pathPrefix+ InsuranceOrderPdf.SYBD.getDesc();
+            } else if (InsuranceRisk.ACCIDENT.getCode().equals(jqFlag)) {
+                //驾意险
+                templateName = pathPrefix+ InsuranceOrderPdf.JYBD.getDesc();
+            }
+            String[] warrantysArray = warrantys.toArray(new String[0]);
+            //是否获取驾意险保单
+            if (InsuranceRisk.ACCIDENT.getCode().equals(jqFlag)) {
 
+                if (!Objects.isNull(insAreaCompany.getCrossInsurance())) {
+                    List<NVHLODR1001Response.policyInfosDTO> policyInfosDTOS = JSON.parseArray(JSON.toJSONString(insAreaCompany.getCrossInsurance()), NVHLODR1001Response.policyInfosDTO.class);
+                    NVHLODR2007Request nvhlodr2007Request = new NVHLODR2007Request(policyInfosDTOS.get(0).getAppNo(), daJiaConfigureParameters);
+                    NVHLODR2007Response nvhlodr2007Response = daJiaRequestApiComponents.accidentPremiumWarranty(nvhlodr2007Request);
+                    if ("2000".equals(nvhlodr2007Response.getStatus())) {
+                        url = gainCarInsPolicyNew(nvhlodr2007Response.getPolicyInfos().get(0).getCPdfUrl(), templateName, insAreaCompany.getId(),flag);
+                    }
+                }
+            } else {
+                VHLINS2005Request vhlins2005Request = new VHLINS2005Request(warrantysArray, daJiaConfigureParameters);
+                VHLINS2005Response vhlins2005Response = daJiaRequestApiComponents.obtainWarranty(vhlins2005Request);
+                if (vhlins2005Response.getStatus().equals(Message.M0000.getCode())) {
+                    //获取保单成功
+                    if (PolicyPrintVo.PolicyPrintType.PPT_1.getCode().equals(jqSignFlag)) {
+                        //下载标志
+                        if (vhlins2005Response.getResult().size() > 0) {
+                            VHLINS2005Response.ResultDTO resultDTO = vhlins2005Response.getResult().get(0);
+                            url = gainCarInsPolicyNew(resultDTO.getReturnBzUrl(), templateName, insAreaCompany.getId(),flag);
+                        } else {
+                            return null;
+                        }
+                    } else if (PolicyPrintVo.PolicyPrintType.PPT_2.getCode().equals(jqSignFlag)) {
+                        //获取保单
+                        if (vhlins2005Response.getResult().size() > 0) {
+                            VHLINS2005Response.ResultDTO resultDTO = vhlins2005Response.getResult().get(0);
+                            url = gainCarInsPolicyNew(resultDTO.getReturnUrl(), templateName, insAreaCompany.getId(),flag);
+                        } else {
+                            return null;
+                        }
+                    }
+                }
+            }
+            return url;
+        } catch (Exception e) {
+            throw new RuntimeException(e.getMessage());
+        }
+    }
+
+
+    private String gainCarInsPolicyNew(String url, String fileName, String subOrderId,boolean  flag) {
+        String dir = "carInsPolicyNew/" + subOrderId + "/";
+        return FileUtil.netUrlToFileNew(url, dir, fileName, uploadFilePath, apiUrl + showFileUrl,flag);
+    }
 }

+ 55 - 0
src/main/java/com/ydtech/modules/order/service/impl/GuorenOrderApiServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ydtech.config.properties.GuorenApiConfigurationProperties;
 import com.ydtech.constants.enums.InsurKind;
 import com.ydtech.constants.enums.InsurKindGuoRen;
+import com.ydtech.constants.enums.InsuranceOrderPdf;
 import com.ydtech.constants.enums.InsuranceRisk;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.core.page.HttpResult;
@@ -26,6 +27,7 @@ import com.ydtech.modules.order.constants.UnderwritingStatus;
 import com.ydtech.modules.order.dao.InsTaskImagesMapper;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsAreaCompanyAccidentalDriving;
+import com.ydtech.modules.order.entity.InsAreaCompanyExternalPolicy;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.api.guoren.constants.GoodsClassifyList;
 import com.ydtech.modules.order.entity.api.guoren.constants.GuoRenRiskCode;
@@ -39,6 +41,7 @@ import com.ydtech.modules.order.entity.api.guoren.response.NonAutoInsOrderRespon
 import com.ydtech.modules.order.entity.api.guoren.response.SignatureResponse;
 import com.ydtech.modules.order.entity.api.guoren.response.SpecialAgreementResponse;
 import com.ydtech.modules.order.entity.dto.InsUploadImagesDto;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
 import com.ydtech.modules.order.entity.vo.guoren.*;
@@ -1256,4 +1259,56 @@ public class GuorenOrderApiServiceImpl implements GuorenOrderApiService {
         IIRBT00012Response iirbt00012Response = guorenRequestApiComponent.proposalPolicyLogout(iirbt00012Request);
         return iirbt00012Response.getResultCode() == 0;
     }
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 16:20
+     *  @Description: 获取保单路径
+     */
+    @Override
+    public ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag)  {
+        String jqPath =  getPdfUrl(insAreaCompany, insOrders,InsuranceRisk.TRAFFIC.getCode(),PolicyPrintVo.PolicyPrintType.PPT_2.getCode(),insAreaCompany.getJqpolicyno(),flag);
+        String jqSignPath = getPdfUrl(insAreaCompany, insOrders,InsuranceRisk.TRAFFIC.getCode(),PolicyPrintVo.PolicyPrintType.PPT_1.getCode(),insAreaCompany.getJqpolicyno(),flag);
+        String syPath = getPdfUrl(insAreaCompany,insOrders,InsuranceRisk.BUSINESS.getCode() ,PolicyPrintVo.PolicyPrintType.PPT_2.getCode(), insAreaCompany.getSypolicyno(),flag);
+        String jyPath = getPdfUrl(insAreaCompany,insOrders,InsuranceRisk.ACCIDENT.getCode(),PolicyPrintVo.PolicyPrintType.PPT_2.getCode(), insAreaCompany.getJyPolicyNo(),flag);
+        InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy =new InsAreaCompanyExternalPolicy(insAreaCompany.getId(),jqPath,syPath,jyPath,jqSignPath);
+        return new ReadPdfUrlListDto(insAreaCompanyExternalPolicy,insAreaCompany,null);
+    }
+    public String getPdfUrl(InsAreaCompany insAreaCompany, InsOrders insOrders,String jqFlag,String jySignFlag,String policyNo,boolean flag) {
+        //文件前缀
+        String  pathPrefix = insAreaCompany.getInscompany()+"-"+insAreaCompany.getId()+"-"+insOrders.getLicenseno() +"-"+policyNo+"-";
+        if(org.apache.commons.lang3.StringUtils.isBlank(policyNo)){
+            return null;
+        }
+        String templateName="";
+        String url="";
+        if (InsuranceRisk.TRAFFIC.getCode().equals(jqFlag)) {
+            PolicyResp policyResp = guorenRequestApiComponent.policyPrint(policyNo);
+            if (PolicyPrintVo.PolicyPrintType.PPT_1.getCode().equals(jySignFlag)) {
+                templateName = pathPrefix + InsuranceOrderPdf.JQBZ.getDesc();
+                //交强险标志
+                url = properties.getPolicyFlagUrl() + policyResp.getData();
+            } else {
+                templateName = pathPrefix +  InsuranceOrderPdf.JQBD.getDesc();
+                url = properties.getPolicyUrl() + policyResp.getData();
+            }
+        }else if(InsuranceRisk.BUSINESS.getCode().equals(jqFlag)){
+            templateName = pathPrefix +InsuranceOrderPdf.SYBD.getDesc();
+            PolicyResp policyResp1 = guorenRequestApiComponent.policyPrint(policyNo);
+            url = properties.getPolicyUrl() + policyResp1.getData();
+        }else if(InsuranceRisk.ACCIDENT.getCode().equals(jqFlag)){
+            url = guorenRequestApiComponent.noCarElectronicPolicy(properties.getChannelCode(),
+                    insAreaCompany.getInsOrderNo(), policyNo);
+            templateName = pathPrefix + InsuranceOrderPdf.JYBD.getDesc();
+        }
+        String transferUrl = gainCarInsPolicyNew(url, templateName, insAreaCompany.getId(),false);
+        return transferUrl;
+
+    }
+
+    private String gainCarInsPolicyNew(String url, String fileName, String subOrderId,boolean flag) {
+        String dir = "carInsPolicyNew/" + subOrderId + "/";
+        return FileUtil.netUrlToFileNew(url, dir, fileName, uploadFilePath, apiUrl + showFileUrl,flag);
+    }
 }

+ 82 - 1
src/main/java/com/ydtech/modules/order/service/impl/HuaTaiOrderApiServiceImpl.java

@@ -2,6 +2,10 @@ package com.ydtech.modules.order.service.impl;
 
 import cn.hutool.core.util.ArrayUtil;
 import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import com.ydtech.constants.enums.InsuranceOrderPdf;
 import com.ydtech.constants.enums.InsuranceRisk;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.core.page.HttpResult;
@@ -10,7 +14,7 @@ import com.ydtech.modules.admin.model.vo.PersonAreaVo;
 import com.ydtech.modules.admin.service.SysAreaService;
 import com.ydtech.modules.fee.service.FeeRuleSchemeService;
 import com.ydtech.modules.ins.model.vo.*;
-import com.ydtech.modules.ins.model.ya.YaQuoteInfoVo;
+import com.ydtech.modules.ins.model.ya.*;
 import com.ydtech.modules.order.components.ConfigureParametersComponents;
 import com.ydtech.modules.order.components.huatai.HuaTaiQuotationProcessorComponent;
 import com.ydtech.modules.order.components.huatai.HuaTaiRequestApiComponents;
@@ -18,6 +22,7 @@ import com.ydtech.modules.order.components.huatai.HuiTaiUploadImageComponents;
 import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
 import com.ydtech.modules.order.constants.UnderwritingStatus;
 import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsAreaCompanyExternalPolicy;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.TaxArrears;
 import com.ydtech.modules.order.entity.api.huatai.HuaTaiBaseRequestHead;
@@ -26,8 +31,10 @@ import com.ydtech.modules.order.entity.api.huatai.constants.HuaTaiSubmitCommon;
 import com.ydtech.modules.order.entity.api.huatai.request.*;
 import com.ydtech.modules.order.entity.api.huatai.response.*;
 import com.ydtech.modules.order.entity.config.HuaTaiConfigureParameters;
+import com.ydtech.modules.order.entity.config.YaConfigureParameters;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
 import com.ydtech.modules.order.entity.dto.InsUploadImagesDto;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
 import com.ydtech.modules.order.entity.po.InsHuataiContributing;
 import com.ydtech.modules.order.entity.vo.*;
@@ -830,6 +837,80 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
         return false;
     }
 
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 14:57
+     *  @Description:  获取保单pdf  无驾意
+     */
+    @Override
+    public ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany,InsOrders insOrders,boolean flag) {
+        //文件前缀
+        String  pathPrefix = insAreaCompany.getInscompany()+"-"+insAreaCompany.getId()+"-"+insOrders.getLicenseno() +"-";
+        CrawlerPolicyPrintVo jqEntity = getPdfUrl(insAreaCompany, insOrders,InsuranceRisk.TRAFFIC.getCode(),insAreaCompany.getJqapplyno(),pathPrefix,flag);
+        String jqPath = jqEntity.getJqxPolicyUrl();
+        String jqSignPath = jqEntity.getJqxFlagUrl();
+        CrawlerPolicyPrintVo syEntity = getPdfUrl(insAreaCompany, insOrders, InsuranceRisk.BUSINESS.getCode(),insAreaCompany.getJqapplyno(),pathPrefix,flag);
+        String syPath = syEntity.getSyxPolicyUrl();
+        InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy =new InsAreaCompanyExternalPolicy(insAreaCompany.getId(),jqPath,jqSignPath,syPath,null);
+        return new ReadPdfUrlListDto(insAreaCompanyExternalPolicy,insAreaCompany,null);
+    }
+    public  CrawlerPolicyPrintVo  getPdfUrl(InsAreaCompany insAreaCompany,InsOrders insOrders,String jqFlag,String policyNo,String pathPrefix,boolean flag){
+        CrawlerPolicyPrintVo crawlerPolicyPrintVo = new CrawlerPolicyPrintVo();
+        try {
+            if(StringUtils.isEmpty(policyNo)){
+                return crawlerPolicyPrintVo;
+            }
+            // 1. 协议id获取配置实体
+            HuaTaiConfigureParameters huaTaiConfigureParameters = configureParametersComponents.toEntity(HuaTaiConfigureParameters.class,
+                    insAreaCompany.getAgreementId());
+            YaQuoteInfoVo yaQuoteInfoVo = new YaQuoteInfoVo(insOrders);
+            String password = yaQuoteInfoVo.getInsuredPersonInfo().getIdentifyNumber();
+            // 2. 组装请求体
+            HuaTaiInsurancePolicyPrintRequest request = new HuaTaiInsurancePolicyPrintRequest();
+            if (InsuranceRisk.TRAFFIC.getCode().equals(policyNo)) {
+                request.setBusinessNo(policyNo);
+            } else if (InsuranceRisk.BUSINESS.getCode().equals(jqFlag)) {
+                request.setBusinessNo(policyNo);
+            }
+            request.setHead(new HuaTaiBaseRequestHead(huaTaiConfigureParameters));
+            HuaTaiInsurancePolicyPrintResponse response = huaTaiRequestApiComponents.insurancePolicyPrint(request,
+                    HuaTaiInsurancePolicyPrintResponse.class, huaTaiConfigureParameters.getInsuredCode());
+            if ("0".equals(response.getHead().getReturnCode())) {
+                List<HuaTaiInsurancePolicyPrintResponse.ElecDownLoadResultDto> urlList = response.getElecDownLoadResultList();
+                //接口文档与返回示例不一致,待联调后修改
+                if (urlList != null && !urlList.isEmpty()) {
+                    for (HuaTaiInsurancePolicyPrintResponse.ElecDownLoadResultDto elecDownLoadResultDto : urlList) {
+                        String url = elecDownLoadResultDto.getDownURL();
+                        if (InsuranceRisk.TRAFFIC.getCode().equals(jqFlag)) {
+                            crawlerPolicyPrintVo.setJqxPolicyUrl(gainCarInsPolicyNew(url, pathPrefix + insAreaCompany.getJqpolicyno() + "-" + InsuranceOrderPdf.JQBD.getDesc(), insAreaCompany.getId(),pathPrefix + insAreaCompany.getSypolicyno()+ "-" + InsuranceOrderPdf.JQBD.getCode(), password,flag));
+                            crawlerPolicyPrintVo.setJqxFlagUrl(gainCarInsPolicyNew(url, pathPrefix + insAreaCompany.getJqpolicyno() + "-" + InsuranceOrderPdf.JQBZ.getDesc(), insAreaCompany.getId(),pathPrefix + insAreaCompany.getSypolicyno()+ "-" + InsuranceOrderPdf.JQBZ.getCode(), password,flag));
+                        } else if (InsuranceRisk.BUSINESS.getCode().equals(jqFlag)) {
+                            crawlerPolicyPrintVo.setSyxPolicyUrl(gainCarInsPolicyNew(url, pathPrefix + insAreaCompany.getSypolicyno() + "-" + InsuranceOrderPdf.SYBD.getDesc(), insAreaCompany.getId(),pathPrefix + insAreaCompany.getSypolicyno()+ "-" + InsuranceOrderPdf.SYBD.getCode(), password,flag));
+                        }
+                    }
+                }
+            }
+            return crawlerPolicyPrintVo;
+        } catch (SystemException e) {
+            e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return crawlerPolicyPrintVo;
+    }
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/18 9:37
+     *  @Description: 新路径
+     */
+    public String gainCarInsPolicyNew(String url, String fileName, String subOrderId ,String password,String path,boolean flag) {
+        String dir = "carInsPolicyNew/" + subOrderId + "/";
+        return FileUtil.netUrlStoreToLocalNew(url, dir, fileName, uploadFilePath, apiUrl + showFileUrl, password, path,flag);
+    }
+
 }
 
 

+ 59 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsAreaCompanyExternalPolicyServiceImpl.java

@@ -1,12 +1,28 @@
 package com.ydtech.modules.order.service.impl;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.modules.order.dao.InsAreaCompanyExternalPolicyMapper;
+import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsAreaCompanyExternalPolicy;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlDto;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.service.InsAreaCompanyExternalPolicyService;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.modules.protocol.entity.po.PtlAgreement;
+import com.ydtech.modules.protocol.service.PtlAgreementService;
+import com.ydtech.utils.OrderUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.Objects;
+
 /**
  * @author Administrator
  * @description 针对表【InsAreaCompanyExternalFee(报价渠道)】的数据库操作Service实现
@@ -16,6 +32,18 @@ import org.springframework.stereotype.Service;
 public class InsAreaCompanyExternalPolicyServiceImpl extends ServiceImpl<InsAreaCompanyExternalPolicyMapper, InsAreaCompanyExternalPolicy>
         implements InsAreaCompanyExternalPolicyService {
 
+    @Autowired
+    private InsAreaCompanyService insAreaCompanyService;
+
+    @Autowired
+    private PtlAgreementService ptlAgreementService;
+
+    @Autowired
+    private InsOrdersService insOrdersService;
+
+    @Value("${api.url}")
+    private String apiUrl;
+
 
     @Override
     public InsAreaCompanyExternalPolicy getPolicyByCompanyId(String companyId) {
@@ -33,6 +61,37 @@ public class InsAreaCompanyExternalPolicyServiceImpl extends ServiceImpl<InsArea
     public void updateBySuOrderNo(InsAreaCompanyExternalPolicy externalPolicy) {
         baseMapper.updateBySuOrderNo(externalPolicy);
     }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 11:20
+     *  @Description: 返回外部订单的保单路径
+     */
+    @Override
+    public ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany subOrder,InsOrders insOrders) {
+        InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy = baseMapper.selectOne(new LambdaQueryWrapper<InsAreaCompanyExternalPolicy>()
+                .eq(InsAreaCompanyExternalPolicy::getSubOrderNo, subOrder.getId()));
+        if(insAreaCompanyExternalPolicy!=null){
+            if(StringUtils.isNotBlank(insAreaCompanyExternalPolicy.getJqPolicy())){
+                  insAreaCompanyExternalPolicy.setJqPolicy(apiUrl+insAreaCompanyExternalPolicy.getJqPolicy());
+            }
+            if(StringUtils.isNotBlank(insAreaCompanyExternalPolicy.getSyPolicy())){
+                insAreaCompanyExternalPolicy.setSyPolicy(apiUrl+insAreaCompanyExternalPolicy.getSyPolicy());
+            }
+            if(StringUtils.isNotBlank(insAreaCompanyExternalPolicy.getNoPolicy())){
+                insAreaCompanyExternalPolicy.setNoPolicy(apiUrl+insAreaCompanyExternalPolicy.getNoPolicy());
+            }
+            if(StringUtils.isNotBlank(insAreaCompanyExternalPolicy.getJqSign())){
+                insAreaCompanyExternalPolicy.setJqSign(apiUrl+insAreaCompanyExternalPolicy.getJqSign());
+            }
+        }
+        String jyPolicyNo = null;
+        if (!Objects.isNull(subOrder.getCrossInsurance())) {
+            jyPolicyNo = OrderUtils.getJyPolicyNo(subOrder.getCompanyId(), String.valueOf(subOrder.getApiType()), subOrder.getCrossInsurance().toString(), "1");
+        }
+        subOrder.setJyPolicyNo(jyPolicyNo);
+        return new ReadPdfUrlListDto(insAreaCompanyExternalPolicy,subOrder,String.valueOf(insOrders.getIsExternal()));
+    }
 }
 
 

+ 65 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsCrawlerOrderServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ydtech.constants.enums.InsurKind;
+import com.ydtech.constants.enums.InsuranceOrderPdf;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
@@ -17,6 +18,7 @@ import com.ydtech.modules.order.entity.crawler.constants.CrawlerVerifyPaymentCon
 import com.ydtech.modules.order.entity.crawler.request.*;
 import com.ydtech.modules.order.entity.crawler.response.*;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
@@ -582,4 +584,67 @@ public class InsCrawlerOrderServiceImpl implements InsCrawlerOrderService {
         return false;
     }
 
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 16:20
+     *  @Description: 获取保单路径
+     */
+    @Override
+    public ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag)  {
+        CrawlerPolicyPrintVo vo=null;
+        try{
+            vo = getPdfUrl(insAreaCompany, insOrders,flag);
+        }catch(Exception e){
+             throw new SystemException(e.getMessage());
+        }
+        String jyPath = (vo.getJyxInfoList()!=null && !vo.getJyxInfoList().isEmpty())?vo.getJyxInfoList().get(0).getJyxPolicyUrl():null;
+        InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy =new InsAreaCompanyExternalPolicy(insAreaCompany.getId(),vo.getJqxPolicyUrl(),vo.getSyxPolicyUrl(),jyPath,vo.getJqxFlagUrl());
+        return new ReadPdfUrlListDto(insAreaCompanyExternalPolicy,insAreaCompany,null);
+    }
+    public CrawlerPolicyPrintVo getPdfUrl(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag) {
+        CrawlerPolicyPrintVo crawlerPolicyPrintVo = new CrawlerPolicyPrintVo();
+        //文件前缀
+        String  pathPrefix = insAreaCompany.getInscompany()+"-"+insAreaCompany.getId()+"-"+insOrders.getLicenseno() +"-";
+        // 请求地址
+        String apiUrl = ptlCrawlerApiService.getApiUrl(insAreaCompany.getAgreementId(), PtlCrawlerApiType.API_6);
+        //组装参数
+        CrawlerBaseRequest crawlerBaseRequest = new CrawlerBaseRequest(insAreaCompany.getInsOrderNo());
+        CrawlerPolicyPrintResponse response = insCrawlerOrderComponents.request(apiUrl, insAreaCompany.getCompanyId(), PtlCrawlerApiType.API_6.getDesc(), crawlerBaseRequest, CrawlerPolicyPrintResponse.class);
+        if (response.getCode() == 200) {
+            if(StringUtils.isNotBlank(response.getJqxFlagUrl())){
+                crawlerPolicyPrintVo.setJqxFlagUrl(gainCarInsPolicyNew(response.getJqxFlagUrl(), pathPrefix + insAreaCompany.getJqpolicyno() + "-" + InsuranceOrderPdf.JQBZ.getDesc(), insAreaCompany.getId(), flag));
+            }
+            if(StringUtils.isNotBlank(response.getJqxPolicyUrl())){
+                crawlerPolicyPrintVo.setJqxPolicyUrl(gainCarInsPolicyNew(response.getJqxPolicyUrl(), pathPrefix + insAreaCompany.getJqpolicyno() + "-" + InsuranceOrderPdf.JQBD.getDesc(), insAreaCompany.getId(), flag));
+            }
+            if(StringUtils.isNotBlank(response.getJqxPolicyUrl())){
+                crawlerPolicyPrintVo.setSyxPolicyUrl(gainCarInsPolicyNew(response.getSyxPolicyUrl(), pathPrefix + insAreaCompany.getSypolicyno() + "-" + InsuranceOrderPdf.SYBD.getDesc(), insAreaCompany.getId(), flag));
+            }
+            if(response.getJyxInfoList()!=null && !response.getJyxInfoList().isEmpty()){
+                crawlerPolicyPrintVo.setJyxInfoList(response.getJyxInfoList().stream().map(x -> {
+                    CrawlerPolicyPrintVo.JyxInfoListDTO jyxInfoListDTO = new CrawlerPolicyPrintVo.JyxInfoListDTO();
+                    jyxInfoListDTO.setApplication(x.getApplication());
+                    jyxInfoListDTO.setJyxPolicyUrl(gainCarInsPolicyNew(x.getJyxPolicyUrl(), pathPrefix + insAreaCompany.getJyPolicyNo() + "-" + InsuranceOrderPdf.JYBD.getDesc(), insAreaCompany.getId(), flag));
+                    return jyxInfoListDTO;
+                }).collect(Collectors.toList()));
+            }
+
+        }else{
+            throw new SystemException(response.getMessage());
+        }
+        return crawlerPolicyPrintVo;
+    }
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/18 9:37
+     *  @Description: 新路径
+     */
+    public String gainCarInsPolicyNew(String url, String fileName, String subOrderId,boolean flag) {
+        String dir = "carInsPolicyNew/" + subOrderId + "/";
+        return FileUtil.netUrlToFileNew(url, dir, fileName, uploadFilePath, apiUrl + showFileUrl,flag);
+    }
+
 }

+ 113 - 4
src/main/java/com/ydtech/modules/order/service/impl/PingAnOrderApiServiceImpl.java

@@ -7,6 +7,8 @@ import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.google.gson.Gson;
 import com.ydtech.config.properties.PingAnApiConfigurationProperties;
+import com.ydtech.constants.enums.InsuranceOrderPdf;
+import com.ydtech.constants.enums.InsuranceRisk;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
@@ -16,10 +18,7 @@ import com.ydtech.modules.order.components.ConfigureParametersComponents;
 import com.ydtech.modules.order.components.pingan.PinganRequestApiComponents;
 import com.ydtech.modules.order.constants.UnderwritingStatus;
 import com.ydtech.modules.order.dao.InsTaskImagesMapper;
-import com.ydtech.modules.order.entity.InsAreaCompany;
-import com.ydtech.modules.order.entity.InsDrivingIntentionInsuranceSon;
-import com.ydtech.modules.order.entity.InsOrders;
-import com.ydtech.modules.order.entity.TaxArrears;
+import com.ydtech.modules.order.entity.*;
 import com.ydtech.modules.order.entity.api.pingan.constants.accept.AcceptResponseStatusCodeEnum;
 import com.ydtech.modules.order.entity.api.pingan.constants.dict.document.PingAnDocumentClassEnum;
 import com.ydtech.modules.order.entity.api.pingan.constants.index.IndexResposeCodeEnum;
@@ -39,12 +38,14 @@ import com.ydtech.modules.order.entity.config.PingAnConfigureParameters;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
 import com.ydtech.modules.order.entity.dto.InsTaskImagesDto;
 import com.ydtech.modules.order.entity.dto.InsUploadImagesDto;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.po.InsTaskImages;
 import com.ydtech.modules.order.entity.po.InsUploadFiles;
 import com.ydtech.modules.order.entity.po.PinganRecord;
 import com.ydtech.modules.order.entity.po.PinganShUploafile;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.InsDrivingIntentionInsuranceVo;
+import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
 import com.ydtech.modules.order.entity.vo.SpecialAuditVo;
 import com.ydtech.modules.order.entity.vo.bohai.ProductDetailsQueryVo;
 import com.ydtech.modules.order.entity.vo.pingan.*;
@@ -123,6 +124,14 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
 
 
     private final  InsSubOrderUpdateDetailService  insSubOrderUpdateDetailService;
+
+
+    @Value("${upload.file.url}")
+    private String showFileUrl;
+
+    @Value("${api.url}")
+    private String apiUrl;
+
     /**
      * @Description 获取财意险险种套餐列表  调用 4.4
      * @Author hxl
@@ -2520,6 +2529,8 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
         return HttpResult.ok("需要补传资料!!");
     }
 
+
+
     /**
      * @version
      * @author: hxl
@@ -2610,4 +2621,102 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
         }
         return map;
     }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/21 15:59
+     *  @Description:  统一处理保单路径
+     */
+    @Override
+    public ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders, boolean flag) {
+        String jqPath = getPdfUrl(insAreaCompany, insOrders, InsuranceRisk.TRAFFIC_CODE, PolicyPrintVo.PolicyPrintType.PPT_2.getCode(),insAreaCompany.getJqpolicyno(),flag);
+        String jqSignPath = getPdfUrl(insAreaCompany, insOrders,InsuranceRisk.TRAFFIC_CODE,PolicyPrintVo.PolicyPrintType.PPT_1.getCode(),insAreaCompany.getJqpolicyno(),flag);
+        String syPath = getPdfUrl(insAreaCompany, insOrders,InsuranceRisk.BUSINESS_CODE,PolicyPrintVo.PolicyPrintType.PPT_2.getCode(),insAreaCompany.getSypolicyno(),flag);
+        String jyPath = getPdfUrl(insAreaCompany, insOrders,InsuranceRisk.ACCIDENT_CODE,PolicyPrintVo.PolicyPrintType.PPT_2.getCode(),insAreaCompany.getJyPolicyNo(),flag);
+        InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy =new InsAreaCompanyExternalPolicy(insAreaCompany.getId(),jqPath,syPath,jyPath,jqSignPath);
+        return new ReadPdfUrlListDto(insAreaCompanyExternalPolicy,insAreaCompany,null);
+    }
+    public String getPdfUrl(InsAreaCompany insAreaCompany, InsOrders insOrders,String jqFlag,String jqSignFlag,String policyNo,boolean flag) {
+        String path=null;
+        //文件前缀
+        String  pathPrefix = insAreaCompany.getInscompany()+"-"+insAreaCompany.getId()+"-"+insOrders.getLicenseno() +"-"+policyNo+"-";
+        if(org.apache.commons.lang3.StringUtils.isBlank(policyNo)){
+           return null;
+        }
+        // 账号信息
+        PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(insAreaCompany.getAgreementId());
+        // 通过 协议id获取配置实体
+        PingAnConfigureParameters parameters = configureParametersComponents.toEntity(PingAnConfigureParameters.class,
+                ptlAgreementAttribution);
+        //车主信息
+        CustomerInfoVo ownerInfo = insOrders.getOwnerinfo().toJavaObject(CustomerInfoVo.class);
+        CarInfoVo carInfoVo = insOrders.getCarinfo().toJavaObject(CarInfoVo.class);
+        PinganApiLog pinganApiLog = new PinganApiLog(insAreaCompany.getOrderno(), insAreaCompany.getId(), insAreaCompany.getAgreementId());
+
+        String jyFlag ="";
+        String  templateName ="";
+        //交强险
+        if (InsuranceRisk.TRAFFIC.getCode().equals(jqFlag)) {
+            if (PolicyPrintVo.PolicyPrintType.PPT_1.getCode().equals(jqSignFlag)) {
+                templateName = pathPrefix+ InsuranceOrderPdf.JQBZ.getDesc();
+            } else {
+                templateName = pathPrefix+ InsuranceOrderPdf.JQBD.getDesc();
+            }
+        } else if (InsuranceRisk.BUSINESS.getCode().equals(jqFlag)) {
+            //商业险
+            templateName = pathPrefix+ InsuranceOrderPdf.SYBD.getDesc();
+        } else if (InsuranceRisk.ACCIDENT.getCode().equals(jqFlag)) {
+            //驾意险
+            templateName = pathPrefix+ InsuranceOrderPdf.JYBD.getDesc();
+            jyFlag ="true";
+        }
+        String decipher = templateName.replaceAll(".pdf","")+"-decipher.pdf";
+        String dir = "carInsPolicyNew/" + insAreaCompany.getId() + "/";
+        PolicyPdfRequest policyPdfRequest = new PolicyPdfRequest(parameters.getUserId(), policyNo, ownerInfo.getIdentifyNumber(), carInfoVo.getLicenseNo(), carInfoVo.getFrameNo(),jyFlag);
+        PolicyPdfResponse policyPdfResponse = null;
+        try {
+            policyPdfResponse = pinganRequestApiComponents.getPolicyPdf(policyPdfRequest, pinganApiLog);
+        } catch (Exception e) {
+            throw new SystemException(e.getMessage());
+        }
+        if (policyPdfResponse != null) {
+            if (PolicyPdfResponseCodeEnum.POLICY_PDF_CODE_MSG_0.getCode().equals(policyPdfResponse.getResultCode())) {
+                String policyPdfBase64Str = policyPdfResponse.getPolicyPdf();
+                String flagPdf = policyPdfResponse.getFlagPdf();
+                String jqbdPath =  pathPrefix+decipher;
+                String jqBzTargertPath = uploadPath + dir + jqbdPath;
+                File existFile = new File(jqBzTargertPath);
+                String showPath = apiUrl+ showFileUrl+ dir+jqbdPath;
+                if (existFile.exists()) {
+                    if(!flag){
+                        path=showPath;
+                    }else{
+                        //刪除重新生成
+                        existFile.delete();
+                    }
+                }
+                //保单
+                if(policyPdfBase64Str!=null && PolicyPrintVo.PolicyPrintType.PPT_2.getCode().equals(jqSignFlag)) {
+                    try {
+                        PDFUtil.decryptFileByPassword(policyPdfBase64Str, jqBzTargertPath, properties.getPingAnPublicKey());
+                    } catch (Exception e) {
+                        path = null;
+                    }
+                    path=showPath;
+                }
+                //标志
+                if(flagPdf!=null && PolicyPrintVo.PolicyPrintType.PPT_1.getCode().equals(jqSignFlag)) {
+                    try {
+                        PDFUtil.decryptFileByPassword(policyPdfBase64Str, jqBzTargertPath, properties.getPingAnPublicKey());
+                    } catch (Exception e) {
+                        path = null;
+                    }
+                    path=showPath;
+                }
+            }
+
+        }
+        return path;
+    }
+
 }

+ 64 - 0
src/main/java/com/ydtech/modules/order/service/impl/YongAnOrderServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.order.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.dataformat.xml.XmlMapper;
@@ -16,9 +17,11 @@ import com.ydtech.modules.ins.model.ya.*;
 import com.ydtech.modules.order.components.ConfigureParametersComponents;
 import com.ydtech.modules.order.components.InsImagesUploadCacheComponents;
 import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsAreaCompanyExternalPolicy;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.TaxArrears;
 import com.ydtech.modules.order.entity.config.YaConfigureParameters;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
@@ -1195,4 +1198,65 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
         insAreaCompanyService.updateCompanyAndOrdersNew(insAreaCompany);
 
     }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 14:18
+     *  @Description:  永安获取保单生成pdf
+     */
+    public ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag) {
+        // let result = res.data.replace(/[\r\n]/g, "");
+        // let pdfBase64 = `data:application/pdf;base64,${result}`;   base64转文件
+        String jqPath = getPdfUrl(insAreaCompany, "jq", "01",flag);
+        String syPath = getPdfUrl(insAreaCompany, "sy", "01",flag);
+        String jqSignPath = getPdfUrl(insAreaCompany, "jq", "02",flag);
+        InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy =new InsAreaCompanyExternalPolicy(insAreaCompany.getId(),jqPath,jqSignPath,syPath,null);
+        return new ReadPdfUrlListDto(insAreaCompanyExternalPolicy,insAreaCompany,null);
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 14:32
+     *  @Description: 获取pdf保单
+     */
+    public  String  getPdfUrl(InsAreaCompany insAreaCompany, String jqSignFlag,String jqFlag,boolean flag){
+        String url = null;
+        try {
+            // 账号配置
+            YaConfigureParameters yaConfigureParameters = configureParametersComponents.toEntity(YaConfigureParameters.class,
+                    insAreaCompany.getAgreementId());
+            RequestData requestData = new RequestData();
+            RequestHead requestHead = getRequestHead("B21", yaConfigureParameters);
+            RequestBodyB21 requestBodyB21 = new RequestBodyB21();
+            ResponseDataB21 responseDataB21 = new ResponseDataB21();
+            ObjectMapper mapper = new XmlMapper();
+            mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+            //1.组装RequestBody
+            requestBodyB21.setDocumentType(jqSignFlag);
+            if ("jq".equals(jqFlag) && org.apache.commons.lang3.StringUtils.isNotBlank(insAreaCompany.getJqpolicyno())) {
+                requestBodyB21.setBusinessNo(insAreaCompany.getJqpolicyno());
+            } else if ("sy".equals(jqFlag) && org.apache.commons.lang3.StringUtils.isNotBlank(insAreaCompany.getSypolicyno())) {
+                requestBodyB21.setBusinessNo(insAreaCompany.getSypolicyno());
+            }
+            requestData.setRequestHead(requestHead);
+            requestData.setRequestBody(requestBodyB21);
+            String responseString = httpPost(mapper, requestData, yaConfigureParameters.getConsumerAccessKey());
+            responseDataB21 = mapper.readValue(responseString, ResponseDataB21.class);
+            ResponseBodyB21 responseBody21 = responseDataB21.getResponseBody();
+            if (!responseDataB21.getResponseHead().getStatus().equals("0")) {
+
+            } else {
+                if (!responseBody21.getResultCode().equals("0")) {
+
+                }else{
+                   url =responseBody21.getInsurancePolicy();
+                }
+            }
+        } catch (SystemException e) {
+            e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return url;
+    }
 }

+ 66 - 0
src/main/java/com/ydtech/modules/order/service/impl/YongchengOrderApiServiceImpl.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.ydtech.config.properties.YongchengApiConfigurationProperties;
 import com.ydtech.constants.InsuranceEnum;
+import com.ydtech.constants.enums.InsuranceOrderPdf;
 import com.ydtech.constants.enums.InsuranceRisk;
 import com.ydtech.constants.enums.dict.AttachInsureEnum;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
@@ -58,14 +59,17 @@ import com.ydtech.modules.order.components.yongcheng.YongchengRequestApiComponen
 import com.ydtech.modules.order.constants.UnderwritingStatus;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsAreaCompanyAccidentalDriving;
+import com.ydtech.modules.order.entity.InsAreaCompanyExternalPolicy;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.api.yongcheng.constants.MessageStatusCode;
 import com.ydtech.modules.order.entity.api.yongcheng.request.AccidentUnderwritingRequest;
 import com.ydtech.modules.order.entity.api.yongcheng.request.ProposalPolicyReturnRequest;
 import com.ydtech.modules.order.entity.api.yongcheng.response.AccidentUnderwritingResponse;
+import com.ydtech.modules.order.entity.api.zhongmei.response.OrderStatusResponse;
 import com.ydtech.modules.order.entity.crawler.request.RecognitionRequest;
 import com.ydtech.modules.order.entity.crawler.response.RecognitionResponse;
 import com.ydtech.modules.order.entity.dto.DrivingInsuranceDto;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import com.ydtech.modules.order.entity.vo.*;
 import com.ydtech.modules.order.service.*;
@@ -75,6 +79,7 @@ import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.utils.DateTimeUtil;
+import com.ydtech.utils.OrderUtils;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.utils.baidu.FileUtil;
 import lombok.AllArgsConstructor;
@@ -1505,4 +1510,65 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
         }
         return false;
     }
+    @Override
+    public ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag)  {
+        CarInsPolicyDto jqEntity = getPdfUrl(insAreaCompany, insOrders, insAreaCompany.getJqpolicyno(),flag);
+        String jqSign = jqEntity.getJqFlagUrl();
+        String jqPath = jqEntity.getJqUrl();
+        CarInsPolicyDto syEntity = getPdfUrl(insAreaCompany, insOrders, insAreaCompany.getSypolicyno(),flag);
+        String syPath = syEntity.getSyUrl();
+        CarInsPolicyDto jyEntity = getPdfUrl(insAreaCompany, insOrders, insAreaCompany.getJyPolicyNo(),flag);
+        String jyPath = jyEntity.getJyUrl();
+        InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy = new InsAreaCompanyExternalPolicy(insAreaCompany.getId(), jqPath, syPath, jyPath, jqSign);
+        return new ReadPdfUrlListDto(insAreaCompanyExternalPolicy, insAreaCompany, null);
+    }
+    public CarInsPolicyDto getPdfUrl(InsAreaCompany insAreaCompany, InsOrders insOrders,String policyNo,boolean flag) {
+        CarInsPolicyDto cipDto = new CarInsPolicyDto();
+        if(org.apache.commons.lang3.StringUtils.isBlank(policyNo)){
+            return cipDto;
+        }
+        // 获取协议配置信息
+        YcConfigureParameters ycConfigureParameters = gainYcConfigParams(insAreaCompany.getAgreementId());
+        //组装参数
+        Policy p = Policy.buildPolicyParam(policyNo, ycConfigureParameters.gainAuthorityDataXml());
+        //接口请求
+        try {
+            PolicyResponse pResp = yongchengRequestApiComponents.dzbdWeb(p);
+            if (MessageStatusCode.E0000.getCode().equals(pResp.getHead().getResponseCompleteMessageStatus().getMessageStatusCode())) {
+                //标志
+                if (StringUtils.isNotEmpty(pResp.getPolicyBZUrl())) {
+                    String bzInsUrl = pResp.getPolicyBZUrl().replaceAll(";pkid", "&pkid");
+                    String jqFlagUrl = gainCarInsPolicyNew(bzInsUrl, insAreaCompany.getInscompany()+"-"+insAreaCompany.getId()+"-"+insOrders.getLicenseno() +"-"+policyNo +"-"+ InsuranceOrderPdf.JQBZ.getDesc(), insAreaCompany.getId(),flag);
+                    cipDto.setJqFlagUrl(jqFlagUrl);
+                }
+                //交强
+                if (StringUtils.isNotEmpty(pResp.getJqpolicyUrl())) {
+                    String jqInsUrl = pResp.getJqpolicyUrl().replace(";pkid", "&pkid");
+                    String jqUrl = gainCarInsPolicyNew(jqInsUrl, insAreaCompany.getInscompany()+"-"+insAreaCompany.getId()+"-"+insOrders.getLicenseno() +"-"+policyNo +"-"+  InsuranceOrderPdf.JQBD.getDesc(), insAreaCompany.getId(),flag);
+                    cipDto.setJqUrl(jqUrl);
+                }
+                //商业
+                if (StringUtils.isNotEmpty(pResp.getSypolicyUrl())) {
+                    String syInsUrl = pResp.getSypolicyUrl().replace(";pkid", "&pkid");
+                    String syUrl = gainCarInsPolicyNew(syInsUrl, insAreaCompany.getInscompany()+"-"+insAreaCompany.getId()+"-"+insOrders.getLicenseno() +"-"+policyNo +"-"+  InsuranceOrderPdf.SYBD.getDesc(), insAreaCompany.getId(),flag);
+                    cipDto.setSyUrl(syUrl);
+
+                }
+                // 非车险
+                if (StringUtils.isNotEmpty(pResp.getYwpolicUrl())) {
+                    String jyInsUrl = pResp.getYwpolicUrl().replace(";pkid", "&pkid");
+                    String jyUrl = gainCarInsPolicyNew(jyInsUrl, insAreaCompany.getInscompany()+"-"+insAreaCompany.getId()+"-"+insOrders.getLicenseno() +"-"+ policyNo + "-"+InsuranceOrderPdf.JYBD.getDesc(), insAreaCompany.getId(),flag);
+                    cipDto.setJyUrl(jyUrl);
+                }
+            }
+        } catch (JsonProcessingException jsonProcessingException) {
+            jsonProcessingException.printStackTrace();
+
+        }
+        return  cipDto;
+    }
+    public String gainCarInsPolicyNew(String url, String fileName, String subOrderId,boolean flag) {
+        String dir = "carInsPolicyNew/" + subOrderId + "/";
+        return FileUtil.netUrlToFileNew(url, dir, fileName, uploadFilePath, apiUrl + showFileUrl,flag);
+    }
 }

+ 84 - 4
src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderApiServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.util.ArrayUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.ydtech.components.ZhongmeiRequestComponents;
+import com.ydtech.constants.enums.InsuranceOrderPdf;
 import com.ydtech.constants.enums.InsuranceRisk;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.core.page.HttpResult;
@@ -11,6 +12,7 @@ import com.ydtech.exception.SystemException;
 import com.ydtech.modules.ins.model.request.Response;
 import com.ydtech.modules.ins.model.vo.*;
 import com.ydtech.modules.ins.model.ya.CarModelDTO;
+import com.ydtech.modules.ins.model.ya.YaQuoteInfoVo;
 import com.ydtech.modules.ins.model.zm.ZmCarModel;
 import com.ydtech.modules.order.components.ConfigureParametersComponents;
 import com.ydtech.modules.order.components.InsImagesUploadCacheComponents;
@@ -19,10 +21,10 @@ import com.ydtech.modules.order.components.vehicle.QueryVehicleComponents;
 import com.ydtech.modules.order.components.zhongmei.ZhongmeiRepeatInsuranceComponents;
 import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
 import com.ydtech.modules.order.constants.UnderwritingStatus;
-import com.ydtech.modules.order.entity.InsAreaCompany;
-import com.ydtech.modules.order.entity.InsAreaCompanyAccidentalDriving;
-import com.ydtech.modules.order.entity.InsOrders;
-import com.ydtech.modules.order.entity.TaxArrears;
+import com.ydtech.modules.order.entity.*;
+import com.ydtech.modules.order.entity.api.huatai.HuaTaiBaseRequestHead;
+import com.ydtech.modules.order.entity.api.huatai.request.HuaTaiInsurancePolicyPrintRequest;
+import com.ydtech.modules.order.entity.api.huatai.response.HuaTaiInsurancePolicyPrintResponse;
 import com.ydtech.modules.order.entity.api.zhongmei.BaseRequestHead;
 import com.ydtech.modules.order.entity.api.zhongmei.constants.enums.AuditStatusEnum;
 import com.ydtech.modules.order.entity.api.zhongmei.constants.enums.DocumentTypeEnum;
@@ -30,7 +32,10 @@ import com.ydtech.modules.order.entity.api.zhongmei.constants.enums.PaymentStatu
 import com.ydtech.modules.order.entity.api.zhongmei.constants.enums.SubmitStatus;
 import com.ydtech.modules.order.entity.api.zhongmei.request.*;
 import com.ydtech.modules.order.entity.api.zhongmei.response.*;
+import com.ydtech.modules.order.entity.config.HuaTaiConfigureParameters;
 import com.ydtech.modules.order.entity.config.ZmConfigureParameters;
+import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
@@ -775,6 +780,81 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         return true;
     }
 
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 15:25
+     *  @Description:  获取保单pdf的地址
+     */
+    @Override
+    public ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag)  {
+        String jqPath =  getPdfUrl(insAreaCompany, insOrders,DocumentTypeEnum.DZ_AE.getNumber(),InsuranceRisk.TRAFFIC.getCode(),insAreaCompany.getJqpolicyno(),flag);
+        String jqSignPath = getPdfUrl(insAreaCompany, insOrders,DocumentTypeEnum.DZ_AJ.getNumber(),InsuranceRisk.TRAFFIC.getCode(),insAreaCompany.getJqpolicyno(),flag);
+        String syPath =  getPdfUrl(insAreaCompany, insOrders,DocumentTypeEnum.DZ_AE.getNumber(),InsuranceRisk.BUSINESS.getCode(),insAreaCompany.getJqpolicyno(),flag);
+        String jyPath =  getPdfUrl(insAreaCompany, insOrders,DocumentTypeEnum.DZ_AE.getNumber(),InsuranceRisk.ACCIDENT.getCode(),insAreaCompany.getJyPolicyNo(),flag);
+        InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy =new InsAreaCompanyExternalPolicy(insAreaCompany.getId(),jqPath,syPath,jyPath,jqSignPath);
+        return new ReadPdfUrlListDto(insAreaCompanyExternalPolicy,insAreaCompany,null);
+    }
+    public String getPdfUrl(InsAreaCompany insAreaCompany, InsOrders insOrders, String jqSignFlag,String jqFlag,String policyNo,boolean flag){
+        //文件前缀
+        String  pathPrefix = insAreaCompany.getInscompany()+"-"+insAreaCompany.getId()+"-"+insOrders.getLicenseno() +"-";
+        if(StringUtils.isBlank(policyNo)){
+            return null;
+        }
+        // 1. 协议id获取配置实体
+        ZmConfigureParameters zmConfigureParameters = configureParametersComponents.toEntity(ZmConfigureParameters.class,
+                insAreaCompany.getAgreementId());
+        String code = DocumentTypeEnum.code(jqSignFlag);
+        // 2. 组装请求体
+        InsurancePolicyPrintRequest request = new InsurancePolicyPrintRequest();
+        //获取能源种类
+        CarInfoVo carInfoVo = JSON.toJavaObject(insOrders.getCarinfo(), CarInfoVo.class);
+        if (!InsuranceRisk.ACCIDENT.getCode().equals(jqFlag)) {//非车险不传险种代码
+            request.setRiskCode(InsuranceTypeCorrespondence.getZhongMei_RISK().get(carInfoVo.getEnergyType()).get(jqFlag));
+        } else {
+            request.setBusinessType(DocumentTypeEnum.EP.getCode());
+        }
+        request.setPolicyNo(policyNo);
+        request.setDocumentType(code);
+        request.setHead(new BaseRequestHead(zmConfigureParameters));
+
+        InsurancePolicyPrintResponse response = zhongmeiRequestApiComponents.insurancePolicyPrint(request,
+                InsurancePolicyPrintResponse.class);
+        if ("1".equals(response.getStatusCode())) {
+            List<String> urlList = response.getDownloadUrl();
+            if (urlList != null && !urlList.isEmpty()) {
+                String url = urlList.get(0);
+                String templateName = "";
+                if ("DZ_AJ".equals(code)) {
+                    templateName = InsuranceOrderPdf.JQBZ.getDesc();
+                } else if ("DZ_AE".equals(code)) {
+                    if (StringUtils.isNotEmpty(request.getRiskCode())) {
+                        if ("0330".equals(request.getRiskCode())) {
+                            templateName = InsuranceOrderPdf.JQBD.getDesc();
+                        } else {
+                            templateName =InsuranceOrderPdf.SYBD.getDesc();
+                        }
+                    } else {
+                        templateName =InsuranceOrderPdf.JYBD.getDesc();
+                    }
+                }
+                return gainCarInsPolicyNew(url, pathPrefix + policyNo + "-" + templateName, insAreaCompany.getId(),flag);
+            }
+        } else {
+            return null;
+        }
+        return null;
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/18 9:37
+     *  @Description: 新路径
+     */
+    public String gainCarInsPolicyNew(String url, String fileName, String subOrderId ,boolean flag) {
+        String dir = "carInsPolicyNew/" + subOrderId + "/";
+        return FileUtil.netUrlToFileNew(url, dir, fileName, uploadFilePath, apiUrl + showFileUrl,flag);
+    }
 }
 
 

+ 61 - 4
src/main/java/com/ydtech/modules/order/service/impl/ZijinOrderApiServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.util.ArrayUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.ydtech.constants.enums.InsuranceOrderPdf;
 import com.ydtech.constants.enums.InsuranceRisk;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.core.page.HttpResult;
@@ -15,15 +16,13 @@ import com.ydtech.modules.order.components.InsImagesUploadCacheComponents;
 import com.ydtech.modules.order.components.zijin.ZijinRequestApiComponents;
 import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
 import com.ydtech.modules.order.constants.UnderwritingStatus;
-import com.ydtech.modules.order.entity.InsAreaCompany;
-import com.ydtech.modules.order.entity.InsAreaCompanyAccidentalDriving;
-import com.ydtech.modules.order.entity.InsOrders;
-import com.ydtech.modules.order.entity.TaxArrears;
+import com.ydtech.modules.order.entity.*;
 import com.ydtech.modules.order.entity.api.zijin.constants.enums.*;
 import com.ydtech.modules.order.entity.api.zijin.request.*;
 import com.ydtech.modules.order.entity.api.zijin.response.*;
 import com.ydtech.modules.order.entity.config.ZjConfigureParameters;
 import com.ydtech.modules.order.entity.dto.DrivingInsuranceDto;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
@@ -36,6 +35,7 @@ import com.ydtech.modules.order.service.*;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
 import com.ydtech.utils.CalculateUtils;
+import com.ydtech.utils.OrderUtils;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.utils.baidu.FileUtil;
 import lombok.RequiredArgsConstructor;
@@ -705,4 +705,61 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
         return HttpResult.ok("【验车链接】短信已发送投保人,请及时处理。");
     }
 
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/16 16:20
+     *  @Description: 获取保单路径
+     */
+    @Override
+    public ReadPdfUrlListDto getPolicyByCompanyIdPdfList(InsAreaCompany insAreaCompany, InsOrders insOrders,boolean flag)  {
+        String jqPath =  getPdfUrl(insAreaCompany, insOrders,InsuranceRisk.TRAFFIC_CODE,PolicyPrintVo.PolicyPrintType.PPT_2.getCode(),insAreaCompany.getJqpolicyno(),flag);
+        String jqSignPath = getPdfUrl(insAreaCompany, insOrders,InsuranceRisk.TRAFFIC_CODE,PolicyPrintVo.PolicyPrintType.PPT_1.getCode(),insAreaCompany.getJqpolicyno(),flag);
+        String syPath = getPdfUrl(insAreaCompany,insOrders,InsuranceRisk.BUSINESS_CODE,PolicyPrintVo.PolicyPrintType.PPT_2.getCode(), insAreaCompany.getSypolicyno(),flag);
+        String jyPath = getPdfUrl(insAreaCompany,insOrders,InsuranceRisk.ACCIDENT_CODE,PolicyPrintVo.PolicyPrintType.PPT_2.getCode(), insAreaCompany.getJyPolicyNo(),flag);
+        InsAreaCompanyExternalPolicy insAreaCompanyExternalPolicy =new InsAreaCompanyExternalPolicy(insAreaCompany.getId(),jqPath,jqSignPath,syPath,jyPath);
+        return new ReadPdfUrlListDto(insAreaCompanyExternalPolicy,insAreaCompany,null);
+    }
+
+    public String getPdfUrl(InsAreaCompany insAreaCompany, InsOrders insOrders,String jqFlag,String jqSignFlag,String policyNo,boolean flag) {
+        // 被保人信息
+        String  pathPrefix = insAreaCompany.getInscompany()+"-"+insAreaCompany.getId()+"-"+insOrders.getLicenseno() +"-"+policyNo+"-";
+        if(org.apache.commons.lang3.StringUtils.isBlank(policyNo)){
+            return null;
+        }
+        JSONObject ownerInfo = insOrders.getInsureinfo();
+        CustomerInfoVo customerInfoVo = ownerInfo.toJavaObject(CustomerInfoVo.class);
+        BusType busType = null;
+        String identifyNo = customerInfoVo.getIdentifyNumber();
+        String templateName="";
+        switch (jqFlag) {
+            case InsuranceRisk.TRAFFIC_CODE:
+                if (PolicyPrintVo.PolicyPrintType.PPT_1.getCode().equals(jqSignFlag)) {
+                    busType = BusType.BT_2;
+                    templateName = pathPrefix + InsuranceOrderPdf.JQBZ.getDesc();
+                } else {
+                    busType = BusType.BT_1;
+                    templateName = pathPrefix + InsuranceOrderPdf.JQBD.getDesc();
+                }
+                break;
+            case InsuranceRisk.BUSINESS_CODE:
+                busType = BusType.BT_3;
+                templateName = pathPrefix + InsuranceOrderPdf.SYBD.getDesc();
+                break;
+            case InsuranceRisk.ACCIDENT_CODE:
+                busType = BusType.BT_4;
+                templateName =pathPrefix + InsuranceOrderPdf.JYBD.getDesc();
+                break;
+        }
+
+        String code = busType.getCode();
+        String url = zijinRequestApiComponents.getDownLoadDocumentUrl(policyNo, code, identifyNo);
+        String transferUrl = gainCarInsPolicyNew(url, templateName, insAreaCompany.getId(),flag);
+        return transferUrl;
+    }
+
+    private String gainCarInsPolicyNew(String url, String fileName, String subOrderId,boolean flag) {
+        String dir = "carInsPolicyNew/" + subOrderId + "/";
+        return FileUtil.netUrlToFileNew(url, dir, fileName, uploadFilePath, apiUrl + showFileUrl,flag);
+    }
 }

+ 8 - 0
src/main/java/com/ydtech/utils/OrderUtils.java

@@ -71,6 +71,9 @@ public class OrderUtils {
             // 中煤
             if (companyId.contains(InsuranceEnum.ZMBX.getCode())) {
                 List<SubmitResponse.AccidentNo> javaList = crossInsuranceJson.toJavaList(SubmitResponse.AccidentNo.class);
+                if(javaList.get(0).getRideProposalNo()==null){
+                    return javaList.get(0).getRidePolicyNo();
+                }
                 return javaList.get(0).getRideProposalNo();
             }
 
@@ -79,6 +82,11 @@ public class OrderUtils {
                 List<DrivingInsuranceDto> javaList = crossInsuranceJson.toJavaList(DrivingInsuranceDto.class);
                 return javaList.get(0).getPolicyNumber();
             }
+            // 平安
+            if (companyId.contains(InsuranceEnum.PAIC.getCode())) {
+                return crossInsuranceJson.getJSONObject(0).getString("policy");
+            }
+
         }
 
         return "";

+ 103 - 0
src/main/java/com/ydtech/utils/baidu/FileUtil.java

@@ -88,6 +88,8 @@ public class FileUtil {
      * @param dir     目录 杠结束  carInsPolicy/
      * @param path    文件真实目录 D:/upload/
      * @param showUrl 展示地址 http://sxzgkj.baoxianzhanggui.com/web-api/晋A12345/晋A12345-交强险保单.pdf
+     *                修改   以车牌生成的保单会覆盖,同一个车牌每年会生成一个保单
+     *                展示地址 http://sxzgkj.baoxianzhanggui.com/web-api/子订单号/子订单号-车牌号-保单号-交强险保单.pdf
      * @author: lig
      * @date: 2023年09月21日 0021
      */
@@ -237,5 +239,106 @@ public class FileUtil {
         return url;
     }
 
+    /**
+     * 网络url转文件
+     *
+     * @param url     保司返回的保单地址
+     * @param dir     目录 杠结束  carInsPolicy/
+     * @param path    文件真实目录 D:/upload/
+     * @param showUrl 展示地址 http://sxzgkj.baoxianzhanggui.com/web-api/晋A12345/晋A12345-交强险保单.pdf
+     *                修改   以车牌生成的保单会覆盖,同一个车牌每年会生成一个保单
+     *                展示地址 http://sxzgkj.baoxianzhanggui.com/web-api/子订单号/子订单号-车牌号-保单号-交强险保单.pdf
+     * @author: lig
+     * @date: 2023年09月21日 0021
+     */
+    public static String netUrlToFileNew(String url, String dir, String fileName, String path, String showUrl,boolean flag) {
+//        String s = "http://eserviceinterface.ciitc.com.cn/ePolicyServices/insurancePolicy.do?downFiles=key&amp&pkid=a7370fea493945868b8ca847d3ef9d9e";
+//        String path = "D:/upload/";
+//        String dir = "carInsPolicy/";
+        if (StringUtils.isEmpty(url)) return "";
+        String showPath = String.format("%s%s%s", showUrl, dir, fileName);
+        String uploadPath = path + dir;
+
+        try {
+
+            //存在
+            File existFile = new File(uploadPath + fileName);
+            if (existFile.exists()) {
+                if(!flag){
+                    log.error("存在的文件:" + existFile.getPath());
+                    log.error("存在的文件的展示地址:" + showPath);
+                    return showPath;
+                }else{
+                    //刪除重新生成
+                    existFile.delete();
+                    existFile = new File(uploadPath + fileName);
+                }
+            }
+
+            File folder = new File(uploadPath);
+            if (!folder.isDirectory()) {
+                folder.mkdirs();
+            }
+
+            String encodeUrl = urlEncodeChinese(url);
+            URI u = URI.create(encodeUrl);
+            HtppsUtils.disableSSLCertificateChecking();
+            InputStream inputStream = u.toURL().openStream();
+            File file = new File(uploadPath + fileName);
+            copyInputStreamToFile(inputStream, file);
 
+            log.error("文件路径:" + file.getPath());
+            return showPath;
+
+        } catch (MalformedURLException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    public static String netUrlStoreToLocalNew(String url, String dir, String fileName, String path, String showUrl, String password,
+                                            String licensePlate,boolean flag) {
+        if (StringUtils.isEmpty(url)) return "";
+        String showPath = String.format("%s%s%s", showUrl, dir, fileName);
+        String uploadPath = path + dir;
+
+        try {
+
+            //存在
+            File existFile = new File(uploadPath + fileName);
+            if (existFile.exists()) {
+                if(!flag){
+                    log.error("存在的文件:" + existFile.getPath());
+                    log.error("存在的文件的展示地址:" + showPath);
+                    return showPath;
+                }else{
+                    //刪除重新生成
+                    existFile.delete();
+                    existFile = new File(uploadPath + fileName);
+                }
+            }
+
+            File folder = new File(uploadPath);
+            if (!folder.isDirectory()) {
+                folder.mkdirs();
+            }
+
+            URI u = URI.create(url);
+            InputStream inputStream = u.toURL().openStream();
+            File file = new File(uploadPath + licensePlate + ".zip");
+            copyInputStreamToFile(inputStream, file);
+
+            CompressUtil.unZip(file.getPath(), uploadPath, password, fileName, licensePlate);
+            file.delete();
+            return showPath;
+
+        } catch (MalformedURLException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+
+    }
 }

+ 41 - 0
src/main/java/com/ydtech/utils/baidu/HtppsUtils.java

@@ -0,0 +1,41 @@
+package com.ydtech.utils.baidu;
+
+import javax.net.ssl.*;
+import java.security.SecureRandom;
+import java.security.cert.X509Certificate;
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/10/18 8:22
+ *  @Description:  https验证
+ */
+public class HtppsUtils {
+    public static void disableSSLCertificateChecking() {
+        try {
+            TrustManager[] trustAllCerts = new TrustManager[]{
+                new X509TrustManager() {
+                    public X509Certificate[] getAcceptedIssuers() {
+                        return null;
+                    }
+                    public void checkClientTrusted(X509Certificate[] certs, String authType) {
+                    }
+                    public void checkServerTrusted(X509Certificate[] certs, String authType) {
+                    }
+                }
+            };
+ 
+            SSLContext sc = SSLContext.getInstance("TLS");
+            sc.init(null, trustAllCerts, new SecureRandom());
+            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+ 
+            // 还需要信任主机名
+            HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
+                public boolean verify(String hostname, SSLSession session) {
+                    return true;
+                }
+            });
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}