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

update
华农财险
1. 提交核保
2. 上传影像
3. 调取二维码
4. 获取支付链接
5. 查询状态

wks 1 год назад
Родитель
Сommit
c698ea2a79
25 измененных файлов с 513 добавлено и 379 удалено
  1. 1 1
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/DistributedLockComponent.java
  2. 41 0
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RedissonComponent.java
  3. 7 2
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/TimeProcessing.java
  4. 19 6
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/build/HuaNongCrawlerQuoteResultsVoBuild.java
  5. 37 4
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/component/HuaNongCrawlerCacheComponent.java
  6. 11 6
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/component/HuaNongCrawlerRequestComponent.java
  7. 27 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerDocumentsPrintRequestRequest.java
  8. 15 187
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerFileSubmitRequest.java
  9. 10 7
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerFindBusinessesRequestRequest.java
  10. 12 1
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerFtpDownloadRequestRequest.java
  11. 16 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerNewImageQueryRequestRequest.java
  12. 2 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerQuotedPriceRequestRequest.java
  13. 9 1
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerRequestBaseHead.java
  14. 1 1
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerSubmitRequestRequest.java
  15. 55 33
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/response/HuaNongCrawlerCatalogQueryResponse.java
  16. 2 2
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/response/HuaNongCrawlerQuotedPriceResponse.java
  17. 12 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/HuaNongCrawlerOrderService.java
  18. 8 3
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/HuaNongCrawlerQuoteProcessService.java
  19. 20 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerOrderServiceImpl.java
  20. 93 52
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerQuoteProcessServiceImpl.java
  21. 86 54
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerRequestImpl.java
  22. 7 0
      tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/utils/ImageIdGenerate.java
  23. 17 15
      tenant/insurance/quotation-summary/src/test/java/com/jzg/quotation/taikang/crawler/service/TKQuotationBaseServiceImplTest.java
  24. 1 2
      tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/utils/AESEncryption.java
  25. 4 2
      tenant/organization/src/main/java/com/jzg/organization/event/OrganizationFormApplicationLister.java

+ 1 - 1
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/DistributedLockUtil.java → tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/DistributedLockComponent.java

@@ -15,7 +15,7 @@ import java.util.function.Supplier;
  **/
 @Component
 @RequiredArgsConstructor
