소스 검색

紫金财险报价、核保修改

wks 3 년 전
부모
커밋
28a49d2f24
19개의 변경된 파일502개의 추가작업 그리고 42개의 파일을 삭제
  1. 1 1
      README.md
  2. 3 0
      src/main/java/com/ydtech/config/properties/ZjApiConfigurationProperties.java
  3. 1 1
      src/main/java/com/ydtech/modules/order/components/ZhongmeiRequestApiComponents.java
  4. 19 5
      src/main/java/com/ydtech/modules/order/components/ZijinRequestApiComponents.java
  5. 1 1
      src/main/java/com/ydtech/modules/order/dao/InsTaskImagesMapper.java
  6. 41 0
      src/main/java/com/ydtech/modules/order/entity/api/zj/constants/enums/CarKindDetailIdEnum.java
  7. 1 0
      src/main/java/com/ydtech/modules/order/entity/api/zj/constants/enums/RequestUrl.java
  8. 250 1
      src/main/java/com/ydtech/modules/order/entity/api/zj/request/CalculatePremiumRequest.java
  9. 25 0
      src/main/java/com/ydtech/modules/order/entity/api/zj/request/QueryClauseDataRequest.java
  10. 23 1
      src/main/java/com/ydtech/modules/order/entity/api/zj/request/SubmitVerifyRequest.java
  11. 5 1
      src/main/java/com/ydtech/modules/order/entity/api/zj/request/UploadFileRequest.java
  12. 30 6
      src/main/java/com/ydtech/modules/order/entity/api/zj/request/ZbfAggregatePayRequest.java
  13. 48 0
      src/main/java/com/ydtech/modules/order/entity/api/zj/response/QueryClauseDataResponse.java
  14. 8 6
      src/main/java/com/ydtech/modules/order/entity/crawler/response/CrawlerAuditResponse.java
  15. 2 3
      src/main/java/com/ydtech/modules/order/service/impl/InsTaskImagesServiceImpl.java
  16. 34 11
      src/main/java/com/ydtech/modules/order/service/impl/ZijinOrderApiServiceImpl.java
  17. 2 0
      src/main/resources/application-prod.yml
  18. 2 0
      src/main/resources/application-test.yml
  19. 6 5
      src/main/resources/mapper/modules/ins/InsTaskImagesMapper.xml

+ 1 - 1
README.md

@@ -68,7 +68,7 @@
 
 * 版本号:v0.0.3.3
 * 访问地址:http://sxzgkj.baoxianzhanggui.com/
-* 更新时间:2023-08-31 13:50  ~  2023-08-31 14:00
+* 更新时间:2023-08-31 13:00  ~  2023-08-31 13:10
 * 更新内容:
   1. 解决bug表2023-08-31要完成的功能
 

+ 3 - 0
src/main/java/com/ydtech/config/properties/ZjApiConfigurationProperties.java

