Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

wks 1 год назад
Родитель
Сommit
709572bd97
33 измененных файлов с 1050 добавлено и 146 удалено
  1. 23 0
      commons/src/main/java/com/jzg/commons/entity/console/dto/TestDto.java
  2. 7 0
      commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/InsuranceUploadImageVo.java
  3. 128 0
      consoleStatistics/pom.xml
  4. 20 0
      consoleStatistics/src/main/java/com/jzg/console/ConsoleApplication.java
  5. 36 0
      consoleStatistics/src/main/java/com/jzg/console/controller/TestController.java
  6. 19 0
      consoleStatistics/src/main/java/com/jzg/console/mapper/TestMapper.java
  7. 16 0
      consoleStatistics/src/main/java/com/jzg/console/service/TestService.java
  8. 36 0
      consoleStatistics/src/main/java/com/jzg/console/service/impl/TestServiceImpl.java
  9. 36 0
      consoleStatistics/src/main/resources/application-dev.yml
  10. 36 0
      consoleStatistics/src/main/resources/application-test.yml
  11. 89 0
      consoleStatistics/src/main/resources/application.yml
  12. 7 0
      consoleStatistics/src/main/resources/mapper/TestMapper.xml
  13. 6 0
      gateway/src/main/resources/application-dev.yml
  14. 1 0
      pom.xml
  15. 32 10
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java
  16. 13 27
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/DateUtil.java
  17. 34 19
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/build/HbCrawlerQuoteResultVoBuild.java
  18. 41 11
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/component/HengBangCrawlerRequestComponent.java
  19. 3 1
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/constant/enums/RequestUrl.java
  20. 2 1
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/entity/request/HbCrawlerCalculationRequest.java
  21. 14 8
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/entity/request/HbCrawlerFileUploadRequest.java
  22. 4 1
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/entity/request/HbCrawlerQuoteimmediatelyRequest.java
  23. 128 26
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/service/Impl/HengBangCrawlerRequestImpl.java
  24. 7 2
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  25. 8 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerCacheComponent.java
  26. 17 11
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerRequestComponent.java
  27. 2 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/constant/ZhongAnRequestConstant.java
  28. 2 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/constant/enums/RequestUrl.java
  29. 56 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerPolicyListRequest.java
  30. 10 3
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerUploadImageRequest.java
  31. 61 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/response/ZhongAnCrawlerPaymentResponse.java
  32. 104 0
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/response/ZhongAnCrawlerPolicyListResponse.java
  33. 52 26
      tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/service/Impl/ZhongAnCrawlerRequestImpl.java

+ 23 - 0
commons/src/main/java/com/jzg/commons/entity/console/dto/TestDto.java

@@ -0,0 +1,23 @@
+package com.jzg.commons.entity.console.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/9/12 15:40
+ *  @Description: 测试类
+ */
+@Data
+@Schema(description = "测试类")
+public class TestDto implements Serializable {
+
+    @Schema(description = "id")
+    private String id;
+
+    @Schema(description = "名称")
+    private String name;
+}

+ 7 - 0
commons/src/main/java/com/jzg/commons/entity/quote/vo/aggregated/InsuranceUploadImageVo.java

@@ -1,5 +1,7 @@
 package com.jzg.commons.entity.quote.vo.aggregated;
 
+import com.jzg.commons.entity.orders.po.InsOrdersCarInfo;
+import com.jzg.commons.entity.orders.po.InsOrdersCarUserInfo;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.base.OrderBase;
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
@@ -39,6 +41,11 @@ public class InsuranceUploadImageVo implements Serializable {
      */
     private CarInfoVo carInfo;
 
+    /**
+     * 订单车辆人员信息
+     */
+    private List<InsOrdersCarUserInfo> insOrdersCarUserInfoList;
+
     public InsuranceUploadImageVo(OrderBase order, List<InsuranceImageVo> imageVoList) {
         this.order = order;
         this.imageVoList = imageVoList;

+ 128 - 0
consoleStatistics/pom.xml

@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.jzg</groupId>
+        <artifactId>jzg</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>com.jzg</groupId>
+    <artifactId>consoleStatistics</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-extension</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.jzg</groupId>
+            <artifactId>commons</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.rocketmq</groupId>
+            <artifactId>rocketmq-spring-boot-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.jzg</groupId>
+            <artifactId>rocketmq</artifactId>
+        </dependency>
+
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>repackage</id>
+                        <phase>none</phase>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                            <overWriteReleases>false</overWriteReleases>
+                            <overWriteSnapshots>false</overWriteSnapshots>
+                            <overWriteIfNewer>true</overWriteIfNewer>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            <classpathPrefix>lib/</classpathPrefix>
+                            <mainClass>com.jzg.ConsoleApplication</mainClass> <!-- 替换为你的主类 -->
+                            <useUniqueVersions>false</useUniqueVersions>
+                        </manifest>
+                        <manifestEntries>
+                            <Class-Path>config/</Class-Path>
+                        </manifestEntries>
+                    </archive>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <version>3.1.0</version>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 20 - 0
consoleStatistics/src/main/java/com/jzg/console/ConsoleApplication.java

@@ -0,0 +1,20 @@
+package com.jzg.console;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+@EnableFeignClients
+@ComponentScan(basePackages = {"com.jzg.commons","com.jzg.console"})
+@MapperScan({"com.jzg.console.mapper","com.jzg.commons.mapper"})
+public class ConsoleApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(ConsoleApplication.class, args);
+    }
+
+}

+ 36 - 0
consoleStatistics/src/main/java/com/jzg/console/controller/TestController.java

@@ -0,0 +1,36 @@
+package com.jzg.console.controller;
+
+import com.jzg.commons.core.base.BaseController;
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.console.service.TestService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/9/12 15:30
+ *  @Description: 添加控制台的测试接口
+ */
+@Slf4j
+@Tag(name="控制台测试接口")
+@RestController
+@RequestMapping("/console/test")
+public class TestController  extends BaseController {
+
+    @Autowired
+    private  TestService testService;
+
+
+    @GetMapping("/getList")
+    @Operation(summary = "测试控制台接口",
+            description = "测试控制台接口")
+    public HttpResult<?> getList() {
+        return testService.getAllList();
+    }
+}

+ 19 - 0
consoleStatistics/src/main/java/com/jzg/console/mapper/TestMapper.java

@@ -0,0 +1,19 @@
+package com.jzg.console.mapper;
+
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.console.dto.TestDto;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface TestMapper {
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/9/12 15:38
+     *  @Description: 测试方法
+     */
+    List<TestDto> getAllList();
+}

+ 16 - 0
consoleStatistics/src/main/java/com/jzg/console/service/TestService.java

@@ -0,0 +1,16 @@
+package com.jzg.console.service;
+
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.console.dto.TestDto;
+
+import java.util.List;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/9/12 15:34
+ *  @Description:  控制台测试方法
+ */
+public interface TestService {
+    HttpResult<List<TestDto>> getAllList();
+}

+ 36 - 0
consoleStatistics/src/main/java/com/jzg/console/service/impl/TestServiceImpl.java

@@ -0,0 +1,36 @@
+package com.jzg.console.service.impl;
+
+import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.console.dto.TestDto;
+import com.jzg.console.mapper.TestMapper;
+import com.jzg.console.service.TestService;
+import lombok.extern.slf4j.Slf4j;
+import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/9/12 15:34
+ *  @Description:  控制台测试方法
+ */
+@Slf4j
+@Service
+public class TestServiceImpl implements TestService {
+
+    @Autowired
+    private TestMapper testMapper;
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/9/12 15:37
+     *  @Description: 控制台测试类
+     */
+    @Override
+    public HttpResult<List<TestDto>> getAllList() {
+        return HttpResult.ok(testMapper.getAllList());
+    }
+}

+ 36 - 0
consoleStatistics/src/main/resources/application-dev.yml

@@ -0,0 +1,36 @@
+server:
+  port: 8086
+spring:
+  cloud:
+    nacos:
+      server-addr: 192.168.0.250:8848
+      username: nacos
+      password: nacos
+      config:
+        file-extension: yaml
+        namespace: 1096345e-2a2d-4307-8025-ee1b669e127b
+        group: DEFAULT_GROUP
+      discovery:
+        namespace: 1096345e-2a2d-4307-8025-ee1b669e127b
+  config:
+    import:
+      - nacos:mysql
+      - nacos:redisson
+      - nacos:minio
+      - nacos:rocketmq
+      - nacos:mongodb
+config:
+  sso: 1
+
+#银联API参数配置
+unionPay:
+  api:
+    appId: 10037e6f8e41423b01912b657e5c116c
+    appKey: 1110043747cb40f4911096480ea93f3e
+    accessTokenUrl: https://test-api-open.chinaums.com/v2/token/access
+    twoFactorVerifyUrl: https://test-api-open.chinaums.com/v1/datacenter/smartverification/encrypted/mobile/2factor/verify
+    threeFactorVerifyUrl: https://test-api-open.chinaums.com/v1/datacenter/smartverification/encrypted/mobile/3factor/verify
+    bankCardVerifyUrl: https://test-api-open.chinaums.com/v1/datacenter/smartverification/encrypted/bankcard/verify
+    publicKey: 0414bb7e9c3914bb65b85079b1dc6e1ca2a0ee04dd9bb55b2f8d31704a6dec0cca695739e128f9c931330e1c0f493be4d56244236434c9d344c4716ba64a4470ba
+    privateKey: 24ebfde60aecb81214605050763926ec342c487859a8da57d5badcd3c1559336
+