-public class DistributedLockUtil {
+public class DistributedLockComponent {
 
     private final RedissonClient redissonClient;
 

+ 41 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RedissonComponent.java

@@ -0,0 +1,41 @@
+package com.jzg.quotation.commons.component;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.alibaba.fastjson2.TypeReference;
+import com.jzg.commons.util.StringUtils;
+import lombok.RequiredArgsConstructor;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
+import org.springframework.stereotype.Component;
+
+import java.time.Duration;
+import java.util.function.Supplier;
+
+@Component
+@RequiredArgsConstructor
+public class RedissonComponent {
+
+    private final RedissonClient redissonClient;
+
+    /**
+     * 带返回值的锁操作
+     *
+     * @param cacheName 缓存名称
+     * @param supplier  业务逻辑
+     * @param duration  缓存时间
+     * @return 业务执行结果
+     */
+    public <T> T cacheJson(String cacheName, Supplier<T> supplier,Class<T> tClass,  Duration duration) {
+        RBucket<String> bucket = redissonClient.getBucket(cacheName);
+        String json = bucket.get();
+        if (StringUtils.hasText(json)) {
+            return JSON.parseObject(json, tClass);
+        }
+        T t = supplier.get();
+        String jsonString = JSON.toJSONString(t);
+        bucket.set(jsonString, duration);
+        return t;
+    }
+
+}

+ 7 - 2
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/utils/TimeProcessing.java

@@ -60,7 +60,7 @@ public final class TimeProcessing {
         return LocalDateTime.of(LocalDate.parse(date, DATE_FORMATTER), LocalTime.MAX).format(DATE_TIME_FORMATTER);
     }
 
-    public static String dateTimeToDate(String dateTime){
+    public static String dateTimeToDate(String dateTime) {
         return LocalDateTime.parse(dateTime, DATE_TIME_FORMATTER).format(DATE_FORMATTER);
     }
 
@@ -154,7 +154,12 @@ public final class TimeProcessing {
      * @return 时间范围
      */
     public static TimeFrame getTimeFrame(String date, boolean isDateTime) {
-        LocalDate dateTime = LocalDate.parse(date, DATE_FORMATTER);
+        LocalDate dateTime;
+        if (date.length() > 10) {
+            dateTime = LocalDate.parse(date, DATE_TIME_FORMATTER);
+        } else {
+            dateTime = LocalDate.parse(date, DATE_FORMATTER);
+        }
         LocalDate localDate = dateTime.plusDays(ONE);
         if (isDateTime) {
             LocalDateTime startOfDay = LocalDateTime.of(dateTime, LocalTime.MIDNIGHT);

+ 19 - 6
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/build/HuaNongCrawlerQuoteResultsVoBuild.java

@@ -1,12 +1,15 @@
 package com.jzg.quotation.huanong.crawler.build;
 
+import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.RiskInfoVo;
 import com.jzg.commons.entity.quote.vo.aggregated.QuoteResultsVo;
 import com.jzg.quotation.commons.component.ConversionOfQuoteInformation;
 import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerQuotedPriceResponse;
+import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerSaveResponse;
 import com.jzg.quotation.huanong.enums.dictionary.Risk;
+import org.springframework.util.ObjectUtils;
 
 import java.util.List;
 import java.util.Map;
@@ -18,28 +21,38 @@ public final class HuaNongCrawlerQuoteResultsVoBuild {
         throw new IllegalStateException("Utility class");
     }
 
-    public static QuoteResultsVo buildQuoteResultsVo(String orderNo, QuoteVo quoteVo, HuaNongCrawlerQuotedPriceResponse huaNongCrawlerQuotedPriceResponse) {
+    public static QuoteResultsVo buildQuoteResultsVo(String orderNo, QuoteVo quoteVo, HuaNongCrawlerQuotedPriceResponse huaNongCrawlerQuotedPriceResponse, HuaNongCrawlerSaveResponse saveResponse) {
         QuoteResultsVo quoteResultsVo = new QuoteResultsVo();
         quoteResultsVo.setOrdersNo(orderNo);
 
         List<HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO> contract = huaNongCrawlerQuotedPriceResponse.getBusinessData()
                 .getContract();
 
-        Map<String, HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO> contractDTOMap = contract.stream()
+        Map<String, HuaNongCrawlerSaveResponse.BusinessDataDTO.ContractDTO> collect = saveResponse.getBusinessData()
+                .getContract()
+                .stream()
                 .collect(Collectors.toMap(x -> x.getContractMain().getRiskCode(), x -> x));
 
         contract.forEach(contractDTO -> {
+
+            HuaNongCrawlerSaveResponse.BusinessDataDTO.ContractDTO contractDTO1 = collect.get(contractDTO.getContractMain()
+                    .getRiskCode());
+
             if (Risk.RISK_0507.getRiskCode().equals(contractDTO.getContractMain().getRiskCode())) {
                 // 交强险
-                HuaNongCrawlerQuotedPriceResponse.BusinessDataDTO.ContractDTO ciContractDTO = contractDTOMap.get(Risk.RISK_0507.getRiskCode());
-                buildRiskInfoVo(quoteVo.getCiRiskInfoVo(), ciContractDTO.getContractMain());
+                buildRiskInfoVo(quoteVo.getCiRiskInfoVo(), contractDTO.getContractMain());
+                quoteResultsVo.getCosts().setCiPremium(String.valueOf(contractDTO.getContractMain().getTotalStandardPremium()));
+                quoteResultsVo.getCosts().setVvTax(String.valueOf(contractDTO.getTax().getSumTax()));
+                quoteResultsVo.setCiPolicyNumber(contractDTO1.getContractMain().getContractNo());
             } else {
                 // 商业险
                 buildKindInfo(quoteVo.getKindInfoVo(), contractDTO.getCoverage());
-                buildRiskInfoVo(quoteVo.getCiRiskInfoVo(), contractDTO.getContractMain());
+                buildRiskInfoVo(quoteVo.getBiRiskInfoVo(), contractDTO.getContractMain());
+                quoteResultsVo.getCosts().setBiPremium(String.valueOf(contractDTO.getContractMain().getBiTotalpremium()));
+                quoteResultsVo.setBiPolicyNumber(contractDTO1.getContractMain().getContractNo());
             }
         });
-
+        quoteResultsVo.setQuoteStatusEnum(InsOrderStatusEnum.WAIT_AUDIT);
         return quoteResultsVo;
     }
 

+ 37 - 4
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/component/HuaNongCrawlerCacheComponent.java

@@ -1,16 +1,19 @@
 package com.jzg.quotation.huanong.crawler.component;
 
 
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
 import com.jzg.commons.exception.SystemException;
+import com.jzg.quotation.huanong.crawler.entity.request.HuaNongCrawlerQuotedPriceRequestRequest;
 import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerLoginResponse;
 import lombok.RequiredArgsConstructor;
 import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
 import org.springframework.stereotype.Component;
 import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
 
 import java.time.Duration;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.stream.Collectors;
 
@@ -28,12 +31,18 @@ public class HuaNongCrawlerCacheComponent {
     public static final String TOKEN = "TOKEN";
 
     // 账号锁定
-    public static final String ACCOUNT_LOCKOUT = "hunong:account:lockout";
+    public static final String ACCOUNT_LOCKOUT = "huanong:account:lockout";
 
     public static final long ACCOUNT_LOCKOUT_TIME = 12L;
 
     // 登录锁
-    public static final String LOGIN_LOCKOUT = "hunong:login:lockout:";
+    public static final String LOGIN_LOCKOUT = "huanong:login:lockout:";
+
+    // 归属信息
+    public static final String SALE_INFO = "huanong:sale-info:";
+
+    public static final long SALE_INFO_TIME = 24L;
+
 
     /**
      * 保存登录信息
@@ -88,11 +97,35 @@ public class HuaNongCrawlerCacheComponent {
 
     /**
      * 获取存入认证信息
+     *
      * @param username 用户名
      * @return 认证信息
      */
-    public RMap<String, Object> getAuthorization(String username){
+    public RMap<String, Object> getAuthorization(String username) {
         return redissonClient.getMap(AUTHORIZATION + username);
     }
 
+    /**
+     * 获取归属信息
+     * @param agreementId 协议id
+     * @return 归属信息
+     */
+    public HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO getSaleInfoDTO(String agreementId) {
+        String s = (String) redissonClient.getBucket(SALE_INFO + agreementId).get();
+        if(StringUtils.hasLength(s)){
+            return JSON.parseObject(s, HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO.class);
+        }
+        return null;
+    }
+
+    /**
+     * 缓存归属信息
+     * @param agreementId 协议id
+     * @param saleInfo 归属信息
+     */
+    public void cacheSaleInfoDTO(String agreementId, HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO saleInfo) {
+        String jsonString = JSONObject.toJSONString(saleInfo);
+        redissonClient.getBucket(SALE_INFO + agreementId).set(jsonString, Duration.ofHours(SALE_INFO_TIME));
+    }
+
 }

+ 11 - 6
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/component/HuaNongCrawlerRequestComponent.java

@@ -176,9 +176,8 @@ public class HuaNongCrawlerRequestComponent {
      * @param headers 请求头
      * @return 保存订单信息
      */
-    public void save(HuaNongCrawlerSaveRequestRequest request, HttpHeaders headers) {
-        HuaNongCrawlerSaveResponse response = post(SAVE, request, HuaNongCrawlerSaveResponse.class, headers);
-
+    public HuaNongCrawlerSaveResponse save(HuaNongCrawlerSaveRequestRequest request, HttpHeaders headers) {
+        return post(SAVE, request, HuaNongCrawlerSaveResponse.class, headers);
     }
 
     /**
@@ -203,7 +202,7 @@ public class HuaNongCrawlerRequestComponent {
     public String bizUpload(String data, HttpHeaders headers) {
         MultiValueMap<String, Object> parts = new LinkedMultiValueMap<>();
         parts.add("data", data);
-        String url = properties.getUploadUrl() + BIZ_UPLOAD;
+        String url = properties.getUploadUrl() + RequestUrl.BIZ_UPLOAD.getUri();
         ResponseEntity<String> response = requestComponent.formData(url, parts, String.class, headers);
         String fragment = Optional.ofNullable(response)
                 .map(ResponseEntity::getHeaders)
@@ -348,9 +347,15 @@ public class HuaNongCrawlerRequestComponent {
         }
         proposalNo = Base64.encode(proposalNo.getBytes());
         username = Base64.encode(username.getBytes());
-        Base64.encode(ciPolicyNumber);
-        Base64.encode(biPolicyNumber);
         return String.format("%s?proposalNo=%s&operatorCode=%s&poaType=&time={time}", payUrl, proposalNo, username);
     }
 
+    public static void main(String[] args) {
+       String proposalNo = "UTE0MDQwNTA3MjAyNTA1NzkxMg==";
+       String payUrl = "https://mobileshare.chinahuanong.com.cn/index.html#/home";
+        String username = "MTQwNDAwMDQwMDAy";
+        String format = String.format("%s?proposalNo=%s&operatorCode=%s&poaType=&time={time}", payUrl, proposalNo, username);
+        System.out.println(format);
+    }
+
 }

+ 27 - 0
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerDocumentsPrintRequestRequest.java

@@ -68,4 +68,31 @@ public class HuaNongCrawlerDocumentsPrintRequestRequest implements HuaNongHeadRe
     @JsonProperty("isImg")
     private Integer isImg;
 
+
+    public HuaNongCrawlerDocumentsPrintRequestRequest(String token, String niPolicyNo, String username, String loginComCode) {
+        this.head = new HuaNongCrawlerRequestBaseHead(token);
+        this.policyType = "1";
+        this.printNoBegin = "";
+        this.printNoEnd = "";
+        this.businessType = "4";
+        this.contractNo = List.of(niPolicyNo);
+        this.printType = "";
+        this.returnFlag = "0";
+        this.startNo = "";
+        this.visaCode = "";
+        this.endNo = "";
+        this.accountInfo = "";
+        this.currency = "RMB";
+        this.producerCode = "";
+        this.comCode = loginComCode;
+        this.userCode = username;
+        this.loginCom = loginComCode;
+        this.electronicPolicy = false;
+        this.ip = "";
+        this.visaType = "";
+        this.isPreview = "0";
+        this.isMotoDownload = "0";
+        this.isImg = 0;
+    }
+
 }

+ 15 - 187
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerFileSubmitRequest.java

@@ -1,10 +1,12 @@
 package com.jzg.quotation.huanong.crawler.entity.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerCatalogQueryResponse;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @description: 华农财险 提交影像
@@ -18,6 +20,10 @@ public class HuaNongCrawlerFileSubmitRequest {
     @JsonProperty("vtree")
     private List<VtreeDTO> vtree;
 
+    public HuaNongCrawlerFileSubmitRequest(List<HuaNongCrawlerCatalogQueryResponse.DataDTO.TreeDataDTO> treeData) {
+        this.vtree = treeData.stream().map(VtreeDTO::new).collect(Collectors.toList());
+    }
+
     @NoArgsConstructor
     @Data
     public static class VtreeDTO {
@@ -35,193 +41,15 @@ public class HuaNongCrawlerFileSubmitRequest {
         private Integer version;
 
         @JsonProperty("nodes")
-        private List<NodesDTO> nodes;
-
-        @NoArgsConstructor
-        @Data
-        public static class NodesDTO {
-
-            @JsonProperty("id")
-            private Object id;
-
-            @JsonProperty("right")
-            private String right;
-
-            @JsonProperty("nodeCode")
-            private String nodeCode;
-
-            @JsonProperty("nodeName")
-            private String nodeName;
-
-            @JsonProperty("pid")
-            private String pid;
-
-            @JsonProperty("newNodeFlag")
-            private Integer newNodeFlag;
-
-            @JsonProperty("docNum")
-            private Integer docNum;
-
-            @JsonProperty("nodeLevel")
-            private Integer nodeLevel;
-
-            @JsonProperty("pages")
-            private Object pages;
-
-            @JsonProperty("resize")
-            private String resize;
-
-            @JsonProperty("childFlag")
-            private Integer childFlag;
-
-            @JsonProperty("sortNo")
-            private Integer sortNo;
-
-            @JsonProperty("bizNo")
-            private String bizNo;
-
-            @JsonProperty("appCode")
-            private String appCode;
-
-            @JsonProperty("appName")
-            private String appName;
-
-            @JsonProperty("icon")
-            private String icon;
-
-            @JsonProperty("label")
-            private String label;
-
-            @JsonProperty("children")
-            private List<ChildrenDTO> children;
-
-            @JsonProperty("pagesNew")
-            private List<PagesNewDTO> pagesNew;
-
-            @NoArgsConstructor
-            @Data
-            public static class ChildrenDTO {
-
-                @JsonProperty("id")
-                private Object id;
-
-                @JsonProperty("right")
-                private String right;
-
-                @JsonProperty("nodeCode")
-                private String nodeCode;
-
-                @JsonProperty("nodeName")
-                private String nodeName;
-
-                @JsonProperty("pid")
-                private String pid;
-
-                @JsonProperty("newNodeFlag")
-                private Integer newNodeFlag;
-
-                @JsonProperty("docNum")
-                private Integer docNum;
-
-                @JsonProperty("nodeLevel")
-                private Integer nodeLevel;
-
-                @JsonProperty("pages")
-                private Object pages;
-
-                @JsonProperty("resize")
-                private String resize;
-
-                @JsonProperty("childFlag")
-                private Integer childFlag;
-
-                @JsonProperty("sortNo")
-                private Integer sortNo;
-
-                @JsonProperty("bizNo")
-                private String bizNo;
-
-                @JsonProperty("appCode")
-                private String appCode;
-
-                @JsonProperty("appName")
-                private String appName;
-
-                @JsonProperty("icon")
-                private String icon;
-
-                @JsonProperty("label")
-                private String label;
-            }
-
-            @NoArgsConstructor
-            @Data
-            public static class PagesNewDTO {
-
-                @JsonProperty("thumbUrl")
-                private String thumbUrl;
-
-                @JsonProperty("imageUrl")
-                private String imageUrl;
-
-                @JsonProperty("progressStatl")
-                private Integer progressStatl;
-
-                @JsonProperty("originalName")
-                private String originalName;
-
-                @JsonProperty("pageFormat")
-                private String pageFormat;
-
-                @JsonProperty("id")
-                private String id;
-
-                @JsonProperty("nodeId")
-                private String nodeId;
-
-                @JsonProperty("newFileFlag")
-                private Integer newFileFlag;
-
-                @JsonProperty("noSubmitFileFlag")
-                private Integer noSubmitFileFlag;
-
-                @JsonProperty("appCode")
-                private String appCode;
-
-                @JsonProperty("bizNo")
-                private String bizNo;
-
-                @JsonProperty("type")
-                private String type;
-
-                @JsonProperty("createUserName")
-                private String createUserName;
-
-                @JsonProperty("createUser")
-                private String createUser;
-
-                @JsonProperty("uploadOrg")
-                private String uploadOrg;
-
-                @JsonProperty("createTime")
-                private String createTime;
-
-                @JsonProperty("pageName")
-                private String pageName;
-
-                @JsonProperty("tempId")
-                private String tempId;
-
-                @JsonProperty("exif")
-                private String exif;
-
-                @JsonProperty("pageDesc")
-                private String pageDesc;
-
-                @JsonProperty("sortNo")
-                private Integer sortNo;
-
-            }
+        private List<HuaNongCrawlerCatalogQueryResponse.DataDTO.TreeDataDTO.NodesDTO> nodes;
+
+        public VtreeDTO(HuaNongCrawlerCatalogQueryResponse.DataDTO.TreeDataDTO treeDataDTO) {
+            this.appCode = treeDataDTO.getAppCode();
+            this.appName = treeDataDTO.getAppName();
+            this.bizNo = treeDataDTO.getBizNo();
+            this.version = treeDataDTO.getDocNum();
+            this.nodes = treeDataDTO.getNodes();
         }
+
     }
 }

+ 10 - 7
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerFindBusinessesRequestRequest.java

@@ -1,6 +1,7 @@
 package com.jzg.quotation.huanong.crawler.entity.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.jzg.quotation.commons.utils.TimeProcessing;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -124,11 +125,11 @@ public class HuaNongCrawlerFindBusinessesRequestRequest implements HuaNongHeadRe
     @JsonProperty("expireDateEnd")
     private String expireDateEnd;
 
-    public HuaNongCrawlerFindBusinessesRequestRequest(String token, String loginCom) {
+    public HuaNongCrawlerFindBusinessesRequestRequest(String token, String loginCom, String policyNo, String recordingTime) {
         this.head = new HuaNongCrawlerRequestBaseHead(token);
         this.loginCom = loginCom;
-        this.rows = 1;
-        this.pageNo = 10;
+        this.rows = 10;
+        this.pageNo = 1;
         /**
          * 投保单 2
          * 保单 4
@@ -137,7 +138,7 @@ public class HuaNongCrawlerFindBusinessesRequestRequest implements HuaNongHeadRe
         this.policyNo = "";
         this.endorseNo = "";
         this.insuredName = "";
-        this.queryStatus = List.of();
+        this.queryStatus = List.of("0");
         this.agreementNo = "";
         this.handlerCode = "";
         this.agentName = "";
@@ -152,8 +153,9 @@ public class HuaNongCrawlerFindBusinessesRequestRequest implements HuaNongHeadRe
         this.expireDateEndFlag = "=";
         this.operateDateTimeBeginFlag = ">";
         this.operateDateTimeEndFlag = "<";
-        this.operateDateTimeBegin = "";
-        this.operateDateTimeEnd = "";
+        TimeProcessing.TimeFrame timeFrame = TimeProcessing.getTimeFrame(recordingTime, true);
+        this.operateDateTimeBegin = timeFrame.getStartTime();
+        this.operateDateTimeEnd = timeFrame.getEndTime();
         this.comCode = loginCom;
         this.coverageList = List.of(
                 "0515", "0507", "0520", "0521", "0522", "0523", "0509", "0506", "0510",
@@ -179,7 +181,7 @@ public class HuaNongCrawlerFindBusinessesRequestRequest implements HuaNongHeadRe
         this.proposalName = "";
         this.operatorCode = "";
         this.procNo = "";
-        this.proposalNo = "";
+        this.proposalNo = policyNo;
         this.effectiveDateBegin = "";
         this.effectiveDateEnd = "";
         this.issueDateBegin = "";
@@ -187,4 +189,5 @@ public class HuaNongCrawlerFindBusinessesRequestRequest implements HuaNongHeadRe
         this.expireDateBegin = "";
         this.expireDateEnd = "";
     }
+
 }

+ 12 - 1
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerFtpDownloadRequestRequest.java

@@ -5,6 +5,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serial;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -25,7 +26,11 @@ public class HuaNongCrawlerFtpDownloadRequestRequest implements HuaNongHeadReque
     @JsonProperty("ftpDowloadList")
     private List<FtpDowloadListDTO> ftpDowloadList;
 
-    @NoArgsConstructor
+    public HuaNongCrawlerFtpDownloadRequestRequest(String token) {
+        this.head = new HuaNongCrawlerRequestBaseHead(token);
+
+    }
+
     @Data
     public static class FtpDowloadListDTO {
 
@@ -53,5 +58,11 @@ public class HuaNongCrawlerFtpDownloadRequestRequest implements HuaNongHeadReque
         @JsonProperty("isRelate")
         private String isRelate;
 
+        public FtpDowloadListDTO() {
+            this.isMotoDownload = "0";
+            this.isVPN = "0";
+            this.isBZDown = "0";
+            this.isRelate = "0";
+        }
     }
 }

+ 16 - 0
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerNewImageQueryRequestRequest.java

@@ -24,6 +24,13 @@ public class HuaNongCrawlerNewImageQueryRequestRequest implements HuaNongHeadReq
     @JsonProperty("imageQuery")
     private ImageQueryDTO imageQuery;
 
+    public HuaNongCrawlerNewImageQueryRequestRequest(String loginCom, String loginComCode,
+                                                     String contractNo, String token,
+                                                     String userCode, String userName) {
+        this.head = new HuaNongCrawlerRequestBaseHead(token);
+        this.imageQuery = new ImageQueryDTO(loginCom, loginComCode, contractNo, userCode, userName);
+    }
+
     @NoArgsConstructor
     @Data
     public static class ImageQueryDTO {
@@ -49,6 +56,15 @@ public class HuaNongCrawlerNewImageQueryRequestRequest implements HuaNongHeadReq
         @JsonProperty("operateType")
         private String operateType;
 
+        public ImageQueryDTO(String loginCom, String loginComCode, String contractNo, String userCode, String userName) {
+            this.contractNo = contractNo;
+            this.businessType = "2";
+            this.userCode = userCode;
+            this.userName = userName;
+            this.comCode = loginComCode;
+            this.comName = loginCom;
+            this.operateType = "1";
+        }
     }
 
 }

+ 2 - 0
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerQuotedPriceRequestRequest.java

@@ -1051,6 +1051,7 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
         }
 
         @NoArgsConstructor
+        @AllArgsConstructor
         @Data
         public static class SaleInfoDTO {
             @JsonProperty("agentAddress")
@@ -1138,6 +1139,7 @@ public class HuaNongCrawlerQuotedPriceRequestRequest implements HuaNongHeadReque
             }
 
             @NoArgsConstructor
+            @AllArgsConstructor
             @Data
             public static class SalesmanDTO {
 

+ 9 - 1
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerRequestBaseHead.java

@@ -2,17 +2,25 @@ package com.jzg.quotation.huanong.crawler.entity.request;
 
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serial;
+import java.io.Serializable;
+
 /**
  * @description: 华农财险 请求 head
  * @author: wenks
  * @date: 2025/3/20 11:21
  **/
 @NoArgsConstructor
+@AllArgsConstructor
 @Data
-public class HuaNongCrawlerRequestBaseHead {
+public class HuaNongCrawlerRequestBaseHead implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 2569232306767664434L;
 
     @JsonProperty("transCode")
     private String transCode;

+ 1 - 1
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/request/HuaNongCrawlerSubmitRequestRequest.java

@@ -54,7 +54,7 @@ public class HuaNongCrawlerSubmitRequestRequest implements HuaNongHeadRequest {
         this.operateType = "1";
         this.contractMain = ContractMainDTO.toContractMainDTO(huaNongCrawlerOrder);
         this.appliType = "0";
-        this.underwritingMark = underwritingMark;
+        this.underwritingMark = "";
         this.loginCom = loginCom;
         this.submitQuoteFlag = "";
         this.htmlSource = "";

+ 55 - 33
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/response/HuaNongCrawlerCatalogQueryResponse.java

@@ -27,6 +27,7 @@ public class HuaNongCrawlerCatalogQueryResponse {
     @NoArgsConstructor
     @Data
     public static class DataDTO {
+
         @JsonProperty("treeData")
         private List<TreeDataDTO> treeData;
 
@@ -53,63 +54,69 @@ public class HuaNongCrawlerCatalogQueryResponse {
             @Data
             public static class PagesDTO {
 
+                @JsonProperty("thumbUrl")
+                private String thumbUrl;
+
+                @JsonProperty("imageUrl")
+                private String imageUrl;
+
+                @JsonProperty("progressStatl")
+                private Integer progressStatl;
+
+                @JsonProperty("originalName")
+                private String originalName;
+
+                @JsonProperty("pageFormat")
+                private String pageFormat;
+
                 @JsonProperty("id")
                 private String id;
 
-                @JsonProperty("docId")
-                private String docId;
-
                 @JsonProperty("nodeId")
                 private String nodeId;
 
-                @JsonProperty("createUser")
-                private String createUser;
+                @JsonProperty("newFileFlag")
+                private Integer newFileFlag;
+
+                @JsonProperty("noSubmitFileFlag")
+                private Integer noSubmitFileFlag;
+
+                @JsonProperty("appCode")
+                private String appCode;
+
+                @JsonProperty("bizNo")
+                private String bizNo;
+
+                @JsonProperty("type")
+                private String type;
 
                 @JsonProperty("createUserName")
                 private String createUserName;
 
-                @JsonProperty("modifyUser")
-                private String modifyUser;
-
-                @JsonProperty("modifyTime")
-                private String modifyTime;
+                @JsonProperty("createUser")
+                private String createUser;
 
                 @JsonProperty("uploadOrg")
                 private String uploadOrg;
 
+                @JsonProperty("createTime")
+                private String createTime;
+
                 @JsonProperty("pageName")
                 private String pageName;
 
-                @JsonProperty("originalName")
-                private String originalName;
+                @JsonProperty("tempId")
+                private String tempId;
+
+                @JsonProperty("exif")
+                private String exif;
 
                 @JsonProperty("pageDesc")
                 private String pageDesc;
 
-                @JsonProperty("imageUrl")
-                private String imageUrl;
-
-                @JsonProperty("thumbUrl")
-                private String thumbUrl;
-
-                @JsonProperty("pageSize")
-                private String pageSize;
-
-                @JsonProperty("pageFormat")
-                private String pageFormat;
-
-                @JsonProperty("pageCrc")
-                private String pageCrc;
-
-                @JsonProperty("pageVer")
-                private Integer pageVer;
-
                 @JsonProperty("sortNo")
                 private Integer sortNo;
 
-                @JsonProperty("createTime")
-                private String createTime;
-
             }
 
             @NoArgsConstructor
@@ -152,6 +159,21 @@ public class HuaNongCrawlerCatalogQueryResponse {
                 @JsonProperty("sortNo")
                 private Integer sortNo;
 
+                @JsonProperty("bizNo")
+                private String bizNo;
+
+                @JsonProperty("appCode")
+                private String appCode;
+
+                @JsonProperty("appName")
+                private String appName;
+
+                @JsonProperty("icon")
+                private String icon;
+
+                @JsonProperty("label")
+                private String label;
+
                 @JsonProperty("children")
                 private List<NodesDTO> children;
 

+ 2 - 2
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/entity/response/HuaNongCrawlerQuotedPriceResponse.java

@@ -989,7 +989,7 @@ public class HuaNongCrawlerQuotedPriceResponse implements HuaNongHeadResponse{
             @Data
             public static class TaxDTO {
                 @JsonProperty("sumTax")
-                private Integer sumTax;
+                private Double sumTax;
                 @JsonProperty("exceedDaysCount")
                 private Integer exceedDaysCount;
                 @JsonProperty("sumOverdue")
@@ -1368,7 +1368,7 @@ public class HuaNongCrawlerQuotedPriceResponse implements HuaNongHeadResponse{
                 @JsonProperty("chdPriCarHighRiskId")
                 private String chdPriCarHighRiskId;
                 @JsonProperty("ci_totalPremium")
-                private Integer ciTotalpremium;
+                private Double ciTotalpremium;
                 @JsonProperty("perRateUpperLimit")
                 private Integer perRateUpperLimit;
                 @JsonProperty("vat")

+ 12 - 0
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/HuaNongCrawlerOrderService.java

@@ -11,4 +11,16 @@ public interface HuaNongCrawlerOrderService {
      * @return 华农订单信息
      */
     HuaNongCrawlerOrder getById(String ordersNo);
+
+
+    /**
+     * 保存订单信息到mangodb
+     *
+     * @param orderNo        掌柜订单号
+     * @param ciPolicyNumber 交强投保单号
+     * @param biPolicyNumber 商业投保单号
+     */
+    void saveOrder(String orderNo, String ciPolicyNumber, String biPolicyNumber);
+
+
 }

+ 8 - 3
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/HuaNongCrawlerQuoteProcessService.java

@@ -20,19 +20,24 @@ public interface HuaNongCrawlerQuoteProcessService {
     /**
      * 获取归属信息
      *
+     * @param agreementId                       协议id
      * @param huaNongCrawlerConfigureParameters 配置信息
      * @param username                          用户名
      * @param token                             token
      * @param loginComCode                      登录机构编码
      */
-    HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO attributionInformation(HuaNongCrawlerConfigureParameters huaNongCrawlerConfigureParameters, String username, String token, String loginComCode);
+    HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO attributionInformation(String agreementId, HuaNongCrawlerConfigureParameters huaNongCrawlerConfigureParameters,
+                                                                                               String username, String token, String loginComCode);
 
     /**
      * 上传影像
      *
+     * @param username    用户名
+     * @param agreementId 协议号
+     * @param contractNo  华农订单号
      * @param imageVoList 影像列表
-     * @param token       登录 token
+     * @param loginCom    登陆机构
      */
-    void uploadImage(List<InsuranceImageVo> imageVoList, String token);
+    void uploadImage(String username, String agreementId, String contractNo, List<InsuranceImageVo> imageVoList, String loginCom);
 
 }

+ 20 - 0
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerOrderServiceImpl.java

@@ -1,11 +1,17 @@
 package com.jzg.quotation.huanong.crawler.service.impl;
 
+import com.jzg.quotation.commons.utils.TimeProcessing;
 import com.jzg.quotation.huanong.crawler.entity.po.HuaNongCrawlerOrder;
 import com.jzg.quotation.huanong.crawler.repository.HuaNongCrawlerOrderRepository;
 import com.jzg.quotation.huanong.crawler.service.HuaNongCrawlerOrderService;
 import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
+import java.util.Objects;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
 
 @Service
 @RequiredArgsConstructor
@@ -18,4 +24,18 @@ public class HuaNongCrawlerOrderServiceImpl implements HuaNongCrawlerOrderServic
         return huaNongCrawlerOrderRepository.getById(ordersNo);
     }
 
+    @Override
+    public void saveOrder(String orderNo, String ciPolicyNumber, String biPolicyNumber) {
+        HuaNongCrawlerOrder huaNongCrawlerOrder = new HuaNongCrawlerOrder();
+        String policyNumber = Stream.of(ciPolicyNumber, biPolicyNumber)
+                .filter(StringUtils::isNotEmpty)
+                .collect(Collectors.joining(","));
+        huaNongCrawlerOrder.setId(orderNo);
+        huaNongCrawlerOrder.setOrdersNo(policyNumber);
+        huaNongCrawlerOrder.setCiPolicyNumber(ciPolicyNumber);
+        huaNongCrawlerOrder.setBiPolicyNumber(biPolicyNumber);
+        huaNongCrawlerOrder.setRecordingTime(TimeProcessing.nowDateTime());
+        huaNongCrawlerOrderRepository.save(huaNongCrawlerOrder);
+    }
+
 }

+ 93 - 52
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerQuoteProcessServiceImpl.java

@@ -2,7 +2,8 @@ package com.jzg.quotation.huanong.crawler.service.impl;
 
 import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
 import com.jzg.commons.exception.SystemException;
-import com.jzg.quotation.commons.component.DistributedLockUtil;
+import com.jzg.quotation.commons.component.DistributedLockComponent;
+import com.jzg.quotation.commons.component.RedissonComponent;
 import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
 import com.jzg.quotation.huanong.crawler.component.HuaNongCrawlerCacheComponent;
 import com.jzg.quotation.huanong.crawler.component.HuaNongCrawlerRequestComponent;
@@ -12,10 +13,12 @@ import com.jzg.quotation.huanong.crawler.entity.request.*;
 import com.jzg.quotation.huanong.crawler.entity.response.*;
 import com.jzg.quotation.huanong.crawler.service.HuaNongCrawlerQuoteProcessService;
 import lombok.RequiredArgsConstructor;
+import org.redisson.api.RMap;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
+import java.time.Duration;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -32,15 +35,21 @@ public class HuaNongCrawlerQuoteProcessServiceImpl implements HuaNongCrawlerQuot
 
     private final ExteriorUtilsRequest exteriorUtilsRequest;
 
-    private final DistributedLockUtil distributedLockUtil;
+    private final DistributedLockComponent distributedLockComponent;
+
+    private final RedissonComponent redissonComponent;
 
     // 登录循环次数
     private final static int LOGIN_RETRY_COUNT = 3;
 
+    private static void accept(HuaNongCrawlerCatalogQueryResponse.DataDTO.TreeDataDTO x) {
+        propagateProperties(x.getNodes(), x);
+    }
+
     @Override
     public void login(String username, String password, boolean isFirst) {
         try {
-            distributedLockUtil.executeWithLock(HuaNongCrawlerCacheComponent.LOGIN_LOCKOUT + username, () -> authorization(username, password, isFirst), 20, 30);
+            distributedLockComponent.executeWithLock(HuaNongCrawlerCacheComponent.LOGIN_LOCKOUT + username, () -> authorization(username, password, isFirst), 20, 30);
         } catch (Exception e) {
             e.printStackTrace();
             throw new SystemException("登录失败");
@@ -93,69 +102,101 @@ public class HuaNongCrawlerQuoteProcessServiceImpl implements HuaNongCrawlerQuot
     }
 
     @Override
-    public HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO attributionInformation(HuaNongCrawlerConfigureParameters parameters, String username, String token, String loginComCode) {
-        HttpHeaders httpHeaders = new HttpHeaders();
-        // 归属机构
-        HuaNongCrawlerComInfoQueryRequestRequest huaNongCrawlerComInfoQueryRequest = new HuaNongCrawlerComInfoQueryRequestRequest(loginComCode, token);
-        HuaNongCrawlerComInfoQueryResponse huaNongCrawlerComInfoQueryResponse = huaNongCrawlerRequestComponent.comInfoQuery(huaNongCrawlerComInfoQueryRequest, httpHeaders);
-        List<HuaNongCrawlerComInfoQueryResponse.ComListDTO> comList = huaNongCrawlerComInfoQueryResponse.getComList();
-        Map<String, HuaNongCrawlerComInfoQueryResponse.ComListDTO> com = comList.stream()
-                .collect(Collectors.toMap(HuaNongCrawlerComInfoQueryResponse.ComListDTO::getComCode, x -> x));
-
-        // 代理人信息
-        HuaNongCrawlerUserTypeAndProxyInfoQueryRequestRequest userTypeAndProxyInfoQueryRequest = new HuaNongCrawlerUserTypeAndProxyInfoQueryRequestRequest(username, token, loginComCode, parameters.getComCode());
-        HuaNongCrawlerUserTypeAndProxyInfoQueryResponse userTypeAndProxyInfoQueryResponse = huaNongCrawlerRequestComponent.userTypeAndProxyInfoQuery(userTypeAndProxyInfoQueryRequest, httpHeaders);
-
-        //代理人
-        List<HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.AgentInfoListDTO> agentInfoList = userTypeAndProxyInfoQueryResponse.getAgentInfoList();
-        Map<String, HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.AgentInfoListDTO> agentInfoListDTOMap = agentInfoList.stream()
-                .collect(Collectors.toMap(HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.AgentInfoListDTO::getAgentCode, x -> x));
-
-        // 协议号
-        List<HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.AgreementListDTO> agreementList = userTypeAndProxyInfoQueryResponse.getAgreementList();
-        Map<String, String> map = agreementList.stream()
-                .collect(Collectors.toMap(HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.AgreementListDTO::getAgreementNo, HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.AgreementListDTO::getAgentCode));
-
-        // 业务员
-        List<HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.HandlerListDTO> handlerList = userTypeAndProxyInfoQueryResponse.getHandlerList();
-        Map<String, HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.HandlerListDTO> handler = handlerList.stream()
-                .collect(Collectors.toMap(HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.HandlerListDTO::getHandlerCode, x -> x));
-
-        // 管理渠道
-        HuaNongCrawlerBaseCodeRequestRequest baseCodeRequest = new HuaNongCrawlerBaseCodeRequestRequest(token, loginComCode, parameters.getComCode(), "CHANNEL_SOURCE");
-        HuaNongCrawlerBaseCodeResponse.BaseInfoDTO baseInfoDTO = huaNongCrawlerRequestComponent.channelSource(baseCodeRequest, httpHeaders, userTypeAndProxyInfoQueryResponse.getChannelSource());
-
-        Map<String, HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.ProducerListDTO> producerMap = Optional.ofNullable(userTypeAndProxyInfoQueryResponse.getProducerList())
-                .orElseGet(Collections::emptyList)
-                .stream()
-                .collect(Collectors.toMap(HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.ProducerListDTO::getProducerName, x->x));
-        HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.ProducerListDTO producerListDTO = producerMap.get(parameters.getProducer());
-
-        HuaNongCrawlerComInfoQueryResponse.ComListDTO comListDTO = com.get(parameters.getComCode());
-        HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.HandlerListDTO handlerListDTO = handler.get(parameters.getHandlerCode());
-        HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.AgentInfoListDTO agentInfoListDTO = agentInfoListDTOMap.get(map.get(parameters.getAgreementNo()));
-        return new HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO(comListDTO, handlerListDTO, agentInfoListDTO, producerListDTO, baseInfoDTO, parameters.getCallerName());
+    public HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO attributionInformation(String agreementId, HuaNongCrawlerConfigureParameters parameters, String username, String token, String loginComCode) {
+        return redissonComponent.cacheJson(HuaNongCrawlerCacheComponent.SALE_INFO + agreementId, () -> {
+            HttpHeaders httpHeaders = new HttpHeaders();
+            // 归属机构
+            HuaNongCrawlerComInfoQueryRequestRequest huaNongCrawlerComInfoQueryRequest = new HuaNongCrawlerComInfoQueryRequestRequest(loginComCode, token);
+            HuaNongCrawlerComInfoQueryResponse huaNongCrawlerComInfoQueryResponse = huaNongCrawlerRequestComponent.comInfoQuery(huaNongCrawlerComInfoQueryRequest, httpHeaders);
+            List<HuaNongCrawlerComInfoQueryResponse.ComListDTO> comList = huaNongCrawlerComInfoQueryResponse.getComList();
+            Map<String, HuaNongCrawlerComInfoQueryResponse.ComListDTO> com = comList.stream()
+                    .collect(Collectors.toMap(HuaNongCrawlerComInfoQueryResponse.ComListDTO::getComCode, x -> x));
+
+            // 代理人信息
+            HuaNongCrawlerUserTypeAndProxyInfoQueryRequestRequest userTypeAndProxyInfoQueryRequest = new HuaNongCrawlerUserTypeAndProxyInfoQueryRequestRequest(username, token, loginComCode, parameters.getComCode());
+            HuaNongCrawlerUserTypeAndProxyInfoQueryResponse userTypeAndProxyInfoQueryResponse = huaNongCrawlerRequestComponent.userTypeAndProxyInfoQuery(userTypeAndProxyInfoQueryRequest, httpHeaders);
+
+            //代理人
+            List<HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.AgentInfoListDTO> agentInfoList = userTypeAndProxyInfoQueryResponse.getAgentInfoList();
+            Map<String, HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.AgentInfoListDTO> agentInfoListDTOMap = agentInfoList.stream()
+                    .collect(Collectors.toMap(HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.AgentInfoListDTO::getAgentCode, x -> x));
+
+            // 协议号
+            List<HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.AgreementListDTO> agreementList = userTypeAndProxyInfoQueryResponse.getAgreementList();
+            Map<String, String> map = agreementList.stream()
+                    .collect(Collectors.toMap(HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.AgreementListDTO::getAgreementNo, HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.AgreementListDTO::getAgentCode));
+
+            // 业务员
+            List<HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.HandlerListDTO> handlerList = userTypeAndProxyInfoQueryResponse.getHandlerList();
+            Map<String, HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.HandlerListDTO> handler = handlerList.stream()
+                    .collect(Collectors.toMap(HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.HandlerListDTO::getHandlerCode, x -> x));
+
+            // 管理渠道
+            HuaNongCrawlerBaseCodeRequestRequest baseCodeRequest = new HuaNongCrawlerBaseCodeRequestRequest(token, loginComCode, parameters.getComCode(), "CHANNEL_SOURCE");
+            HuaNongCrawlerBaseCodeResponse.BaseInfoDTO baseInfoDTO = huaNongCrawlerRequestComponent.channelSource(baseCodeRequest, httpHeaders, userTypeAndProxyInfoQueryResponse.getChannelSource());
+
+            Map<String, HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.ProducerListDTO> producerMap = Optional.ofNullable(userTypeAndProxyInfoQueryResponse.getProducerList())
+                    .orElseGet(Collections::emptyList)
+                    .stream()
+                    .collect(Collectors.toMap(HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.ProducerListDTO::getProducerName, x -> x));
+            HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.ProducerListDTO producerListDTO = producerMap.get(parameters.getProducer());
+
+            HuaNongCrawlerComInfoQueryResponse.ComListDTO comListDTO = com.get(parameters.getComCode());
+            HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.HandlerListDTO handlerListDTO = handler.get(parameters.getHandlerCode());
+            HuaNongCrawlerUserTypeAndProxyInfoQueryResponse.AgentInfoListDTO agentInfoListDTO = agentInfoListDTOMap.get(map.get(parameters.getAgreementNo()));
+            return new HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO(comListDTO, handlerListDTO, agentInfoListDTO, producerListDTO, baseInfoDTO, parameters.getCallerName());
+        }, HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO.class, Duration.ofHours(HuaNongCrawlerCacheComponent.SALE_INFO_TIME));
     }
 
-
-
     @Override
-    public void uploadImage(List<InsuranceImageVo> imageVoList, String token) {
+    public void uploadImage(String username, String agreementId, String contractNo, List<InsuranceImageVo> imageVoList, String loginCom) {
+        RMap<String, Object> authorization = huaNongCrawlerCacheComponent.getAuthorization(username);
+        HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO saleInfoDTO = huaNongCrawlerCacheComponent.getSaleInfoDTO(agreementId);
+        // 登录信息
+        String token = (String) authorization.get(HuaNongCrawlerCacheComponent.TOKEN);
+        // 登录机构
+        String loginComCode = (String) authorization.get(loginCom);
+
         // 跳转上传影像页面
-        HuaNongCrawlerNewImageQueryRequestRequest huaNongCrawlerNewImageQueryRequest = new HuaNongCrawlerNewImageQueryRequestRequest();
+        HuaNongCrawlerNewImageQueryRequestRequest huaNongCrawlerNewImageQueryRequest
+                = new HuaNongCrawlerNewImageQueryRequestRequest(loginCom, loginComCode, contractNo, token, saleInfoDTO.getSalesman().get(0).getHandlerCode(), saleInfoDTO.getSalesman().get(0).getHandlerName());
         String data = huaNongCrawlerRequestComponent.newImageQuery(huaNongCrawlerNewImageQueryRequest, new HttpHeaders());
         // 获取accessToken
         HttpHeaders httpHeaders = new HttpHeaders();
         String accessToken = huaNongCrawlerRequestComponent.bizUpload(data, httpHeaders);
         // 查询上传目录
-        huaNongCrawlerRequestComponent.catalogQuery(accessToken, "", httpHeaders);
+        HuaNongCrawlerCatalogQueryResponse huaNongCrawlerCatalogQueryResponse = huaNongCrawlerRequestComponent.catalogQuery(accessToken, contractNo, httpHeaders);
+
+        List<HuaNongCrawlerCatalogQueryResponse.DataDTO.TreeDataDTO> treeData = huaNongCrawlerCatalogQueryResponse.getData()
+                .getTreeData();
+        treeData.forEach(HuaNongCrawlerQuoteProcessServiceImpl::accept);
+
         // 上传影像
-        huaNongCrawlerRequestComponent.fileUpload(accessToken, new File(""), httpHeaders);
+        HuaNongCrawlerFileUploadResponse huaNongCrawlerFileUploadResponse = huaNongCrawlerRequestComponent.fileUpload(accessToken, new File(""), httpHeaders);
+
         // 提交影像
-        HuaNongCrawlerFileSubmitRequest huaNongCrawlerFileSubmitRequest = new HuaNongCrawlerFileSubmitRequest();
+        HuaNongCrawlerFileSubmitRequest huaNongCrawlerFileSubmitRequest = new HuaNongCrawlerFileSubmitRequest(treeData);
         huaNongCrawlerRequestComponent.fileSubmit(huaNongCrawlerFileSubmitRequest, accessToken, httpHeaders);
 
     }
 
+    public static void propagateProperties(List<HuaNongCrawlerCatalogQueryResponse.DataDTO.TreeDataDTO.NodesDTO> nodes, HuaNongCrawlerCatalogQueryResponse.DataDTO.TreeDataDTO treeDataDTO) {
+        nodes.forEach(node -> {
+            // 处理当前节点的直接子节点
+            Optional.ofNullable(node.getChildren())
+                    .ifPresent(children -> children.forEach(child -> {
+                        // 设置属性
+                        child.setAppCode(treeDataDTO.getAppCode());
+                        child.setAppName(treeDataDTO.getAppName());
+                        child.setIcon("iconwj-wj-2");
+                        child.setBizNo(treeDataDTO.getBizNo());
+                        child.setLabel(child.getNodeName() + "(0)");
+                        // 递归处理所有子孙节点
+                        if (child.getChildren() != null && !child.getChildren().isEmpty()) {
+                            propagateProperties(child.getChildren(), treeDataDTO);
+                        }
+                    }));
+        });
+    }
 
 }

+ 86 - 54
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/service/impl/HuaNongCrawlerRequestImpl.java

@@ -6,6 +6,7 @@ import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.StringUtils;
 import com.jzg.quotation.commons.annotation.QuoteCrawlerService;
 import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
@@ -16,21 +17,20 @@ import com.jzg.quotation.huanong.crawler.component.HuaNongCrawlerRequestComponen
 import com.jzg.quotation.huanong.crawler.entity.HuaNongCrawlerConfigureParameters;
 import com.jzg.quotation.huanong.crawler.entity.po.HuaNongCrawlerOrder;
 import com.jzg.quotation.huanong.crawler.entity.request.*;
-import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerModelsQueryResponse;
-import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerPrecisionServiceSearchResponse;
-import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerQuotedPriceResponse;
-import com.jzg.quotation.huanong.crawler.entity.response.HuaNongCrawlerSubmitResponse;
+import com.jzg.quotation.huanong.crawler.entity.response.*;
 import com.jzg.quotation.huanong.crawler.service.HuaNongCrawlerGetToken;
 import com.jzg.quotation.huanong.crawler.service.HuaNongCrawlerOrderService;
 import com.jzg.quotation.huanong.crawler.service.HuaNongCrawlerQuoteProcessService;
 import com.jzg.quotation.huanong.crawler.service.HuaNongCrawlerRequest;
+import com.jzg.quotation.huanong.enums.dictionary.Risk;
+import lombok.AllArgsConstructor;
+import lombok.Data;
 import lombok.RequiredArgsConstructor;
 import org.jetbrains.annotations.NotNull;
 import org.redisson.api.RMap;
 import org.springframework.http.HttpHeaders;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
@@ -44,8 +44,6 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
 
     private final HuaNongCrawlerQuoteProcessService huaNongCrawlerQuoteProcessService;
 
-    private final HuaNongCrawlerCacheComponent huaNongCrawlerCacheComponent;
-
     private final HuaNongCrawlerGetToken huaNongCrawlerGetToken;
 
     @Override
@@ -56,48 +54,45 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) {
         HttpHeaders httpHeaders = new HttpHeaders();
-        AttributionInformationVo attributionInformationVo = getAttributionInformationVo(quoteVo);
-        HuaNongCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(HuaNongCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
-        RMap<String, Object> authorization = huaNongCrawlerGetToken.getAuthorization(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
-        String token = (String) authorization.get(HuaNongCrawlerCacheComponent.TOKEN);
-        String loginCom = parameters.getLoginCom();
-        String loginComCode = (String) authorization.get(loginCom);
+        AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
+        LoginInfoDto loginInfoDto = getLoginInfoDto(attributionInformationVo);
 
-        // 归属信息
-        HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO saleInfoDTO = huaNongCrawlerQuoteProcessService.attributionInformation(parameters, attributionInformationVo.getUsername(), token, loginComCode);
+        // 1 归属信息
+        HuaNongCrawlerQuotedPriceRequestRequest.BusinessDataDTO.SaleInfoDTO saleInfoDTO =
+                huaNongCrawlerQuoteProcessService.attributionInformation(quoteVo.getOrder()
+                        .getAgreementId(), loginInfoDto.getParameters(), attributionInformationVo.getUsername(), loginInfoDto.getToken(), loginInfoDto.getLoginComCode());
 
-        // 车型查询
+        // 2 车型查询
         CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
-        HuaNongCrawlerModelsQueryRequestRequest huaNongCrawlerModelsQueryRequest = new HuaNongCrawlerModelsQueryRequestRequest(token, loginComCode, carInfoVo);
+        HuaNongCrawlerModelsQueryRequestRequest huaNongCrawlerModelsQueryRequest = new HuaNongCrawlerModelsQueryRequestRequest(loginInfoDto.getToken(), loginInfoDto.getLoginComCode(), carInfoVo);
         HuaNongCrawlerModelsQueryResponse huaNongCrawlerModelsQueryResponse = huaNongCrawlerRequestComponent.modelsQuery(huaNongCrawlerModelsQueryRequest, httpHeaders);
         HuaNongCrawlerModelsQueryResponse.CarModelDTO carModelDTO = CarModelsFilterUtils.to(huaNongCrawlerModelsQueryResponse.getCarModel(), carInfoVo);
-        // 精确查询
-        HuaNongCrawlerPrecisionServiceSearchRequest precisionServiceSearchRequest = new HuaNongCrawlerPrecisionServiceSearchRequest(token, loginComCode, carInfoVo, carModelDTO );
+        // 3 精确查询
+        HuaNongCrawlerPrecisionServiceSearchRequest precisionServiceSearchRequest = new HuaNongCrawlerPrecisionServiceSearchRequest(loginInfoDto.getToken(), loginInfoDto.getLoginComCode(), carInfoVo, carModelDTO);
         HuaNongCrawlerPrecisionServiceSearchResponse precisionServiceSearchResponse = huaNongCrawlerRequestComponent.precisionServiceSearch(precisionServiceSearchRequest, httpHeaders);
         HuaNongCrawlerPrecisionServiceSearchResponse.CarModelDTO carModel = CarModelsFilterUtils.to(precisionServiceSearchResponse.getCarModel(), carInfoVo);
 
-        // 折旧价查询
-        HuaNongCrawlerActualValueRequestRequest huaNongCrawlerActualValueRequest = new HuaNongCrawlerActualValueRequestRequest(token, loginComCode, carModel, carInfoVo);
+        // 4 折旧价查询
+        HuaNongCrawlerActualValueRequestRequest huaNongCrawlerActualValueRequest = new HuaNongCrawlerActualValueRequestRequest(loginInfoDto.getToken(), loginInfoDto.getLoginComCode(), carModel, carInfoVo);
         String actualValue = huaNongCrawlerRequestComponent.actualValue(huaNongCrawlerActualValueRequest, httpHeaders);
 
-        // 保费计算
+        // 5 保费计算
         HuaNongCrawlerQuotedPriceRequestRequest huaNongCrawlerQuotedPriceRequest
-                = new HuaNongCrawlerQuotedPriceRequestRequest(token, attributionInformationVo.getUsername(), quoteVo, loginComCode, actualValue, parameters, carModel, saleInfoDTO);
+                = new HuaNongCrawlerQuotedPriceRequestRequest(loginInfoDto.getToken(), attributionInformationVo.getUsername(), quoteVo, loginInfoDto.getLoginComCode(), actualValue, loginInfoDto.getParameters(), carModel, saleInfoDTO);
 
         HuaNongCrawlerQuotedPriceResponse huaNongCrawlerQuotedPriceResponse = huaNongCrawlerRequestComponent.quotedPrice(huaNongCrawlerQuotedPriceRequest, httpHeaders);
 
-        // 保存
-        HuaNongCrawlerSaveRequestRequest huaNongCrawlerSaveRequest = getHuaNongCrawlerSaveRequestRequest(huaNongCrawlerQuotedPriceResponse, token, loginComCode);
-        huaNongCrawlerRequestComponent.save(huaNongCrawlerSaveRequest, httpHeaders);
+        // 6 保存
+        HuaNongCrawlerSaveRequestRequest huaNongCrawlerSaveRequest = getHuaNongCrawlerSaveRequestRequest(huaNongCrawlerQuotedPriceResponse, loginInfoDto.getToken(), loginInfoDto.getLoginComCode());
+        HuaNongCrawlerSaveResponse saveResponse = huaNongCrawlerRequestComponent.save(huaNongCrawlerSaveRequest, httpHeaders);
 
-        return HuaNongCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo.getOrder()
-                .getOrdersNo(), quoteVo, huaNongCrawlerQuotedPriceResponse);
+        QuoteResultsVo quoteResultsVo = HuaNongCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(quoteVo.getOrder()
+                .getOrdersNo(), quoteVo, huaNongCrawlerQuotedPriceResponse, saveResponse);
+        // 7 将订单信息保存到mongodb(后续需要使用)
+        huaNongCrawlerOrderService.saveOrder(quoteResultsVo.getOrdersNo(), quoteResultsVo.getCiPolicyNumber(), quoteResultsVo.getBiPolicyNumber());
+        return quoteResultsVo;
     }
 
-    private static AttributionInformationVo getAttributionInformationVo(QuoteVo quoteVo) {
-        AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
-        return attributionInformationVo;
-    }
 
     @NotNull
     private static HuaNongCrawlerSaveRequestRequest getHuaNongCrawlerSaveRequestRequest(HuaNongCrawlerQuotedPriceResponse huaNongCrawlerQuotedPriceResponse, String token, String loginComCode) {
@@ -137,69 +132,106 @@ public class HuaNongCrawlerRequestImpl implements HuaNongCrawlerRequest {
 
         AttributionInformationVo attributionInformationVo = paymentLinkVo.getOrder().getAttributionInformationVo();
         HuaNongCrawlerConfigureParameters huaNongCrawlerConfigureParameters = ConfigureParametersConversion.conversionEntity(HuaNongCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
+        String payUrl = huaNongCrawlerRequestComponent.getPayUrl(huaNongCrawlerOrder.getCiPolicyNumber(), huaNongCrawlerOrder.getBiPolicyNumber(), huaNongCrawlerConfigureParameters.getComCode());
+
         PaymentLinkResultsVo paymentLinkResultsVo = new PaymentLinkResultsVo();
-        paymentLinkResultsVo.setPaymentLink(huaNongCrawlerRequestComponent.getPayUrl(huaNongCrawlerOrder.getCiPolicyNumber(), huaNongCrawlerOrder.getBiPolicyNumber(), huaNongCrawlerConfigureParameters.getComCode()));
+        paymentLinkResultsVo.setPaymentLink(payUrl);
         return paymentLinkResultsVo;
     }
 
     @Override
     public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
+        HuaNongCrawlerOrder huaNongCrawlerOrder = huaNongCrawlerOrderService.getById(insuranceUploadImageVo.getOrder()
+                .getOrdersNo());
+        String contractNo = huaNongCrawlerOrder.getOrdersNo();
+
         AttributionInformationVo attributionInformationVo = insuranceUploadImageVo.getOrder()
                 .getAttributionInformationVo();
         HuaNongCrawlerConfigureParameters huaNongCrawlerConfigureParameters = ConfigureParametersConversion.conversionEntity(HuaNongCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
-        String token = huaNongCrawlerCacheComponent.getToken(attributionInformationVo.getUsername());
 
+        huaNongCrawlerQuoteProcessService.uploadImage(attributionInformationVo.getUsername(), insuranceUploadImageVo.getOrder()
+                .getAgreementId(), contractNo, insuranceUploadImageVo.getImageVoList(), huaNongCrawlerConfigureParameters.getLoginCom());
     }
 
     @Override
     public DownloadPolicyResultVo downloadPolicy(DownloadPolicyVo downloadPolicyVo) {
-        // 获取token
+        DownloadPolicyResultVo downloadPolicyResultVo = new DownloadPolicyResultVo();
         AttributionInformationVo attributionInformationVo = downloadPolicyVo.getOrder().getAttributionInformationVo();
-        String token = huaNongCrawlerGetToken.getToken(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
+        LoginInfoDto loginInfoDto = getLoginInfoDto(attributionInformationVo);
         // 获取订单信息
         HuaNongCrawlerOrder order = huaNongCrawlerOrderService.getById(downloadPolicyVo.getOrder().getOrdersNo());
         HttpHeaders httpHeaders = new HttpHeaders();
-        HuaNongCrawlerFtpDownloadRequestRequest huaNongCrawlerFtpDownloadRequest = new HuaNongCrawlerFtpDownloadRequestRequest();
+        HuaNongCrawlerFtpDownloadRequestRequest huaNongCrawlerFtpDownloadRequest = new HuaNongCrawlerFtpDownloadRequestRequest(loginInfoDto.getToken());
+        HuaNongCrawlerFtpDownloadRequestRequest.FtpDowloadListDTO ftpDowloadListDTO = new HuaNongCrawlerFtpDownloadRequestRequest.FtpDowloadListDTO();
+        huaNongCrawlerFtpDownloadRequest.setFtpDowloadList(List.of(ftpDowloadListDTO));
         // 交强保单 标志
         Optional.ofNullable(order.getCiPolicyNo()).ifPresent(ciPolicyNo -> {
             // 交强保单
-            huaNongCrawlerRequestComponent.ftpDownload(huaNongCrawlerFtpDownloadRequest, httpHeaders);
+            ftpDowloadListDTO.setBiztype("4");
+            ftpDowloadListDTO.setBusinessNo(ciPolicyNo);
+            ftpDowloadListDTO.setRiskCode(Risk.RISK_0507.getRiskCode());
+            String ciPolicyUrl = huaNongCrawlerRequestComponent.ftpDownload(huaNongCrawlerFtpDownloadRequest, httpHeaders);
+            downloadPolicyResultVo.setJqUrl(ciPolicyUrl);
+            ftpDowloadListDTO.setIsBZDown("1");
             // 商业标志
-            huaNongCrawlerRequestComponent.ftpDownload(huaNongCrawlerFtpDownloadRequest, httpHeaders);
+            String ciSignUrl = huaNongCrawlerRequestComponent.ftpDownload(huaNongCrawlerFtpDownloadRequest, httpHeaders);
+            downloadPolicyResultVo.setJqFlagUrl(ciSignUrl);
+
         });
         // 商业保单
-        Optional.ofNullable(order.getBiPolicyNo()).ifPresent(ciPolicyNo -> {
+        Optional.ofNullable(order.getBiPolicyNo()).ifPresent(biPolicyNo -> {
             // 商业保单
-            huaNongCrawlerRequestComponent.ftpDownload(huaNongCrawlerFtpDownloadRequest, httpHeaders);
+            ftpDowloadListDTO.setIsBZDown("0");
+            ftpDowloadListDTO.setBusinessNo(biPolicyNo);
+            String biPolicyUrl = huaNongCrawlerRequestComponent.ftpDownload(huaNongCrawlerFtpDownloadRequest, httpHeaders);
+            downloadPolicyResultVo.setSyUrl(biPolicyUrl);
         });
+
         // 非车险
         order.getNiInfos().forEach(niInfo -> {
             Optional.ofNullable(niInfo.getNiPolicyNo())
-                    .ifPresent(x -> {
-                                HuaNongCrawlerDocumentsPrintRequestRequest huaNongCrawlerDocumentsPrintRequest = new HuaNongCrawlerDocumentsPrintRequestRequest();
-                                huaNongCrawlerRequestComponent.documentsPrint(huaNongCrawlerDocumentsPrintRequest, httpHeaders);
+                    .ifPresent(niPolicyNo -> {
+                                HuaNongCrawlerDocumentsPrintRequestRequest huaNongCrawlerDocumentsPrintRequest = new HuaNongCrawlerDocumentsPrintRequestRequest(loginInfoDto.getToken(), niPolicyNo, attributionInformationVo.getUsername(), loginInfoDto.getLoginComCode());
+                                String niPolicyUrl = huaNongCrawlerRequestComponent.documentsPrint(huaNongCrawlerDocumentsPrintRequest, httpHeaders);
+                                downloadPolicyResultVo.setJyUrl(niPolicyUrl);
                             }
                     );
         });
-        return null;
+
+        return downloadPolicyResultVo;
     }
 
     @Override
     public OrderStatusResultVo queryOrderState(OrderStatusVo orderStatusVo) {
-        AttributionInformationVo attributionInformationVo = orderStatusVo.getOrder().getAttributionInformationVo();
+        LoginInfoDto loginInfoDto = getLoginInfoDto(orderStatusVo.getOrder().getAttributionInformationVo());
+        HttpHeaders httpHeaders = new HttpHeaders();
+        HuaNongCrawlerOrder order = huaNongCrawlerOrderService.getById(orderStatusVo.getOrder().getOrdersNo());
+        String policyNo = StringUtils.hasText(order.getBiPolicyNumber()) ? order.getBiPolicyNumber() : order.getCiPolicyNumber();
+        HuaNongCrawlerFindBusinessesRequestRequest huaNongCrawlerFindBusinessesRequest = new HuaNongCrawlerFindBusinessesRequestRequest(loginInfoDto.getToken(), loginInfoDto.getLoginComCode(), policyNo, order.getRecordingTime());
+        HuaNongCrawlerFindBusinessesResponse businesses = huaNongCrawlerRequestComponent.findBusinesses(huaNongCrawlerFindBusinessesRequest, httpHeaders);
+        return new OrderStatusResultVo();
+    }
+
+    @Data
+    @AllArgsConstructor
+    private static class LoginInfoDto {
+
+        private String token;
+
+        private String loginCom;
+
+        private String loginComCode;
+
+        private HuaNongCrawlerConfigureParameters parameters;
+    }
+
+    private LoginInfoDto getLoginInfoDto(AttributionInformationVo attributionInformationVo) {
         HuaNongCrawlerConfigureParameters parameters = ConfigureParametersConversion.conversionEntity(HuaNongCrawlerConfigureParameters.class, attributionInformationVo.getConfigInfo());
         RMap<String, Object> authorization = huaNongCrawlerGetToken.getAuthorization(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         String token = (String) authorization.get(HuaNongCrawlerCacheComponent.TOKEN);
         String loginCom = parameters.getLoginCom();
         String loginComCode = (String) authorization.get(loginCom);
-
-        HttpHeaders httpHeaders = new HttpHeaders();
-        HuaNongCrawlerOrder order = huaNongCrawlerOrderService.getById(orderStatusVo.getOrder().getOrdersNo());
-
-        HuaNongCrawlerFindBusinessesRequestRequest huaNongCrawlerFindBusinessesRequest = new HuaNongCrawlerFindBusinessesRequestRequest(token, loginComCode);
-        huaNongCrawlerRequestComponent.findBusinesses(huaNongCrawlerFindBusinessesRequest, httpHeaders);
-        return null;
+        return new LoginInfoDto(token, loginCom, loginComCode, parameters);
     }
 
-
 }

+ 7 - 0
tenant/insurance/quotation-huanong/src/main/java/com/jzg/quotation/huanong/crawler/utils/ImageIdGenerate.java

@@ -0,0 +1,7 @@
+package com.jzg.quotation.huanong.crawler.utils;
+
+public final class ImageIdGenerate{
+
+
+
+}

Разница между файлами не показана из-за своего большого размера
+ 17 - 15
tenant/insurance/quotation-summary/src/test/java/com/jzg/quotation/taikang/crawler/service/TKQuotationBaseServiceImplTest.java


+ 1 - 2
tenant/insurance/quotation-taiping/src/main/java/com/jzg/quotation/taiping/crawler/utils/AESEncryption.java

@@ -43,8 +43,7 @@ public final class AESEncryption {
      * @return 加密后的参数
      */
     public static String decrypt(String data) {
-        byte[] encryptedBytes = AES.encrypt(data);
-        return Base64.encode(encryptedBytes);
+        return AES.decryptStr(data);
     }
 
     /**

+ 4 - 2
tenant/organization/src/main/java/com/jzg/organization/event/OrganizationFormApplicationLister.java

@@ -31,9 +31,11 @@ public class OrganizationFormApplicationLister implements ApplicationListener<Ap
     @Override
     public void onApplicationEvent(ApplicationReadyEvent event) {
         //将字典表数据打入到redis中
-        List<SysDict> sysDicts = sysDictMapper.selectList(new LambdaQueryWrapper<>());
+        LambdaQueryWrapper<SysDict> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.orderByAsc(SysDict::getTypeId)
+                .orderByAsc(SysDict::getSort);
+        List<SysDict> sysDicts = sysDictMapper.selectList(lambdaQueryWrapper);
         Map<String, List<SysDict>> collect = sysDicts.stream().collect(Collectors.groupingBy(SysDict::getTypeCode));
-
         Iterable<String> keys = redissonClient.getKeys().getKeysByPattern(DICT_REDIS_KEY + "*"); // 获取所有匹配的键
         for (String key : keys) {
             redissonClient.getList(key).clear();

Некоторые файлы не были показаны из-за большого количества измененных файлов