Explorar el Código

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

wanghao hace 3 meses
padre
commit
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>>() {});
     }
+
+    /**
+     * 获取推荐送修码列表(对应 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路径

+ 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)
         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,
                 agentCode, agentName, handler1Code, handler1CodeDes, handlerCode, handlerCodeDes,
                 carChecker, carCheckerTranslate, gscomCode, comCodeDes, jwtComCode,
-                handlerCodeUni, handler1CodeUni, useYear, cqpCount, linkerName));
+                handlerCodeUni, handler1CodeUni, useYear, cqpCount, linkerName,
+                monopolyCode, monopolyName));
         request.setPrpCitemCar(buildPrpCitemCar(carInfo, actualValueStr, vehicleModelCode,
                 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));
 
         // 价格系数默认使用1.0(与Python保持一致)
@@ -1174,7 +1207,8 @@ public class RenBaoNewCrawlerRequestBuilder {
                                              String carChecker, String carCheckerTranslate,
                                              String gscomCode, String comCodeDes, String jwtComCode,
                                              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<>();
 
         // ========== 基础字段 ==========
@@ -1187,8 +1221,8 @@ public class RenBaoNewCrawlerRequestBuilder {
         prpCmain.put("clauseFlag", "1");
         prpCmain.put("com_table", new ArrayList<>());
         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("cqpCount", cqpCount != null ? cqpCount : "");
         prpCmain.put("otherBase_table", new ArrayList<>());
@@ -1598,7 +1632,8 @@ public class RenBaoNewCrawlerRequestBuilder {
                                                 String carKindCode, String fuelType, String clauseType,
                                                 String vehicleFgwCode, BigDecimal purchasePrice,
                                                 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<>();
         String formattedRegisterDate = formatDateWithTimezone(carInfo.getRegisterDate());
 
@@ -1948,7 +1983,7 @@ public class RenBaoNewCrawlerRequestBuilder {
         prpCitemCar.put("transferDate", isTransfer && transferDate != null ? transferDate : "");
         prpCitemCar.put("modelDemandNo", "");
         prpCitemCar.put("vehicleStyleUniqueId", "");
-        prpCitemCar.put("monopolyCode", "");
+        prpCitemCar.put("monopolyCode", monopolyCode != null ? monopolyCode : "");
 
         return prpCitemCar;
     }