Browse Source

Merge branch 'test' into test-dismantle

# Conflicts:
#	src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
wks 2 years ago
parent
commit
33daf84e32
23 changed files with 584 additions and 438 deletions
  1. 1 1
      src/main/java/com/ydtech/constants/InsuranceEnum.java
  2. 3 0
      src/main/java/com/ydtech/modules/ins/model/InsOrdersExcel.java
  3. 7 2
      src/main/java/com/ydtech/modules/order/components/bohai/BoHaiRequestApiComponent.java
  4. 2 5
      src/main/java/com/ydtech/modules/order/components/huatai/HuaTaiRequestApiComponents.java
  5. 87 0
      src/main/java/com/ydtech/modules/order/components/pingan/PinganRequestApiComponents.java
  6. 63 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/CarConfirmRequest.java
  7. 17 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/IndexRequest.java
  8. 0 1
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/PingAnBaseRequest.java
  9. 9 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/request/SearchPAVehicleListRequest.java
  10. 2 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/IndexResponse.java
  11. 5 0
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/PingAnBaseResponse.java
  12. 12 1
      src/main/java/com/ydtech/modules/order/entity/api/pingan/response/SearchPAVehicleListResponse.java
  13. 19 1
      src/main/java/com/ydtech/modules/order/entity/config/PingAnConfigureParameters.java
  14. 1 4
      src/main/java/com/ydtech/modules/order/service/impl/BoHaiOrderApiServiceImpl.java
  15. 12 6
      src/main/java/com/ydtech/modules/order/service/impl/IdentifyServiceImpl.java
  16. 242 417
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
  17. 46 0
      src/main/java/com/ydtech/modules/order/service/impl/PingAnOrderApiServiceImpl.java
  18. 7 0
      src/main/java/com/ydtech/modules/ser/model/SerAnnualAuditOrder.java
  19. 7 0
      src/main/java/com/ydtech/modules/ser/model/vo/SerAnnualAuditOrderQueryVo.java
  20. 3 0
      src/main/java/com/ydtech/modules/ser/service/impl/SerAnnualAuditOrderServiceImpl.java
  21. 13 0
      src/main/java/com/ydtech/utils/baidu/Idcard.java
  22. 24 0
      src/main/java/com/ydtech/utils/baidu/MultiObjectDetect.java
  23. 2 0
      src/main/resources/mapper/modules/order/InsOrdersMapper.xml

+ 1 - 1
src/main/java/com/ydtech/constants/InsuranceEnum.java

