Pārlūkot izejas kodu

华泰对接新建实体

cuixinpeng 2 gadi atpakaļ
vecāks
revīzija
fb9037349f
17 mainītis faili ar 555 papildinājumiem un 67 dzēšanām
  1. 5 0
      pom.xml
  2. 202 0
      src/main/java/com/ydtech/modules/ins/utils/CompressUtil.java
  3. 2 3
      src/main/java/com/ydtech/modules/order/components/huatai/HuaTaiRequestApiComponents.java
  4. 4 3
      src/main/java/com/ydtech/modules/order/entity/api/huatai/constants/HuaTaiTransCode.java
  5. 1 1
      src/main/java/com/ydtech/modules/order/entity/api/huatai/request/HuaTaiInsurancePolicyPrintRequest.java
  6. 1 1
      src/main/java/com/ydtech/modules/order/entity/api/huatai/request/HuaTaiPaymentUrlRequest.java
  7. 5 1
      src/main/java/com/ydtech/modules/order/entity/api/huatai/request/HuaTaiSubmitRequest.java
  8. 50 0
      src/main/java/com/ydtech/modules/order/entity/api/huatai/request/HuaTaiUploadImageRequest.java
  9. 22 1
      src/main/java/com/ydtech/modules/order/entity/api/huatai/response/HuaTaiInsurancePolicyPrintResponse.java
  10. 2 2
      src/main/java/com/ydtech/modules/order/entity/api/huatai/response/HuaTaiOrderStatusResponse.java
  11. 24 0
      src/main/java/com/ydtech/modules/order/entity/api/huatai/response/HuaTaiSubmitResponse.java
  12. 20 0
      src/main/java/com/ydtech/modules/order/entity/api/huatai/response/HuaTaiUploadImageResponse.java
  13. 7 0
      src/main/java/com/ydtech/modules/order/service/InsTaskImagesService.java
  14. 161 50
      src/main/java/com/ydtech/modules/order/service/impl/HuaTaiOrderApiServiceImpl.java
  15. 10 0
      src/main/java/com/ydtech/modules/order/service/impl/InsTaskImagesServiceImpl.java
  16. 1 1
      src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderApiServiceImpl.java
  17. 38 4
      src/main/java/com/ydtech/utils/baidu/FileUtil.java

+ 5 - 0
pom.xml

@@ -508,6 +508,11 @@
         </dependency>
 
 
+        <dependency>
+            <groupId>net.lingala.zip4j</groupId>
+            <artifactId>zip4j</artifactId>
+            <version>1.3.2</version>
+        </dependency>
         <!-- rabbitmq依赖 -->
         <!--        <dependency>-->
         <!--            <groupId>org.springframework.boot</groupId>-->

+ 202 - 0
src/main/java/com/ydtech/modules/ins/utils/CompressUtil.java

