Переглянути джерело

人保,送修码归属问题修改

wanghao 3 місяців тому
батько
коміт
696999ec27

+ 22 - 0
tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/component/RenBaoNewCrawlerRequestComponent.java

@@ -1107,4 +1107,26 @@ public class RenBaoNewCrawlerRequestComponent {
 
 
         return JSON.parseObject(responseEntity.getBody(), new TypeReference<Map<String, Object>>() {});
         return JSON.parseObject(responseEntity.getBody(), new TypeReference<Map<String, Object>>() {});
     }
     }
+
+    /**
+     * 获取推荐送修码列表(对应 Python getMonopoly_list)
+     *
+     * <p>查询指定归属部门下的所有可用送修码,用于校验配置中的 monopolyCode 是否有效</p>
+     *
+     * @param gscomCode 归属部门代码
+     * @param headers   请求头(含 Authorization)
+     * @return 送修码列表响应
+     */
+    public Map<String, Object> getMonopoly(String gscomCode, HttpHeaders headers) {
+        String url = buildUrl(RequestUrl.GET_MONOPOLY.getUrl());
+
+        Map<String, Object> requestData = new HashMap<>();
+        requestData.put("pageNo", 1);
+        requestData.put("pageSize", 1000);
+        requestData.put("storeCodeOrName", "");
+        requestData.put("comCode", gscomCode);
+
+        ResponseEntity<String> responseEntity = requestComponent.stringPost(url, requestData, String.class, headers);
+        return JSON.parseObject(responseEntity.getBody(), new TypeReference<Map<String, Object>>() {});
+    }
 }
 }

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