+ 36 - 0
consoleStatistics/src/main/resources/application-test.yml

@@ -0,0 +1,36 @@
+server:
+  port: 9084
+spring:
+  cloud:
+    nacos:
+      server-addr: 172.24.144.223:8848
+      username: nacos
+      password: nacos
+      config:
+        file-extension: yaml
+        namespace: bb8f915c-82b0-4f0d-9e9e-03aa629f2d45
+        group: DEFAULT_GROUP
+      discovery:
+        namespace: bb8f915c-82b0-4f0d-9e9e-03aa629f2d45
+  config:
+    import:
+      - nacos:mysql
+      - nacos:redisson
+      - nacos:minio
+      - nacos:rocketmq
+      - nacos:mongodb
+config:
+  sso: 1
+
+
+#银联API参数配置
+unionPay:
+  api:
+    appId: 8a81c1be8fc4b72501912b65f4bf093a
+    appKey: 43c2fc71b43740539c6c32370e12c7fd
+    accessTokenUrl: https://api-mop.chinaums.com/v2/token/access
+    twoFactorVerifyUrl: https://api-mop.chinaums.com/v1/datacenter/smartverification/encrypted/mobile/2factor/verify
+    threeFactorVerifyUrl: https://api-mop.chinaums.com/v1/datacenter/smartverification/encrypted/mobile/3factor/verify
+    bankCardVerifyUrl: https://api-mop.chinaums.com/v1/datacenter/smartverification/encrypted/bankcard/verify
+    publicKey: 0414bb7e9c3914bb65b85079b1dc6e1ca2a0ee04dd9bb55b2f8d31704a6dec0cca695739e128f9c931330e1c0f493be4d56244236434c9d344c4716ba64a4470ba
+    privateKey: 24ebfde60aecb81214605050763926ec342c487859a8da57d5badcd3c1559336

+ 89 - 0
consoleStatistics/src/main/resources/application.yml

@@ -0,0 +1,89 @@
+spring:
+  application:
+    name: jzg-console
+  main:
+    allow-circular-references: true
+    allow-bean-definition-overriding: true
+  profiles:
+    active: dev
+
+mybatis-plus:
+  mapper-locations: classpath*:/mapper/*Mapper.xml
+  global-config:
+    db-config:
+      logic-delete-field: is_delete
+      logic-delete-value: 1
+      logic-not-delete-value: 0
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+
+#多租户配置
+tenant:
+  enable: true
+  column: system_code
+  filterTables:
+  ignoreTables:
+    - sys_system
+    - sys_role_perms
+    - sys_area
+    - sys_dict
+    - sys_dict_type
+    - sys_user
+    - sys_user_jzg_info_bank_card
+    - sys_user_role
+    - sys_user_jzg_info_file
+    - sys_organization_user_link
+    - sys_upload_files
+    - sys_config
+    - sys_activity
+    - sys_activity_award
+    - sys_activity_dept
+    - sys_activity_record
+    - sys_poster_org
+    - sys_message_template
+    - sys_message_user
+    - sys_notice_user
+    - ptl_scheme_info
+    - ptl_scheme_insurance
+    - ptl_scheme_insurance_driving_intention
+    - ins_business_insurance_option
+    - ins_business_insurance
+    - ptl_agreement_attribution
+    - ptl_agreement_dept
+    - ptl_agreement_undwrt_rules_attr
+    - ptl_agreement_undwrt_rules_dict_labal
+    - ptl_area_license
+    - ptl_agreement_undwrt_rules
+    - ptl_agreement_undwrt_rules_attr_link
+    - ptl_scheme_rules_attr_link
+    - esm_ins_company
+    - qr_barcode_config
+    - jyx_config
+    - sys_user_jzg_app
+    - sys_dept
+    - sys_user_jzg_info_salesman
+    - dept_tree
+    - dept_path
+    - ptl_agreement_cost_type
+    - ins_orders
+    - ins_fee_orders
+    - ins_orders_costs
+    - ins_orders_car_info
+    - ins_orders_policy
+    - sys_relation_person
+    - sys_user_account
+
+
+  ignoreLoginNames:
+
+data-scope:
+  tables:
+    - sys_user_jzg_info
+
+  ignoreFunction:
+    - getAuditedOrder
+
+
+logging:
+  level:
+    org.springframework.statemachine: DEBUG

+ 7 - 0
consoleStatistics/src/main/resources/mapper/TestMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jzg.console.mapper.TestMapper">
+    <select id="getAllList" resultType="com.jzg.commons.entity.console.dto.TestDto">
+        select id as id,label as name from ins_business_insurance_option
+    </select>
+</mapper>

+ 6 - 0
gateway/src/main/resources/application-dev.yml

@@ -44,3 +44,9 @@ spring:
           uri: http://localhost:8085/
           predicates:
             - Path=/validate/**
+
+        #控制台添加网关
+        - id: console_route
+          uri: http://localhost:8086/
+          predicates:
+            - Path=/console/**

+ 1 - 0
pom.xml

@@ -12,6 +12,7 @@
     <module>platform</module>
     <module>tenant</module>
     <module>rocketmq</module>
+    <module>consoleStatistics</module>
   </modules>
   <packaging>pom</packaging>
 

+ 32 - 10
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java

@@ -10,13 +10,12 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.core.ParameterizedTypeReference;
 import org.springframework.core.io.buffer.DataBuffer;
 import org.springframework.core.io.buffer.DataBufferUtils;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
+import org.springframework.http.*;
 import org.springframework.stereotype.Component;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.reactive.function.BodyInserters;
 import org.springframework.web.reactive.function.client.WebClient;
+import org.springframework.web.reactive.function.client.WebClientResponseException;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
@@ -241,13 +240,20 @@ public class RequestComponent {
         }
         body = Optional.ofNullable(body).orElse("");
         WebClient webClient = selectWebClient(url);
-        return webClient.post()
-                .uri(url)
-                .headers(setHeaders(headers))
-                .body(BodyInserters.fromValue(body))
-                .retrieve()
-                .toEntity(responseClass)
-                .block();
+        try {
+            return webClient.post()
+                    .uri(url)
+                    .headers(setHeaders(headers))
+                    .body(BodyInserters.fromValue(body))
+                    .retrieve()
+                    .toEntity(responseClass)
+                    .block();
+        }catch (WebClientResponseException e) {
+            // 如果服务端返回非2xx状态码
+            System.err.println("状态码: " + e.getRawStatusCode());
+            System.err.println("响应体: " + e.getResponseBodyAsString());
+            throw e;
+        }
     }
 
     /**
@@ -371,6 +377,22 @@ public class RequestComponent {
 
 
 
+        return webClient.post()
+                .uri(url)
+                .headers(RequestComponent.setHeaders(headers))
+                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
+                .body(BodyInserters.fromMultipartData(parts))
+                .retrieve()
+                .toEntity(responseClass).doOnNext(responseBody -> System.out.println("响应内容: " + responseBody.getBody()))
+                .block();
+    }
+
+    public <Response> ResponseEntity<Response> formDataZhongAn(String url, Object body, Class<Response> responseClass, HttpHeaders headers) {
+        MultiValueMap<String, Object> multiValueMap = RequestObjectConversion.convertMultiValueMap(body);
+        return formDatazhongan1(url, multiValueMap, responseClass, headers);
+    }
+    public <Response> ResponseEntity<Response> formDatazhongan1(String url, MultiValueMap<String, Object> parts, Class<Response> responseClass, HttpHeaders headers) {
+
         return webClient.post()
                 .uri(url)
                 .headers(RequestComponent.setHeaders(headers))

+ 13 - 27
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/DateUtil.java

@@ -402,38 +402,24 @@ public class DateUtil {
         return newDateStr;
     }
 
-    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-    private static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-    private static final DateTimeFormatter OUTPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX");
+    private static final DateTimeFormatter INPUT_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+    private static final DateTimeFormatter OUTPUT_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
 
     /**
-     * 将 yyyy-MM-dd 转换为 UTC 时间字符串 (带毫秒 + Z)
-     * @param dateStr yyyy-MM-dd 格式字符串
-     * @param hour 小时
-     * @param minute 分钟
-     * @return UTC 时间字符串,例如:2025-08-20T16:00:00.000Z
+     * 将北京时间(yyyy-MM-dd HH:mm:ss)转换为UTC时间(ISO8601格式)
      */