@@ -0,0 +1,202 @@
+package com.ydtech.modules.ins.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import net.lingala.zip4j.core.ZipFile;
+import net.lingala.zip4j.exception.ZipException;
+import net.lingala.zip4j.model.FileHeader;
+import net.lingala.zip4j.model.ZipParameters;
+import net.lingala.zip4j.util.Zip4jConstants;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.zip.GZIPInputStream;
+
+/**
+ * @Author CXP
+ * @Date 2023/11/9 11:18
+ */
+@Slf4j
+public class CompressUtil {
+
+
+    /**
+     * GZip 解压缩
+     *
+     * @param byteArray GZip格式的压缩字节数组
+     * @return 解压缩后的字符串结果
+     */
+    public static String unCompress(byte[] byteArray) {
+        if (byteArray == null || byteArray.length == 0) {
+            return null;
+        }
+        String unCompressString = null;
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        ByteArrayInputStream in = new ByteArrayInputStream(byteArray);
+        try {
+            GZIPInputStream gzip = new GZIPInputStream(in);
+            byte[] buffer = new byte[256];
+            int n;
+            while ((n = gzip.read(buffer)) >= 0) {
+                out.write(buffer, 0, n);
+            }
+            unCompressString = out.toString();
+            gzip.close();
+        } catch (IOException e) {
+            log.error(e.getMessage(), e);
+        } finally {
+            try {
+                out.close();
+                in.close();
+            } catch (IOException e) {
+                log.error(e.getMessage(), e);
+            }
+        }
+        return unCompressString;
+    }
+
+    /**
+     * 使用给定密码压缩指定文件或文件夹到指定位置.
+     * <p>
+     * dest可传最终压缩文件存放的绝对路径,也可以传存放目录,也可以传null或者""
+     * 如果传null或者""则将压缩文件存放在当前目录,即跟源文件同目录,压缩文件名取源文件名,以.zip为后缀;
+     * 如果以路径分隔符(File.separator)结尾,则视为目录,压缩文件名取源文件名,以.zip为后缀,否则视为文件名.
+     *
+     * @param src         要压缩的文件或文件夹路径
+     * @param dest        压缩文件存放路径
+     * @param isCreateDir 是否在压缩文件里创建目录,仅在压缩文件为目录时有效.
+     *                    如果为false,将直接压缩目录下文件到压缩文件.
+     * @param passwd      压缩使用的密码
+     * @return 最终的压缩文件存放的绝对路径, 如果为null则说明压缩失败.
+     */
+    public static String zip(String src, String dest, boolean isCreateDir, String passwd) {
+        File srcFile = new File(src);
+        dest = buildDestinationZipFilePath(srcFile, dest);
+        ZipParameters parameters = new ZipParameters();
+        // 压缩方式
+        parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
+        // 压缩级别
+        parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
+        if (!StringUtils.isEmpty(passwd)) {
+            parameters.setEncryptFiles(true);
+            // 加密方式
+            parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);
+            parameters.setPassword(passwd.toCharArray());
+        }
+        try {
+            ZipFile zipFile = new ZipFile(dest);
+            if (srcFile.isDirectory()) {
+                // 如果不创建目录的话,将直接把给定目录下的文件压缩到压缩文件,即没有目录结构
+                if (!isCreateDir) {
+                    File[] subFiles = srcFile.listFiles();
+                    ArrayList<File> temp = new ArrayList<File>();
+                    Collections.addAll(temp, subFiles);
+                    zipFile.addFiles(temp, parameters);
+                    return dest;
+                }
+                zipFile.addFolder(srcFile, parameters);
+            } else {
+                zipFile.addFile(srcFile, parameters);
+            }
+            return dest;
+        } catch (ZipException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * @param source
+     *            原始文件路径
+     * @param dest
+     *            解压路径
+     * @param password
+     *            解压文件密码(可以为空)
+     */
+    public static void unZip(String source, String dest, String password) {
+        try {
+            File zipFile = new File(source);
+            // 首先创建ZipFile指向磁盘上的.zip文件
+            ZipFile zFile = new ZipFile(zipFile);
+            zFile.setFileNameCharset("UTF-8");
+            File destDir = new File(dest);
+            if (!destDir.exists()) {
+                destDir.mkdirs();
+            }
+            if (zFile.isEncrypted()) {
+                // 设置密码
+                zFile.setPassword(password.toCharArray());
+            }
+            // 将文件抽出到解压目录(解压)
+            zFile.extractAll(dest);
+            List<FileHeader> headerList = zFile.getFileHeaders();
+            List<File> extractedFileList = new ArrayList<File>();
+            for (FileHeader fileHeader : headerList) {
+                if (!fileHeader.isDirectory()) {
+                    extractedFileList.add(new File(destDir, fileHeader.getFileName()));
+                }
+            }
+            File[] extractedFiles = new File[extractedFileList.size()];
+            extractedFileList.toArray(extractedFiles);
+            for (File f : extractedFileList) {
+                if(f.getName().contains("_bz6")){
+                    f.renameTo(new File(dest+"保单.pdf"));
+                }
+                System.out.println(f.getAbsolutePath() + "文件解压成功!");
+            }
+        } catch (ZipException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 构建压缩文件存放路径,如果不存在将会创建
+     * 传入的可能是文件名或者目录,也可能不传,此方法用以转换最终压缩文件的存放路径
+     *
+     * @param srcFile   源文件
+     * @param destParam 压缩目标路径
+     * @return 正确的压缩文件存放路径
+     */
+    private static String buildDestinationZipFilePath(File srcFile, String destParam) {
+        if (StringUtils.isEmpty(destParam)) {
+            if (srcFile.isDirectory()) {
+                destParam = srcFile.getParent() + File.separator + srcFile.getName() + ".zip";
+            } else {
+                String fileName = srcFile.getName().substring(0, srcFile.getName().lastIndexOf("."));
+                destParam = srcFile.getParent() + File.separator + fileName + ".zip";
+            }
+        } else {
+            // 在指定路径不存在的情况下将其创建出来
+            createDestDirectoryIfNecessary(destParam);
+            if (destParam.endsWith(File.separator)) {
+                String fileName = "";
+                if (srcFile.isDirectory()) {
+                    fileName = srcFile.getName();
+                } else {
+                    fileName = srcFile.getName().substring(0, srcFile.getName().lastIndexOf("."));
+                }
+                destParam += fileName + ".zip";
+            }
+        }
+        return destParam;
+    }
+
+    /**
+     * 在必要的情况下创建压缩文件存放目录,比如指定的存放路径并没有被创建
+     *
+     * @param destParam 指定的存放路径,有可能该路径并没有被创建
+     */
+    private static void createDestDirectoryIfNecessary(String destParam) {
+        File destDir = null;
+        if (destParam.endsWith(File.separator)) {
+            destDir = new File(destParam);
+        } else {
+            destDir = new File(destParam.substring(0, destParam.lastIndexOf(File.separator)));
+        }
+        if (!destDir.exists()) {
+            destDir.mkdirs();
+        }
+    }
+}

+ 2 - 3
src/main/java/com/ydtech/modules/order/components/huatai/HuaTaiRequestApiComponents.java

@@ -190,10 +190,9 @@ public class HuaTaiRequestApiComponents {
     /**
      * 上传影像 传入订单信息,查询是否生成保单成功
      */
- /*   public void uploadImage(UploadImageRequest request, Class<UploadImageResponse> tClass) {
-        //  imageRequest(request, tClass, true);
+    public HuaTaiUploadImageResponse uploadImage(HuaTaiUploadImageRequest request, Class<HuaTaiUploadImageResponse> tClass) {
+        return routineRequest(request, tClass, true,"");
     }
-*/
 
     /**
      * 缴费查询

+ 4 - 3
src/main/java/com/ydtech/modules/order/entity/api/huatai/constants/HuaTaiTransCode.java

@@ -21,16 +21,17 @@ public class HuaTaiTransCode {
     public static final String SAVE = "Save";
 
     //提交核保
-    public static final String SUBMIT = "Submit";
+    public static final String SUBMIT = "submit";
 
     //见费出单结果查询接口
     public static final String ORDER_CONFIRM = "OrderConfirm";
+    public static final String UPLOAD_IMAGE = "UploadImage";
 
     //非电子投保单缴费申请接口
-    public static final String ORDER_APPLY = "OrderApply";
+    public static final String VERIFICATIONCODESEND = "VERIFICATIONCODESEND";
 
     //电子保单下载
-    public static final String INSURANCE_POLICY_PRINT = "InsurancePolicyPrint";
+    public static final String ELEC_DOWN = "ElecDown";
 
 
 }

+ 1 - 1
src/main/java/com/ydtech/modules/order/entity/api/huatai/request/HuaTaiInsurancePolicyPrintRequest.java

@@ -20,7 +20,7 @@ public class HuaTaiInsurancePolicyPrintRequest extends HuaTaiBaseRequest {
     @Override
     public void setHead(HuaTaiBaseRequestHead head) {
         super.setHead(head);
-        super.getHead().setTransCode(HuaTaiTransCode.INSURANCE_POLICY_PRINT);
+        super.getHead().setTransCode(HuaTaiTransCode.ELEC_DOWN);
     }
 
     //保单号

+ 1 - 1
src/main/java/com/ydtech/modules/order/entity/api/huatai/request/HuaTaiPaymentUrlRequest.java

@@ -25,7 +25,7 @@ public class HuaTaiPaymentUrlRequest extends HuaTaiBaseRequest {
     @Override
     public void setHead(HuaTaiBaseRequestHead head) {
         super.setHead(head);
-        super.getHead().setTransCode(HuaTaiTransCode.ORDER_APPLY);
+        super.getHead().setTransCode(HuaTaiTransCode.VERIFICATIONCODESEND);
     }
 
     //操作员代码

+ 5 - 1
src/main/java/com/ydtech/modules/order/entity/api/huatai/request/HuaTaiSubmitRequest.java

@@ -396,7 +396,11 @@ public class HuaTaiSubmitRequest extends HuaTaiBaseRequest  {
                 this.email = customerInfoVo.getEmail();
             }
             if("2".equals(role)){
-                this.carInsuredRelation = "1";
+                if(customerInfoVo.isOwner()){
+                    this.carInsuredRelation = "1";
+                }else{
+                    this.carInsuredRelation = "2";
+                }
             }
             this.aiRelation = "01";
             this.workUnit = "其他";

+ 50 - 0
src/main/java/com/ydtech/modules/order/entity/api/huatai/request/HuaTaiUploadImageRequest.java

@@ -0,0 +1,50 @@
+package com.ydtech.modules.order.entity.api.huatai.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.api.huatai.HuaTaiBaseRequest;
+import com.ydtech.modules.order.entity.api.huatai.HuaTaiBaseRequestHead;
+import com.ydtech.modules.order.entity.api.huatai.constants.HuaTaiTransCode;
+import com.ydtech.modules.order.entity.config.HuaTaiConfigureParameters;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class HuaTaiUploadImageRequest extends HuaTaiBaseRequest {
+
+    private static final long serialVersionUID = -4923735011853043030L;
+
+    @Override
+    public void setHead(HuaTaiBaseRequestHead head) {
+        super.setHead(head);
+        super.getHead().setTransCode(HuaTaiTransCode.UPLOAD_IMAGE);
+    }
+
+    //支付交易号
+    @JsonProperty("bizNo")
+    private String bizNo;
+
+    //操作员代码
+    @JsonProperty("loginComCode")
+    private String loginComCode;
+
+
+    public HuaTaiUploadImageRequest(InsAreaCompany insAreaCompany, HuaTaiConfigureParameters huaTaiConfigureParameters){
+        this.loginComCode = huaTaiConfigureParameters.getComCode();
+        if(StringUtils.isNotEmpty(insAreaCompany.getJqapplyno()) && StringUtils.isNotEmpty(insAreaCompany.getSyapplyno())){
+            this.bizNo = insAreaCompany.getJqapplyno();
+        }else if(StringUtils.isNotEmpty(insAreaCompany.getJqapplyno())){
+            this.bizNo = insAreaCompany.getJqapplyno();
+        }else if(StringUtils.isNotEmpty(insAreaCompany.getSyapplyno())){
+            this.bizNo = insAreaCompany.getSyapplyno();
+        }
+    }
+
+}

+ 22 - 1
src/main/java/com/ydtech/modules/order/entity/api/huatai/response/HuaTaiInsurancePolicyPrintResponse.java

@@ -2,10 +2,12 @@ package com.ydtech.modules.order.entity.api.huatai.response;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.modules.order.entity.api.huatai.HuaTaiBaseResponse;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
+import java.io.Serializable;
 import java.util.List;
 
 @EqualsAndHashCode(callSuper = true)
@@ -21,6 +23,25 @@ public class HuaTaiInsurancePolicyPrintResponse extends HuaTaiBaseResponse {
 
     //下载地址(列表)
     @JsonProperty("registResult")
-     private List<String> elecDownLoadResultList;
+     private List<ElecDownLoadResultDto> elecDownLoadResultList;
 
+    @AllArgsConstructor
+    @NoArgsConstructor
+    @Data
+    public static class ElecDownLoadResultDto implements Serializable {
+
+
+        private static final long serialVersionUID = -8643088689280577161L;
+        //
+        @JsonProperty("bzDownFlag")
+        private String bzDownFlag;
+
+        // 电子保单下载链接
+        @JsonProperty("downURL")
+        private String downURL;
+
+        //
+        @JsonProperty("previewTotalPage")
+        private String previewTotalPage;
+    }
 }

+ 2 - 2
src/main/java/com/ydtech/modules/order/entity/api/huatai/response/HuaTaiOrderStatusResponse.java

@@ -19,7 +19,7 @@ public class HuaTaiOrderStatusResponse extends HuaTaiBaseResponse {
 
     //支付明细
     @JsonProperty("payDetaiList")
-    private List<PayDetaiList> payDetaiList;
+    private List<PayDetaiDto> payDetaiList;
 
     //支付交易号
     @JsonProperty("poaCode")
@@ -32,7 +32,7 @@ public class HuaTaiOrderStatusResponse extends HuaTaiBaseResponse {
     @AllArgsConstructor
     @NoArgsConstructor
     @Data
-    public static class PayDetaiList implements Serializable {
+    public static class PayDetaiDto implements Serializable {
 
         private static final long serialVersionUID = -8143740622862273324L;
 

+ 24 - 0
src/main/java/com/ydtech/modules/order/entity/api/huatai/response/HuaTaiSubmitResponse.java

@@ -52,5 +52,29 @@ public class HuaTaiSubmitResponse extends HuaTaiBaseResponse {
         // 业务类型
         @JsonProperty("uWType")
         private String uWType;
+        //
+        @JsonProperty("cellPhone")
+        private String cellPhone;
+        //
+        @JsonProperty("relationNo")
+        private String relationNo;
+        //
+        @JsonProperty("serialNumber")
+        private String serialNumber;
+        //
+        @JsonProperty("underWirteMessage")
+        private String underWirteMessage;
+        //
+        @JsonProperty("underWriteMessagePpcf")
+        private String underWriteMessagePpcf;
+        //
+        @JsonProperty("underWriteMessageToperson")
+        private String underWriteMessageToperson;
+        //
+        @JsonProperty("underWriteMessageToreview")
+        private String underWriteMessageToreview;
+        //
+        @JsonProperty("underWriteNewDataValidMSG")
+        private String underWriteNewDataValidMSG;
     }
 }

+ 20 - 0
src/main/java/com/ydtech/modules/order/entity/api/huatai/response/HuaTaiUploadImageResponse.java

@@ -0,0 +1,20 @@
+package com.ydtech.modules.order.entity.api.huatai.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.modules.order.entity.api.huatai.HuaTaiBaseResponse;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class HuaTaiUploadImageResponse extends HuaTaiBaseResponse {
+
+
+    private static final long serialVersionUID = 5666208696137342547L;
+    //上传影像的地址
+    @JsonProperty("url")
+    private String url;
+
+}

+ 7 - 0
src/main/java/com/ydtech/modules/order/service/InsTaskImagesService.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.order.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.order.entity.dto.InsTaskImagesDto;
+import com.ydtech.modules.order.entity.dto.InsUploadImagesDto;
 import com.ydtech.modules.order.entity.po.InsTaskImages;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import com.ydtech.modules.order.entity.vo.InsTaskImagesVo;
@@ -43,4 +44,10 @@ public interface InsTaskImagesService extends IService<InsTaskImages> {
      */
     List<InsTaskImagesBase64> findByOrderNo(String orderNo);
 
+    /**
+     * 获取文件路径信息
+     * @param orderNo
+     * @return
+     */
+    List<InsUploadImagesDto> findImageByOrderNo(String orderNo);
 }

+ 161 - 50
src/main/java/com/ydtech/modules/order/service/impl/HuaTaiOrderApiServiceImpl.java

@@ -13,8 +13,10 @@ import com.ydtech.modules.ins.model.request.Response;
 import com.ydtech.modules.ins.model.vo.*;
 import com.ydtech.modules.ins.model.ya.YaQuoteInfoVo;
 import com.ydtech.modules.ins.model.zm.ZmCarModel;
+import com.ydtech.modules.ins.utils.CompressUtil;
 import com.ydtech.modules.order.components.ConfigureParametersComponents;
 import com.ydtech.modules.order.components.huatai.HuaTaiRequestApiComponents;
+import com.ydtech.modules.order.components.huatai.HuiTaiUploadImageComponents;
 import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
@@ -24,13 +26,18 @@ import com.ydtech.modules.order.entity.api.huatai.request.HuaTaiQuotedPriceReque
 import com.ydtech.modules.order.entity.api.huatai.response.HuaTaiQuotedPriceResponse;
 import com.ydtech.modules.order.entity.api.huatai.request.*;
 import com.ydtech.modules.order.entity.api.huatai.response.*;
+import com.ydtech.modules.order.entity.api.zhongmei.BaseRequestHead;
 import com.ydtech.modules.order.entity.api.zhongmei.constants.TimeConstants;
 import com.ydtech.modules.order.entity.api.zhongmei.constants.enums.SubmitStatus;
 import com.ydtech.modules.order.entity.api.zhongmei.request.ModelsQueryRequest;
+import com.ydtech.modules.order.entity.api.zhongmei.request.UploadImageRequest;
 import com.ydtech.modules.order.entity.api.zhongmei.response.ModelsQueryResponse;
+import com.ydtech.modules.order.entity.api.zhongmei.response.UploadImageResponse;
 import com.ydtech.modules.order.entity.config.HuaTaiConfigureParameters;
 import com.ydtech.modules.order.entity.config.ZmConfigureParameters;
+import com.ydtech.modules.order.entity.dto.InsUploadImagesDto;
 import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
+import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import com.ydtech.modules.order.entity.vo.*;
 import com.ydtech.modules.order.service.*;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
@@ -71,6 +78,8 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
 
     private final InsFeeOrderService insFeeOrderService;
 
+    private final HuiTaiUploadImageComponents huiTaiUploadImageComponents;
+
 
     @Value("${upload.file.path}")
     private String uploadFilePath;
@@ -81,10 +90,15 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
     @Value("${api.url}")
     private String apiUrl;
 
-    public HuaTaiOrderApiServiceImpl(InsOrdersService insOrdersService, InsAreaCompanyService insAreaCompanyService, InsTaskImagesService insTaskImagesService,
+    public HuaTaiOrderApiServiceImpl(InsOrdersService insOrdersService,
+                                     InsAreaCompanyService insAreaCompanyService,
+                                     InsTaskImagesService insTaskImagesService,
                                      HuaTaiRequestApiComponents huaTaiRequestApiComponents,
-                                     ConfigureParametersComponents configureParametersComponents, PtlAgreementAttributionService ptlAgreementAttributionService,
-                                     FeeRuleSchemeService feeRuleSchemeService, InsFeeOrderService insFeeOrderService) {
+                                     ConfigureParametersComponents configureParametersComponents,
+                                     PtlAgreementAttributionService ptlAgreementAttributionService,
+                                     FeeRuleSchemeService feeRuleSchemeService,
+                                     InsFeeOrderService insFeeOrderService,
+                                     HuiTaiUploadImageComponents huiTaiUploadImageComponents) {
         this.insOrdersService = insOrdersService;
         this.insAreaCompanyService = insAreaCompanyService;
         this.insTaskImagesService = insTaskImagesService;
@@ -93,6 +107,7 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
         this.ptlAgreementAttributionService = ptlAgreementAttributionService;
         this.feeRuleSchemeService = feeRuleSchemeService;
         this.insFeeOrderService = insFeeOrderService;
+        this.huiTaiUploadImageComponents = huiTaiUploadImageComponents;
     }
 
     @Override
@@ -183,7 +198,7 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
                 if(insAreaCompany.getJqapplyno().equals(appliResult.getContractNo())){
                     jqStatus = appliResult.getStatus();
                     for(HuaTaiSubmitResponse.Notion notion:appliResult.getNotion()){
-                        jqNotion.append(notion.getUWResult()+",");
+                        jqNotion.append(notion.getUWNotion()+",");
                     }
                 }
             }
@@ -192,7 +207,7 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
                 if(insAreaCompany.getJqapplyno().equals(appliResult.getContractNo())){
                     syStatus = appliResult.getStatus();
                     for(HuaTaiSubmitResponse.Notion notion:appliResult.getNotion()){
-                        syNotion.append(notion.getUWResult()+",");
+                        syNotion.append(notion.getUWNotion()+",");
                     }
                 }
             }
@@ -256,6 +271,20 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
 
     @Override
     public HttpResult<Object> submitImage(String companyId) {
+        InsAreaCompany insAreaCompany = insAreaCompanyService.getById(companyId);
+
+        // 1. 协议id获取配置实体
+        HuaTaiConfigureParameters huaTaiConfigureParameters = configureParametersComponents.toEntity(HuaTaiConfigureParameters.class, insAreaCompany.getAgreementId());
+        InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
+        List<InsUploadImagesDto> insUploadImagesDtoList = insTaskImagesService.findImageByOrderNo(insOrders.getOrderno());
+        if (insUploadImagesDtoList.isEmpty()) {
+            throw new SystemException("请检查影像是否上传了");
+        }
+        HuaTaiUploadImageRequest request = new HuaTaiUploadImageRequest(insAreaCompany,huaTaiConfigureParameters);
+        request.setHead(new HuaTaiBaseRequestHead(huaTaiConfigureParameters));
+        HuaTaiUploadImageResponse response = huaTaiRequestApiComponents.uploadImage(request, HuaTaiUploadImageResponse.class);
+        response.getUrl();
+        huiTaiUploadImageComponents.uploadImage(response.getUrl(),insUploadImagesDtoList);
         return HttpResult.ok("上传文件成功");
     }
 
@@ -275,13 +304,48 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
         if (insAreaCompany.getOrderstatus().equals(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode())) {
             return HttpResult.ok(InsOrderStatusEnum.ACCEPT_INSURANCE.getDesc());
         }
-
         // 2. 组装请求体
         HuaTaiOrderStatusRequest orderStatusRequest = new HuaTaiOrderStatusRequest(insAreaCompany,huaTaiConfigureParameters);
         orderStatusRequest.setHead(new HuaTaiBaseRequestHead(huaTaiConfigureParameters));
-
         HuaTaiOrderStatusResponse orderStatusResponse = huaTaiRequestApiComponents.orderStatus(orderStatusRequest, HuaTaiOrderStatusResponse.class);
-        return HttpResult.ok("");
+
+        boolean jqExistFlag = false;
+        boolean syExistFlag = false;
+        String jqFailReason = "";
+        String syFailReason = "";
+        List<HuaTaiOrderStatusResponse.PayDetaiDto> payDetaiList = orderStatusResponse.getPayDetaiList();
+        for(HuaTaiOrderStatusResponse.PayDetaiDto payDetai:payDetaiList){
+            insAreaCompany.getJqapplyno();
+            //交强保单号存值
+            if(StringUtils.isNotEmpty(insAreaCompany.getJqapplyno()) && insAreaCompany.getJqapplyno().equals(payDetai.getBUSINESSNO())){
+                if("1".equals(payDetai.getPOLICYSTATUS())){
+                    jqExistFlag = true;
+                    insAreaCompany.setJqpolicyno(payDetai.getPOLICYNO());
+                }else{
+                    jqFailReason = payDetai.getFAILREASON();
+                }
+            }
+            //商业保单号存值
+            if(StringUtils.isNotEmpty(insAreaCompany.getSyapplyno()) && insAreaCompany.getSyapplyno().equals(payDetai.getBUSINESSNO())){
+                if("1".equals(payDetai.getPOLICYSTATUS())){
+                    syExistFlag = true;
+                    insAreaCompany.setSypolicyno(payDetai.getPOLICYNO());
+                }else{
+                    syFailReason = payDetai.getFAILREASON();
+                }
+            }
+        }
+        if(jqExistFlag||syExistFlag){
+            insAreaCompany.setOrderstatus(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode());
+            insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
+            return HttpResult.ok("保单生成成功");
+        }else{
+            if(StringUtils.isNotEmpty(jqFailReason)||StringUtils.isNotEmpty(syFailReason)){
+                return HttpResult.error("保单生成失败,原因为:"+jqFailReason+syFailReason);
+            }else{
+                return HttpResult.error("保单生成失败,华泰返回异常,请联系管理员排查!");
+            }
+        }
     }
 
 
@@ -306,51 +370,54 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
         InsAreaCompany insAreaCompany = insAreaCompanyService.getById(policyPrintVo.getCompanyId());
         // 1. 协议id获取配置实体
         HuaTaiConfigureParameters huaTaiConfigureParameters = configureParametersComponents.toEntity(HuaTaiConfigureParameters.class, insAreaCompany.getAgreementId());
-        InsOrders order = insOrdersService.getById(insAreaCompany.getOrderno());
-        String policyNo;
+        InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
+        String licensePlate = insOrders.getLicenseno();
+        YaQuoteInfoVo yaQuoteInfoVo = new YaQuoteInfoVo(insOrders);
+        String password = yaQuoteInfoVo.getInsuredPersonInfo().getIdentifyNumber();
         String riskCode = policyPrintVo.getRiskCode();
+        // 2. 组装请求体
+        HuaTaiInsurancePolicyPrintRequest request = new HuaTaiInsurancePolicyPrintRequest();
         if (InsuranceRisk.TRAFFIC.getCode().equals(riskCode)) {
-            policyNo = insAreaCompany.getJqpolicyno();
+            request.setBusinessNo(insAreaCompany.getJqpolicyno());
         } else if (InsuranceRisk.BUSINESS.getCode().equals(riskCode)) {
-            policyNo = insAreaCompany.getJqpolicyno();
+            request.setBusinessNo(insAreaCompany.getSypolicyno());
         } else {
             throw new SystemException("险种代码不存在");
         }
-
-        // 2. 组装请求体
-        HuaTaiInsurancePolicyPrintRequest request = new HuaTaiInsurancePolicyPrintRequest();
-        request.setBusinessNo(policyNo);
+        request.setHead(new HuaTaiBaseRequestHead(huaTaiConfigureParameters));
         HuaTaiInsurancePolicyPrintResponse response = huaTaiRequestApiComponents.insurancePolicyPrint(request, HuaTaiInsurancePolicyPrintResponse.class);
-        if("0000".equals(response.getRegistResult())){
-            List<String> urlList = response.getElecDownLoadResultList();
+        List<String> transferUrlList = new ArrayList<>();
+        if("0".equals(response.getHead().getReturnCode())){
+            List<HuaTaiInsurancePolicyPrintResponse.ElecDownLoadResultDto> urlList = response.getElecDownLoadResultList();
             //接口文档与返回示例不一致,待联调后修改
 
-
-          /*  if(urlList!=null && !urlList.isEmpty()){
-               String url = urlList.get(0);
-               String templateName = "";
-               if("DZ_AJ".equals(code)){
-                   templateName = "-交强险标志.pdf";
-               }else if("DZ_AE".equals(code)){
-                   if("0330".equals(request.getRiskCode())){
-                       templateName = "-交强险保单.pdf";
-                   }else {
-                       templateName = "-商业险保单.pdf";
-                   }
-               }
-                String transferUrl = gainCarInsPolicy(url, licensePlate + templateName, licensePlate);
-                List<String> transferUrlList = new ArrayList<>();
-                transferUrlList.add(transferUrl);
-                response.setDownloadUrl(transferUrlList);
-            }*/
+            if(urlList!=null && !urlList.isEmpty()){
+                for(HuaTaiInsurancePolicyPrintResponse.ElecDownLoadResultDto elecDownLoadResultDto :urlList){
+                    String url = elecDownLoadResultDto.getDownURL();
+                    String templateName = "";
+                    if("1".equals(policyPrintVo.getType())){
+                        templateName = "-交强险标志.pdf";
+                    }else{
+                        if (InsuranceRisk.TRAFFIC.getCode().equals(riskCode)) {
+                            templateName = "-交强险保单.pdf";
+                        }else if (InsuranceRisk.BUSINESS.getCode().equals(riskCode)) {
+                            templateName = "-商业险保单.pdf";
+                        }
+                    }
+                    String transferUrl = gainCarInsPolicy(url, licensePlate + templateName, licensePlate,password);
+                    transferUrlList.add(transferUrl) ;
+                }
+            }
         }else{
             return HttpResult.error("获取华泰电子保单失败:"+response.getRegistResult());
         }
-        return HttpResult.ok("下载成功"/*, response.getDownloadUrl()*/);
+        return HttpResult.ok("下载成功",transferUrlList);
     }
 
-    public String gainCarInsPolicy(String url, String fileName, String licensePlate) {
+    public String gainCarInsPolicy(String url, String fileName, String licensePlate,String password) {
         String dir = "carInsPolicy/" + licensePlate + "/";
+        String newFilePath = FileUtil.netUrlStoreToLocal(url, dir, fileName, uploadFilePath, apiUrl + showFileUrl);
+        CompressUtil.unZip(newFilePath,dir+licensePlate,password);
         return FileUtil.netUrlToFile(url, dir, fileName, uploadFilePath, apiUrl + showFileUrl);
     }
 
@@ -363,7 +430,6 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
      */
     public HuaTaiSubmitResponse submitForUnderwriting(YaQuoteInfoVo yaQuoteInfoVo, InsAreaCompany insAreaCompany,HuaTaiConfigureParameters huaTaiConfigureParameters) {
         HuaTaiSubmitRequest submitRequest = new HuaTaiSubmitRequest(yaQuoteInfoVo,insAreaCompany,huaTaiConfigureParameters);
-
         submitRequest.setHead(new HuaTaiBaseRequestHead(huaTaiConfigureParameters));
         return huaTaiRequestApiComponents.submit(submitRequest, HuaTaiSubmitResponse.class);
     }
@@ -392,9 +458,7 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
                 syApplyNo = contractMain.getContractNo();
             }
         }