@@ -15,6 +15,9 @@ public class ZjApiConfigurationProperties {
     // 车险业务地址
     private String url;
 
+    // 支付地址
+    private String payUrl;
+
     // 下载保单地址
     private String downLoadDocument;
 

+ 1 - 1
src/main/java/com/ydtech/modules/order/components/ZhongmeiRequestApiComponents.java

@@ -62,9 +62,9 @@ public class ZhongmeiRequestApiComponents {
         String s = AESUtilsWithDataBase.encryptECBPK5Hex(jsonString, sessionKey);
         log.info("---------> 加密后的参数:{}", s);
         HttpEntity<String> httpEntity = new HttpEntity<>(s, httpHeaders);
-
         ResponseEntity<String> response = restTemplate.postForEntity(url, httpEntity, String.class);
         String body = response.getBody();
+
         S t  = AESUtilsWithDataBase.decryptMessage(body, tClass, "响应参数", sessionKey);
         if (ObjectUtils.isEmpty(t)) {
             throw new SystemException("请求失败");

+ 19 - 5
src/main/java/com/ydtech/modules/order/components/ZijinRequestApiComponents.java

@@ -58,15 +58,19 @@ public class ZijinRequestApiComponents {
         this.redissonClient = redissonClient;
     }
 
+    public <T, B extends BaseResponse> B request(String url, String desc, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
+        B b = insCrawlerOrderComponents.request(url, "紫金财险", desc, requestBody, responseType, httpHeaders);
+        ResultEnum.verify(b.getRtnCode(), b.getRtnMsg());
+        return b;
+    }
+
 
     public <T, B extends BaseResponse> B request(RequestUrl requestUrl, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
-        log.debug(httpHeaders.toString());
         String url = zjApiConfigurationProperties.getUrl() + requestUrl.getUri();
-        B b = insCrawlerOrderComponents.request(url, "紫金财险", requestUrl.getDesc(), requestBody, responseType, httpHeaders);
-        ResultEnum.verify(b.getRtnCode(), b.getRtnMsg());
-        return b;
+        return request(url, requestUrl.getDesc(), requestBody, responseType, httpHeaders);
     }
 
+
     /**
      * 获取 接入方 token 车险业务token
      *
@@ -242,6 +246,16 @@ public class ZijinRequestApiComponents {
         return request(RequestUrl.UPLOAD_IMAGE_INFO_LIST, uploadImageInfoListRequest, BaseResponse.class, httpHeaders);
     }
 
+    /**
+     * 特约查询
+     *
+     * @param queryClauseDataRequest 紫金财险 特约查询 入参实体
+     * @return 出参实体
+     */
+    public QueryClauseDataResponse queryClauseData(QueryClauseDataRequest queryClauseDataRequest, HttpHeaders httpHeaders) {
+        return request(RequestUrl.QUERY_CLAUSE_DATA, queryClauseDataRequest, QueryClauseDataResponse.class, httpHeaders);
+    }
+
     /**
      * 提交核保
      *
@@ -259,7 +273,7 @@ public class ZijinRequestApiComponents {
      * @return 出参实体
      */
     public ZbfAggregatePayResponse zbfAggregatePay(ZbfAggregatePayRequest zbfAggregatePayRequest, HttpHeaders httpHeaders) {
-        return request(RequestUrl.ZBF_AGGREGATE_PAY, zbfAggregatePayRequest, ZbfAggregatePayResponse.class, httpHeaders);
+        return request(zjApiConfigurationProperties.getPayUrl(), RequestUrl.ZBF_AGGREGATE_PAY.getDesc(), zbfAggregatePayRequest, ZbfAggregatePayResponse.class, httpHeaders);
     }
 
     /**

+ 1 - 1
src/main/java/com/ydtech/modules/order/dao/InsTaskImagesMapper.java

@@ -20,7 +20,7 @@ public interface InsTaskImagesMapper extends BaseMapper<InsTaskImages> {
 
     List<InsUploadImagesDto> getByOrderNoInsUploadImagesDtoList(String orderNo);
 
-    boolean delByImageTypeQuoteNo(@Param("imageType") String imageType, @Param("quoteNo") String quoteNo );
+    int delByImageTypeQuoteNo(@Param("imageType") String imageType, @Param("quoteNo") String quoteNo );
 }
 
 

+ 41 - 0
src/main/java/com/ydtech/modules/order/entity/api/zj/constants/enums/CarKindDetailIdEnum.java

@@ -0,0 +1,41 @@
+package com.ydtech.modules.order.entity.api.zj.constants.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum CarKindDetailIdEnum {
+
+    GA("GA", "二吨以下挂车"),
+    GB("GB", "二吨至五吨以下挂车"),
+    GC("GC", "五吨至十吨以下挂车"),
+    GD("GD", "十吨以上挂车"),
+    HA("HA", "二吨以下货车"),
+    HB("HB", "二吨至五吨以下货车"),
+    HC("HC", "五吨至十吨以下货车"),
+    HD("HD", "十吨以上货车"),
+    JA("JA", "兼用型拖拉机14.7KW及以下"),
+    JB("JB", "兼用型拖拉机14.7KW以上及联合收割机"),
+    JC("JC", "运输型拖拉机14.7KW及以下"),
+    JD("JD", "运输型拖拉机14.7KW以上"),
+    KA("KA", "六座以下客车"),
+    KB("KB", "六座至十座以下客车"),
+    KC("KC", "十座至二十座以下客车"),
+    KD("KD", "二十座至三十六座以下客车"),
+    KE("KE", "三十六座及三十六座以上客车"),
+    MA("MA", "摩托车排气量(50cc及以下)"),
+    MB("MB", "摩托车排气量(50cc-250cc含)"),
+    MC("MC", "摩托车排气量(250cc以上)及侧三轮"),
+    NA("NA", "低速货车"),
+    NB("NB", "三轮汽车"),
+    ZA("ZA", "特种车一"),
+    ZB("ZB", "特种车二"),
+    ZC("ZC", "特种车三"),
+    ZD("ZD", "特种车四"),
+    LA("LA", "客货两用车(皮卡)");
+
+    private final String code;
+
+    private final String name;
+}

+ 1 - 0
src/main/java/com/ydtech/modules/order/entity/api/zj/constants/enums/RequestUrl.java

@@ -16,6 +16,7 @@ public enum RequestUrl {
     MODELS_QUERY("modelQuery", "车型查询"),
     QUERY_ACTUAL_VALUE("queryActualValue", "获取车辆实际价值"),
     CALCULATE_PREMIUM("calculatePremium", "保费计算"),
+    QUERY_CLAUSE_DATA("queryClauseData", "特约查询"),
     SUBMIT_VERIFY("submitVerify", "提交核保"),
     UPLOAD_FILE("uploadFile", "文件上传"),
     UPLOAD_IMAGE_INFO_LIST("uploadImageInfoList", "文件信息与订单关联"),

+ 250 - 1
src/main/java/com/ydtech/modules/order/entity/api/zj/request/CalculatePremiumRequest.java

@@ -11,6 +11,7 @@ import com.ydtech.modules.ins.model.vo.KindInfoVo;
 import com.ydtech.modules.ins.model.vo.RiskInfoVo;
 import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
 import com.ydtech.modules.order.entity.api.zj.constants.DateTimeConstants;
+import com.ydtech.modules.order.entity.api.zj.constants.enums.CarKindDetailIdEnum;
 import com.ydtech.modules.order.entity.api.zj.constants.enums.MotorVehicleInsuranceEnum;
 import com.ydtech.modules.order.entity.api.zj.constants.enums.RiskCodeEnum;
 import com.ydtech.modules.order.entity.api.zj.response.ModelQueryResponse;
@@ -444,11 +445,226 @@ public class CalculatePremiumRequest implements Serializable {
         @JsonProperty("vinNo")
         private String vinNo;
 
+        /**
+         * 车辆品牌型号
+         */
+        @JsonProperty("brandName")
+        private String brandName;
+
+        /**
+         * 被保险人与车辆所有关系
+         * 1-所有 2-使用 3-管理
+         */
+        @JsonProperty("carInsuredRelation")
+        private String carInsuredRelation;
+
+        /**
+         * 车辆种类代码
+         */
+        @JsonProperty("carKindCode")
+        private String carKindCode;
+
+        /**
+         * 车种明细
+         */
+        @JsonProperty("carKindDetailId")
+        private String carKindDetailId;
+
+        /**
+         * 特殊车辆标志
+         */
+        @JsonProperty("carLoanFlag")
+        private String carLoanFlag;
+
+//        /**
+//         * 发票日期
+//         */
+//        @JsonProperty("certificateDate")
+//        private String certificateDate;
+
+//        /**
+//         * 整备质量/kg
+//         */
+//        @JsonProperty("completekerbmass")
+//        private String completekerbmass;
+
+        /**
+         * 排量单位/毫升
+         */
+        @JsonProperty("exhaustCapacity")
+        private String exhaustCapacity;
+
+//        /**
+//         * 车辆类别
+//         */
+//        @JsonProperty("importFlag")
+//        private String importFlag;
+
+        /**
+         * 转移登记日期
+         */
+        @JsonProperty("makeDate")
+        private String makeDate;
+
+//        /**
+//         * 跨省首年投保未出险的证明年数
+//         */
+//        @JsonProperty("noDamageYears")
+//        private String noDamageYears;
+
+        /**
+         * 行驶证车辆类型代码
+         */
+        @JsonProperty("oriCarKindName")
+        private String oriCarKindName;
+        /**
+         * 车辆品牌
+         */
+
+        @JsonProperty("oriModelName")
+        private String oriModelName;
+
+        /**
+         * 行业车型编码
+         */
+        @JsonProperty("platVehicleCode")
+        private String platVehicleCode;
+//        /**
+//         * 吨位数/吨
+//         * 车辆类型为货车时,必传
+//         */
+//
+//        @JsonProperty("tonCount")
+//        private String tonCount;
+
+//        /**
+//         * 0-非网约车 1-预约出租租赁 2-预约出租客运
+//         * 营业出租租赁时必填,其他情况不填
+//         */
+//        @JsonProperty("zlFlag")
+//        private String zlFlag;
+
+//        /**
+//         * 新能源车标志
+//         * 新能源车必传1-是;0-否
+//         */
+//        @JsonProperty("newEnergyFlag")
+//        private String newEnergyFlag;
+//
+//        /**
+//         * 纯电续航里程(公里)
+//         * 新能源车必传
+//         */
+//        @JsonProperty("pureRange")
+//        private String pureRange;
+
+        /**
+         * 精友能源种类
+         */
+        @JsonProperty("modelEnergyType")
+        private String modelEnergyType;
+
+//        /**
+//         * 能源种类
+//         * 新能源车必传 (1 纯电动)
+//         */
+//        @JsonProperty("fuelType")
+//        private String fuelType;
+
+//        /**
+//         * 是否4S店销,售广东(非深圳)新车必录
+//         */
+
+//        @JsonProperty("sale4SFlag")
+//        private String sale4SFlag;
+//
+//        /**
+//         * 新车销售公司所在地市代码,广东(非深圳)新车必录
+//         */
+//        @JsonProperty("saleAreaCode")
+//        private String saleAreaCode;
+
+//        /**
+//         * 新车销售公司名称,广东(非深圳)新车必录
+//         */
+//        @JsonProperty("saleCompany")
+//        private String saleCompany;
+
+//        /**
+//         * 打印使用性质类型(货车必传)
+//         * 0003 货车
+//         * 0004 危货
+//         */
+//        @JsonProperty("printUseNatureCode")
+//        private String printUseNatureCode;
+//        /**
+//         * 车队协议号
+//         */
+//
+//        @JsonProperty("contractNo")
+//        private String contractNo;
+
+//        /**
+//         * 团车车辆编码
+//         */
+//        @JsonProperty("contractSerialNo")
+//        private String contractSerialNo;
+
+        /**
+         * 是否外地车标志
+         */
+        @JsonProperty("ecdemicVehicleFlag")
+        private String ecdemicVehicleFlag;
+
+        /**
+         * 打印车型
+         */
+        @JsonProperty("printModelName")
+        private String printModelName;
+
+        /**
+         * 功率(千瓦)
+         */
+        @JsonProperty("power")
+        private String power;
+        /**
+         * 原始新车购置价
+         */
+
+        @JsonProperty("oriPurchasePrice")
+        private String oriPurchasePrice;
+        /**
+         * 原始车辆型号
+         */
+
+        @JsonProperty("oriBrandName")
+        private String oriBrandName;
+        /**
+         * 车型唯一ID
+         */
+
+        @JsonProperty("vehicleStyleUniqueId")
+        private String vehicleStyleUniqueId;
+
+        /**
+         * 是否调用精友预填
+         */
+        @JsonProperty("isInvokeJingYou")
+        private String isInvokeJingYou;
+
+//        /**
+//         * 交强险过户日期
+//         */
+//        @JsonProperty("makeDateJQ")
+//        private String makeDateJQ;
+
+
         public VehicleInfoDTO(CarInfoVo carInfo, ModelQueryResponse.VehicleModelInfosDTO vehicleModelInfosDTO, String actualValue) {
             this.actualValue = actualValue;
             this.agreeActualValue = actualValue;
             if (carInfo.isTransferFlag()) {
                 this.chgOwnerFlag = "1";
+                this.makeDate = carInfo.getIssueDate();
             } else {
                 this.chgOwnerFlag = "0";
             }
@@ -465,7 +681,40 @@ public class CalculatePremiumRequest implements Serializable {
             this.vehicleId = vehicleModelInfosDTO.getVehicleId();
 
             this.vinNo = carInfo.getVinNo();
+            this.brandName = vehicleModelInfosDTO.getBrand();
+            this.carInsuredRelation = "1";
+            this.carKindCode = "A0";
+            this.carKindDetailId = getCarKindDetailId(Integer.parseInt(carInfo.getSeatCount()));
+            this.carLoanFlag = "0";
+            this.exhaustCapacity = vehicleModelInfosDTO.getExhaustCapacity();
+            this.oriCarKindName = "K33";
+            this.platVehicleCode = vehicleModelInfosDTO.getPlatVehicleCode();
+            this.modelEnergyType = vehicleModelInfosDTO.getPowerTypeCode();
+            this.ecdemicVehicleFlag = "0";
+            this.printModelName = vehicleModelInfosDTO.getModelName();
+            this.power = vehicleModelInfosDTO.getPower();
+            this.oriPurchasePrice = vehicleModelInfosDTO.getPurchasePrice();
+            this.oriBrandName = vehicleModelInfosDTO.getBrand();
+            this.oriModelName = vehicleModelInfosDTO.getModelName();
+            this.vehicleStyleUniqueId = vehicleModelInfosDTO.getVehicleId();
+            this.isInvokeJingYou = "1";
+
         }
+
+        public String getCarKindDetailId(int seatCount) {
+            if (seatCount < 6) {
+                return CarKindDetailIdEnum.KA.getCode();
+            } else if (seatCount < 10) {
+                return CarKindDetailIdEnum.KB.getCode();
+            } else if (seatCount < 20) {
+                return CarKindDetailIdEnum.KC.getCode();
+            } else if (seatCount < 36) {
+                return CarKindDetailIdEnum.KD.getCode();
+            } else{
+                return CarKindDetailIdEnum.KE.getCode();
+            }
+        }
+
     }
 
     /**
@@ -636,7 +885,7 @@ public class CalculatePremiumRequest implements Serializable {
                     itemKindListDTO.deductibleRate = kindInfoVo.getDeductibleRate();
                 } else if (InsurKind.A.getCode().equals(code)) {
                     itemKindListDTO.amount = actualValue;
-                }else {
+                } else {
                     itemKindListDTO.amount = String.valueOf(kindInfoVo.getAmount());
                 }
                 list.add(itemKindListDTO);

+ 25 - 0
src/main/java/com/ydtech/modules/order/entity/api/zj/request/QueryClauseDataRequest.java

@@ -0,0 +1,25 @@
+package com.ydtech.modules.order.entity.api.zj.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@NoArgsConstructor
+@Data
+public class QueryClauseDataRequest implements Serializable {
+
+    private static final long serialVersionUID = 2778421635324940768L;
+
+    @JsonProperty("orderId")
+    private String orderId;
+
+    @JsonProperty("optType")
+    private String optType = "2";
+
+    @JsonProperty("riskCode")
+    private String riskCode;
+
+
+}

+ 23 - 1
src/main/java/com/ydtech/modules/order/entity/api/zj/request/SubmitVerifyRequest.java

@@ -5,6 +5,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -21,11 +22,20 @@ public class SubmitVerifyRequest implements Serializable {
     @JsonProperty("engageList")
     private List<EngageListDTO> engageList;
 
+    @JsonProperty("UnderWritingRequestVehicleDTO")
+    private UnderWritingRequestVehicleDTO underWritingRequestVehicleDto;
+
     @JsonProperty("orderId")
     private String orderId;
 
-    public SubmitVerifyRequest(String orderId) {
+    @JsonProperty("orderNo")
+    private String orderNo;
+
+    public SubmitVerifyRequest(String orderId, String orderNo) {
         this.orderId = orderId;
+        this.orderNo = orderNo;
+        this.engageList = Collections.emptyList();
+        this.underWritingRequestVehicleDto = new UnderWritingRequestVehicleDTO();
     }
 
     @NoArgsConstructor
@@ -46,4 +56,16 @@ public class SubmitVerifyRequest implements Serializable {
         @JsonProperty("riskCode")
         private String riskCode;
     }
+
+    @NoArgsConstructor
+    @Data
+    public static class UnderWritingRequestVehicleDTO implements Serializable{
+
+        private static final long serialVersionUID = 5446089370940891817L;
+
+        @JsonProperty("carCheckStatus")
+        private String carCheckStatus = "1";
+
+    }
+
 }

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

@@ -23,6 +23,9 @@ public class UploadFileRequest implements Serializable {
 
     private static final long serialVersionUID = 1504466430832856055L;
 
+    @JsonProperty
+    private String orderNo;
+
     @JsonProperty("fileBase64")
     private String fileBase64;
 
@@ -33,7 +36,8 @@ public class UploadFileRequest implements Serializable {
     private String fileType;
 
 
-    public UploadFileRequest(InsTaskImagesBase64 insTaskImagesBase64) {
+    public UploadFileRequest(InsTaskImagesBase64 insTaskImagesBase64, String orderNo) {
+        this.orderNo = orderNo;
         String name = insTaskImagesBase64.getFileName();
         String suffix = name.substring(name.lastIndexOf("."));
         switch (insTaskImagesBase64.getImageType()) {

+ 30 - 6
src/main/java/com/ydtech/modules/order/entity/api/zj/request/ZbfAggregatePayRequest.java

@@ -12,18 +12,42 @@ public class ZbfAggregatePayRequest implements Serializable {
 
     private static final long serialVersionUID = -1236367204218496536L;
 
+    /**
+     * 金额(以分为单位)
+     */
     @JsonProperty("amount")
-    private Integer amount;
-    @JsonProperty("bankCode")
-    private String bankCode;
+    private String amount;
+
+    /**
+     * 渠道代码
+     */
     @JsonProperty("channelCode")
     private String channelCode;
-    @JsonProperty("eBankType")
-    private String eBankType;
+
+    /**
+     * 订单号
+     */
     @JsonProperty("orderNo")
     private String orderNo;
+
+    /**
+     * 倒签标志,不传则默认为非倒签保单。1:倒签;0:非倒签
+     */
     @JsonProperty("reverseFlag")
-    private Integer reverseFlag;
+    private String reverseFlag;
+
+    /**
+     * 全部支付方式:00;快捷支付:02;信用卡分期:09;微信支付:12;支付宝支付:22。默认为00
+     */
     @JsonProperty("zbfMethodCode")
     private String zbfMethodCode;
+
+    public ZbfAggregatePayRequest(String amount, String channelCode, String orderNo) {
+        this.amount = amount;
+        this.channelCode = channelCode;
+        this.orderNo = orderNo;
+        this.reverseFlag = "0";
+        this.zbfMethodCode = "00";
+    }
+
 }

+ 48 - 0
src/main/java/com/ydtech/modules/order/entity/api/zj/response/QueryClauseDataResponse.java

@@ -0,0 +1,48 @@
+package com.ydtech.modules.order.entity.api.zj.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@Data
+public class QueryClauseDataResponse extends BaseResponse implements Serializable {
+
+
+    private static final long serialVersionUID = 1275058219674614480L;
+    @JsonProperty("clauseInfoDtoList")
+    private List<ClauseInfoDtoListDTO> clauseInfoDtoList;
+
+    @NoArgsConstructor
+    @Data
+    public static class ClauseInfoDtoListDTO  implements Serializable{
+
+        private static final long serialVersionUID = 2486640047109521788L;
+
+        @JsonProperty("clauseCode")
+        private String clauseCode;
+
+        @JsonProperty("clauseContent")
+        private String clauseContent;
+
+        @JsonProperty("clauseName")
+        private String clauseName;
+
+        @JsonProperty("clauseType")
+        private String clauseType;
+
+        @JsonProperty("modifyFlag")
+        private String modifyFlag;
+
+        @JsonProperty("optType")
+        private String optType;
+
+        @JsonProperty("riskCode")
+        private String riskCode;
+    }
+}

+ 8 - 6
src/main/java/com/ydtech/modules/order/entity/crawler/response/CrawlerAuditResponse.java

@@ -2,8 +2,10 @@ package com.ydtech.modules.order.entity.crawler.response;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
+@EqualsAndHashCode(callSuper = true)
 @NoArgsConstructor
 @Data
 public class CrawlerAuditResponse extends CrawlerBaseResponse {
@@ -11,32 +13,32 @@ public class CrawlerAuditResponse extends CrawlerBaseResponse {
     private static final long serialVersionUID = 8990977573134495552L;
 
     /**
-     * 交强险保单号
+     * 交强险保单号
      */
     @JsonProperty("JQ_Application")
     private String jqApplication;
     /**
-     * 交强险保单号
+     * 交强险保单号
      */
     @JsonProperty("JQ_Policy")
     private String jqPolicy;
     /**
-     * 驾意险保单号
+     * 驾意险保单号
      */
     @JsonProperty("JYX_Application")
     private String jyxApplication;
     /**
-     * 驾意险保单号
+     * 驾意险保单号
      */
     @JsonProperty("JYX_Policy")
     private String jyxPolicy;
     /**
-     * 商业险保单号
+     * 商业险保单号
      */
     @JsonProperty("SY_Application")
     private String syApplication;
     /**
-     * 商业险保单号
+     * 商业险保单号
      */
     @JsonProperty("SY_Policy")
     private String syPolicy;

+ 2 - 3
src/main/java/com/ydtech/modules/order/service/impl/InsTaskImagesServiceImpl.java

@@ -36,9 +36,6 @@ public class InsTaskImagesServiceImpl extends ServiceImpl<InsTaskImagesMapper, I
             throw new SystemException("上传影像不能为空");
         }
 
-        // 删除之前的文件
-        baseMapper.delByImageTypeQuoteNo(insTaskImagesVo.getImageType(), insTaskImagesVo.getQuoteNo());
-
         // 将新文件存入
         List<InsTaskImages> insTaskImagesList = new ArrayList<>();
         for (String s : insTaskImagesVo.getImageIdList()) {
@@ -50,6 +47,8 @@ public class InsTaskImagesServiceImpl extends ServiceImpl<InsTaskImagesMapper, I
         }
         boolean b = true;
         if (!insTaskImagesList.isEmpty()) {
+            // 删除之前的文件
+            baseMapper.delByImageTypeQuoteNo(insTaskImagesVo.getImageType(), insTaskImagesVo.getQuoteNo());
             b = saveBatch(insTaskImagesList);
         }
         return HttpResult.error(b ? 200 : 400, b ? "上传成功" : "上传失败");

+ 34 - 11
src/main/java/com/ydtech/modules/order/service/impl/ZijinOrderApiServiceImpl.java

@@ -16,6 +16,7 @@ import com.ydtech.modules.order.constants.InsuranceTypeCorrespondence;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.api.zj.constants.enums.ResultEnum;
+import com.ydtech.modules.order.entity.api.zj.constants.enums.RiskCodeEnum;
 import com.ydtech.modules.order.entity.api.zj.request.*;
 import com.ydtech.modules.order.entity.api.zj.response.*;
 import com.ydtech.modules.order.entity.config.ZjConfigureParameters;
@@ -36,6 +37,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -115,9 +117,11 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
         // 4. 报价
         CalculatePremiumRequest calculatePremiumRequest
                 = new CalculatePremiumRequest(quoteInfoVo, vehicleModelInfosDTO, queryActualValueResponse.getActualValue(), quoteVo.getAccidentalDrivingVo(), zjConfigureParameters, modelQueryResponse);
+
+
         CalculatePremiumResponse calculatePremiumResponse = zijinRequestApiComponents.calculatePremium(calculatePremiumRequest, httpHeaders);
         QuoteRespVo quoteRespVo = getQuoteRespVo(calculatePremiumResponse, quoteInfoVo);
-        return responseOrder(calculatePremiumResponse, quoteRespVo, ptlAgreementAttribution);
+        return responseOrder(calculatePremiumResponse, quoteRespVo, ptlAgreementAttribution, modelQueryResponse.getOrderId(), modelQueryResponse.getOrderNo());
     }
 
     @Override
@@ -125,23 +129,39 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
         InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
 
         // 1 通过 协议id获取配置实体
-        HttpHeaders httpHeaders = zijinRequestApiComponents.getHttpHeaders(insAreaCompany.getAgreementId());
+        PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(insAreaCompany.getAgreementId());
+        ZjConfigureParameters zjConfigureParameters = configureParametersComponents.toEntity(ZjConfigureParameters.class, ptlAgreementAttribution);
+        HttpHeaders httpHeaders = zijinRequestApiComponents.getHttpHeaders(zjConfigureParameters, ZijinRequestApiComponents.RECURSIVE_HIERARCHY);
 
-        // 2 提交核保
-        SubmitVerifyRequest submitVerifyRequest = new SubmitVerifyRequest(insAreaCompany.getInsOrderNo());
+        // 2 查询特约
+        QueryClauseDataRequest queryClauseDataRequest = new QueryClauseDataRequest();
+        queryClauseDataRequest.setOrderId(insAreaCompany.getInsOrderNo());
+        if (insAreaCompany.getJqpremium().intValue() != 0) {
+            queryClauseDataRequest.setRiskCode(RiskCodeEnum.RC_0590.getCode());
+            zijinRequestApiComponents.queryClauseData(queryClauseDataRequest, httpHeaders);
+        }
+
+        if (insAreaCompany.getSypremium().intValue() != 0) {
+            queryClauseDataRequest.setRiskCode(RiskCodeEnum.RC_050A.getCode());
+            zijinRequestApiComponents.queryClauseData(queryClauseDataRequest, httpHeaders);
+        }
+
+        // 3 提交核保
+        SubmitVerifyRequest submitVerifyRequest = new SubmitVerifyRequest(insAreaCompany.getInsOrderNo(), insAreaCompany.getId());
         SubmitVerifyResponse submitVerifyResponse = zijinRequestApiComponents.submitVerify(submitVerifyRequest, httpHeaders);
         SubmitVerifyResponse.SubmitVerifyInfoDTO submitVerifyInfo = submitVerifyResponse.getSubmitVerifyInfo();
 
-        // 2.1 保单号
+        // 3.1 保单号
         insAreaCompany.setJqpolicyno(submitVerifyInfo.getPolicyNoCI());
         insAreaCompany.setSypolicyno(submitVerifyInfo.getPolicyNo());
-        // 2.2 投保单号
+        // 3.2 投保单号
         insAreaCompany.setJqapplyno(submitVerifyInfo.getProposalNoCI());
         insAreaCompany.setSyapplyno(submitVerifyInfo.getProposalNo());
         insAreaCompany.setOrderstatus(InsOrderStatus.S_2.getCode());
 
         // 3. 聚合支付服务
-        ZbfAggregatePayRequest zbfAggregatePayRequest = new ZbfAggregatePayRequest();
+        BigDecimal multiply = insAreaCompany.getSumpremium().multiply(new BigDecimal(100));
+        ZbfAggregatePayRequest zbfAggregatePayRequest = new ZbfAggregatePayRequest(String.valueOf(multiply.intValue()), zjConfigureParameters.getAppKey(), insAreaCompany.getId());
         ZbfAggregatePayResponse zbfAggregatePayResponse = zijinRequestApiComponents.zbfAggregatePay(zbfAggregatePayRequest, httpHeaders);
         insAreaCompany.setPaymentLink(zbfAggregatePayResponse.getPayUrl());
         insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
@@ -165,7 +185,7 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
         List<UploadImageInfoListRequest.ItemFileDataListDTO> itemFileDataListDTOS = new ArrayList<>();
 
         for (InsTaskImagesBase64 insTaskImagesBase64 : insTaskImagesBase64s) {
-            UploadFileRequest uploadImageRequest = new UploadFileRequest(insTaskImagesBase64);
+            UploadFileRequest uploadImageRequest = new UploadFileRequest(insTaskImagesBase64, insAreaCompany.getId());
             // 文件上传
             UploadFileResponse uploadFileResponse = zijinRequestApiComponents.uploadFile(uploadImageRequest, httpHeaders);
             // 文件信息与订单关联 itemFileDataList
@@ -234,7 +254,6 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
         double sumPayTax = 0;
         List<CalculatePremiumResponse.PlanListDTO> planList = calculatePremiumResponse.getPlanList();
         QuoteRespVo quoteRespVo = new QuoteRespVo();
-        quoteRespVo.setCompanyId(quoteRespVo.getCompanyId());
 
         for (CalculatePremiumResponse.PlanListDTO planListDTO : planList) {
             switch (planListDTO.getRiskCode()) {
@@ -284,6 +303,7 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
         quoteRespVo.setKindList(kindList1);
         quoteRespVo.setJqPremium(jqPremium);
         quoteRespVo.setSyPremium(syPremium);
+        quoteRespVo.setTaxAmount(sumPayTax);
         quoteRespVo.setCiSumPermium(CalculateUtils.add(jqPremium, sumPayTax));//交强险和车船税合计
         quoteRespVo.setSumPermium(CalculateUtils.add(jqPremium, syPremium, sumPayTax));//保费合计
         quoteRespVo.setTotalAdjustRate(0);
@@ -291,14 +311,17 @@ public class ZijinOrderApiServiceImpl implements ZijinOrderApiService {
         return quoteRespVo;
     }
 
-    public HttpResult<QuoteRespVo> responseOrder(CalculatePremiumResponse calculatePremiumResponse, QuoteRespVo quoteRespVo, PtlAgreementAttribution ptlAgreementAttribution) {
+    public HttpResult<QuoteRespVo> responseOrder(CalculatePremiumResponse calculatePremiumResponse, QuoteRespVo quoteRespVo, PtlAgreementAttribution ptlAgreementAttribution, String orderId, String orderNo) {
         // 保存订单信息
         InsAreaCompany insAreaCompany = new InsAreaCompany(quoteRespVo, ptlAgreementAttribution);
         // 协议id
+        insAreaCompany.setId(orderNo);
         insAreaCompany.setReptxt(JSON.parseObject(JSON.toJSONString(calculatePremiumResponse)));
         insAreaCompany.setOrderstatus(InsOrderStatus.S_0.getCode());
+        insAreaCompany.setInsOrderNo(orderId);
         insAreaCompanyService.insertCompanyAndOrders(insAreaCompany);
-        quoteRespVo.setCompanyId(insAreaCompany.getId());
+        quoteRespVo.setCompanyId(orderNo);
+
         return HttpResult.ok("报价成功", quoteRespVo);
     }
 

+ 2 - 0
src/main/resources/application-prod.yml

@@ -232,6 +232,8 @@ zj:
     accessTokenUrl: https://open.zking.com/api/v1/public/token/getAccessToken
     # 车险业务
     url: http://open.zking.com/api/v1/insurance/autoMobile/carInsurance/queryToken
+    # 支付
+    payUrl: http://open.zking.com/api/v1/public/payment/cashier/zbfAggregatePay
     # 下载保单地址
     downLoadDocument: http://open.zking.com/temp/api/v1/insurance/nonAutoMobile/queryPolicy/downLoadDocument
 

+ 2 - 0
src/main/resources/application-test.yml

@@ -343,6 +343,8 @@ zj:
     accessTokenUrl: https://test-open.zking.com/api/v1/public/token/getAccessToken
     # 车险业务
     url: http://test-open.zking.com/api/v1/insurance/autoMobile/carInsurance/
+    # 支付
+    payUrl: http://test-open.zking.com/api/v1/public/payment/cashier/zbfAggregatePay
     # 下载保单地址
     downLoadDocument: http://test-open.zking.com/temp/api/v1/insurance/nonAutoMobile/queryPolicy/downLoadDocument
 

+ 6 - 5
src/main/resources/mapper/modules/ins/InsTaskImagesMapper.xml

@@ -21,7 +21,7 @@
 
     <select id="getByQuoteNoInsTaskImagesDtoList"
             resultType="com.ydtech.modules.order.entity.dto.InsTaskImagesDto">
-        select i.id, i.quote_no,i.image_id, i.image_type, f.url
+        select i.id, i.quote_no, i.image_id, i.image_type, f.url
         from ins_task_images as i
                  left join ins_upload_files as f
                            on i.image_id = f.id
@@ -41,10 +41,11 @@
     <delete id="delByImageTypeQuoteNo">
         delete
         from ins_task_images
-        where id in (select id
-                     from ins_task_images
-                     where image_type = #{imageType}
-                       and quote_no = #{quoteNo});
+        where id in (select image_id
+                     from (select id as image_id
+                           from ins_task_images
+                           where image_type = #{imageType}
+                             and quote_no = #{quoteNo}) as a);
     </delete>
 
 </mapper>