-    public static String toUtc(String dateStr, int hour, int minute) {
-        LocalDate localDate = LocalDate.parse(dateStr, DATE_FORMATTER);
-        LocalDateTime localDateTime = localDate.atTime(hour, minute, 0);
-        Instant instant = localDateTime.toInstant(ZoneOffset.UTC);
-        return OUTPUT_FORMATTER.format(instant.atOffset(ZoneOffset.UTC));
-    }
+    public static String toUtcDateTime(String beijingTime) {
+        // 解析输入的北京时间
+        LocalDateTime localDateTime = LocalDateTime.parse(beijingTime, INPUT_FORMAT);
 
-    /** 默认 00:00:00 */
-    public static String toUtc(String dateStr) {
-        return toUtc(dateStr, 0, 0);
-    }
+        // 指定时区为中国北京时间
+        ZonedDateTime beijingZoned = localDateTime.atZone(ZoneId.of("Asia/Shanghai"));
 
-    /**
-     * 将 yyyy-MM-dd HH:mm:ss 转换为 UTC 时间字符串 (带毫秒 + Z)
-     * @param datetimeStr yyyy-MM-dd HH:mm:ss 格式字符串
-     * @return UTC 时间字符串,例如:2025-08-20T16:00:00.000Z
-     */
-    public static String toUtcDateTime(String datetimeStr) {
-        LocalDateTime localDateTime = LocalDateTime.parse(datetimeStr, DATETIME_FORMATTER);
-        Instant instant = localDateTime.toInstant(ZoneOffset.UTC);
-        return OUTPUT_FORMATTER.format(instant.atOffset(ZoneOffset.UTC));
+        // 转为UTC时区
+        ZonedDateTime utcZoned = beijingZoned.withZoneSameInstant(ZoneId.of("UTC"));
+
+        // 格式化为ISO8601字符串
+        return utcZoned.format(OUTPUT_FORMAT);
     }
 
     public static void main(String[] args) throws ParseException {

+ 34 - 19
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/build/HbCrawlerQuoteResultVoBuild.java

@@ -1,5 +1,6 @@
 package com.jzg.quotation.hengbang.crawler.build;
 
+import cn.hutool.core.collection.CollUtil;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.RiskInfoVo;
@@ -9,6 +10,7 @@ import com.jzg.quotation.hengbang.crawler.entity.response.HbCrawlerProposalRespo
 
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -41,33 +43,40 @@ public final class HbCrawlerQuoteResultVoBuild {
     public static RiskInfoVo buildCiInfo(HbCrawlerProposalResponse proposalResponse) {
         RiskInfoVo ciRiskInfoVo = new RiskInfoVo();
         HbCrawlerProposalResponse.ForceCarInsureRiskDTO forceCarInsureRisk = proposalResponse.getForceCarInsureRisk();
-        ciRiskInfoVo.setRiskCode(forceCarInsureRisk.getRiskcode());
-        ciRiskInfoVo.setStartDate(forceCarInsureRisk.getBegintime());
-        ciRiskInfoVo.setEndDate(forceCarInsureRisk.getEndtime());
+        if(Objects.nonNull(forceCarInsureRisk)){
+            ciRiskInfoVo.setRiskCode(forceCarInsureRisk.getRiskcode());
+            ciRiskInfoVo.setStartDate(forceCarInsureRisk.getBegintime());
+            ciRiskInfoVo.setEndDate(forceCarInsureRisk.getEndtime());
+        }
         return ciRiskInfoVo;
+
     }
 
     public static RiskInfoVo buildbiInfo(HbCrawlerProposalResponse proposalResponse) {
         RiskInfoVo biRiskInfoVo = new RiskInfoVo();
         HbCrawlerProposalResponse.BusiCarInsureRiskDTO busiCarInsureRisk = proposalResponse.getBusiCarInsureRisk();
-        biRiskInfoVo.setRiskCode(busiCarInsureRisk.getRiskcode());
-        biRiskInfoVo.setStartDate(busiCarInsureRisk.getBegintime());
-        biRiskInfoVo.setEndDate(busiCarInsureRisk.getEndtime());
+        if(Objects.nonNull(busiCarInsureRisk)){
+            biRiskInfoVo.setRiskCode(busiCarInsureRisk.getRiskcode());
+            biRiskInfoVo.setStartDate(busiCarInsureRisk.getBegintime());
+            biRiskInfoVo.setEndDate(busiCarInsureRisk.getEndtime());
+        }
         return biRiskInfoVo;
     }
 
     public static List<KindInfoVo> buildKindInfoList(HbCrawlerProposalResponse proposalResponse, QuoteVo quoteVo) {
         List<KindInfoVo> kindInfoVoList = quoteVo.getKindInfoVo();
-        List<HbCrawlerProposalResponse.CarInsureLiabilityDTO> carInsureLiabilityList = proposalResponse.getCarInsureLiabilityList();
-        Map<String, HbCrawlerProposalResponse.CarInsureLiabilityDTO> carInsureLiabilityDTOMap = carInsureLiabilityList.stream().collect(Collectors.toMap(HbCrawlerProposalResponse.CarInsureLiabilityDTO::getKindcode, carInsureLiabilityDTO -> carInsureLiabilityDTO));
-        kindInfoVoList.forEach(kindInfoVo -> {
-            HbCrawlerProposalResponse.CarInsureLiabilityDTO carInsureLiabilityDTO = carInsureLiabilityDTOMap.get(kindInfoVo.getKindCode());
-            kindInfoVo.setAmount(String.valueOf(carInsureLiabilityDTO.getLiabamt()));
-            kindInfoVo.setPremium(String.valueOf(carInsureLiabilityDTO.getLiabprm()));
-            kindInfoVo.setUnitAmount(carInsureLiabilityDTO.getUnitAmount());
-            kindInfoVo.setQuantity(String.valueOf(carInsureLiabilityDTO.getQuantity()));
-            kindInfoVo.setDeductibleRate(carInsureLiabilityDTO.getLiabrate());
-        });
+        if(CollUtil.isNotEmpty(kindInfoVoList)){
+            List<HbCrawlerProposalResponse.CarInsureLiabilityDTO> carInsureLiabilityList = proposalResponse.getCarInsureLiabilityList();
+            Map<String, HbCrawlerProposalResponse.CarInsureLiabilityDTO> carInsureLiabilityDTOMap = carInsureLiabilityList.stream().collect(Collectors.toMap(HbCrawlerProposalResponse.CarInsureLiabilityDTO::getKindcode, carInsureLiabilityDTO -> carInsureLiabilityDTO));
+            kindInfoVoList.forEach(kindInfoVo -> {
+                HbCrawlerProposalResponse.CarInsureLiabilityDTO carInsureLiabilityDTO = carInsureLiabilityDTOMap.get(kindInfoVo.getKindCode());
+                kindInfoVo.setAmount(String.valueOf(carInsureLiabilityDTO.getLiabamt()));
+                kindInfoVo.setPremium(String.valueOf(carInsureLiabilityDTO.getLiabprm()));
+                kindInfoVo.setUnitAmount(carInsureLiabilityDTO.getUnitAmount());
+                kindInfoVo.setQuantity(String.valueOf(carInsureLiabilityDTO.getQuantity()));
+                kindInfoVo.setDeductibleRate(carInsureLiabilityDTO.getLiabrate());
+            });
+        }
         return kindInfoVoList;
     }
 
@@ -77,9 +86,15 @@ public final class HbCrawlerQuoteResultVoBuild {
         //商业险数据
         HbCrawlerProposalResponse.BusiCarInsureRiskDTO busiCarInsureRisk = proposalResponse.getBusiCarInsureRisk();
         HbCrawlerProposalResponse.CarInsureShiptaxDTO carInsureShiptax = proposalResponse.getCarInsureShiptax();
-        quoteResultsVo.getCosts().setBiPremium(busiCarInsureRisk.getSumPremium());
-        quoteResultsVo.getCosts().setCiPremium(forceCarInsureRisk.getSumPremium());
-        quoteResultsVo.getCosts().setVvTax(carInsureShiptax.getSumtax());
+        if(Objects.nonNull(busiCarInsureRisk)){
+            quoteResultsVo.getCosts().setBiPremium(busiCarInsureRisk.getSumPremium());
+        }
+        if(Objects.nonNull(forceCarInsureRisk)){
+            quoteResultsVo.getCosts().setCiPremium(forceCarInsureRisk.getSumPremium());
+        }
+        if(Objects.nonNull(carInsureShiptax)){
+            quoteResultsVo.getCosts().setVvTax(carInsureShiptax.getSumtax());
+        }
         //设置非车保费
         quoteResultsVo.getCosts().setNiPremium(proposalResponse.getAccidentTotalPremium());
     }

+ 41 - 11
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/component/HengBangCrawlerRequestComponent.java

@@ -3,7 +3,6 @@ package com.jzg.quotation.hengbang.crawler.component;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.util.StringUtils;
@@ -18,15 +17,17 @@ import com.jzg.quotation.hengbang.crawler.entity.request.*;
 import com.jzg.quotation.hengbang.crawler.entity.response.*;
 import com.jzg.quotation.hengbang.crawler.properties.HengBangCrawlerProperties;
 import com.jzg.quotation.hengbang.crawler.utils.HengBangAESUtil;
+import jakarta.annotation.Resource;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.ResponseEntity;
+import org.springframework.http.*;
 import org.springframework.stereotype.Component;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.reactive.function.client.WebClientResponseException;
 
 import javax.crypto.Cipher;
 import javax.crypto.spec.IvParameterSpec;
@@ -52,6 +53,8 @@ public class HengBangCrawlerRequestComponent {
 
     private final RequestComponent requestComponent;
 
+    private final RestTemplate restTemplate;
+
     /**
      * 验证码
      *
@@ -291,9 +294,15 @@ public class HengBangCrawlerRequestComponent {
             System.out.println(HengBangAESUtil.decryptStr(response.getHbEncD()));
             String resJson = HengBangAESUtil.decryptStr(response.getHbEncD());
             return JSONObject.parseObject(resJson).getString("message");
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new SystemException("加密解密异常!");
+        } catch (WebClientResponseException e) {
+            if(e.getStatusCode().equals(HttpStatusCode.valueOf(500))){
+                return JSONObject.parseObject(e.getMessage()).getString("detail");
+            }else{
+                throw new SystemException(e.getMessage());
+            }
+        }
+        catch (Exception e) {
+            throw new SystemException(e.getMessage());
         }
     }
 
@@ -353,13 +362,33 @@ public class HengBangCrawlerRequestComponent {
      *
      * @param plyappno
      * @param headers
+     * @param paramList
+     * @return
+     */
+    public String coreProposal(String plyappno, HttpHeaders headers, List<Map<String, String>> paramList) {
+        try {
+            ResponseEntity<String> responseEntity = requestComponent.objectPost(RequestUrl.SUBMIT.getRequestUrl(hbCrawlerProperties.getBaseUrl()) + "/" +plyappno, paramList, String.class, headers);
+            return JSONObject.parseObject(responseEntity.getBody()).getString("message");
+        } catch (WebClientResponseException e) {
+            if(e.getStatusCode().equals(HttpStatusCode.valueOf(500))){
+                return JSONObject.parseObject(e.getMessage()).getString("detail");
+            }else{
+                throw new SystemException(e.getMessage());
+            }
+        }
+    }
+
+    /**
+     * 获取核保信息
+     * @param plyappno
+     * @param headers
      * @return
      */
-    public HbCrawlerCoreProposalResponse coreProposal(String plyappno, HttpHeaders headers) {
-        Map<String, String> params = new HashMap<>();
-        params.put("plyappno", plyappno);
-        ResponseEntity<HbCrawlerCoreProposalResponse> responseEntity = requestComponent.objectPost(RequestUrl.SUBMIT.getRequestUrl(hbCrawlerProperties.getBaseUrl()) + plyappno, params, HbCrawlerCoreProposalResponse.class, headers);
-        return responseEntity.getBody();
+    public HbCrawlerCoreProposalResponse coreProposalResult(String plyappno, HttpHeaders headers) {
+        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
+        map.add("plyappno", plyappno);
+        HbCrawlerCoreProposalResponse response = requestComponent.get(RequestUrl.SUBMIT_RESULT.getRequestUrl(hbCrawlerProperties.getBaseUrl()), map, "", HbCrawlerCoreProposalResponse.class, headers);
+        return response;
     }
 
     /**
@@ -424,4 +453,5 @@ public class HengBangCrawlerRequestComponent {
                 .concat(plyappno), null, HbCrawlerPayUrlResponse.class, headers).getBody();
     }
 
+
 }

+ 3 - 1
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/constant/enums/RequestUrl.java

@@ -27,7 +27,9 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
 
     FILEBUFF_UPLOAD("/interflow/api/filebuff-upload/batch-folder?imgType=tihe&plyappno=", "上传影像"),
 
-    SUBMIT("/new-insure/api/carinsurenew/coreproposal", "提交核保"),
+    SUBMIT("/new-insure/api/carinsurenew/quoteToProposal", "提交核保"),
+
+    SUBMIT_RESULT("/new-insure/api/carinsurenew/coreproposal", "获取核保信息"),
 
     ORDER_STATE("/new-insure/api/carInsureMain/list", "查询投保单状态"),
 

+ 2 - 1
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/entity/request/HbCrawlerCalculationRequest.java

@@ -83,6 +83,7 @@ public class HbCrawlerCalculationRequest extends HbBaseRequest{
             this.begintimeBi = DateUtil.toUtcDateTime(quoteVo.getBiRiskInfoVo().getStartDate());
             this.risktype = "2";
         }else{
+//            this.begintimeBi = DateUtil.toUtcDateTime(quoteVo.getCiRiskInfoVo().getStartDate());
             this.epersonliabilityList = new ArrayList<>();
         }
         if(Objects.nonNull(quoteVo.getCiRiskInfoVo())){
@@ -117,7 +118,7 @@ public class HbCrawlerCalculationRequest extends HbBaseRequest{
         return epersonliabilityDTOList;
     }
 
-    private String outofwarrantytype;
+//    private String outofwarrantytype;
     private String clauseType;
     private List<String> ecarChargingPosts;
     private List<String> carInsureDevices;

+ 14 - 8
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/entity/request/HbCrawlerFileUploadRequest.java

@@ -6,6 +6,7 @@ import java.io.Serial;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @description: 恒邦财险 上传影像 请求参数
@@ -17,14 +18,12 @@ public class HbCrawlerFileUploadRequest extends HbBaseRequest{
     @Serial
     private static final long serialVersionUID = 781293083595362938L;
 
-    public HbCrawlerFileUploadRequest(String fileBuff, String fileType, String mark3, Integer fileNum) {
-        this.file_buff = fileBuff;
-        this.file_type = fileType;
+    public HbCrawlerFileUploadRequest(List<String> fileBuff, List<String> fileType, List<String> mark3, List<ExtJsonDTO.ExtArrDTO> fileNum) {
+        this.file_buff = fileBuff.stream().collect(Collectors.joining("||"));
+        this.file_type = fileType.stream().collect(Collectors.joining("||"));
         ExtJsonDTO extJsonDTO = new ExtJsonDTO();
-        extJsonDTO.setMark3(mark3);
-        List<ExtJsonDTO.ExtArrDTO> extArrDTOList = new ArrayList<>(fileNum);
-        extArrDTOList.add(new ExtJsonDTO.ExtArrDTO());
-        extJsonDTO.setExtArr(extArrDTOList);
+        extJsonDTO.setMark3(mark3.stream().collect(Collectors.joining(",")));
+        extJsonDTO.setExtArr(fileNum);
         this.ext_json = extJsonDTO;
     }
 
@@ -47,9 +46,16 @@ public class HbCrawlerFileUploadRequest extends HbBaseRequest{
         public static class ExtArrDTO implements Serializable {
             @Serial
             private static final long serialVersionUID = 4521445632452212652L;
-            private String ocrFlag = "0";
+            private String ocrFlag;
             private String name;
             private String id_number;
+            private String plate_no;
+            private String vin_code;
+            private String engine_no;
+            private String register_date;
+            private String issue_date;
+            private String owner;
         }
+
     }
 }

+ 4 - 1
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/entity/request/HbCrawlerQuoteimmediatelyRequest.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.CustomerInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.hengbang.crawler.entity.HengBangCrawlerConfigureParameters;
 import com.jzg.quotation.hengbang.crawler.entity.dto.HbEncDTO;
 import com.jzg.quotation.hengbang.crawler.entity.response.HbCrawlerQueryCarResponse;
@@ -68,7 +69,7 @@ public class HbCrawlerQuoteimmediatelyRequest extends HbBaseRequest {
         carInsureItemDTO.setModelCode(contentDTO.getModelCode());
         carInsureItemDTO.setFamilyName(contentDTO.getFamilyName());
         carInsureItemDTO.setAttachNature(carInfoVo.getPropertyCode());
-        carInsureItemDTO.setCiModelCode(contentDTO.getCimodelCode());
+        carInsureItemDTO.setCiModelCode(StringUtils.isNotBlank(contentDTO.getCimodelCode())? contentDTO.getCimodelCode() : contentDTO.getCimodelCodeC());
         carInsureItemDTO.setPurchasePriceNotTax(Double.parseDouble(contentDTO.getPurchasePriceNotTax()));
         carInsureItemDTO.setStyleUniqueId(contentDTO.getVehicleStyleUniqueId());
         carInsureItemDTO.setCountyCode(ownersInfo.getCountyCode());
@@ -77,6 +78,8 @@ public class HbCrawlerQuoteimmediatelyRequest extends HbBaseRequest {
         carInsureItemDTO.setPostCode(ownersInfo.getCountyCode());
         carInsureItemDTO.setChgownerFlag(carInfoVo.isTransfer()? "1" : "0");
         carInsureItemDTO.setSpecialCarFlag("1");
+        carInsureItemDTO.setTotalTonCount("0.00");
+        carInsureItemDTO.setNoticeType(contentDTO.getNoticeType());
         this.carInsureItem = carInsureItemDTO;
         //设置被保人
         CarInsureRiskRelatedPartyDTO riskRelatedPartyDTO = new CarInsureRiskRelatedPartyDTO();

+ 128 - 26
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/service/Impl/HengBangCrawlerRequestImpl.java

@@ -1,8 +1,12 @@
 package com.jzg.quotation.hengbang.crawler.service.Impl;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.crypto.digest.DigestUtil;
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.jzg.commons.constants.ProductsType;
+import com.jzg.commons.constants.quote.enums.base.InsuranceImageEnum;
+import com.jzg.commons.entity.orders.po.InsOrdersCarUserInfo;
 import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
 import com.jzg.commons.entity.quote.vo.CarInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
@@ -28,10 +32,12 @@ import com.jzg.quotation.hengbang.crawler.properties.HengBangCrawlerProperties;
 import com.jzg.quotation.hengbang.crawler.service.HbCrawlerOrderService;
 import com.jzg.quotation.hengbang.crawler.service.HengBangCrawlerRequest;
 import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpHeaders;
 
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -124,12 +130,46 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
         AttributionInformationVo attributionInformationVo = underwritingVo.getOrder().getAttributionInformationVo();
         HttpHeaders headers = hbCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         HbCrawlerOrder hbCrawlerOrder = hbCrawlerOrderService.findByOrdersNo(underwritingVo.getOrder().getOrdersNo());
+        String productCode = underwritingVo.getInsOrders().getProductId();
+        List<Map<String, String>> paramList = new ArrayList<>();
+        if(productCode.equals(ProductsType.PT_0330.getCode())){
+            Map<String, String> params = new HashMap<>();
+            params.put("clauseCode","T001_1");
+            params.put("clauseContext","为更好地保障您的权益,请您在发生保险事故后保留出险第一现场,并立即致电24小时服务电话:956079。");
+            params.put("clauseName","第一现场报案");
+            params.put("riskCode","0801");
+            paramList.add(params);
+        } else if(productCode.equals(ProductsType.PT_034001.getCode())){
+            Map<String, String> params = new HashMap<>();
+            params.put("clauseCode","T001_1");
+            params.put("clauseContext","为更好地保障您的权益,请您在发生保险事故后保留出险第一现场,并立即致电24小时服务电话:956079。");
+            params.put("clauseName","第一现场报案");
+            params.put("riskCode","0808");
+            paramList.add(params);
+        } else{
+            Map<String, String> params1 = new HashMap<>();
+            params1.put("clauseCode","T001_1");
+            params1.put("clauseContext","为更好地保障您的权益,请您在发生保险事故后保留出险第一现场,并立即致电24小时服务电话:956079。");
+            params1.put("clauseName","第一现场报案");
+            params1.put("riskCode","0801");
+            paramList.add(params1);
+            Map<String, String> params2 = new HashMap<>();
+            params2.put("clauseCode","T001_1");
+            params2.put("clauseContext","为更好地保障您的权益,请您在发生保险事故后保留出险第一现场,并立即致电24小时服务电话:956079。");
+            params2.put("clauseName","第一现场报案");
+            params2.put("riskCode","0808");
+            paramList.add(params2);
+        }
 
-        HbCrawlerCoreProposalResponse coreProposalResponse = hbCrawlerRequestComponent.coreProposal(hbCrawlerOrder.getPlyappno(), headers);
-        hbCrawlerOrder.setCiProposalNo(coreProposalResponse.getEfcProposalNo());
-        hbCrawlerOrder.setBiProposalNo(coreProposalResponse.getBizProposalNo());
-        hbCrawlerOrderService.update(hbCrawlerOrder);
-        return null;
+        String message = hbCrawlerRequestComponent.coreProposal(hbCrawlerOrder.getPlyappno(), headers,paramList);
+        if("成功".equals(message)){
+            // 获取核保信息
+            HbCrawlerCoreProposalResponse response = hbCrawlerRequestComponent.coreProposalResult(hbCrawlerOrder.getPlyappno(), headers);
+            hbCrawlerOrder.setCiProposalNo(response.getEfcProposalNo());
+            hbCrawlerOrder.setBiProposalNo(response.getBizProposalNo());
+            hbCrawlerOrderService.update(hbCrawlerOrder);
+        }
+        return new UnderwritingResultsVo();
     }
 
     /**
@@ -161,36 +201,98 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
         HttpHeaders headers = hbCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         HbCrawlerOrder hbCrawlerOrder = hbCrawlerOrderService.findByOrdersNo(insuranceUploadImageVo.getOrder()
                 .getOrdersNo());
+
+        // 获取车主/投保人/被保人信息
+        List<InsOrdersCarUserInfo> userInfos = insuranceUploadImageVo.getInsOrdersCarUserInfoList();
+        InsOrdersCarUserInfo ownerInfo = userInfos.stream()
+                .filter(insOrdersCarUserInfo -> insOrdersCarUserInfo.getPolicyPersonType().equals(1))
+                .findFirst().orElse(null);
+        InsOrdersCarUserInfo policyHolderInfo = userInfos.stream()
+                .filter(insOrdersCarUserInfo -> insOrdersCarUserInfo.getPolicyPersonType().equals(2))
+                .findFirst().orElse(null);
+        InsOrdersCarUserInfo insuredHolder = userInfos.stream()
+                .filter(insOrdersCarUserInfo -> insOrdersCarUserInfo.getPolicyPersonType().equals(3))
+                .findFirst().orElse(null);
+        CarInfoVo carInfo = insuranceUploadImageVo.getCarInfo();
         //暂时将图片默认为01,06,09,投保业务-旧车-其他资料
         Integer fileNum = 0;
-        StringBuilder fileBuff = new StringBuilder();
-        StringBuilder fileType = new StringBuilder();
-        StringBuilder mark3 = new StringBuilder();
-        Integer mark3Num = 100;//恒邦规定从100开始
+        List<String> fileBuff = new ArrayList<>();
+        List<String> fileType = new ArrayList<>();
+        List<String> mark3 = new ArrayList<>();
+        List<HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO> extArrDTOS = new ArrayList<>();
+
+//        Integer mark3Num = 100;//恒邦规定从100开始
         List<InsuranceImageVo> imageVoList = insuranceUploadImageVo.getImageVoList();
-        if (imageVoList != null && !imageVoList.isEmpty()) {
+        if (CollUtil.isNotEmpty(imageVoList)) {
             for (InsuranceImageVo insuranceImageVo : imageVoList) {
                 List<InsuranceImageVo.ImageDTO> imageBase64List = insuranceImageVo.getImageBase64List();
-                if (imageBase64List != null && !imageBase64List.isEmpty()) {
-                    for (InsuranceImageVo.ImageDTO imageBase64 : imageBase64List) {
-                        if (!fileBuff.isEmpty()) {
-                            fileBuff.append("||");
-                        }
-                        fileBuff.append(imageBase64.getImageBase64Str());
-                        if (!fileType.isEmpty()) {
-                            fileType.append("||");
-                        }
-                        fileType.append(RequestConstant.IMAGE_TYPE);
-                        if (!mark3.isEmpty()) {
-                            mark3.append(",");
-                        }
-                        mark3.append(mark3Num++);
-                        fileNum += 1;
+                if(CollUtil.isNotEmpty(imageBase64List)){
+                    fileBuff.add("data:image/jpeg;base64," + imageBase64List.get(0).getImageBase64Str());
+                    if(InsuranceImageEnum.C02.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,03,投保业务-旧车-证件");
+                        mark3.add("6");
+                        HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO extArrDTO = new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO();
+                        extArrDTO.setOcrFlag("1");
+                        extArrDTO.setName(ownerInfo.getName());
+                        extArrDTO.setId_number(ownerInfo.getIdentifyNumber());
+                        extArrDTOS.add(extArrDTO);
+                    } else if(InsuranceImageEnum.C01.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,02,投保业务-旧车-行驶证");
+                        mark3.add("8");
+                        HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO extArrDTO = new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO();
+                        extArrDTO.setOcrFlag("1");
+                        extArrDTO.setPlate_no(carInfo.getLicenseNo());
+                        extArrDTO.setEngine_no(carInfo.getEngineNo());
+                        extArrDTO.setOwner(ownerInfo.getName());
+                        extArrDTO.setVin_code(carInfo.getVinNo());
+                        extArrDTO.setIssue_date(carInfo.getIssueDate());
+                        extArrDTO.setRegister_date(carInfo.getRegisterDate());
+                        extArrDTOS.add(extArrDTO);
+                    } else if(InsuranceImageEnum.D02.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,03,投保业务-旧车-证件");
+                        mark3.add("7");
+                        extArrDTOS.add(new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO());
+                    } else if(InsuranceImageEnum.D01.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,02,投保业务-旧车-行驶证");
+                        mark3.add("9");
+                        extArrDTOS.add(new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO());
+                    } else if(InsuranceImageEnum.C03.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,03,投保业务-旧车-证件");
+                        mark3.add("11");
+                        HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO extArrDTO = new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO();
+                        extArrDTO.setOcrFlag("1");
+                        extArrDTO.setName(policyHolderInfo.getName());
+                        extArrDTO.setId_number(policyHolderInfo.getIdentifyNumber());
+                        extArrDTOS.add(extArrDTO);
+                    } else if(InsuranceImageEnum.D03.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,03,投保业务-旧车-证件");
+                        mark3.add("12");
+                        HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO extArrDTO = new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO();
+                        extArrDTO.setOcrFlag("1");
+                        extArrDTO.setName(policyHolderInfo.getName());
+                        extArrDTO.setId_number(policyHolderInfo.getIdentifyNumber());
+                        extArrDTOS.add(extArrDTO);
+                    } else if(InsuranceImageEnum.C04.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,03,投保业务-旧车-证件");
+                        mark3.add("13");
+                        HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO extArrDTO = new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO();
+                        extArrDTO.setOcrFlag("1");
+                        extArrDTO.setName(insuredHolder.getName());
+                        extArrDTO.setId_number(insuredHolder.getIdentifyNumber());
+                        extArrDTOS.add(extArrDTO);
+                    } else if(InsuranceImageEnum.D04.getCode().equals(insuranceImageVo.getImageCode())){
+                        fileType.add("01,06,03,投保业务-旧车-证件");
+                        mark3.add("14");
+                        HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO extArrDTO = new HbCrawlerFileUploadRequest.ExtJsonDTO.ExtArrDTO();
+                        extArrDTO.setOcrFlag("1");
+                        extArrDTO.setName(insuredHolder.getName());
+                        extArrDTO.setId_number(insuredHolder.getIdentifyNumber());
+                        extArrDTOS.add(extArrDTO);
                     }
                 }
             }
         }
-        HbCrawlerFileUploadRequest fileUploadRequest = new HbCrawlerFileUploadRequest(fileBuff.toString(), fileType.toString(), mark3.toString(), fileNum);
+        HbCrawlerFileUploadRequest fileUploadRequest = new HbCrawlerFileUploadRequest(fileBuff, fileType, mark3, extArrDTOS);
         hbCrawlerRequestComponent.uploadImage(fileUploadRequest, headers, hbCrawlerOrder.getPlyappno());
     }
 

+ 7 - 2
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java

@@ -31,6 +31,7 @@ import com.jzg.commons.constants.quote.enums.base.QuoteRuleCategory;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
 import com.jzg.quotation.commons.service.QuotationBaseService;
 import com.jzg.quotation.commons.utils.SnowFlakeUtil;
+import com.jzg.quotation.hengbang.crawler.service.HengBangCrawlerRequest;
 import com.jzg.quotation.summary.aop.QuoteVerification;
 import com.jzg.quotation.summary.aop.OrderOperationLog;
 import com.jzg.quotation.summary.constants.QuoteNumberConstant;
@@ -138,9 +139,10 @@ public class UnifyOrderManager {
     private InsOrdersTrackService insOrdersTrackService;
 
     @Autowired
-    private ZhongMeiCrawlerRequest zhongMeiCrawlerRequest;
-
+    private HengBangCrawlerRequest hengBangCrawlerRequest;
 
+    @Autowired
+    private ZhongMeiCrawlerRequest zhongMeiCrawlerRequest;
 
 
     private String getSystemCode() {
@@ -406,6 +408,9 @@ public class UnifyOrderManager {
         if (byCompanyId.getData().isEmpty()) {
             AssertionUtils.isFail(true, "保司未配置协议");
         }
+
+        List<InsOrdersCarUserInfo> insOrdersCarUserInfos = insOrdersCarUserInfoService.getByOrderId(insuranceUploadImageVo.getOrder().getOrdersNo());
+        insuranceUploadImageVo.setInsOrdersCarUserInfoList(insOrdersCarUserInfos);
         insuranceUploadImageVo.getOrder().setAgreementId(byCompanyId.getData().get(0).getId());
         insuranceUploadImageVo.getOrder().setInsuranceCompanyCode(esmInsCompanyHttpResult.getData().getCompanyCode());
         insuranceUploadImageVo.getOrder().setInsuranceCompanyId(esmInsCompanyHttpResult.getData().getId());

+ 8 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerCacheComponent.java

@@ -2,6 +2,7 @@ package com.jzg.quotation.zhongan.crawler.component;
 
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
+import com.jzg.quotation.zhongan.crawler.entity.response.ZhongAnCrawlerPaymentResponse;
 import com.jzg.quotation.zhongan.crawler.entity.response.ZhongAnCrawlerUploadInitDateResponse;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -42,6 +43,8 @@ public class ZhongAnCrawlerCacheComponent {
 
     public static final String QUOTE_ID = "quoteId:";
 
+    public static final String LICENSE = "License:";
+
 
     public void cacheCookie(String zaLoginCookieKey, String flowId, String userName) {
         Map<String, String> authorizationMap = new HashMap<>();
@@ -89,5 +92,10 @@ public class ZhongAnCrawlerCacheComponent {
         return JSON.parseObject(bucket1.get(), ZhongAnCrawlerUploadInitDateResponse.ValueDTO.DatasDTO.class);
     }
 
+    public ZhongAnCrawlerPaymentResponse.ValueDTO.DatasDTO.InitInfoDTO getPayment(String ordersNo) {
+        RBucket<String> bucket1 = redissonClient.getBucket(ordersNo);
+        return JSON.parseObject(bucket1.get(), ZhongAnCrawlerPaymentResponse.ValueDTO.DatasDTO.InitInfoDTO.class);
+    }
+
 
 }

+ 17 - 11
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/component/ZhongAnCrawlerRequestComponent.java

@@ -15,6 +15,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.ByteArrayResource;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
@@ -93,7 +94,7 @@ public class ZhongAnCrawlerRequestComponent {
 
         List<ZhongAnCrawlerCarQueryResponse.ValueDTO.DataDTO.ResultDTO.VehicleDTO> vehicleDTOList = new ArrayList<>();
 
-        ZhongAnCrawlerCarQueryResponse carQueryResponse = requestComponent.formData(RequestUrl.CAR_QUERY.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), carQueryRequest, ZhongAnCrawlerCarQueryResponse.class, headers).getBody();
+        ZhongAnCrawlerCarQueryResponse carQueryResponse = requestComponent.formDataZhongAn(RequestUrl.CAR_QUERY.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), carQueryRequest, ZhongAnCrawlerCarQueryResponse.class, headers).getBody();
         List<ZhongAnCrawlerCarQueryResponse.ValueDTO.DataDTO.ResultDTO.VehicleDTO> vehicleList = carQueryResponse.getValue().getDatas().getResult().getVehicleList();
         vehicleDTOList.addAll(vehicleList);
 
@@ -108,7 +109,7 @@ public class ZhongAnCrawlerRequestComponent {
      * @return
      */
     public ZhongAnCrawlerQuoteResponse quote(ZhongAnCrawlerQuoteRequest quoteRequest, HttpHeaders headers) {
-        return requestComponent.formData(RequestUrl.QUOTE.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), quoteRequest, ZhongAnCrawlerQuoteResponse.class, headers).getBody();
+        return requestComponent.formDataZhongAn(RequestUrl.QUOTE.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), quoteRequest, ZhongAnCrawlerQuoteResponse.class, headers).getBody();
     }
 
     /**
@@ -129,7 +130,7 @@ public class ZhongAnCrawlerRequestComponent {
      * @return
      */
     public ZhongAnCrawlerGetOrderResponse getOrder(ZhongAnCrawlerGetOrderRequest getOrderRequest, HttpHeaders headers) {
-        return requestComponent.formData(RequestUrl.GET_ORDER.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), getOrderRequest, ZhongAnCrawlerGetOrderResponse.class, headers).getBody();
+        return requestComponent.formDataZhongAn(RequestUrl.GET_ORDER.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), getOrderRequest, ZhongAnCrawlerGetOrderResponse.class, headers).getBody();
     }
 
     /**
@@ -140,7 +141,7 @@ public class ZhongAnCrawlerRequestComponent {
      * @return
      */
     public ZhongAnCrawlerConfirmOrderResponse confirmOrder(ZhongAnCrawlerConfirmOrderRequest confirmOrderRequest, HttpHeaders headers) {
-        return requestComponent.formData(RequestUrl.CONFIRM_ORDER.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), confirmOrderRequest, ZhongAnCrawlerConfirmOrderResponse.class, headers).getBody();
+        return requestComponent.formDataZhongAn(RequestUrl.CONFIRM_ORDER.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), confirmOrderRequest, ZhongAnCrawlerConfirmOrderResponse.class, headers).getBody();
     }
 
     /**
@@ -151,7 +152,7 @@ public class ZhongAnCrawlerRequestComponent {
      * @return
      */
     public ZhongAnCrawlerJyxUnderwritingResponse jyxUnderwriting(ZhongAnCrawlerJyxUnderwritingRequest jyxUnderwritingRequest, HttpHeaders headers) {
-        return requestComponent.formData(RequestUrl.JYX_UNDERWRITING.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), jyxUnderwritingRequest, ZhongAnCrawlerJyxUnderwritingResponse.class, headers).getBody();
+        return requestComponent.formDataZhongAn(RequestUrl.JYX_UNDERWRITING.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), jyxUnderwritingRequest, ZhongAnCrawlerJyxUnderwritingResponse.class, headers).getBody();
     }
 
     /**
@@ -162,7 +163,7 @@ public class ZhongAnCrawlerRequestComponent {
      * @return
      */
     public ZhongAnCrawlerUploadImageResponse uploadImage(ZhongAnCrawlerUploadImageRequest imageRequest, HttpHeaders headers) {
-        return requestComponent.formData(RequestUrl.UPLOAD_IMAGE.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), imageRequest, ZhongAnCrawlerUploadImageResponse.class, headers).getBody();
+        return requestComponent.formDataZhongAn(RequestUrl.UPLOAD_IMAGE.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), imageRequest, ZhongAnCrawlerUploadImageResponse.class, headers).getBody();
     }
 
     /**
@@ -173,7 +174,7 @@ public class ZhongAnCrawlerRequestComponent {
      * @return
      */
     public ZhongAnCrawlerPaymentResponse payment(ZhongAnCrawlerPaymentRequest paymentRequest, HttpHeaders headers) {
-        return requestComponent.formData(RequestUrl.PAYMENT_LINK.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), paymentRequest, ZhongAnCrawlerPaymentResponse.class, headers).getBody();
+        return requestComponent.formDataZhongAn(RequestUrl.PAYMENT_LINK.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), paymentRequest, ZhongAnCrawlerPaymentResponse.class, headers).getBody();
     }
 
     /**
@@ -188,12 +189,12 @@ public class ZhongAnCrawlerRequestComponent {
     }
 
     public ZhongAnCrawlerCacheCarQueryResponse cacheCarInfo(ZhongAnCrawlerCacheCarQueryRequest cacheCarQueryRequest, HttpHeaders headers) {
-       return requestComponent.formData(RequestUrl.CACHE_CAR_QUERY.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), cacheCarQueryRequest,ZhongAnCrawlerCacheCarQueryResponse.class, headers).getBody();
+       return requestComponent.formDataZhongAn(RequestUrl.CACHE_CAR_QUERY.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), cacheCarQueryRequest,ZhongAnCrawlerCacheCarQueryResponse.class, headers).getBody();
 
     }
 
     public ZhongAnCrawlerQuoteBaseResponse quoteBaseInfo(ZhongAnCrawlerQuoteBaseRequest parameters, HttpHeaders headers) {
-        return requestComponent.formData(RequestUrl.QUOTE_BASE_QUERY.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), parameters,ZhongAnCrawlerQuoteBaseResponse.class, headers).getBody();
+        return requestComponent.formDataZhongAn(RequestUrl.QUOTE_BASE_QUERY.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), parameters,ZhongAnCrawlerQuoteBaseResponse.class, headers).getBody();
 
     }
 
@@ -221,14 +222,19 @@ public class ZhongAnCrawlerRequestComponent {
     }
 
     public ZhongAnCrawlerQueryDetailQueryResponse detailQuery(ZhongAnCrawlerQueryDetailQueryRequest detailQueryRequest, HttpHeaders headers) {
-        return requestComponent.formData(RequestUrl.QUERY_DETAIL.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), detailQueryRequest,ZhongAnCrawlerQueryDetailQueryResponse.class, headers).getBody();
+        return requestComponent.formDataZhongAn(RequestUrl.QUERY_DETAIL.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), detailQueryRequest,ZhongAnCrawlerQueryDetailQueryResponse.class, headers).getBody();
     }
 
     public ZhongAnCrawlerUploadInitDateResponse uploadInitDate(ZhongAnCrawlerUploadInitDateRequest uploadInitDateRequest, HttpHeaders headers) {
-        return requestComponent.formData(RequestUrl.UPLOAD_INIT_DATA.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), uploadInitDateRequest,ZhongAnCrawlerUploadInitDateResponse.class, headers).getBody();
+        return requestComponent.formDataZhongAn(RequestUrl.UPLOAD_INIT_DATA.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), uploadInitDateRequest,ZhongAnCrawlerUploadInitDateResponse.class, headers).getBody();
     }
 
     public String markCompleted(ZhongAnCrawlerMarkRequest markRequest, HttpHeaders headers) {
         return requestComponent.formDataString(RequestUrl.LICENCE_SEITCH.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), markRequest, headers);
     }
+
+    public ZhongAnCrawlerPolicyListResponse policyList(ZhongAnCrawlerPolicyListRequest policyListRequest, HttpHeaders headers) {
+
+        return requestComponent.formDataZhongAn(RequestUrl.ORDER_LIST.getRequestUrl(zhongAnCrawlerProperties.getBaseUrl()), policyListRequest,ZhongAnCrawlerPolicyListResponse.class, headers).getBody();
+    }
 }

+ 2 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/constant/ZhongAnRequestConstant.java

@@ -37,6 +37,8 @@ public class ZhongAnRequestConstant {
      */
     public static final String UPLOAD_IMAGE_PAGE = "%2FuploadInfo";
 