-
         QuoteRespVo quoteRespVo = new QuoteRespVo();
-
         List<RiskInfoVo> riskList = yaQuoteInfoVo.getRiskList();
         // 报价险种放入保费
         List<QuoteRiskRespVo> riskList1 = QuoteRiskRespVo.toQuoteRiskRespVoList(riskList, jqPremium, syPremium);
@@ -429,7 +493,6 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
                 kindList1.add(kind);
             }
         }
-
         quoteRespVo.setRiskList(riskList1);
         quoteRespVo.setKindList(kindList1);
         quoteRespVo.setJqPremium(jqPremium);
@@ -491,7 +554,7 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
      */
     @Override
     public HttpResult<Object> auditStatusQuery(String companyId) {
-        InsAreaCompany insAreaCompany = insAreaCompanyService.getByInsOrderNo(companyId);
+        InsAreaCompany insAreaCompany = insAreaCompanyService.getById(companyId);
         // 1. 协议id获取配置实体
         HuaTaiConfigureParameters huaTaiConfigureParameters = configureParametersComponents.toEntity(HuaTaiConfigureParameters.class, insAreaCompany.getAgreementId());
 
@@ -527,17 +590,65 @@ public class HuaTaiOrderApiServiceImpl implements HuaTaiOrderApiService {
                 }
             }
         }