@@ -150,7 +150,12 @@ public enum RequestUrl {
     /**
     /**
      * 滑块验证二次校验接口
      * 滑块验证二次校验接口
      */
      */
-    SPILDER_VERIFY("/front/019K0000003/spilder/verify");
+    SPILDER_VERIFY("/front/019K0000003/spilder/verify"),
+
+    /**
+     * 获取推荐送修码列表接口(对应 Python getMonopoly_list)
+     */
+    GET_MONOPOLY("/front/019K0000003/zsjzx/getMonopoly");
 
 
     /**
     /**
      * 接口URL路径
      * 接口URL路径

+ 42 - 7
tenant/insurance/quotation-renbaonew/src/main/java/com/jzg/quotation/renbaonew/crawler/service/impl/RenBaoNewCrawlerRequestBuilder.java

@@ -411,14 +411,47 @@ public class RenBaoNewCrawlerRequestBuilder {
         // 构建 prpCmainCommon 和 prpCmainChannel(需要 handler1CodeUni 和 queryArea)
         // 构建 prpCmainCommon 和 prpCmainChannel(需要 handler1CodeUni 和 queryArea)
         String queryArea = calculateQueryArea(loginInfo.getComCode());
         String queryArea = calculateQueryArea(loginInfo.getComCode());
 
 
+        // =====================================================================
+        // 送修码处理(与 Python monopolyCode 逻辑一致)
+        // =====================================================================
+        String monopolyCode = "";
+        String monopolyName = "";
+        String configMonopolyCode = loginInfo.getParameters() != null ? loginInfo.getParameters().getMonopolyCode() : null;
+        if (configMonopolyCode != null && !configMonopolyCode.isEmpty()) {
+            try {
+                Map<String, Object> monopolyResult = requestComponent.getMonopoly(gscomCode, headers);
+                if (isResponseSuccess(monopolyResult)) {
+                    @SuppressWarnings("unchecked")
+                    List<Map<String, Object>> monopolyList = (List<Map<String, Object>>) getNestedValue(monopolyResult, "data", "data");
+                    if (monopolyList != null) {
+                        for (Map<String, Object> item : monopolyList) {
+                            if (configMonopolyCode.equals(getStringValue(item, "storeCode"))) {
+                                monopolyCode = configMonopolyCode;
+                                monopolyName = getStringValue(item, "storeName");
+                                log.info("匹配到送修码: code={}, name={}", monopolyCode, monopolyName);
+                                break;
+                            }
+                        }
+                    }
+                }
+                if (monopolyCode.isEmpty()) {
+                    log.warn("送修码 [{}] 未在 PICC 系统中匹配到,将使用空值", configMonopolyCode);
+                }
+            } catch (Exception e) {
+                log.error("送修码验证失败,将使用空值。error=[{}]", e.getMessage(), e);
+            }
+        }
+
         // 构建核心业务数据(更新为包含完整参数)
         // 构建核心业务数据(更新为包含完整参数)
         request.setPrpCmain(buildPrpCmain(loginInfo, startDate, endDate, businessNature,
         request.setPrpCmain(buildPrpCmain(loginInfo, startDate, endDate, businessNature,
                 agentCode, agentName, handler1Code, handler1CodeDes, handlerCode, handlerCodeDes,
                 agentCode, agentName, handler1Code, handler1CodeDes, handlerCode, handlerCodeDes,
                 carChecker, carCheckerTranslate, gscomCode, comCodeDes, jwtComCode,
                 carChecker, carCheckerTranslate, gscomCode, comCodeDes, jwtComCode,
-                handlerCodeUni, handler1CodeUni, useYear, cqpCount, linkerName));
+                handlerCodeUni, handler1CodeUni, useYear, cqpCount, linkerName,
+                monopolyCode, monopolyName));
         request.setPrpCitemCar(buildPrpCitemCar(carInfo, actualValueStr, vehicleModelCode,
         request.setPrpCitemCar(buildPrpCitemCar(carInfo, actualValueStr, vehicleModelCode,
                 vehicleId, vehicleModelCode, useNatureCode, vehicleClassPicc, fuelType, clauseType, vehicleFgwCode, purchasePrice,
                 vehicleId, vehicleModelCode, useNatureCode, vehicleClassPicc, fuelType, clauseType, vehicleFgwCode, purchasePrice,
-                gscomCode, loginInfo.getUserCode(), headers, username, queryArea, isEnergyCar, energyTypePlat));
+                gscomCode, loginInfo.getUserCode(), headers, username, queryArea, isEnergyCar, energyTypePlat,
+                monopolyCode));
         request.setPrpCinsureds(buildPrpCinsureds(quoteVo,customerResponse));
         request.setPrpCinsureds(buildPrpCinsureds(quoteVo,customerResponse));
 
 
         // 价格系数默认使用1.0(与Python保持一致)
         // 价格系数默认使用1.0(与Python保持一致)
@@ -1174,7 +1207,8 @@ public class RenBaoNewCrawlerRequestBuilder {
                                              String carChecker, String carCheckerTranslate,
                                              String carChecker, String carCheckerTranslate,
                                              String gscomCode, String comCodeDes, String jwtComCode,
                                              String gscomCode, String comCodeDes, String jwtComCode,
                                              String handlerCodeUni, String handler1CodeUni,
                                              String handlerCodeUni, String handler1CodeUni,
-                                             String useYear, String cqpCount, String linkerName) {
+                                             String useYear, String cqpCount, String linkerName,
+                                             String monopolyCode, String monopolyName) {
         Map<String, Object> prpCmain = new HashMap<>();
         Map<String, Object> prpCmain = new HashMap<>();
 
 
         // ========== 基础字段 ==========
         // ========== 基础字段 ==========
@@ -1187,8 +1221,8 @@ public class RenBaoNewCrawlerRequestBuilder {
         prpCmain.put("clauseFlag", "1");
         prpCmain.put("clauseFlag", "1");
         prpCmain.put("com_table", new ArrayList<>());
         prpCmain.put("com_table", new ArrayList<>());
         prpCmain.put("upperPath", "");
         prpCmain.put("upperPath", "");
-        prpCmain.put("monopolyCode", "");
-        prpCmain.put("monopolyName", "");
+        prpCmain.put("monopolyCode", monopolyCode != null ? monopolyCode : "");
+        prpCmain.put("monopolyName", monopolyName != null ? monopolyName : "");
         prpCmain.put("salesmanNum", "");
         prpCmain.put("salesmanNum", "");
         prpCmain.put("cqpCount", cqpCount != null ? cqpCount : "");
         prpCmain.put("cqpCount", cqpCount != null ? cqpCount : "");
         prpCmain.put("otherBase_table", new ArrayList<>());
         prpCmain.put("otherBase_table", new ArrayList<>());
@@ -1598,7 +1632,8 @@ public class RenBaoNewCrawlerRequestBuilder {
                                                 String carKindCode, String fuelType, String clauseType,
                                                 String carKindCode, String fuelType, String clauseType,
                                                 String vehicleFgwCode, BigDecimal purchasePrice,
                                                 String vehicleFgwCode, BigDecimal purchasePrice,
                                                 String comCode, String userCode, HttpHeaders headers, String username,
                                                 String comCode, String userCode, HttpHeaders headers, String username,
-                                                String queryArea, String isEnergyCar, String energyTypePlat) {
+                                                String queryArea, String isEnergyCar, String energyTypePlat,
+                                                String monopolyCode) {
         Map<String, Object> prpCitemCar = new HashMap<>();
         Map<String, Object> prpCitemCar = new HashMap<>();
         String formattedRegisterDate = formatDateWithTimezone(carInfo.getRegisterDate());
         String formattedRegisterDate = formatDateWithTimezone(carInfo.getRegisterDate());
 
 
@@ -1948,7 +1983,7 @@ public class RenBaoNewCrawlerRequestBuilder {
         prpCitemCar.put("transferDate", isTransfer && transferDate != null ? transferDate : "");
         prpCitemCar.put("transferDate", isTransfer && transferDate != null ? transferDate : "");
         prpCitemCar.put("modelDemandNo", "");
         prpCitemCar.put("modelDemandNo", "");
         prpCitemCar.put("vehicleStyleUniqueId", "");
         prpCitemCar.put("vehicleStyleUniqueId", "");
-        prpCitemCar.put("monopolyCode", "");
+        prpCitemCar.put("monopolyCode", monopolyCode != null ? monopolyCode : "");
 
 
         return prpCitemCar;
         return prpCitemCar;
     }
     }