+    public static final String POLICY_LIST = "%2Forder%2FmyOrders";
+
     /**
      * 保单下载地址
      */

+ 2 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/constant/enums/RequestUrl.java

@@ -49,6 +49,8 @@ public enum RequestUrl implements CrawlerRequestUrlStandard {
 
     PAYMENT_LINK("/open/newProcess/new_process_controller/qr_page_init_info.json", "获取支付链接"),
 
+    ORDER_LIST("/open/bmw/query_controller/query_policy_list.json", "订单列表"),
+
     DOWNLOAD_POLICY("/open/bmw/n/query_controller/queryDocumentInfo.json", "获取保单下载路径");
 
 

+ 56 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerPolicyListRequest.java

@@ -0,0 +1,56 @@
+package com.jzg.quotation.zhongan.crawler.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
+import com.jzg.quotation.zhongan.crawler.constant.ZhongAnRequestConstant;
+import com.jzg.quotation.zhongan.crawler.entity.ZhongAnCrawlerConfigureParameters;
+import lombok.Data;
+import org.springframework.core.io.ByteArrayResource;
+
+import java.io.Serial;
+
+@Data
+public class ZhongAnCrawlerPolicyListRequest {
+
+    @Serial
+    private static final long serialVersionUID = -1L;
+
+
+    @JsonProperty("queryConditon")
+    private String queryConditon;
+
+    @JsonProperty("page")
+    private String page;
+    @JsonProperty("flag")
+    private String flag;
+    @JsonProperty("flowId")
+    private String flowId;
+
+    @JsonProperty("i")
+    private String i;
+
+    @JsonProperty("status")
+    private String status;
+
+    @JsonProperty("pageIndex")
+    private String pageIndex;
+
+    @JsonProperty("queryType")
+    private String queryType;
+
+
+
+    public ZhongAnCrawlerPolicyListRequest(String license,ZhongAnCrawlerConfigureParameters parameters) {
+
+        this.setFlowId(parameters.getFlowId());
+        this.setPage(ZhongAnRequestConstant.POLICY_LIST);
+        this.setFlag(parameters.getFlag());
+        this.setI(ZhongAnRequestConstant.I_PARAM);
+        this.setQueryConditon(license);
+        this.setStatus("1");
+        this.setPageIndex("1");
+        this.setQueryType("1");
+    }
+
+
+}

+ 10 - 3
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/request/ZhongAnCrawlerUploadImageRequest.java

@@ -1,9 +1,11 @@
 package com.jzg.quotation.zhongan.crawler.entity.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.quotation.zhongan.crawler.constant.ZhongAnRequestConstant;
 import com.jzg.quotation.zhongan.crawler.entity.ZhongAnCrawlerConfigureParameters;
 import lombok.Data;
+import org.springframework.core.io.ByteArrayResource;
 
 import java.io.File;
 import java.io.Serial;
@@ -19,9 +21,14 @@ public class ZhongAnCrawlerUploadImageRequest implements Serializable {
     @Serial
     private static final long serialVersionUID = 6616361166719063753L;
 
-    public ZhongAnCrawlerUploadImageRequest(String imageType, byte[] fileItem, String orderNo, String policyId, ZhongAnCrawlerConfigureParameters parameters) {
+    public ZhongAnCrawlerUploadImageRequest(String imageType, InsuranceImageVo.ImageDTO imageDTO, String orderNo, String policyId, ZhongAnCrawlerConfigureParameters parameters) {
         this.imageType = imageType;
-        this.fileItem = fileItem;
+        this.fileItem = new ByteArrayResource(imageDTO.getImageByte()) {
+            @Override
+            public String getFilename() {
+                return imageDTO.getImageName(); // 必须重写此方法
+            }
+        };;
         this.orderNo = orderNo;
         this.policyId = policyId;
         this.page = ZhongAnRequestConstant.UPLOAD_IMAGE_PAGE;
@@ -41,7 +48,7 @@ public class ZhongAnCrawlerUploadImageRequest implements Serializable {
     private String imageType;
 
     @JsonProperty("fileItem")
-    private byte[] fileItem;
+    private ByteArrayResource fileItem;
     @JsonProperty("orderNo")
     private String orderNo;
     @JsonProperty("policyId")

+ 61 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/response/ZhongAnCrawlerPaymentResponse.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serial;
+import java.util.List;
 
 /**
  * @description: 众安保险 获取支付链接 返回参数
@@ -51,6 +52,66 @@ public class ZhongAnCrawlerPaymentResponse extends ZhongAnCrawlerBaseResponse{
             @NoArgsConstructor
             @Data
             public static class InitInfoDTO {
+
+                @JsonProperty("agentUserCode")
+                private String agentUserCode;
+                @JsonProperty("applicantName")
+                private String applicantName;
+                @JsonProperty("applicantPersonnelType")
+                private String applicantPersonnelType;
+                @JsonProperty("applySignStageFlag")
+                private String applySignStageFlag;
+                @JsonProperty("bizPremium")
+                private String bizPremium;
+                @JsonProperty("businessDiscount")
+                private String businessDiscount;
+                @JsonProperty("compelDiscount")
+                private String compelDiscount;
+                @JsonProperty("compelPremium")
+                private String compelPremium;
+                @JsonProperty("electricApplyPolicyFlag")
+                private String electricApplyPolicyFlag;
+                @JsonProperty("enterprisePayFlag")
+                private String enterprisePayFlag;
+                @JsonProperty("insurePlaceCode")
+                private String insurePlaceCode;
+                @JsonProperty("insurePlaceName")
+                private String insurePlaceName;
+                @JsonProperty("isEnableQrCode")
+                private String isEnableQrCode;
+                @JsonProperty("isNeedRealName")
+                private String isNeedRealName;
+                @JsonProperty("jyxPolicyList")
+                private List<JyxPolicyListDTO> jyxPolicyList;
+                @JsonProperty("miniProgramPaySwitch")
+                private String miniProgramPaySwitch;
+                @JsonProperty("modelEnergyType")
+                private String modelEnergyType;
+                @JsonProperty("orderNo")
+                private String orderNo;
+                @JsonProperty("ownerName")
+                private String ownerName;
+                @JsonProperty("ownerPhoneNo")
+                private String ownerPhoneNo;
+                @JsonProperty("payExpireDate")
+                private String payExpireDate;
+                @JsonProperty("personnelType")
+                private String personnelType;
+                @JsonProperty("premuim")
+                private String premuim;
+                @JsonProperty("productType")
+                private String productType;
+                @JsonProperty("quoteId")
+                private String quoteId;
+                @JsonProperty("showVAT")
+                private String showVAT;
+                @JsonProperty("splitPayFlag")
+                private String splitPayFlag;
+                @JsonProperty("taxPremium")
+                private String taxPremium;
+                @JsonProperty("vehicleName")
+                private String vehicleName;
+
                 @NoArgsConstructor
                 @Data
                 public static class JyxPolicyListDTO {

+ 104 - 0
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/entity/response/ZhongAnCrawlerPolicyListResponse.java

@@ -0,0 +1,104 @@
+package com.jzg.quotation.zhongan.crawler.entity.response;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.util.List;
+
+@NoArgsConstructor
+@Data
+public class ZhongAnCrawlerPolicyListResponse extends ZhongAnCrawlerBaseResponse{
+
+    @Serial
+    private static final long serialVersionUID = -1L;
+
+    @JsonProperty("ruleMsgTips")
+    private String ruleMsgTips;
+    @JsonProperty("value")
+    private ValueDTO value;
+    @JsonProperty("additionalInfo")
+    private AdditionalInfoDTO additionalInfo;
+
+    @NoArgsConstructor
+    @Data
+    public static class ValueDTO {
+        @JsonProperty("datas")
+        private DatasDTO datas;
+
+        @NoArgsConstructor
+        @Data
+        public static class DatasDTO {
+            @JsonProperty("maxPage")
+            private Integer maxPage;
+            @JsonProperty("policyLists")
+            private List<policyListsDto> policyLists;
+
+            @NoArgsConstructor
+            @Data
+            public static class policyListsDto{
+
+                @JsonProperty("policyId")
+                private String policyId;
+                @JsonProperty("tpPolicyNo")
+                private String tpPolicyNo;
+                @JsonProperty("effectiveDate")
+                private String effectiveDate;
+                @JsonProperty("expiryDate")
+                private String expiryDate;
+                @JsonProperty("policyStatus")
+                private String policyStatus;
+                @JsonProperty("orderNo")
+                private String orderNo;
+                @JsonProperty("carOwnerName")
+                private String carOwnerName;
+                @JsonProperty("vehicleLicencePlateNo")
+                private String vehicleLicencePlateNo;
+                @JsonProperty("insureTypeCode")
+                private String insureTypeCode;
+                @JsonProperty("vehicleFrameNo")
+                private String vehicleFrameNo;
+                @JsonProperty("premium")
+                private String premium;
+                @JsonProperty("insurePlace")
+                private String insurePlace;
+                @JsonProperty("insurePlaceCode")
+                private String insurePlaceCode;
+                @JsonProperty("vehicleFeeStatus")
+                private String vehicleFeeStatus;
+                @JsonProperty("insureJiaYiFlag")
+                private String insureJiaYiFlag;
+                @JsonProperty("gmtCreated")
+                private String gmtCreated;
+                @JsonProperty("isPassed")
+                private String isPassed;
+                @JsonProperty("isCanCheck")
+                private String isCanCheck;
+                @JsonProperty("applicantPhone")
+                private String applicantPhone;
+                @JsonProperty("ifChangeStatus")
+                private String ifChangeStatus;
+                @JsonProperty("canInsureJyx")
+                private Boolean canInsureJyx;
+                @JsonProperty("insuredJyx")
+                private Boolean insuredJyx;
+                @JsonProperty("applyNo")
+                private String applyNo;
+                @JsonProperty("policyGrade")
+                private String policyGrade;
+                @JsonProperty("zaFlag")
+                private String zaFlag;
+                @JsonProperty("insurePayJyxFlag")
+                private String insurePayJyxFlag;
+            }
+
+        }
+    }
+
+    @NoArgsConstructor
+    @Data
+    public static class AdditionalInfoDTO {
+    }
+}

+ 52 - 26
tenant/insurance/quotation-zhongan/src/main/java/com/jzg/quotation/zhongan/crawler/service/Impl/ZhongAnCrawlerRequestImpl.java

@@ -85,6 +85,7 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
         loginCookieCache(zhongAnId);
         zhongAnCrawlerCacheComponent.setCache(quoteVo.getOwnersInfo().getIdentifyNumber(), quoteVo.getOrder().getOrdersNo() + ZhongAnCrawlerCacheComponent.IDENTIFY_NUMBER);
         CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
+        zhongAnCrawlerCacheComponent.setCache(carInfoVo.getLicenseNo(),quoteVo.getOrder().getOrdersNo()+ZhongAnCrawlerCacheComponent.LICENSE);
         AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
         //获取配置信息
         ZhongAnCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZhongAnCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
@@ -361,33 +362,12 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
 
 
     private void extracted(ZhongAnCrawlerConfigureParameters parameters, HttpHeaders headers, ZhongAnCrawlerOrder zhongAnCrawlerOrder, String imageType, InsuranceImageVo.ImageDTO imageDTO) {
-        String imageBase64Str = imageDTO.getImageBase64Str();
-        byte[] imageBytes = Base64.getDecoder().decode(imageBase64Str);
-        String imageId = imageDTO.getImageId();
-        SysUploadFiles sysUploadFiles = platformClient.getUploadFile(imageId);
-//        String url = MinioUtils.getPresignedObjectUrl("jzg", sysUploadFiles.getFileName());
-        String url = "http://192.168.0.250:9000/jzg/fc69904cb8b3647fd80f2994bee6939f_82ab9c52b729ab1747ece717662cab08.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=v7Zb8XhyLcYNcSHlxvyK%2F20250910%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250910T103229Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=e7febb0154d1f4f6f499570ad0f77ddb019e176735b52932e07881923dcd397d ";
-        //需要设置一个临时图片路径
-//        FileOutputStream fileOutputStream = null;
-//        String filePath = url;
-//        try {
-//            fileOutputStream = new FileOutputStream(filePath);
-//            fileOutputStream.write(imageBytes);
-//            fileOutputStream.close();
-//        }  catch (Exception e) {
-//            throw new RuntimeException(e);
-//        }
-//        File file = new File(url);
-
-        byte[] convert = new byte[0];
-        try {
-            convert = convert(url);
-        } catch (IOException e) {
-            throw new RuntimeException(e);
+        ZhongAnCrawlerUploadImageRequest uploadImageRequest = new ZhongAnCrawlerUploadImageRequest(imageType, imageDTO, zhongAnCrawlerOrder.getOrderNo(), zhongAnCrawlerOrder.getPolicyId(), parameters);
+        ZhongAnCrawlerUploadImageResponse uploadImageResponse = zhongAnCrawlerRequestComponent.uploadImage(uploadImageRequest, headers);
+        if (uploadImageResponse != null && StringUtils.isNotEmpty(uploadImageResponse.getErrorMsg())) {
+            throw new SystemException(uploadImageResponse.getErrorMsg());
         }
 
-        ZhongAnCrawlerUploadImageRequest uploadImageRequest = new ZhongAnCrawlerUploadImageRequest(imageType, convert, zhongAnCrawlerOrder.getOrderNo(), zhongAnCrawlerOrder.getPolicyId(), parameters);
-        ZhongAnCrawlerUploadImageResponse uploadImageResponse = zhongAnCrawlerRequestComponent.uploadImage(uploadImageRequest, headers);
     }
 
     public  byte[] convert(String filePath) throws IOException {
@@ -459,6 +439,52 @@ public class ZhongAnCrawlerRequestImpl implements ZhongAnCrawlerRequest {
     @Override
     public OrderStatusResultVo queryOrderState(OrderStatusVo orderStatusVo) throws JsonProcessingException {
         loginCookieCache(zhongAnId);
-        return null;
+        AttributionInformationVo attributionInformationVo = orderStatusVo.getOrder().getAttributionInformationVo();
+        //获取配置信息
+        ZhongAnCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(ZhongAnCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
+        HttpHeaders headers = zhongAnCrawlerRequestComponent.getHeaders(zhongAnId);
+        String flowId = parameters.getFlowId();
+        if (StringUtils.isEmpty(flowId)) {
+            parameters.setFlowId(zhongAnCrawlerCacheComponent.getFlowId(zhongAnId));
+        }
+
+        String license = zhongAnCrawlerCacheComponent.getCache(orderStatusVo.getOrder().getOrdersNo() + ZhongAnCrawlerCacheComponent.LICENSE);
+        ZhongAnCrawlerPolicyListRequest policyListRequest = new ZhongAnCrawlerPolicyListRequest(license,parameters);
+        ZhongAnCrawlerPolicyListResponse response = zhongAnCrawlerRequestComponent.policyList(policyListRequest,headers);
+        if (!response.getSuccess()) {
+            throw new SystemException(response.getErrorMsg());
+        }
+        List<ZhongAnCrawlerPolicyListResponse.ValueDTO.DatasDTO.policyListsDto> policyLists = response.getValue().getDatas().getPolicyLists();
+
+        OrderStatusResultVo orderStatusResultVo= new OrderStatusResultVo();
+        if (policyLists.size() >0) {
+            policyLists.forEach(s->{
+                if (s.getInsureTypeCode().equals("1")) {
+                    orderStatusResultVo.setSyPolicyno(s.getTpPolicyNo());
+                    orderStatusResultVo.setSyApplyNo(s.getApplyNo());
+                }else if (s.getInsureTypeCode().equals("2")) {
+                    orderStatusResultVo.setJqPolicyno(s.getTpPolicyNo());
+                    orderStatusResultVo.setJqApplyNo(s.getApplyNo());
+                }else if (s.getInsureTypeCode().equals("3")) {
+                    orderStatusResultVo.setJyPolicyno(s.getTpPolicyNo());
+                    orderStatusResultVo.setJyApplyNo(s.getApplyNo());
+                }
+                
+            });
+            ZhongAnCrawlerPolicyListResponse.ValueDTO.DatasDTO.policyListsDto policyListsDto = policyLists.get(0);
+            String policyStatus = policyListsDto.getPolicyStatus();
+            if (policyStatus == null) {
+                orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.QUOTE_FAIL);
+            }else {
+                if (policyStatus.equals("3")) {
+                    orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.PAY_PENDING);
+                }else if (policyStatus.equals("6")) {
+                    orderStatusResultVo.setOrderStatus(InsOrderStatusEnum.UNDERWRITED);
+                }
+            }
+        }
+
+
+        return orderStatusResultVo;
     }
 }