+        /**
+         * 0	初始状态默认值
+         * 1	已通过核保已实收
+         * 2	待修改
+         * 4	主动撤回(出单员撤回)
+         * 6	下发修改(核保员下发)
+         * 8	已通过核保未实收
+         * 9	待核保
+         */
+        String totalUnderWriteInd = "";
+        //同保交商
+        if(haveJQFlag && haveSYFlag){
+            //已通过核保未实收
+            if("8".contains(jqStatus) && "8".contains(syStatus)){
+                totalUnderWriteInd = "8";
+            }else if("1".contains(jqStatus) || "1".contains(syStatus)){
+                totalUnderWriteInd = "1";
+            }else if("9".contains(jqStatus) || "9".contains(syStatus)){
+                totalUnderWriteInd = "9";
+            }else{
+                totalUnderWriteInd = "6";
+            }
+        }else if((haveJQFlag && !haveSYFlag)||(!haveJQFlag && haveSYFlag)){//单保交强或单保商业
+            String status = jqStatus;
+            if(StringUtils.isNotEmpty(syStatus)){
+                status = syStatus;
+            }
+            if("8".contains(status)){
+                totalUnderWriteInd = "8";
+            }else if("1".contains(status)){
+                totalUnderWriteInd = "1";
+            }else if("9".contains(status)){
+                totalUnderWriteInd = "9";
+            }else{
+                totalUnderWriteInd = "6";
+            }
+        }
         String underWriteInd="";
         // 3. 通过返回核保状态修改状态