@@ -55,7 +55,7 @@ public enum InsuranceEnum {
     LIHI("LIHI", "利宝保险有限公司", ""),
     MACN("MACN", "亚太财产保险有限公司", ""),
     MSIC("MSIC", "三井住友海上火灾保险(中国)有限公司", ""),
-    PAIC("PAIC", "中国平安财产保险股份有限公司", ""),
+    PAIC("PAIC", "中国平安财产保险股份有限公司", "pingan"),
     PICC("PICC", "中国人民财产保险股份有限公司", ""),
     QHIC("QHIC", "新疆前海联合财产保险股份有限公司", ""),
     RSIC("RSIC", "融盛财产保险股份有限公司", ""),

+ 3 - 0
src/main/java/com/ydtech/modules/ins/model/InsOrdersExcel.java

@@ -19,6 +19,9 @@ public class InsOrdersExcel {
     @ExcelProperty(value = "协议号")
     private String agreementId;
 
+    @ExcelIgnore
+    private String apiType;
+
     @ExcelProperty(value = "工号")
     private String userId;
 

+ 7 - 2
src/main/java/com/ydtech/modules/order/components/bohai/BoHaiRequestApiComponent.java

@@ -6,11 +6,13 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.ydtech.config.properties.BohaiApiConfigurationProperties;
 import com.ydtech.constants.InsuranceEnum;
 import com.ydtech.exception.SystemException;
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
 import com.ydtech.modules.order.entity.api.bohai.BoHaiEncrypted;
 import com.ydtech.modules.order.entity.api.bohai.constants.RequestType;
 import com.ydtech.modules.order.entity.api.bohai.constants.ResponseCode;
 import com.ydtech.modules.order.entity.api.bohai.request.*;
 import com.ydtech.modules.order.entity.api.bohai.response.*;
+import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
 import com.ydtech.modules.order.utils.InsuranceLog;
 import com.ydtech.modules.order.utils.SignatureUtils;
 import lombok.RequiredArgsConstructor;
@@ -21,6 +23,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 import org.springframework.web.client.RestTemplate;
 
+import java.util.List;
 import java.util.Map;
 
 
@@ -104,8 +107,10 @@ public class BoHaiRequestApiComponent {
      * @param request 车辆查询请求实体
      * @return 响应
      */
-    public VehicleTypeQueryResponse vehicleTypeQuery(VehicleTypeQueryRequest request, String sysSourceCode) throws Exception {
-        return verificationResponse(request, properties.getUrl(), VehicleTypeQueryResponse.class, sysSourceCode, RequestType.Z00004);
+    public VehicleTypeQueryResponse.DataDTO.VehicleModelsDTO vehicleTypeQuery(VehicleTypeQueryRequest request, String sysSourceCode, CarInfoVo carInfoVo) throws Exception {
+        VehicleTypeQueryResponse vehicleTypeQueryResponse =  verificationResponse(request, properties.getUrl(), VehicleTypeQueryResponse.class, sysSourceCode, RequestType.Z00004);
+        List<VehicleTypeQueryResponse.DataDTO.VehicleModelsDTO> vehicleModels = vehicleTypeQueryResponse.getData().getVehicleModels();
+        return new CarModelsFilterUtils<VehicleTypeQueryResponse.DataDTO.VehicleModelsDTO>().to(vehicleModels, carInfoVo);
     }
 
     /**

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

@@ -16,6 +16,7 @@ import com.ydtech.modules.order.utils.AESUtilsWithDataBase;
 import com.ydtech.modules.order.utils.InsuranceLog;
 import com.ydtech.utils.Base64Utils;
 import com.ydtech.utils.RSA.RSAUtils;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.http.HttpEntity;
@@ -38,6 +39,7 @@ import java.util.List;
  */
 @Slf4j
 @Component
+@RequiredArgsConstructor
 public class HuaTaiRequestApiComponents {
 
 
@@ -45,11 +47,6 @@ public class HuaTaiRequestApiComponents {
 
     private final RestTemplate restTemplate;
 
-    public HuaTaiRequestApiComponents(HuaTaiApiConfigurationProperties huaTaiApiConfigurationProperties, RestTemplate restTemplate) {
-        this.properties = huaTaiApiConfigurationProperties;
-        this.restTemplate = restTemplate;
-    }
-
 
     /**
      * 加密请求

+ 87 - 0
src/main/java/com/ydtech/modules/order/components/pingan/PinganRequestApiComponents.java

@@ -1,18 +1,105 @@
 package com.ydtech.modules.order.components.pingan;
 
 
+import com.ydtech.config.properties.PingAnApiConfigurationProperties;
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
+import com.ydtech.modules.order.entity.api.pingan.request.CarConfirmRequest;
+import com.ydtech.modules.order.entity.api.pingan.request.IndexRequest;
+import com.ydtech.modules.order.entity.api.pingan.request.SearchPAVehicleListRequest;
+import com.ydtech.modules.order.entity.api.pingan.response.CarConfirmResponse;
+import com.ydtech.modules.order.entity.api.pingan.response.IndexResponse;
+import com.ydtech.modules.order.entity.api.pingan.response.SearchPAVehicleListResponse;
+import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Component;
 import org.springframework.web.client.RestTemplate;
 
+import java.util.List;
+
 @Component
 @RequiredArgsConstructor
 public class PinganRequestApiComponents {
 
     private final RestTemplate restTemplate;
 
+    private final PingAnApiConfigurationProperties properties;
+
+
+    /**
+     * 加密请求
+     *
+     * @param q      请求参数
+     * @param url    请求url
+     * @param tClass 响应类型
+     * @param <Q>    Request 请求体
+     * @param <S>    Response 响应体
+     * @return <S>
+     */
+//    private <Q extends PingAnBaseRequest, S extends PingAnBaseResponse> S post(Q q, String url, Class<S> tClass, String sysSourceCode,
+//                                                                               RequestUrl requestUrl) throws Exception {
+//
+//        HttpHeaders httpHeaders = new HttpHeaders();
+//        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+//        String busReqString = JSON.toJSONString(q, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
+//        InsuranceLog.infoLog(InsuranceEnum.PAIC.getPinyin(), "\n\t---------> {} \n\t---------> URl: {} \n\t---------> 请求参数:{}",
+//                requestUrl.getDesc(), url, busReqString);
+//
+//        JSONObject jsonObject = (JSONObject) JSON.toJSON(q);
+//
+//        // TODO
+//        String signature = PingAnRSAUtils.sortParametersWithASCII(jsonObject);
+//        String signData = PingAnRSAUtils.sign(signature, properties.getSelfPrivateKey());
+//
+//        InsuranceLog.infoLog(InsuranceEnum.PAIC.getPinyin(), "\n\t---------> {} \n\t---------> 加密后的参数:{} \n\t---------> " +
+//                "请求头内容signature:{}", requestUrl.getDesc(), signData, signature);
+//
+//        // 请求
+//        HttpEntity<String> httpEntity = new HttpEntity<>(signData, httpHeaders);
+//        ResponseEntity<String> response = restTemplate.postForEntity(url, httpEntity, String.class);
+//
+//        String body = response.getBody();
+//        InsuranceLog.infoLog(InsuranceEnum.PAIC.getPinyin(), "\n\t---------> {} \n\t---------> 解密前的参数:{}", requestUrl.getDesc(), body);
+//
+//        // 解密响应
+//        BoHaiEncrypted encrypted = JSON.parseObject(body).toJavaObject(BoHaiEncrypted.class);
+//        String info = SignatureUtils.decryptByPrivateKey(encrypted.getBizContent(), properties.getSelfPrivateKey());
+//        InsuranceLog.infoLog(InsuranceEnum.PAIC.getPinyin(), "\n\t---------> {} \n\t---------> 解密后的参数:{}", requestUrl.getDesc(), info);
+//        return JSON.parseObject(info).toJavaObject(tClass);
+//    }
+
+
+    /**
+     * 标的信息
+     * @param indexRequest
+     * @return
+     */
+    public IndexResponse index(IndexRequest indexRequest) {
+        return new IndexResponse();
+    }
 
+    /**
+     * 平安车型搜索接口
+     *
+     * @param searchPAVehicleListRequest 平安车型请求参数
+     * @param carInfoVo                  晋掌柜车型
+     * @return 平安车型
+     */
+    public SearchPAVehicleListResponse.ModelsDto searchPAVehicle(SearchPAVehicleListRequest searchPAVehicleListRequest,
+                                                                 CarInfoVo carInfoVo) {
+        SearchPAVehicleListResponse searchPAVehicleListResponse = new SearchPAVehicleListResponse();
+        List<SearchPAVehicleListResponse.ModelsDto> models = searchPAVehicleListResponse.getModels();
+        return new CarModelsFilterUtils<SearchPAVehicleListResponse.ModelsDto>().to(models, carInfoVo);
+    }
 
+    /**
+     * 车辆确认接口
+     *
+     * @param carConfirmRequest
+     * @return
+     */
+    public CarConfirmResponse carConfirm(CarConfirmRequest carConfirmRequest) {
+        return new CarConfirmResponse();
+    }
 
 
 }

+ 63 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/CarConfirmRequest.java

@@ -1,6 +1,11 @@
 package com.ydtech.modules.order.entity.api.pingan.request;
 
 
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
+import com.ydtech.modules.ins.model.vo.CustomerInfoVo;
+import com.ydtech.modules.order.entity.api.pingan.response.SearchPAVehicleListResponse;
+import com.ydtech.modules.order.entity.config.PingAnConfigureParameters;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -20,6 +25,9 @@ public class CarConfirmRequest extends PingAnBaseRequest {
 
     private String isInternetBusiness;
 
+    /**
+     *  车辆信息
+     */
     private VehicleDTO vehicle;
 
     private RegisterDTO register;
@@ -56,6 +64,22 @@ public class CarConfirmRequest extends PingAnBaseRequest {
 
     private String developmentStage;
 
+    public CarConfirmRequest(PingAnConfigureParameters parameters, BaseQuoteInfoVo quoteInfo, SearchPAVehicleListResponse.ModelsDto modelsDto) {
+        this.setUserId(parameters.getUserId());
+        CarInfoVo carInfo = quoteInfo.getCarInfo();
+//        this.vehicle = new VehicleDTO(carInfo, modelsDto);
+
+        // 车主
+        CustomerInfoVo ownerInfo = quoteInfo.getOwnerInfo();
+        // 投保人信息
+        CustomerInfoVo policyHolderInfo = quoteInfo.getPolicyHolderInfo();
+        // 被保人信息
+        CustomerInfoVo insuredPersonInfo = quoteInfo.getInsuredPersonInfo();
+
+
+
+    }
+
     @Data
     public static class VehicleDTO implements Serializable {
 
@@ -69,7 +93,13 @@ public class CarConfirmRequest extends PingAnBaseRequest {
         private String vehicleStyleUniqueId;
         private String autoModelName;
         private String seats;
+        /**
+         * 整备质量(吨)
+         */
         private String wholeWeight;
+        /**
+         * 核定载质量(吨)
+         */
         private String tonNumber;
         private String exhaustMeasure;
         private String power;
@@ -87,6 +117,39 @@ public class CarConfirmRequest extends PingAnBaseRequest {
         private String vehicleCodeForShangHai;
         private String specialCarLicense;
 
+//        public VehicleDTO(CarInfoVo carInfo, SearchPAVehicleListResponse.ModelsDto modelsDto) {
+//            this.registerDate = carInfo.getRegisterDate();
+//            this.frameNo = carInfo.getFrameNo();
+//            this.engineNo = carInfo.getEngineNo();
+//
+////            this.modelCode = modelsDto.getmod;
+//            this.paModelCode = modelsDto.getPaModelCode();
+//            this.modelIndex = modelsDto.getModelIndex();
+////            this.vehicleStyleUniqueId = vehicleStyleUniqueId;
+//            this.autoModelName = modelsDto.getModelName();
+//            this.seats = carInfo.getSeatCount();
+//
+//            this.wholeWeight = String.valueOf(Float.parseFloat(carInfo.getCompleteKerbMass()) / 1000);
+//            this.tonNumber = tonNumber;
+//
+//            this.exhaustMeasure = modelsDto.getExhaustMeasure();
+////            this.power = modelsDto.get;
+//            this.vehicleCertiType = vehicleCertiType;
+//            this.vehicleCertiNo = vehicleCertiNo;
+//            this.vehicleCertiDate = vehicleCertiDate;
+//            this.invoiceDate = invoiceDate;
+//            this.useAttribute = useAttribute;
+//            this.useAttributDetailCode = useAttributDetailCode;
+//            this.ownAttribute = ownAttribute;
+//            this.offerLastPolicyFlag = offerLastPolicyFlag;
+//            this.isOfferLocalUseProof = isOfferLocalUseProof;
+//            this.shanghaiVehicleType = shanghaiVehicleType;
+//            this.isNewEnergyVehicle = isNewEnergyVehicle;
+//            this.vehicleCodeForShangHai = vehicleCodeForShangHai;
+//            this.specialCarLicense = specialCarLicense;
+//        }
+
+
     }
 
 

+ 17 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/IndexRequest.java

@@ -1,5 +1,7 @@
 package com.ydtech.modules.order.entity.api.pingan.request;
 
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
+import com.ydtech.modules.order.entity.config.PingAnConfigureParameters;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -38,6 +40,15 @@ public class IndexRequest extends PingAnBaseRequest {
 
     private boolean isAllowRepeat;
 
+    public IndexRequest(PingAnConfigureParameters parameters, CarInfoVo carInfoVo) {
+        this.setUserId(parameters.getUserId());
+        this.cityCode = parameters.getCityCode();
+        this.inputBy = parameters.getInputBy();
+        this.saleCode = parameters.getSaleCode();
+        this.vehicle = new VehicleDTO(carInfoVo);
+        this.isAllowRepeat = false;
+    }
+
     @Data
     public static class VehicleDTO implements Serializable {
 
@@ -53,6 +64,12 @@ public class IndexRequest extends PingAnBaseRequest {
          */
         private String frameNo;
 
+
+        public VehicleDTO(CarInfoVo carInfoVo) {
+            this.licenseNo = carInfoVo.getLicenseNo();
+            this.frameNo = carInfoVo.getFrameNo();
+        }
+
     }
 
     @Data

+ 0 - 1
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/PingAnBaseRequest.java

@@ -18,5 +18,4 @@ public class PingAnBaseRequest implements Serializable {
      */
     private String flowid;
 
-
 }

+ 9 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/request/SearchPAVehicleListRequest.java

@@ -1,8 +1,10 @@
 package com.ydtech.modules.order.entity.api.pingan.request;
 
 
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
 
 
 /**
@@ -21,4 +23,11 @@ public class SearchPAVehicleListRequest extends PingAnBaseRequest {
      */
     private String keyword;
 
+    public SearchPAVehicleListRequest(String userId, String flowid, String keyword) {
+        this.setUserId(userId);
+        this.setFlowid(flowid);
+
+        this.keyword = keyword;
+    }
+
 }

+ 2 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/IndexResponse.java

@@ -4,6 +4,7 @@ package com.ydtech.modules.order.entity.api.pingan.response;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
 import java.util.List;
@@ -16,6 +17,7 @@ import java.util.List;
 @AllArgsConstructor
 @EqualsAndHashCode(callSuper = true)
 @Data
+@NoArgsConstructor
 public class IndexResponse extends PingAnBaseResponse {
 
     private static final long serialVersionUID = 6550972601202599801L;

+ 5 - 0
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/PingAnBaseResponse.java

@@ -13,4 +13,9 @@ public class PingAnBaseResponse implements Serializable {
 
     private String resultCode;
 
+    /**
+     * 流程ID
+     */
+    private String flowid;
+
 }

+ 12 - 1
src/main/java/com/ydtech/modules/order/entity/api/pingan/response/SearchPAVehicleListResponse.java

@@ -1,10 +1,12 @@
 package com.ydtech.modules.order.entity.api.pingan.response;
 
+import com.ydtech.modules.order.entity.filter.CarModelsFilter;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
+import java.io.Serializable;
 import java.util.List;
 
 
@@ -26,7 +28,7 @@ public class SearchPAVehicleListResponse extends PingAnBaseResponse {
     @AllArgsConstructor
     @NoArgsConstructor
     @Data
-    public static class ModelsDto {
+    public static class ModelsDto implements Serializable, CarModelsFilter  {
 
         /**
          * 车型编码索引
@@ -106,6 +108,15 @@ public class SearchPAVehicleListResponse extends PingAnBaseResponse {
          */
         private String vehicleType;
 
+        @Override
+        public String getCarYear() {
+            return this.marketDate;
+        }
+
+        @Override
+        public String getPurchasePrice() {
+            return this.price;
+        }
     }
 
 }

+ 19 - 1
src/main/java/com/ydtech/modules/order/entity/config/PingAnConfigureParameters.java

@@ -13,7 +13,25 @@ import lombok.Data;
 @Data
 public class PingAnConfigureParameters implements ConfigureParameters {
 
-
+    /**
+     * 合作伙伴操作用户ID,用来记录合作伙伴操作人身份
+     */
+    private String userId;
+
+    /**
+     * 由平安提供数据字段
+     */
+    private String cityCode;
+
+    /**
+     * 平安好伙伴外网录单账号
+     */
+    private String inputBy;
+
+    /**
+     * 车商编码/合作网点编码
+     */
+    private String saleCode;
 
 
 }

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

@@ -123,11 +123,8 @@ public class BoHaiOrderApiServiceImpl implements BoHaiOrderApiService {
         // 2 车型查询接口
         CarInfoVo carInfo = quoteInfoVo.getCarInfo();
         VehicleTypeQueryRequest vehicleTypeQueryRequest = new VehicleTypeQueryRequest(parameters, carInfo.getModelcname(), orderNo);
-        VehicleTypeQueryResponse vehicleTypeQueryResponse = boHaiRequestApiComponent.vehicleTypeQuery(vehicleTypeQueryRequest,
-                parameters.getSysSourceCode());
-        List<VehicleTypeQueryResponse.DataDTO.VehicleModelsDTO> vehicleModels = vehicleTypeQueryResponse.getData().getVehicleModels();
         VehicleTypeQueryResponse.DataDTO.VehicleModelsDTO vehicleModelsDTO =
-                new CarModelsFilterUtils<VehicleTypeQueryResponse.DataDTO.VehicleModelsDTO>().to(vehicleModels, quoteInfoVo.getCarInfo());
+                boHaiRequestApiComponent.vehicleTypeQuery(vehicleTypeQueryRequest, parameters.getSysSourceCode(), carInfo);
 
         // 3 车辆确认接口
         // 车主信息

+ 12 - 6
src/main/java/com/ydtech/modules/order/service/impl/IdentifyServiceImpl.java

@@ -53,11 +53,12 @@ public class IdentifyServiceImpl implements IdentifyService {
             String s1Key = IMAGE_IDENTIFY_KEY + "idCard:" + "front:" + s1MD5;
             if (StringUtils.isNotBlank(s1) && !ObjectUtil.isAllFieldNull(redisTemplate.opsForValue().get(s1Key))) {
                 //走缓存
-                BeanUtils.copyProperties(Objects.requireNonNull(redisTemplate.opsForValue().get(s1Key)), customerInfoVO);
+                CustomerInfoVO customerInfoVO1 = new CustomerInfoVO();
+                BeanUtils.copyProperties(Objects.requireNonNull(redisTemplate.opsForValue().get(s1Key)), customerInfoVO1);
+                Idcard.conversionFront(customerInfoVO, customerInfoVO1);
             } else {
                 //识别身份证正面
                 Idcard.getIdCardFront(s1, customerInfoVO);
-                AssertionUtils.isEmpty(customerInfoVO, "身份证识别失败");
                 //设置缓存
                 redisTemplate.opsForValue().set(s1Key, customerInfoVO, 1, TimeUnit.DAYS);
             }
@@ -69,11 +70,12 @@ public class IdentifyServiceImpl implements IdentifyService {
             String s2Key = IMAGE_IDENTIFY_KEY + "idCard:" + "back:" + s2MD5;
             if (StringUtils.isNotBlank(s2) && !ObjectUtil.isAllFieldNull(redisTemplate.opsForValue().get(s2Key))) {
                 //走缓存
+                CustomerInfoVO customerInfoVO2 = new CustomerInfoVO();
                 BeanUtils.copyProperties(Objects.requireNonNull(redisTemplate.opsForValue().get(s2Key)), customerInfoVO);
+                Idcard.conversionBack(customerInfoVO, customerInfoVO2);
             } else {
                 //识别身份证背面
                 Idcard.getIdCardBack(s2, customerInfoVO);
-                AssertionUtils.isEmpty(customerInfoVO, "身份证识别失败");
                 //设置缓存
                 redisTemplate.opsForValue().set(s2Key, customerInfoVO, 1, TimeUnit.DAYS);
             }
@@ -94,11 +96,13 @@ public class IdentifyServiceImpl implements IdentifyService {
             String s1Key = IMAGE_IDENTIFY_KEY + "drivingPermit:" + "front:" + s1MD5;
             if (StringUtils.isNotBlank(s1) && !ObjectUtil.isAllFieldNull(redisTemplate.opsForValue().get(s1Key))) {
                 //走缓存
+                CardUserInfo cardUserInfo1 = new CardUserInfo();
                 BeanUtils.copyProperties(Objects.requireNonNull(redisTemplate.opsForValue().get(s1Key)), cardUserInfo);
+                MultiObjectDetect.conversionFront(cardUserInfo, cardUserInfo1);
+
             } else {
                 //行驶证正面识别
                 MultiObjectDetect.drivingPermitFront(s1, cardUserInfo);
-                AssertionUtils.isEmpty(cardUserInfo, "行驶证正面识别失败");
                 //设置缓存
                 redisTemplate.opsForValue().set(s1Key, cardUserInfo, 1, TimeUnit.DAYS);
             }
@@ -110,15 +114,17 @@ public class IdentifyServiceImpl implements IdentifyService {
             String s2Key = IMAGE_IDENTIFY_KEY + "drivingPermit:" + "back:" + s2MD5;
             if (StringUtils.isNotBlank(s2) && !ObjectUtil.isAllFieldNull(redisTemplate.opsForValue().get(s2Key))) {
                 //走缓存
-                BeanUtils.copyProperties(Objects.requireNonNull(redisTemplate.opsForValue().get(s2Key)), cardUserInfo);
+                CardUserInfo cardUserInfo2 = new CardUserInfo();
+                BeanUtils.copyProperties(Objects.requireNonNull(redisTemplate.opsForValue().get(s2Key)), cardUserInfo2);
+                MultiObjectDetect.conversionBack(cardUserInfo, cardUserInfo2);
             } else {
                 //行驶证反面识别
                 MultiObjectDetect.drivingPermitBack(s2, cardUserInfo);
-                AssertionUtils.isEmpty(cardUserInfo, "行驶证正面识别失败");
                 //设置缓存
                 redisTemplate.opsForValue().set(s2Key, cardUserInfo, 1, TimeUnit.DAYS);
             }
         }
+
         AssertionUtils.isEmpty(cardUserInfo, "行驶证正面识别失败");
         map.put("carInfo", cardUserInfo);
         return HttpResult.ok("success", map);

+ 242 - 417
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -2,12 +2,15 @@ package com.ydtech.modules.order.service.impl;
 
 import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.collection.CollUtil;
 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.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.components.OrderComponents;
 import com.ydtech.constants.InsuranceEnum;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
 import com.ydtech.constants.enums.dict.insurance.NatureOfVehicleUse;
@@ -15,20 +18,22 @@ import com.ydtech.constants.sys.SystemConstant;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.constants.RoleConstants;
+import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.SysUserRole;
-import com.ydtech.modules.order.entity.po.InsOrdersCarInfo;
-import com.ydtech.modules.order.entity.po.InsOrdersCarUserInfo;
-import com.ydtech.modules.order.service.InsOrdersCarInfoService;
-import com.ydtech.modules.order.service.InsOrdersCarUserInfoService;
+import com.ydtech.modules.admin.service.SysDeptService;
 import com.ydtech.modules.admin.service.SysUserRoleService;
 import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.esm.service.EsmUserReferrerService;
 import com.ydtech.modules.fee.service.impl.FeeRuleSchemeServiceImpl;
 import com.ydtech.modules.fnc.entity.InsFeeAudit;
 import com.ydtech.modules.fnc.service.InsFeeAuditService;
+import com.ydtech.modules.ins.dao.InsFileMapper;
 import com.ydtech.modules.ins.model.InsOrdersExcel;
 import com.ydtech.modules.ins.model.InsOrdersExcelVo;
-import com.ydtech.modules.ins.model.vo.*;
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
+import com.ydtech.modules.ins.model.vo.CustomerInfoVo;
+import com.ydtech.modules.ins.model.vo.QuoteKindRespVo;
 import com.ydtech.modules.ins.model.ya.CarModelDTO;
 import com.ydtech.modules.ins.model.ya.ExtendInfoDto;
 import com.ydtech.modules.ins.model.ya.ResponseDataC2;
@@ -36,23 +41,32 @@ import com.ydtech.modules.inv.utils.EasyExcelUtils;
 import com.ydtech.modules.order.convert.CarModelDTOConvert;
 import com.ydtech.modules.order.convert.MapToYaExtendInfoDto;
 import com.ydtech.modules.order.dao.InsOrdersMapper;
-import com.ydtech.modules.order.entity.*;
-import com.ydtech.modules.order.entity.bo.InsOrdersBo;
+import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.InsOrdersTrack;
+import com.ydtech.modules.order.entity.bo.UnderwritingRulesBo;
+import com.ydtech.modules.order.entity.crawler.response.CrawlerVerifyPaymentResponse;
 import com.ydtech.modules.order.entity.dto.DrivingInsuranceDto;
 import com.ydtech.modules.order.entity.dto.InsAreaCompanyQueryDto;
-import com.ydtech.modules.order.entity.po.*;
-import com.ydtech.modules.order.entity.vo.OrderVo;
 import com.ydtech.modules.order.entity.vo.*;
 import com.ydtech.modules.order.entity.vo.ya.YaExtendInfoDto;
-import com.ydtech.modules.order.service.*;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.modules.order.service.InsOrdersTrackService;
+import com.ydtech.modules.protocol.entity.constants.PtlApiType;
 import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
 import com.ydtech.modules.protocol.service.PtlAgreementService;
+import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
+import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
+import com.ydtech.utils.SnowFlakeUtil;
 import com.ydtech.utils.idgen.IdGenerate;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Lazy;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
@@ -60,8 +74,11 @@ import org.springframework.util.ObjectUtils;
 import javax.validation.constraints.NotBlank;
 import java.io.File;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
+import static com.ydtech.modules.order.constants.OrderCacheConstant.*;
+
 /**
  * @author wenkaisen
  * @description 针对表【ins_orders(保险订单表)】的数据库操作Service实现
@@ -70,10 +87,18 @@ import java.util.stream.Collectors;
 @Service
 public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders> implements InsOrdersService {
 
+    private final OrderComponents orderComponents;
+
     private final SysUserService sysUserService;
 
     private final SysUserRoleService sysUserRoleService;
 
+    private final EsmUserReferrerService esmUserReferrerService;
+
+    private final SysDeptService sysDeptService;
+
+    private final StringRedisTemplate redisTemplate;
+
     private final InsAreaCompanyService insAreaCompanyService;
 
     private final InsFeeAuditService insFeeAuditService;
@@ -84,50 +109,35 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
     private final InsOrdersTrackService insOrdersTrackService;
 
-    @Autowired
-    InsOrdersCarUserInfoService insOrdersCarUserInfoService;
-
-    @Autowired
-    InsOrdersCarInfoService insOrdersCarInfoService;
-
-    @Autowired
-    InsAreaCompanyRiskService insAreaCompanyRiskService;
-
-    @Autowired
-    InsAreaCompanyKindService insAreaCompanyKindService;
-
-    @Autowired
-    InsAreaCompanyTaxArrearsService insAreaCompanyTaxArrearsService;
-
-    @Autowired
-    InsAreaCompanyCarInfoService insAreaCompanyCarInfoService;
+    private final InsFileMapper insFileMapper;
 
     @Autowired
-    InsAreaCompanyCarUserInfoService insAreaCompanyCarUserInfoService;
-
-    @Autowired
-    InsOrdersTaxService insOrdersTaxService;
-
-    @Autowired
-    InsOrdersService insOrdersService;
+    private InsFeeOrderNewService insFeeOrderNewService;
 
     @Value("${upload.file.path}")
     private String uploadFilePath;
 
-    public InsOrdersServiceImpl(SysUserService sysUserService,
+    public InsOrdersServiceImpl(OrderComponents orderComponents, SysUserService sysUserService,
                                 SysUserRoleService sysUserRoleService,
-                                @Lazy InsAreaCompanyService insAreaCompanyService,
+                                EsmUserReferrerService esmUserReferrerService, SysDeptService sysDeptService,
+                                StringRedisTemplate redisTemplate, @Lazy InsAreaCompanyService insAreaCompanyService,
                                 PtlAgreementService ptlAgreementService,
                                 @Lazy FeeRuleSchemeServiceImpl feeRuleSchemeService,
-                                InsFeeAuditService insFeeAuditService,
-                                InsOrdersTrackService insOrdersTrackService) {
+                                InsFeeAuditService insFeeAuditService, InsOrdersTrackService insOrdersTrackService,
+                                InsFileMapper insFileMapper) {
+
+        this.orderComponents = orderComponents;
         this.sysUserService = sysUserService;
         this.sysUserRoleService = sysUserRoleService;
+        this.esmUserReferrerService = esmUserReferrerService;
+        this.sysDeptService = sysDeptService;
+        this.redisTemplate = redisTemplate;
         this.insAreaCompanyService = insAreaCompanyService;
         this.ptlAgreementService = ptlAgreementService;
         this.feeRuleSchemeService = feeRuleSchemeService;
         this.insFeeAuditService = insFeeAuditService;
         this.insOrdersTrackService = insOrdersTrackService;
+        this.insFileMapper = insFileMapper;
     }
 
 
@@ -150,12 +160,14 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             return;
         }
 
+        String orderStatus = insAreaCompany.getOrderstatus();
+
         if (!ObjectUtils.isEmpty(insAreaCompany)) {
             InsOrders insOrders = getById(insAreaCompany.getOrderno());
-            String companyStatus = "";
+
+            // 查出最新状态的子订单修改
             if (!InsOrderStatusEnum.ACCEPT_INSURANCE.getCode().equals(insAreaCompany.getOrderstatus())) {
-                // 查出最新状态的子订单修改
-                companyStatus = insAreaCompanyService.queryLatestStatus(insAreaCompany.getOrderno());
+                orderStatus = insAreaCompanyService.queryLatestStatus(insAreaCompany.getOrderno());
             } else {
                 insOrders.setCompanyId(insAreaCompany.getCompanyId());
                 insOrders.setInsCompany(insAreaCompany.getInscompany());
@@ -165,7 +177,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
                 return;
             }
 
-            insOrders.setOrderstatus(companyStatus);
+            insOrders.setOrderstatus(orderStatus);
             LambdaQueryWrapper<InsOrders> insOrdersLambdaQueryWrapper = new LambdaQueryWrapper<>();
             insOrdersLambdaQueryWrapper.ne(InsOrders::getOrderstatus, InsOrderStatusEnum.ACCEPT_INSURANCE.getCode());
             insOrdersLambdaQueryWrapper.eq(InsOrders::getOrderno, insAreaCompany.getOrderno());
@@ -177,15 +189,13 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     @Override
     public List<CarModelDTO> vinSearch(String vin) {
         LambdaQueryWrapper<InsOrders> wrapper = new LambdaQueryWrapper<>();
-
-
-        wrapper.eq(InsOrders::getFrameno, vin).eq(InsOrders::getOrderstatus, InsOrderStatusEnum.ACCEPT_INSURANCE.getCode()).orderByAsc(InsOrders::getCreatetime).last("limit 1");
-        InsOrdersCarInfo insOrdersCarInfo = insOrdersCarInfoService.query().eq("frame_no", vin).one();
-//        InsOrders insOrders = baseMapper.selectOne(wrapper);
-        if (!ObjectUtils.isEmpty(insOrdersCarInfo)) {
-            CarInfoVo carInfoVo = new CarInfoVo();
-            BeanUtils.copyProperties(insOrdersCarInfo,carInfoVo);
-//            CarInfoVo carInfoVo = JSON.parseObject(carinfo.toJSONString(), CarInfoVo.class);
+        wrapper.select(InsOrders::getCarinfo);
+        wrapper.eq(InsOrders::getFrameno, vin).eq(InsOrders::getOrderstatus,
+                InsOrderStatusEnum.ACCEPT_INSURANCE.getCode()).orderByAsc(InsOrders::getCreatetime).last("limit 1");
+        InsOrders insOrders = baseMapper.selectOne(wrapper);
+        if (!ObjectUtils.isEmpty(insOrders)) {
+            JSONObject carinfo = insOrders.getCarinfo();
+            CarInfoVo carInfoVo = JSON.parseObject(carinfo.toJSONString(), CarInfoVo.class);
             CarModelDTO carModelDTO = CarModelDTOConvert.INSTANCE.CarInfoVotoCarModelDTO(carInfoVo);
             return Collections.singletonList(carModelDTO);
         }
@@ -201,6 +211,90 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         return insOrders;
     }
 
+    /**
+     * @param userId      当前登录人id
+     * @param quoteInfoVo 报价信息
+     * @return
+     */
+    @Override
+    public InsOrders generateOrder(String userId, BaseQuoteInfoVo quoteInfoVo) {
+        String realUserId = userId;//实际跟单业务人默认登录人
+        boolean daikeFlag = false;//是否代客录单业务
+        //添加出单员报价的逻辑,
+        boolean isCdy = false;//是否出单员标志
+        if (StringUtils.isNotEmpty(userId)) {
+            SysUserRole userRole = sysUserRoleService.selectByUserId(userId);
+            if (19 == userRole.getRoleId()) {
+                isCdy = true;
+            }
+        }
+        if (isCdy) {
+            //如果是出单员  获取最终实际业务员
+            SysUser user = sysUserService.getById(realUserId);
+            realUserId = user.getOperatorCode();
+        } else {
+            //如果传递的业务归属人且与登录人不一致,则是代客录单业务
+            if (StringUtils.isNotEmpty(quoteInfoVo.getUserId()) && !userId.equals(quoteInfoVo.getUserId())) {
+                //实际跟单业务人变更为手工选择的人
+                realUserId = quoteInfoVo.getUserId();
+                daikeFlag = true;
+            }
+        }
+
+        // 1. 验证订单参数
+        orderComponents.checkEmpty(quoteInfoVo);
+        SysUser user = sysUserService.getById(realUserId);
+        SysDept dept = sysDeptService.getById(user.getDeptId());
+        // 2 构造订单
+        InsOrders insOrders = new InsOrders(user, dept, quoteInfoVo);
+        if (daikeFlag) {//当时代客录单业务时,才需要赋值该字段
+            insOrders.setOperatorid(userId);//赋值代客录单操作人为登录人
+        }
+        if (isCdy) {//赋值出单员  操作人为登录人
+            insOrders.setOperatorid(userId);
+        }
+        InsOrders insOrders1 = baseMapper.selectById(quoteInfoVo.getOrderNo());
+
+        //需要赋值代录单人ID
+
+        if (ObjectUtils.isEmpty(insOrders1)) {
+            insOrders1 = insOrders;
+        }
+
+        if (!quoteInfoVo.getCarInfo().getLicenseNo().equals(insOrders1.getLicenseno())) {
+            throw new SystemException("1001", "车牌与此订单不符,请重新录单");
+        }
+
+        // 3 订单操作
+        if (!realUserId.equals(insOrders1.getUserid()) || StringUtils.isEmpty(quoteInfoVo.getOrderNo())) {
+            // 存入订单
+            String orderno = IdGenerate.nextId();
+            insOrders.setOrderno(orderno);
+            // 将报价号返回
+            long l = new SnowFlakeUtil().nextId();
+            insOrders.setQuoteno(String.valueOf(l));
+            boolean save = this.saveAndTrajectories(insOrders);
+            if (!save) {
+                throw new SystemException("订单生成失败");
+            }
+
+        } else {
+            // 修改订单
+            insOrders.setOrderno(quoteInfoVo.getOrderNo());
+            this.updateById(insOrders);
+        }
+        // 4 将报价信息存入redis 中
+        String s = JSON.toJSONString(quoteInfoVo);
+        redisTemplate.opsForValue().set(QUOTE_INFO_KEY + insOrders.getOrderno(), s, QUOTE_INFO_KEY_TIME, TimeUnit.DAYS);
+
+        // 5 生成承包规则参数
+        UnderwritingRulesBo underwritingRulesBo = new UnderwritingRulesBo(quoteInfoVo);
+        String rules = JSON.toJSONString(underwritingRulesBo);
+        redisTemplate.opsForValue().set(QUOTE_RULES_KEY + insOrders.getOrderno(), rules, QUOTE_RULES_KEY_TIME,
+                TimeUnit.HOURS);
+
+        return insOrders;
+    }
 
     /**
      * 新的查询分页接口
@@ -218,7 +312,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         boolean isCdy = false;
         if (StringUtils.isNotEmpty(orderQueryVo.getUserId())) {
             SysUserRole userRole = sysUserRoleService.selectByUserId(orderQueryVo.getUserId());
-            if (Arrays.asList(SystemConstant.getSysRoleTeamLeader()).contains(userRole.getRoleId().toString())) { //团队长可查询下面所有人员订单
+            if (Arrays.asList(SystemConstant.getSysRoleTeamLeader()).contains(userRole.getRoleId().toString())) {
+                //团队长可查询下面所有人员订单
                 isTeamLeader = true;
             }
             if (19 == userRole.getRoleId()) {
@@ -230,14 +325,14 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         Page<InsOrders> orderVoPage = baseMapper.queryPageOrder(page, orderQueryVo, isTeamLeader, isCdy);
         Long total = baseMapper.queryPageOrderCount(orderQueryVo, isTeamLeader, isCdy);
         orderVoPage.setTotal(total);
-        return new BasePageResult<>(orderQueryVo.getPageNum(), orderQueryVo.getPageSize(), orderVoPage.getTotal(), orderVoPage.getPages()
+        return new BasePageResult<>(orderQueryVo.getPageNum(), orderQueryVo.getPageSize(), orderVoPage.getTotal(),
+                orderVoPage.getPages()
                 , orderVoPage.getRecords());
     }
 
 
     @Override
     public BasePageResult<InsOrders> queryPageOrder(OrderQueryVo orderQueryVo) {
-
         // 领导标志
         boolean isTeamLeader = false;
         //是否出单员标志
@@ -245,7 +340,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         if (StringUtils.isNotEmpty(orderQueryVo.getUserId())) {
             SysUserRole userRole = sysUserRoleService.selectByUserId(orderQueryVo.getUserId());
 
-            if (Arrays.asList(SystemConstant.getSysRoleTeamLeader()).contains(userRole.getRoleId().toString())) { //团队长可查询下面所有人员订单
+            if (Arrays.asList(SystemConstant.getSysRoleTeamLeader()).contains(userRole.getRoleId().toString())) {
+                //团队长可查询下面所有人员订单
                 isTeamLeader = true;
             }
 
@@ -258,20 +354,27 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         // 构造查询条件
         LambdaQueryWrapper<InsOrders> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(StringUtils.isNotEmpty(orderQueryVo.getOrderNo()), InsOrders::getOrderno, orderQueryVo.getOrderNo())
-                .likeRight(StringUtils.isNotEmpty(orderQueryVo.getDeptId()) && isTeamLeader, InsOrders::getDeptid, orderQueryVo.getDeptId())
-                .eq(StringUtils.isNotEmpty(orderQueryVo.getOrderStatus()), InsOrders::getOrderstatus, orderQueryVo.getOrderStatus())
-                .likeRight(StringUtils.isNotEmpty(orderQueryVo.getFrameNo()), InsOrders::getFrameno, orderQueryVo.getFrameNo())
-                .likeRight(StringUtils.isNotEmpty(orderQueryVo.getLicenseNo()), InsOrders::getLicenseno, orderQueryVo.getLicenseNo())
-                .likeRight(StringUtils.isNotEmpty(orderQueryVo.getInsuredName()), InsOrders::getInsuredname, orderQueryVo.getInsuredName())
+                .likeRight(StringUtils.isNotEmpty(orderQueryVo.getDeptId()) && isTeamLeader, InsOrders::getDeptid,
+                        orderQueryVo.getDeptId())
+                .eq(StringUtils.isNotEmpty(orderQueryVo.getOrderStatus()), InsOrders::getOrderstatus,
+                        orderQueryVo.getOrderStatus())
+                .likeRight(StringUtils.isNotEmpty(orderQueryVo.getFrameNo()), InsOrders::getFrameno,
+                        orderQueryVo.getFrameNo())
+                .likeRight(StringUtils.isNotEmpty(orderQueryVo.getLicenseNo()), InsOrders::getLicenseno,
+                        orderQueryVo.getLicenseNo())
+                .likeRight(StringUtils.isNotEmpty(orderQueryVo.getInsuredName()), InsOrders::getInsuredname,
+                        orderQueryVo.getInsuredName())
                 .between(!ObjectUtils.isEmpty(orderQueryVo.getStartDate()) && !ObjectUtils.isEmpty(orderQueryVo.getEndDate()),
                         InsOrders::getCreatetime, orderQueryVo.getStartDate(), orderQueryVo.getEndDatePlusOneDay())
                 .orderBy(true, false, InsOrders::getCreatetime);
 
 
         if (isCdy) {//如果是出单员查询时,只查自己的  与代客录单一致,查operatorid (手机前端userid传过来是出单用户,直接用该字段查询查operatorid)
-            wrapper.eq(StringUtils.isNotEmpty(orderQueryVo.getUserId()), InsOrders::getOperatorid, orderQueryVo.getUserId());
+            wrapper.eq(StringUtils.isNotEmpty(orderQueryVo.getUserId()), InsOrders::getOperatorid,
+                    orderQueryVo.getUserId());
         } else {
-            wrapper.eq(!isTeamLeader && StringUtils.isNotEmpty(orderQueryVo.getUserId()), InsOrders::getUserid, orderQueryVo.getUserId());
+            wrapper.eq(!isTeamLeader && StringUtils.isNotEmpty(orderQueryVo.getUserId()), InsOrders::getUserid,
+                    orderQueryVo.getUserId());
         }
 
         Page<InsOrders> page = new Page<>(orderQueryVo.getPageNum(), orderQueryVo.getPageSize());
@@ -279,7 +382,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         if (StringUtils.isNotEmpty(orderQueryVo.getCompanyId())) {
             List<InsAreaCompany> list = insAreaCompanyService.query().select("DISTINCT orderno").eq("company_id",
                     orderQueryVo.getCompanyId()).list();
-            List<String> collect = list.stream().map(InsAreaCompany::getOrderno).distinct().collect(Collectors.toList());
+            List<String> collect =
+                    list.stream().map(InsAreaCompany::getOrderno).distinct().collect(Collectors.toList());
             if (!collect.isEmpty()) {
                 wrapper.in(InsOrders::getOrderno, collect);
             }
@@ -295,7 +399,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         }
 
         if (StringUtils.isNotEmpty(orderQueryVo.getAuditStatus()) && orderQueryVo.getAuditStatus().equals("0")) {
-            List<InsFeeAudit> list = insFeeAuditService.query().select("DISTINCT orderno").eq("auditstatus", "1").list();
+            List<InsFeeAudit> list =
+                    insFeeAuditService.query().select("DISTINCT orderno").eq("auditstatus", "1").list();
             List<String> collect = list.stream().map(InsFeeAudit::getOrderno).distinct().collect(Collectors.toList());
 
             if (!collect.isEmpty()) {
@@ -303,9 +408,21 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             }
         }
 
+        //查出报价状态为 3
+        List<InsAreaCompany> insAreaCompanies = insAreaCompanyService.getorDerIds();
+//      新的费用订单表
+        if (insAreaCompanies.size() > 0) {
+            List<String> collect =
+                    insAreaCompanies.stream().map(insAreaCompany -> insAreaCompany.getOrderno()).collect(Collectors.toList());
+            if (!collect.isEmpty()) {
+                wrapper.in(InsOrders::getOrderno, collect);
+            }
+        }
+
         Page<InsOrders> insOrdersPage = page(page, wrapper);
 
-        return new BasePageResult<>(orderQueryVo.getPageNum(), page.getSize(), insOrdersPage.getTotal(), page.getPages(),
+        return new BasePageResult<>(orderQueryVo.getPageNum(), page.getSize(), insOrdersPage.getTotal(),
+                page.getPages(),
                 insOrdersPage.getRecords());
     }
 
@@ -331,7 +448,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             insOrdersExcel.setRegisterDate(carInfoVo.getRegisterDate());
             insOrdersExcel.setIssueDate(carInfoVo.getIssueDate());
 
-            String natureOfVehicleUse = NatureOfVehicleUse.getNatureOfVehicleUse(carInfoVo.getCarnature(), carInfoVo.getVehicleUse());
+            String natureOfVehicleUse = NatureOfVehicleUse.getNatureOfVehicleUse(carInfoVo.getCarnature(),
+                    carInfoVo.getVehicleUse());
             insOrdersExcel.setVehicleUse(natureOfVehicleUse);
 
             insOrdersExcel.setCarNature(NatureOfVehicleUse.getDesc(carInfoVo.getCarnature()));
@@ -363,11 +481,24 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
             //非车
             if (!ObjectUtils.isEmpty(insOrdersExcel.getCrossInsurance())) {
-                List<DrivingInsuranceDto> drivingInsuranceDtos = insOrdersExcel.getCrossInsurance().toJavaList(DrivingInsuranceDto.class);
-                if (!drivingInsuranceDtos.isEmpty()) {
-                    String policyNumber = drivingInsuranceDtos.get(0).getPolicyNumber();
-                    insOrdersExcel.setJyPolicyno(policyNumber);
+
+                if(String.valueOf(PtlApiType.PTL_API_2.getCode()).equals(insOrdersExcel.getApiType())){
+                    List<CrawlerVerifyPaymentResponse.DrivingInsurancesDTO> drivingInsurancesDTOS =
+                            insOrdersExcel.getCrossInsurance().toJavaList(CrawlerVerifyPaymentResponse.DrivingInsurancesDTO.class);
+                    if (!drivingInsurancesDTOS.isEmpty()) {
+                        String policyNumber = drivingInsurancesDTOS.get(0).getPolicy();
+                        insOrdersExcel.setJyPolicyno(policyNumber);
+                    }
+                }else {
+                    List<DrivingInsuranceDto> drivingInsuranceDtos =
+                            insOrdersExcel.getCrossInsurance().toJavaList(DrivingInsuranceDto.class);
+                    if (!drivingInsuranceDtos.isEmpty()) {
+                        String policyNumber = drivingInsuranceDtos.get(0).getPolicyNumber();
+                        insOrdersExcel.setJyPolicyno(policyNumber);
+                    }
                 }
+
+
             }
 
             // 设置险种信息
@@ -403,7 +534,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             return HttpResult.ok("", EasyExcelUtils.downExcel(uploadFilePath, InsOrdersExcel.class, insOrdersExcels));
         } else {
             if (folder.mkdirs()) {
-                return HttpResult.ok("", EasyExcelUtils.downExcel(uploadFilePath, InsOrdersExcel.class, insOrdersExcels));
+                return HttpResult.ok("", EasyExcelUtils.downExcel(uploadFilePath, InsOrdersExcel.class,
+                        insOrdersExcels));
             } else {
                 throw new SystemException("文件导出失败");
             }
@@ -427,48 +559,13 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             JSONObject reptxt = orderAndAreaCompany.getReptxt();
             ResponseDataC2 responseDataC2 = JSON.toJavaObject(reptxt, ResponseDataC2.class);
             List<ExtendInfoDto> extendInfoDtos = responseDataC2.getResponseBody().getExtendInfo();
-            Map<String, String> stringStringMap = extendInfoDtos.stream().collect(LinkedHashMap::new, (m, v) -> m.put(v.getKey(),
-                    v.getValue()), LinkedHashMap::putAll);
+            Map<String, String> stringStringMap = extendInfoDtos.stream().collect(LinkedHashMap::new,
+                    (m, v) -> m.put(v.getKey(),
+                            v.getValue()), LinkedHashMap::putAll);
             yaExtendInfoDto = MapToYaExtendInfoDto.INSTANCE.mapToYaExtendInfoDto(stringStringMap);
             orderAndAreaCompany.setExtendInfo(yaExtendInfoDto);
         }
         InsAreaCompany iac = insAreaCompanyService.getById(companyId);
-        //查找车辆信息
-        InsAreaCompanyCarInfo carInfo = insAreaCompanyCarInfoService.getById(iac.getCarInfoId());
-        orderAndAreaCompany.setCarinfo(JSONObject.parseObject(JSON.toJSONString(carInfo)));
-        //查找车辆用户信息
-        InsAreaCompanyCarUserInfo ownerInfo = insAreaCompanyCarUserInfoService.getById(iac.getOwnerId());
-        InsAreaCompanyCarUserInfo applyInfo;
-        orderAndAreaCompany.setOwnerinfo(JSONObject.parseObject(JSON.toJSONString(ownerInfo)));
-        List<String> userIds = new ArrayList<>();
-        userIds.add(iac.getOwnerId());
-        userIds.add(iac.getApplyId());
-        userIds.add(iac.getInsureId());
-        List<String> uniqueUserIds = userIds.stream().distinct().collect(Collectors.toList());
-
-        List<InsAreaCompanyCarUserInfo> insAreaCompanyCarUserInfos = insAreaCompanyCarUserInfoService.list(new LambdaQueryWrapper<InsAreaCompanyCarUserInfo>().in(InsAreaCompanyCarUserInfo::getId, uniqueUserIds));
-        insAreaCompanyCarUserInfos.forEach(carUserInfo -> {
-            String id = carUserInfo.getId();
-            if(id.equals(iac.getOwnerId())){
-                orderAndAreaCompany.setOwnerinfo(JSONObject.parseObject(JSONObject.toJSONString(carUserInfo)));
-            }
-            if(id.equals(iac.getApplyId())){
-                orderAndAreaCompany.setApplyinfo(JSONObject.parseObject(JSONObject.toJSONString(carUserInfo)));
-            }
-            if(id.equals(iac.getInsureId())){
-                orderAndAreaCompany.setInsureinfo(JSONObject.parseObject(JSONObject.toJSONString(carUserInfo)));
-            }
-        });
-
-        //查找risk
-        List<InsAreaCompanyRisk> riskList = insAreaCompanyRiskService.query().eq("company_id", companyId).list();
-        orderAndAreaCompany.setRiskinfo(JSON.parseArray(JSON.toJSONString(riskList)));
-        //查找kind
-        List<InsAreaCompanyKind> kindList = insAreaCompanyKindService.query().eq("company_id", companyId).list();
-        orderAndAreaCompany.setKindinfo(JSON.parseArray(JSON.toJSONString(kindList)));
-        //查找tax
-        List<InsAreaCompanyTaxArrears> taxArrearsList = insAreaCompanyTaxArrearsService.query().eq("company_id", companyId).list();
-        orderAndAreaCompany.setTaxArrears(JSON.parseArray(JSON.toJSONString(taxArrearsList)));
         //保费因素
         yaExtendInfoDto.setAccidentInfoStr(iac.getAccidentStrInfo());
         //评分
@@ -486,24 +583,31 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
 
         //新增费用明细信息
 //        QueryOrderFeeVo queryOrderFeeVo = feeRuleSchemeService.queryFeeOrderInfo(companyId);
+        //查询费用信息
+        InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper<InsFeeOrderNew>()
+                .eq(InsFeeOrderNew::getInsOrderNo, companyId));
 //        orderAndAreaCompany.setOrderCommissionVo(queryOrderFeeVo.getOrderCommissionVo());
 //        orderAndAreaCompany.setAdjustFeeDescVo(queryOrderFeeVo.getAdjustFeeDescVo());
         boolean isShowOrderFee = false;
         //如果是财务菜单进入的,不再进行权限控制,所有都可查看
-        if ("accountingUser".equals(userId)) {
-            isShowOrderFee = true;
-        } else {
-            //判断当前登录人员是否为后线人员,来决定是否返回总费用详情信息
-            List<SysUser> userList = sysUserService.findAllAgentRoleUser(userId, "22");
-            if (userList != null && !userList.isEmpty()) {
-                isShowOrderFee = true;
-            }
-        }
-        if (isShowOrderFee) {
-            List<QueryOrderFeeResultVo> orderFeeVoList = feeRuleSchemeService.convertOrderFeeVoData(null);
-            if (!orderFeeVoList.isEmpty()) {
-                orderAndAreaCompany.setOrderFeeResult(orderFeeVoList);
-            }
+//        if ("accountingUser".equals(userId)) {
+//            isShowOrderFee = true;
+//        } else {
+//            //判断当前登录人员是否为后线人员,来决定是否返回总费用详情信息
+//            List<SysUser> userList = sysUserService.findAllAgentRoleUser(userId, "22");
+//            if (userList != null && !userList.isEmpty()) {
+//                isShowOrderFee = true;
+//            }
+//        }
+//        if (isShowOrderFee) {
+//            List<QueryOrderFeeResultVo> orderFeeVoList = feeRuleSchemeService.convertOrderFeeVoData(queryOrderFeeVo);
+//            if (!orderFeeVoList.isEmpty()) {
+//                orderAndAreaCompany.setOrderFeeResult(orderFeeVoList);
+//            }
+//        }
+        if (!Objects.isNull(insFeeOrderNew)) {
+            List<QueryOrderFeeResultVo> orderFeeVoList = feeRuleSchemeService.convertOrderFeeVoData(insFeeOrderNew);
+            orderAndAreaCompany.setOrderFeeResult(orderFeeVoList);
         }
         //查询费用审核状态
         List<InsFeeAudit> feeAuditList = insFeeAuditService.query().eq("ins_order_no", companyId).list();
@@ -512,77 +616,23 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         }
         //add 解决返回null页面错误  lig 2023-09-14
         if (null == orderAndAreaCompany.getExtendInfo()) orderAndAreaCompany.setExtendInfo("");
-        if (null == orderAndAreaCompany.getCrossInsurance()) orderAndAreaCompany.setCrossInsurance(JSON.parseArray("[]"));
+        if (null == orderAndAreaCompany.getCrossInsurance())
+            orderAndAreaCompany.setCrossInsurance(JSON.parseArray("[]"));
         if (null == orderAndAreaCompany.getKindinfo()) orderAndAreaCompany.setKindinfo(JSON.parseArray("[]"));
         if (null == orderAndAreaCompany.getFeeStatus()) orderAndAreaCompany.setFeeStatus("0");
 
         return HttpResult.ok("success", orderAndAreaCompany);
     }
 
-
     @Override
     public InsOrdersEditingVo revise(String orderNo) {
         InsOrders insOrders = getById(orderNo);
+        List<InsAreaCompany> insAreaCompanyList =
+                insAreaCompanyService.lambdaQuery().eq(InsAreaCompany::getOrderno, orderNo).orderByDesc(InsAreaCompany::getCreatetime).list();
+        insOrders.setInsAreaCompanyList(insAreaCompanyList);
         InsOrdersEditingVo insOrdersEditingVo = new InsOrdersEditingVo();
 
-
         BeanUtils.copyProperties(insOrders, insOrdersEditingVo);
-
-        //获取车辆信息
-        InsOrdersCarInfo insOrdersCarInfo = insOrdersCarInfoService.getById(insOrders.getCarInfoId());
-        insOrdersEditingVo.setCarinfo(insOrdersCarInfo);
-        //获取车主信息
-        InsOrdersCarUserInfo ownerInfo = new InsOrdersCarUserInfo();
-        InsOrdersCarUserInfo applyInfo = new InsOrdersCarUserInfo();
-        InsOrdersCarUserInfo insureInfo = new InsOrdersCarUserInfo();
-        ownerInfo = insOrdersCarUserInfoService.getById(insOrders.getOwnerId());
-        ownerInfo.setGender(ownerInfo.getGender().equals("1") ? "男" : "女");
-        ownerInfo.setIdentifyValidDate(ownerInfo.getIdentifyValidDate().substring(0,10));
-        ownerInfo.setIdentifyValidEndDate(ownerInfo.getIdentifyValidEndDate().substring(0,10));
-        insOrdersEditingVo.setOwnerinfo(ownerInfo);
-
-        //是否同车主
-        if(insOrders.getOwnerId().equals(insOrders.getApplyId())){
-            BeanUtils.copyProperties(ownerInfo, applyInfo);
-            applyInfo.setOwner(true);
-            insOrdersEditingVo.setApplyinfo(applyInfo);
-        }else{
-            //获取投保人信息
-            applyInfo = insOrdersCarUserInfoService.getById(insOrders.getApplyId());
-            applyInfo.setGender(applyInfo.getGender().equals("1") ? "男" : "女");
-            applyInfo.setIdentifyValidDate(ownerInfo.getIdentifyValidDate().substring(0,10));
-            applyInfo.setIdentifyValidEndDate(ownerInfo.getIdentifyValidEndDate().substring(0,10));
-            insOrdersEditingVo.setApplyinfo(applyInfo);
-        }
-
-        //是否同车主
-        if(insOrders.getApplyId().equals(insOrders.getInsureId())) {
-            BeanUtils.copyProperties(applyInfo, insureInfo);
-            insOrdersEditingVo.setInsureinfo(insureInfo);
-            insOrdersEditingVo.getInsureinfo().setInsuranceHolder(true);
-            insOrdersEditingVo.getInsureinfo().setOwner(false);
-        }else if(insOrders.getOwnerId().equals(insOrders.getInsureId())) {
-            insOrdersEditingVo.setInsureinfo(ownerInfo);
-            insOrdersEditingVo.getInsureinfo().setOwner(true);
-        }else{
-            //获取被保人信息
-            insureInfo = insOrdersCarUserInfoService.getById(insOrders.getInsureId());
-            insureInfo.setGender(insureInfo.getGender().equals("1") ? "男" : "女");
-            insureInfo.setIdentifyValidDate(ownerInfo.getIdentifyValidDate().substring(0,10));
-            insureInfo.setIdentifyValidEndDate(ownerInfo.getIdentifyValidEndDate().substring(0,10));
-            insOrdersEditingVo.setInsureinfo(insureInfo);
-
-        }
-
-
-        //获取 risk信息
-        List<InsOrdersRisk> insOrdersRisks = insOrdersRiskService.lambdaQuery().eq(InsOrdersRisk::getOrderNo, orderNo).list();
-        insOrdersEditingVo.setRisk(insOrdersRisks);
-
-        //获取 kind信息
-        List<InsOrdersKind> insOrdersKinds = insOrdersKindService.lambdaQuery().eq(InsOrdersKind::getOrderNo, orderNo).list();
-        insOrdersEditingVo.setKind(insOrdersKinds);
-
         List<InsAreaCompanyQueryDto> insAreaCompanyQueryDtos = insAreaCompanyService.getByOrderNo(orderNo);
         List<InsOrdersEditingVo.InsAreaCompanyEditingDto> insAreaCompanyEditingDtos =
                 insAreaCompanyQueryDtos.stream().map(InsOrdersEditingVo.InsAreaCompanyEditingDto::new).collect(Collectors.toList());
@@ -609,7 +659,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             queryFlag = "queryPayTime";
         }
         policyInsuranceReportReqVo.setQueryFlag(queryFlag);
-        Page<InsOrders> page = new Page<>(policyInsuranceReportReqVo.getPageNum(), policyInsuranceReportReqVo.getPageSize());
+        Page<InsOrders> page = new Page<>(policyInsuranceReportReqVo.getPageNum(),
+                policyInsuranceReportReqVo.getPageSize());
         page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
         Page<PolicyInsuranceReportResVo> policyInsuranceReportResVoPage = baseMapper.getPolicyInsuranceReport(page,
                 policyInsuranceReportReqVo);
@@ -621,7 +672,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     }
 
     @Override
-    public HttpResult<String> exportPolicyInsuranceReport(PolicyInsuranceReportReqVo policyInsuranceReportReqVo, String userId) {
+    public HttpResult<String> exportPolicyInsuranceReport(PolicyInsuranceReportReqVo policyInsuranceReportReqVo,
+                                                          String userId) {
         String queryFlag = "queryPayDate";
         //判断当前登录人员是否为管理人员和财务人员;要求管理人员查询paytime,其他查询paydate
         List<SysUser> userList = sysUserService.findAllAgentRoleUser(userId, "22");
@@ -629,249 +681,22 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
             queryFlag = "queryPayTime";
         }
         policyInsuranceReportReqVo.setQueryFlag(queryFlag);
-        List<PolicyInsuranceReportResVo> policyInsuranceReportResVoPage = baseMapper.getPolicyInsuranceReport(policyInsuranceReportReqVo);
-        String s = EasyExcelUtils.downExcel(uploadFilePath, PolicyInsuranceReportResVo.class, policyInsuranceReportResVoPage);
+        List<PolicyInsuranceReportResVo> policyInsuranceReportResVoPage =
+                baseMapper.getPolicyInsuranceReport(policyInsuranceReportReqVo);
+        String s = EasyExcelUtils.downExcel(uploadFilePath, PolicyInsuranceReportResVo.class,
+                policyInsuranceReportResVoPage);
         return HttpResult.ok("", s);
     }
 
-    @Override
-    @Transactional
-    public void updateInsOrders(InsOrdersBo insOrdersBo) {
-        InsOrders insOrders = new InsOrders(insOrdersBo);
-        //先查找车主信息
-        CarInfoVo carinfo = insOrdersBo.getCarinfo();
-        //是否存在车主信息
-        InsOrdersCarInfo insOrdersCarInfo = insOrdersCarInfoService.getCarInfoByFrameNo(carinfo.getFrameNo());
-        if(Objects.isNull(insOrdersCarInfo)){
-            BeanUtils.copyProperties(carinfo, insOrdersCarInfo);
-            insOrders.setCarInfoId(IdGenerate.nextId());
-            insOrdersCarInfoService.save(insOrdersCarInfo);
-        }else{
-            insOrders.setCarInfoId(insOrdersCarInfo.getId());
-            insOrdersCarInfoService.updateById(insOrdersCarInfo);
-        }
-
-        //更新车主信息
-        CustomerInfoVo ownerinfo = insOrdersBo.getOwnerinfo();
-        InsOrdersCarUserInfo ownerUserInfo = insOrdersCarUserInfoService.getCarUserInfoByIdCard(ownerinfo.getIdentifyNumber());
-        //如果车主信息不存在 添加一条
-        if(Objects.isNull(ownerUserInfo)) {
-            BeanUtils.copyProperties(ownerinfo, ownerUserInfo);
-            ownerUserInfo.setId(IdGenerate.nextId());
-            insOrders.setOwnerId(ownerUserInfo.getId());
-            insOrdersCarUserInfoService.save(ownerUserInfo);
-        }else{
-            insOrders.setOwnerId(ownerUserInfo.getId());
-            insOrdersCarUserInfoService.updateById(ownerUserInfo);
-        }
-
-        //投保人信息和车主是否一致
-        CustomerInfoVo applyinfo = insOrdersBo.getApplyinfo();
-        InsOrdersCarUserInfo applyUserInfo;
-        if(!applyinfo.isOwner()){
-            //查询投保人信息
-            applyUserInfo = insOrdersCarUserInfoService.getCarUserInfoByIdCard(applyinfo.getIdentifyNumber());
-            //投保人信息是否存在
-            if(Objects.isNull(applyUserInfo)){
-                BeanUtils.copyProperties(applyinfo, applyUserInfo);
-                applyUserInfo.setId(IdGenerate.nextId());
-                insOrders.setApplyId(applyUserInfo.getId());
-                insOrdersCarUserInfoService.save(applyUserInfo);
-            }else{
-                insOrders.setApplyId(applyUserInfo.getId());
-                insOrdersCarUserInfoService.updateById(applyUserInfo);
-            }
-        }else{
-            insOrders.setApplyId(ownerUserInfo.getId());
-            applyUserInfo = ownerUserInfo;
-        }
-
-        //更新被保人信息
-        CustomerInfoVo insureInfo = insOrdersBo.getInsureinfo();
-        if(insureInfo.isOwner() || insureInfo.isInsuranceHolder()){
-            if(insureInfo.isOwner()){
-                insOrders.setInsureId(ownerUserInfo.getId());
-            }
-            if(insureInfo.isInsuranceHolder()){
-                insOrders.setInsureId(applyUserInfo.getId());
-            }
-        }else{
-            //查询被保人信息
-            InsOrdersCarUserInfo insureUserInfo = insOrdersCarUserInfoService.getCarUserInfoByIdCard(insureInfo.getIdentifyNumber());
-            //被保人信息是否存在
-            if(Objects.isNull(insureUserInfo)){
-                BeanUtils.copyProperties(insureInfo, insureUserInfo);
-                insureUserInfo.setId(IdGenerate.nextId());
-                insOrders.setInsureId(insureUserInfo.getId());
-                insOrdersCarUserInfoService.save(insureUserInfo);
-            }else{
-                insOrders.setInsureId(insureUserInfo.getId());
-                insOrdersCarUserInfoService.updateById(insureUserInfo);
-            }
-        }
-
-        //更新risk
-        List<RiskInfoVo> riskInfoVos = insOrdersBo.getRisk();
-        List<InsOrdersRisk> insOrdersRisks = new ArrayList<>();
-        riskInfoVos.forEach(riskInfoVo -> {
-            InsOrdersRisk insOrdersRisk = new InsOrdersRisk(riskInfoVo,insOrders.getOrderno());
-            insOrdersRisks.add(insOrdersRisk);
-        });
-        insOrdersRiskService.remove(new LambdaQueryWrapper<InsOrdersRisk>().eq(InsOrdersRisk::getOrderNo,insOrders.getOrderno()));
-        insOrdersRiskService.saveOrUpdateBatch(insOrdersRisks);
-
-        //更新kind
-        List<KindInfoVo> kindInfoVos = insOrdersBo.getKing();
-        List<InsOrdersKind> insOrdersKinds = new ArrayList<>();
-        kindInfoVos.forEach(kindInfoVo -> {
-            InsOrdersKind insOrdersKind = new InsOrdersKind(kindInfoVo,insOrders.getOrderno());
-            insOrdersKinds.add(insOrdersKind);
-        });
-        insOrdersKindService.remove(new LambdaQueryWrapper<InsOrdersKind>().eq(InsOrdersKind::getOrderNo,insOrders.getOrderno()));
-        insOrdersKindService.saveOrUpdateBatch(insOrdersKinds);
-
-        //更新 tax
-        VehicleAndVesselTax vehicleAndVesselTax = insOrdersBo.getVehicleAndVesselTax();
-        InsOrdersTax insOrdersTax = new InsOrdersTax(insOrders.getOrderno(), vehicleAndVesselTax);
-        insOrdersTaxService.remove(new LambdaQueryWrapper<InsOrdersTax>().eq(InsOrdersTax::getOrderNo,insOrders.getOrderno()));
-        insOrdersTaxService.saveOrUpdate(insOrdersTax);
-
-        insOrdersService.saveOrUpdate(insOrders);
-    }
-
-
-
-
-    @Override
-    public InsOrdersBo queryInsOrders(String orderNo) {
-        InsOrdersBo insOrdersBo = new InsOrdersBo();
-        InsOrders insOrders = baseMapper.selectById(orderNo);
-        if(insOrders == null){
-            return null;
-        }
-        BeanUtils.copyProperties(insOrders,insOrdersBo);
-        List<String> originalList = new ArrayList<>();
-        originalList.add(insOrders.getOwnerId());
-        originalList.add(insOrders.getApplyId());
-        originalList.add(insOrders.getInsureId());
-        //车主id去重
-        List<String> uniqueList = originalList.stream()
-                .distinct()
-                .collect(Collectors.toList());
-
-        List<InsOrdersCarUserInfo> insOrdersCarUserInfos = insOrdersCarUserInfoService.listByIds(uniqueList);
-        //设置车主信息
-        insOrdersBo.setCarUserInfo(insOrders, insOrdersCarUserInfos);
-        //获取车辆信息
-        InsOrdersCarInfo insOrdersCarInfo = insOrdersCarInfoService.getById(insOrders.getCarInfoId());
-        insOrdersBo.setCarAllInfo(insOrdersCarInfo);
-        return insOrdersBo;
-
-    }
-
-
-    @Autowired
-    private InsOrdersCustomerService insOrdersCustomerService;
-
-    @Autowired
-    private InsOrdersKindService insOrdersKindService;
-
-    @Autowired
-    private InsOrdersRiskService insOrdersRiskService;
-
-    @Autowired
-    private InsOrdersTaxService InsOrdersTaxService;
 
     @Override
     @Transactional
-    public boolean saveAndTrajectories(InsOrdersBo insOrdersBo) {
-        // 订单信息
-        InsOrders insOrders = new InsOrders(insOrdersBo);
-        final String orderNo = insOrders.getOrderno();
-        // 1 车辆信息
-        // 是否存在车辆信息
-        if(!insOrdersCarInfoService.isExist(insOrdersBo.getCarinfo().getLicenseNo())){
-            CarInfoVo carinfo = insOrdersBo.getCarinfo();
-            InsOrdersCarInfo insOrdersCarInfo = new InsOrdersCarInfo();
-            BeanUtils.copyProperties(carinfo, insOrdersCarInfo);
-            insOrdersCarInfo.setId(IdGenerate.nextId());
-            insOrdersCarInfoService.save(insOrdersCarInfo);
-            insOrders.setCarInfoId(insOrdersCarInfo.getId());
-        }else{
-            InsOrdersCarInfo insOrdersCarInfo = insOrdersCarInfoService.getCarInfoByFrameNo(insOrdersBo.getCarinfo().getFrameNo());
-            insOrders.setCarInfoId(insOrdersCarInfo.getId());
-        }
-
-        // 2 人员信息
-
-        // 车主信息
-        CustomerInfoVo ownerInfo = insOrdersBo.getOwnerinfo();
-        //检查是否存在车主信息
-        if(insOrdersCarUserInfoService.isExist(ownerInfo.getIdentifyNumber())){
-            InsOrdersCarUserInfo carUserInfoByIdCard = insOrdersCarUserInfoService.getCarUserInfoByIdCard(ownerInfo.getIdentifyNumber());
-            insOrders.setOwnerId(carUserInfoByIdCard.getId());
-        }else{
-            //保存车主信息
-            InsOrdersCarUserInfo insOrdersCarUserInfo = new InsOrdersCarUserInfo();
-            BeanUtils.copyProperties(ownerInfo, insOrdersCarUserInfo);
-            insOrdersCarUserInfo.setId(IdGenerate.nextId());
-            insOrdersCarUserInfoService.save(insOrdersCarUserInfo);
-            insOrders.setOwnerId(insOrdersCarUserInfo.getId());
-        }
-        // 投保人信息
-        CustomerInfoVo applyInfo = insOrdersBo.getApplyinfo();
-        if(!applyInfo.isOwner()){
-            //检查是否存在投保人信息
-            if(insOrdersCarUserInfoService.isExist(applyInfo.getIdentifyNumber())){
-                InsOrdersCarUserInfo carUserInfoByIdCard = insOrdersCarUserInfoService.getCarUserInfoByIdCard(applyInfo.getIdentifyNumber());
-                insOrders.setApplyId(carUserInfoByIdCard.getId());
-            }else{
-                //保存投保人信息
-                InsOrdersCarUserInfo insOrdersCarUserInfo = new InsOrdersCarUserInfo();
-                BeanUtils.copyProperties(applyInfo, insOrdersCarUserInfo);
-                insOrdersCarUserInfo.setId(IdGenerate.nextId());
-                insOrdersCarUserInfoService.save(insOrdersCarUserInfo);
-                insOrders.setApplyId(insOrdersCarUserInfo.getId());
-            }
-        }else{
-            insOrders.setApplyId(insOrders.getOwnerId());
-        }
-        // 被保人信息
-        CustomerInfoVo insureInfo = insOrdersBo.getInsureinfo();
-        if(!insureInfo.isOwner() && !insureInfo.isInsuranceHolder()){
-            //检查是否存在被保人信息
-            if(insOrdersCarUserInfoService.isExist(insureInfo.getIdentifyNumber())){
-                InsOrdersCarUserInfo carUserInfoByIdCard = insOrdersCarUserInfoService.getCarUserInfoByIdCard(insureInfo.getIdentifyNumber());
-                insOrders.setInsureId(carUserInfoByIdCard.getId());
-            }else{
-                //保存被保人信息
-                InsOrdersCarUserInfo insOrdersCarUserInfo = new InsOrdersCarUserInfo();
-                BeanUtils.copyProperties(insureInfo, insOrdersCarUserInfo);
-                insOrdersCarUserInfo.setId(IdGenerate.nextId());
-                insOrdersCarUserInfoService.save(insOrdersCarUserInfo);
-                insOrders.setInsureId(insOrdersCarUserInfo.getId());
-            }
-        }else{
-            insOrders.setInsureId(insOrders.getOwnerId());
-        }
-
-        // 3 车船税信息
-        VehicleAndVesselTax vehicleAndVesselTax = insOrdersBo.getVehicleAndVesselTax();
-        InsOrdersTax insOrdersTax = new InsOrdersTax(orderNo, vehicleAndVesselTax);
-        InsOrdersTaxService.save(insOrdersTax);
-        // 4 交强商业信息表
-        List<KindInfoVo> kind = insOrdersBo.getKing();
-        List<InsOrdersKind> kindList = InsOrdersKind.buildKindList(orderNo, kind);
-        insOrdersKindService.saveBatch(kindList);
-        // 5 商业险险种信息
-        List<RiskInfoVo> risk = insOrdersBo.getRisk();
-        List<InsOrdersRisk> riskList = InsOrdersRisk.buildRiskList(orderNo, risk);
-        insOrdersRiskService.saveBatch(riskList);
+    public boolean saveAndTrajectories(InsOrders insOrders) {
+        this.baseMapper.insert(insOrders);
         SaSession saSession = StpUtil.getSessionByLoginId(StpUtil.getLoginId());
         SysUser sysUser = (SysUser) saSession.get(SaSession.USER);
         final InsOrdersTrack insOrdersTrack = new InsOrdersTrack(insOrders, sysUser.getId(), sysUser.getName());
         insOrdersTrackService.save(insOrdersTrack);
-        this.baseMapper.insert(insOrders);
         return true;
     }
 

+ 46 - 0
src/main/java/com/ydtech/modules/order/service/impl/PingAnOrderApiServiceImpl.java

@@ -1,23 +1,69 @@
 package com.ydtech.modules.order.service.impl;
 
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
 import com.ydtech.modules.ins.model.vo.QuoteRespVo;
+import com.ydtech.modules.order.components.ConfigureParametersComponents;
+import com.ydtech.modules.order.components.pingan.PinganRequestApiComponents;
+import com.ydtech.modules.order.entity.api.pingan.request.CarConfirmRequest;
+import com.ydtech.modules.order.entity.api.pingan.request.IndexRequest;
+import com.ydtech.modules.order.entity.api.pingan.request.SearchPAVehicleListRequest;
+import com.ydtech.modules.order.entity.api.pingan.response.CarConfirmResponse;
+import com.ydtech.modules.order.entity.api.pingan.response.IndexResponse;
+import com.ydtech.modules.order.entity.api.pingan.response.SearchPAVehicleListResponse;
+import com.ydtech.modules.order.entity.config.PingAnConfigureParameters;
 import com.ydtech.modules.order.entity.crawler.vo.CrawlerPolicyPrintVo;
 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;
 import com.ydtech.modules.order.service.PingAnOrderApiService;
+import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
+import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
 
 
 @Service
+@RequiredArgsConstructor
 public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
 
+    private final PinganRequestApiComponents pinganRequestApiComponents;
+
+    private final PtlAgreementAttributionService ptlAgreementAttributionService;
+
+    private final ConfigureParametersComponents configureParametersComponents;
+
 
     @Override
     public HttpResult<QuoteRespVo> quote(BaseQuoteInfoVo quoteInfo, BaseQuoteVo<List<BoHaiQuoteAccidentVo>> quoteVo) {
+        // 协议id获取配置实体
+        String agreementId = quoteVo.getAgreementId();
+        // 账号信息
+        PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(agreementId);
+        // 通过 协议id获取配置实体
+        PingAnConfigureParameters parameters = configureParametersComponents.toEntity(PingAnConfigureParameters.class,
+                ptlAgreementAttribution);
+        // 车型查询
+        CarInfoVo carInfo = quoteInfo.getCarInfo();
+
+        // 1. 标的信息
+        IndexRequest indexRequest = new IndexRequest(parameters, carInfo);
+        IndexResponse indexResponse = pinganRequestApiComponents.index(indexRequest);
+        String flowid = indexResponse.getFlowid();
+
+
+        // 2. 车型查询
+        SearchPAVehicleListRequest searchPAVehicleListRequest = new SearchPAVehicleListRequest(parameters.getUserId(),
+                carInfo.getModelcname(), flowid);
+        SearchPAVehicleListResponse.ModelsDto modelsDto = pinganRequestApiComponents.searchPAVehicle(searchPAVehicleListRequest, carInfo);
+
+        // 2. 车辆信息确认
+        CarConfirmRequest carConfirmRequest = new CarConfirmRequest(parameters, quoteInfo, modelsDto);
+        CarConfirmResponse carConfirmResponse = pinganRequestApiComponents.carConfirm(carConfirmRequest);
+
+
         return null;
     }
 

+ 7 - 0
src/main/java/com/ydtech/modules/ser/model/SerAnnualAuditOrder.java

@@ -81,6 +81,13 @@ public class SerAnnualAuditOrder implements Serializable {
     @ApiModelProperty(value = "服务价格")
     private Double servicePrice;
 
+    /**
+     * 订单状态
+     */
+    @TableField(value = "order_status")
+    @ApiModelProperty(value = "订单状态")
+    private String orderStatus;
+
     /**
      * 创建时间
      */

+ 7 - 0
src/main/java/com/ydtech/modules/ser/model/vo/SerAnnualAuditOrderQueryVo.java

@@ -78,6 +78,13 @@ public class SerAnnualAuditOrderQueryVo extends PageRequest implements Serializa
     @ApiModelProperty(value = "服务价格")
     private Double servicePrice;
 
+    /**
+     * 订单状态
+     */
+    @TableField(value = "order_status")
+    @ApiModelProperty(value = "订单状态")
+    private String orderStatus;
+
     /**
      * 创建时间
      */

+ 3 - 0
src/main/java/com/ydtech/modules/ser/service/impl/SerAnnualAuditOrderServiceImpl.java

@@ -25,6 +25,9 @@ public class SerAnnualAuditOrderServiceImpl implements SerAnnualAuditOrderServic
         serAnnualAuditOrder.setId(IdGenerate.nextId());
         LocalDateTime date = LocalDateTime.now();
         serAnnualAuditOrder.setCreateTime(date);
+        serAnnualAuditOrder.setTestPriceNotIncluded(150.00);
+        serAnnualAuditOrder.setServicePrice(150.00);
+        serAnnualAuditOrder.setOrderStatus("待支付");
         serAnnualAuditOrderMapper.insert(serAnnualAuditOrder);
         return HttpResult.ok("订单生成成功", serAnnualAuditOrder);
     }

+ 13 - 0
src/main/java/com/ydtech/utils/baidu/Idcard.java

@@ -121,6 +121,15 @@ public class Idcard {
         }
     }
 
+    public static void conversionFront(CustomerInfoVO customerInfo, CustomerInfoVO customerInfoNew) {
+        customerInfo.setName(customerInfoNew.getName());
+        customerInfo.setIdentifyNumber(customerInfoNew.getIdentifyNumber());
+        customerInfo.setAddr(customerInfoNew.getAddr());
+        customerInfo.setIdentifyType(customerInfoNew.getIdentifyType());
+        customerInfo.setIdentifyIssuedCom(customerInfoNew.getIdentifyIssuedCom());
+    }
+
+
     public static void getIdCardBack(String images, CustomerInfoVO customerInfo) {
         if (StringUtils.isEmpty(images)) {
             return;
@@ -135,5 +144,9 @@ public class Idcard {
         }
     }
 
+    public static void conversionBack(CustomerInfoVO customerInfo, CustomerInfoVO customerInfoNew) {
+        customerInfo.setIdentifyValidDate(customerInfoNew.getName());
+        customerInfo.setIdentifyValidEndDate(customerInfoNew.getIdentifyValidEndDate());
+    }
 
 }

+ 24 - 0
src/main/java/com/ydtech/utils/baidu/MultiObjectDetect.java

@@ -173,6 +173,22 @@ public class MultiObjectDetect {
         }
     }
 
+    public static void conversionFront(CardUserInfo cardUserInfo, CardUserInfo cardUserInfoNew){
+        cardUserInfo.setVIN(cardUserInfoNew.getVIN());
+        cardUserInfo.setIssueDate(cardUserInfoNew.getIssueDate());
+        cardUserInfo.setCategory(cardUserInfoNew.getCategory());
+        cardUserInfo.setPlateType(cardUserInfoNew.getPlateType());
+        cardUserInfo.setVehicleUse(cardUserInfoNew.getVehicleUse());
+        cardUserInfo.setUseNature(cardUserInfoNew.getUseNature());
+        cardUserInfo.setMotorUsageTypeCode(cardUserInfoNew.getMotorUsageTypeCode());
+        cardUserInfo.setMotorTypeCode(cardUserInfoNew.getMotorTypeCode());
+        cardUserInfo.setRegisterDate(cardUserInfoNew.getRegisterDate());
+        cardUserInfo.setEngine(cardUserInfoNew.getEngine());
+        cardUserInfo.setPlateNo(cardUserInfoNew.getPlateNo());
+        cardUserInfo.setBackOcrID(cardUserInfoNew.getBackOcrID());
+        cardUserInfo.setCarOwner(cardUserInfoNew.getCarOwner());
+    }
+
 
     /**
      * 行驶证背面
@@ -196,4 +212,12 @@ public class MultiObjectDetect {
         }
 
     }
+
+    public static void conversionBack(CardUserInfo cardUserInfo, CardUserInfo cardUserInfoNew){
+        cardUserInfo.setGrossMass(cardUserInfoNew.getGrossMass());
+        cardUserInfo.setApprovedPassengersCapacity(cardUserInfoNew.getApprovedPassengersCapacity());
+        cardUserInfo.setUnladenMass(cardUserInfoNew.getUnladenMass());
+        cardUserInfo.setLimitLoad(cardUserInfoNew.getLimitLoad());
+    }
+
 }

+ 2 - 0
src/main/resources/mapper/modules/order/InsOrdersMapper.xml

@@ -119,6 +119,7 @@
         <result property="score" column="score" jdbcType="VARCHAR"/>
         <result property="ownerInfo" column="ownerinfo" javaType="com.alibaba.fastjson.JSONObject"  typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" jdbcType="VARCHAR"/>
         <result property="jqpRemIum" column="jqpremium" jdbcType="VARCHAR"/>
+        <result property="apiType" column="api_type" jdbcType="VARCHAR"/>
         <result property="jqPolicyno" column="jqpolicyno" jdbcType="VARCHAR"/>
         <result property="sypRemIum" column="sypremium" jdbcType="VARCHAR"/>
         <result property="syPolicyno" column="sypolicyno" jdbcType="VARCHAR"/>
@@ -351,6 +352,7 @@
         a.licenseno,
         a.frameno,
         a.carinfo,
+        b.api_type,
         b.score,
         a.ownerinfo,
         b.jqpremium,