-        if ("核保通过".equals(underWriteInd) || "自动核保".equals(underWriteInd)) {
-//            insAreaCompany.setPaymentLink(submitStatusQueryResponse.getPayUrl());//需要调用接口获取支付链接
-            insAreaCompany.setOrderstatus(InsOrderStatusEnum.WAIT_PAY.getCode());//当核保状态返回核保通过时,调整保单状态为已核保待缴费
-            insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
-            return HttpResult.ok(underWriteInd);
-        }else if("核保不通过".equals(underWriteInd)){//当状态为核保不通过时,调整保单状态为报价中
+        if ("8".equals(totalUnderWriteInd)) {
+            //再调用缴费接口获取缴费链接
+            String payUrl = getPaymentUrl(insAreaCompany,huaTaiConfigureParameters);
+            if(StringUtils.isNotEmpty(payUrl)){
+                insAreaCompany.setPaymentLink(payUrl);
+                insAreaCompany.setOrderstatus(InsOrderStatusEnum.WAIT_PAY.getCode());
+                insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
+                return HttpResult.ok("核保成功");
+            }else{
+                insAreaCompany.setOrderstatus(InsOrderStatusEnum.WAIT_AUDIT.getCode());
+                insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
+                return HttpResult.error("获取支付链接失败");
+            }
+        }else if("6".equals(underWriteInd)){//当状态为核保不通过时,调整保单状态为报价中
+            String notion = jqNotion.toString()+syNotion.toString();
             insAreaCompany.setOrderstatus(InsOrderStatusEnum.QUOTE_ING.getCode());
             insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
-            return HttpResult.error("核保不通过:"/*+submitStatusQueryResponse.getIssuedReason()*/);//需要处理放入核保原因
+            return HttpResult.error("核保不通过:"+notion);//需要处理放入核保原因
+        }else if("9".equals(underWriteInd)){//当状态为核保不通过时,调整保单状态为报价中
+            return HttpResult.ok("正在核保中");//需要处理放入核保原因
         }else {
             return HttpResult.ok(underWriteInd);
         }

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

@@ -96,6 +96,16 @@ public class InsTaskImagesServiceImpl extends ServiceImpl<InsTaskImagesMapper, I
         }
         return list;
     }
+    @Override
+    public List<InsUploadImagesDto> findImageByOrderNo(String orderNo) {
+        List<InsUploadImagesDto> insUploadImagesDtos = baseMapper.getByOrderNoInsUploadImagesDtoList(orderNo);
+        // 使用 imagesId 去重
+        List<InsUploadImagesDto> deduplication = insUploadImagesDtos.stream().collect(
+                Collectors.collectingAndThen(
+                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(InsUploadImagesDto::getImageId))), ArrayList::new));
+
+        return deduplication;
+    }
 
 
 }

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

@@ -364,7 +364,7 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         if (InsuranceRisk.TRAFFIC.getCode().equals(riskCode)) {
             policyNo = insAreaCompany.getJqpolicyno();
         } else if (InsuranceRisk.BUSINESS.getCode().equals(riskCode)) {
-            policyNo = insAreaCompany.getJqpolicyno();
+            policyNo = insAreaCompany.getSypolicyno();
         } else {
             throw new SystemException("险种代码不存在");
         }

+ 38 - 4
src/main/java/com/ydtech/utils/baidu/FileUtil.java

@@ -1,5 +1,6 @@
 package com.ydtech.utils.baidu;
 
+import com.ydtech.modules.ins.utils.CompressUtil;
 import com.ydtech.utils.StringUtils;
 
 import java.io.*;
@@ -172,15 +173,48 @@ public class FileUtil {
         }
 
     }
+    public static String netUrlStoreToLocal(String url, String dir, String fileName, String path, String showUrl) {
+        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()) {
+                System.err.println("存在的文件:" + existFile.getPath());
+                System.err.println("存在的文件的展示地址:" + showPath);
+                return showPath;
+            }*/
+
+            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 + fileName);
+            copyInputStreamToFile(inputStream, file);
 
+            return file.getPath();
+
+        } catch (MalformedURLException e) {
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+
+    }
     public static void main(String[] args) {
         String licensePlate = "晋ABCDEF";
-        String url = "http://eserviceinterface.ciitc.com.cn/ePolicyServices/insurancePolicy.do?downFiles=key&amp&pkid=a7370fea493945868b8ca847d3ef9d9e";
+        String url = "https://gears.pc.ehuatai.com:9040/P/PYr63mm";
         String dir = "carInsPolicy/" + licensePlate + "/";
-        String fileName = licensePlate + "-交强险保单.pdf";
+        String fileName = licensePlate + ".zip";
         String path = "D:/upload/";
         String showUrl = "http://127.0.0.1:8080/upload/";
-        netUrlToFile(url, dir, fileName, path, showUrl);
-
+        String newFilePath = netUrlStoreToLocal(url, dir, fileName, path, showUrl);
+        CompressUtil.unZip(newFilePath,path+licensePlate,"140105199211031819");
     }
 }