Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/master' into dev_jzg_lipf_v20260506

jiakai 4 mesi fa
parent
commit
cfd2646c07
14 ha cambiato i file con 351 aggiunte e 73 eliminazioni
  1. 2 2
      tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java
  2. 14 3
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/component/HengBangCrawlerRequestComponent.java
  3. 1 1
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/constant/RequestConstant.java
  4. 272 53
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/entity/request/HbCrawlerCalculationRequest.java
  5. 5 1
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/entity/request/HbCrawlerQuoteimmediatelyRequest.java
  6. 16 3
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/service/Impl/HengBangCrawlerRequestImpl.java
  7. 0 0
      tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/utils/HengBangAESUtil.java
  8. 10 4
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java
  9. 2 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsOrdersMapper.java
  10. 10 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java
  11. 1 5
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/IdentifyServiceImpl.java
  12. 5 0
      tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java
  13. 12 0
      tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml
  14. 1 1
      tenant/organization/src/main/resources/mapper/SysUserActivityCompleteInRuleMapper.xml

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

@@ -471,7 +471,7 @@ public class RequestComponent {
      * @return <Response> ResponseEntity<Response>
      * @return <Response> ResponseEntity<Response>
      */
      */
     public <Response> ResponseEntity<Response> post(String url, Object body, Class<Response> responseClass, HttpHeaders headers) {
     public <Response> ResponseEntity<Response> post(String url, Object body, Class<Response> responseClass, HttpHeaders headers) {
-        log.info("URL的值:{},body的值:{}", url, body);
+        log.info("URL的值:{},body的值1:{}", url, body);
         WebClient webClient = selectNoSSLWebClient2();
         WebClient webClient = selectNoSSLWebClient2();
         try {
         try {
             // 创建一个不带Accept-Encoding的请求头,避免服务器返回压缩数据
             // 创建一个不带Accept-Encoding的请求头,避免服务器返回压缩数据
@@ -486,7 +486,7 @@ public class RequestComponent {
             ResponseEntity<String> rawResponse = webClient.post()
             ResponseEntity<String> rawResponse = webClient.post()
                     .uri(url)
                     .uri(url)
                     .headers(setHeaders(requestHeaders))
                     .headers(setHeaders(requestHeaders))
-                    .body(BodyInserters.fromValue(body))
+                    .body(body != null ? BodyInserters.fromValue(body) : BodyInserters.empty())
                     .retrieve()
                     .retrieve()
                     .toEntity(String.class)
                     .toEntity(String.class)
                     .block();
                     .block();

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

@@ -320,13 +320,23 @@ public class HengBangCrawlerRequestComponent {
         MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
         MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
         String encryptPlyappno;
         String encryptPlyappno;
         try {
         try {
-            encryptPlyappno = new StringBuilder(RequestConstant.ENCRYPTPRE).append(HengBangAESUtil.encryptStr(plyappno))
+            encryptPlyappno =  HengBangAESUtil.encryptStr(plyappno);
+            System.out.println("encryptPlyappno1 ===========" + encryptPlyappno);
+            encryptPlyappno = new StringBuilder(RequestConstant.ENCRYPTPRE).append(encryptPlyappno)
                     .toString();
                     .toString();
+            System.out.println("encryptPlyappno2 ===========" + encryptPlyappno);
         } catch (Exception e) {
         } catch (Exception e) {
             throw new SystemException(e.getMessage());
             throw new SystemException(e.getMessage());
         }
         }
         params.add("plyappno", encryptPlyappno);
         params.add("plyappno", encryptPlyappno);
-        HbCrawlerSaleInfoResponse response = requestComponent.get(RequestUrl.PROPOSAL.getRequestUrl(hbCrawlerProperties.getBaseUrl()), params, RequestUrl.PROPOSAL.getRequestDescription(), HbCrawlerSaleInfoResponse.class, headers);
+        HbCrawlerSaleInfoResponse response;
+        try {
+            response = requestComponent.get(RequestUrl.PROPOSAL.getRequestUrl(hbCrawlerProperties.getBaseUrl()), params, RequestUrl.PROPOSAL.getRequestDescription(), HbCrawlerSaleInfoResponse.class, headers);
+        } catch (WebClientResponseException e) {
+            // 记录恒邦服务端返回的详细错误信息
+            String errorDetail = e.getResponseBodyAsString();
+            throw new SystemException("恒邦proposal接口调用失败[500]: " + errorDetail);
+        }
         try {
         try {
             String resJson = HengBangAESUtil.decryptStr(response.getHbEncD());
             String resJson = HengBangAESUtil.decryptStr(response.getHbEncD());
             System.out.println(resJson);
             System.out.println(resJson);
@@ -371,7 +381,8 @@ public class HengBangCrawlerRequestComponent {
      */
      */
     public String coreProposal(String plyappno, HttpHeaders headers, List<Map<String, String>> paramList) {
     public String coreProposal(String plyappno, HttpHeaders headers, List<Map<String, String>> paramList) {
         try {
         try {
-            ResponseEntity<String> responseEntity = requestComponent.objectPost(RequestUrl.SUBMIT.getRequestUrl(hbCrawlerProperties.getBaseUrl()) + "/" +plyappno, paramList, String.class, headers);
+            String requestBody = JSON.toJSONString(paramList);
+            ResponseEntity<String> responseEntity = requestComponent.objectPost(RequestUrl.SUBMIT.getRequestUrl(hbCrawlerProperties.getBaseUrl()) + "/" +plyappno, requestBody, String.class, headers);
             return JSONObject.parseObject(responseEntity.getBody()).getString("message");
             return JSONObject.parseObject(responseEntity.getBody()).getString("message");
         } catch (WebClientResponseException e) {
         } catch (WebClientResponseException e) {
             if(e.getStatusCode().equals(HttpStatusCode.valueOf(500))){
             if(e.getStatusCode().equals(HttpStatusCode.valueOf(500))){

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

@@ -18,7 +18,7 @@ public class RequestConstant {
 
 
     public static final String BEARER = "Bearer ";
     public static final String BEARER = "Bearer ";
 
 
-    public static final String ENCRYPTPRE = "HbinsEncrypt_";
+    public static final  String  ENCRYPTPRE = "HbinsEncrypt_";
 
 
     /**
     /**
      * 恒邦影像上传类型
      * 恒邦影像上传类型

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

@@ -1,6 +1,7 @@
 package com.jzg.quotation.hengbang.crawler.entity.request;
 package com.jzg.quotation.hengbang.crawler.entity.request;
 
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
+import com.jzg.commons.entity.quote.vo.AccidentalDrivingVo;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.KindInfoVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.quotation.commons.utils.DateUtil;
 import com.jzg.quotation.commons.utils.DateUtil;
@@ -18,57 +19,59 @@ import java.util.Objects;
  * @author: shenwd
  * @author: shenwd
  * @date: 2025/4/8 18:15
  * @date: 2025/4/8 18:15
  * {
  * {
- * 	"outofwarrantytype": "N",
- * 	"clauseType": "2",
- * 	"ecarChargingPosts": [],
- * 	"carInsureDevices": [],
- * 	"effectfLag": null,
- * 	"accidentInsuranceList": [],
- * 	"epersonliabilityList": [{
- * 		"kindcode": "101",
- * 		"liabamt": 52248,
- * 		"liabname": "机动车损失保险",
- * 		"model": "0"
- * 	    }, {
- * 		"kindcode": "102",
- * 		"liabamt": 100000,
- * 		"liabname": "机动车第三者责任保险",
- * 		"model": "0"
- *    }, {
- * 		"kindcode": "103",
- * 		"liabamt": 5000,
- * 		"liabname": "机动车车上人员责任保险(司机)",
- * 		"model": "0",
- * 		"quantity": 1,
- * 		"unitAmount": 5000
- *    }, {
- * 		"kindcode": "104",
- * 		"liabamt": 40000,
- * 		"liabname": "机动车车上人员责任保险(乘客)",
- * 		"model": "0",
- * 		"quantity": 4,
- * 		"unitAmount": 10000
- *    }, {
- * 		"kindcode": "115",
- * 		"liabamt": 20000,
- * 		"liabname": "附加医保外医疗费用责任险(三者)",
- * 		"model": "0"
- *    }],
- * 	"begintimeBi": "2025-04-08T11:12:00.000Z",
- * 	"begintimeCi": "2025-04-08T11:12:00.000Z",
- * 	"endtimeBi": "",
- * 	"endtimeCi": "",
- * 	"plyappno": "T9704020801202589742122",
- * 	"risktype": "2",
- * 	"expdisc": "",
- * 	"ecarshiptaxPart": "投保人",
- * 	"taxonomyCode": "02",
- * 	"epolicyFlag": "Y",
- * 	"accidentEpolicyFlag": ""
+ * "outofwarrantytype": "N",
+ * "clauseType": "2",
+ * "ecarChargingPosts": [],
+ * "carInsureDevices": [],
+ * "effectfLag": null,
+ * "drivingtype":"",
+ * "relationCarOwner":"a",
+ * "accidentInsuranceList": [],
+ * "epersonliabilityList": [{
+ * "kindcode": "101",
+ * "liabamt": 52248,
+ * "liabname": "机动车损失保险",
+ * "model": "0"
+ * }, {
+ * "kindcode": "102",
+ * "liabamt": 100000,
+ * "liabname": "机动车第三者责任保险",
+ * "model": "0"
+ * }, {
+ * "kindcode": "103",
+ * "liabamt": 5000,
+ * "liabname": "机动车车上人员责任保险(司机)",
+ * "model": "0",
+ * "quantity": 1,
+ * "unitAmount": 5000
+ * }, {
+ * "kindcode": "104",
+ * "liabamt": 40000,
+ * "liabname": "机动车车上人员责任保险(乘客)",
+ * "model": "0",
+ * "quantity": 4,
+ * "unitAmount": 10000
+ * }, {
+ * "kindcode": "115",
+ * "liabamt": 20000,
+ * "liabname": "附加医保外医疗费用责任险(三者)",
+ * "model": "0"
+ * }],
+ * "begintimeBi": "2025-04-08T11:12:00.000Z",
+ * "begintimeCi": "2025-04-08T11:12:00.000Z",
+ * "endtimeBi": "",
+ * "endtimeCi": "",
+ * "plyappno": "T9704020801202589742122",
+ * "risktype": "2",
+ * "expdisc": "",
+ * "ecarshiptaxPart": "投保人",
+ * "taxonomyCode": "02",
+ * "epolicyFlag": "Y",
+ * "accidentEpolicyFlag": ""
  * }
  * }
  **/
  **/
 @Data
 @Data
-public class HbCrawlerCalculationRequest extends HbBaseRequest{
+public class HbCrawlerCalculationRequest extends HbBaseRequest {
     @Serial
     @Serial
     private static final long serialVersionUID = -6130320344004620564L;
     private static final long serialVersionUID = -6130320344004620564L;
 
 
@@ -77,16 +80,18 @@ public class HbCrawlerCalculationRequest extends HbBaseRequest{
         List<KindInfoVo> kindInfoVoList = quoteVo.getKindInfoVo();
         List<KindInfoVo> kindInfoVoList = quoteVo.getKindInfoVo();
         this.risktype = "0";
         this.risktype = "0";
         this.begintimeBi = DateUtil.toUtcDateTime(quoteVo.getCiRiskInfoVo().getStartDate());
         this.begintimeBi = DateUtil.toUtcDateTime(quoteVo.getCiRiskInfoVo().getStartDate());
-        if(CollUtil.isNotEmpty(kindInfoVoList)){
+        if (CollUtil.isNotEmpty(kindInfoVoList)) {
             this.epersonliabilityList = getEpersonliabilityList(kindInfoVoList);
             this.epersonliabilityList = getEpersonliabilityList(kindInfoVoList);
             this.begintimeBi = DateUtil.toUtcDateTime(quoteVo.getBiRiskInfoVo().getStartDate());
             this.begintimeBi = DateUtil.toUtcDateTime(quoteVo.getBiRiskInfoVo().getStartDate());
+            this.begintimeAccident = DateUtil.toUtcDateTime(quoteVo.getBiRiskInfoVo().getStartDate());
             this.risktype = "2";
             this.risktype = "2";
-        }else{
+        } else {
 //            this.begintimeBi = DateUtil.toUtcDateTime(quoteVo.getCiRiskInfoVo().getStartDate());
 //            this.begintimeBi = DateUtil.toUtcDateTime(quoteVo.getCiRiskInfoVo().getStartDate());
             this.epersonliabilityList = new ArrayList<>();
             this.epersonliabilityList = new ArrayList<>();
         }
         }
-        if(Objects.nonNull(quoteVo.getCiRiskInfoVo())){
+        if (Objects.nonNull(quoteVo.getCiRiskInfoVo())) {
             this.begintimeCi = DateUtil.toUtcDateTime(quoteVo.getCiRiskInfoVo().getStartDate());
             this.begintimeCi = DateUtil.toUtcDateTime(quoteVo.getCiRiskInfoVo().getStartDate());
+            this.begintimeAccident = DateUtil.toUtcDateTime(quoteVo.getCiRiskInfoVo().getStartDate());
             this.risktype = "1";
             this.risktype = "1";
         }
         }
         this.plyappno = plyappno;
         this.plyappno = plyappno;
@@ -100,7 +105,7 @@ public class HbCrawlerCalculationRequest extends HbBaseRequest{
         this.effectfLag = null;
         this.effectfLag = null;
         this.ecarChargingPosts = new ArrayList<>();
         this.ecarChargingPosts = new ArrayList<>();
         this.carInsureDevices = new ArrayList<>();
         this.carInsureDevices = new ArrayList<>();
-        this.accidentInsuranceList = new ArrayList<>();
+        this.accidentInsuranceList = getAccidentInsuranceList(quoteVo.getAccidentalDrivings());
     }
     }
 
 
     public List<EpersonliabilityDTO> getEpersonliabilityList(List<KindInfoVo> kindInfoVoList) {
     public List<EpersonliabilityDTO> getEpersonliabilityList(List<KindInfoVo> kindInfoVoList) {
@@ -117,12 +122,149 @@ public class HbCrawlerCalculationRequest extends HbBaseRequest{
         return epersonliabilityDTOList;
         return epersonliabilityDTOList;
     }
     }
 
 
+    public List<AccidentInsuranceDTO> getAccidentInsuranceList(List<AccidentalDrivingVo> accidentalDrivings) {
+        if (accidentalDrivings == null || accidentalDrivings.isEmpty()) {
+            return new ArrayList<>();
+        }
+        List<AccidentInsuranceDTO> accidentInsuranceList = new ArrayList<>();
+        for (AccidentalDrivingVo vo : accidentalDrivings) {
+            accidentInsuranceList.add(convertToAccidentInsuranceDTO(vo));
+        }
+        return accidentInsuranceList;
+    }
+
+    public static AccidentInsuranceDTO convertToAccidentInsuranceDTO(AccidentalDrivingVo vo) {
+        AccidentInsuranceDTO dto = new AccidentInsuranceDTO();
+        dto.setNonriskcode(vo.getProductCode().split("_")[1]);
+        dto.setProgramcode(vo.getProductCode());
+        dto.setProgramname(vo.getProductName());
+        dto.setCompanycode("0107");
+        dto.setSuminsured(vo.getSumAmount());
+        dto.setSumgrosspremium(vo.getSumPremium());
+        dto.setIfdefault(true);
+        dto.setBuynum(vo.getQuantity());
+        dto.setGgriskprogramclauselist(getGgriskprogramclauseList(vo.getProductCode().split("_")[1], vo.getProductCode()));
+        dto.setGgriskprogramdetailslist(getGgriskprogramdetailsList(vo.getProductCode().split("_")[1], vo.getProductCode()));
+        dto.setGgriskprogramdeductiblelist(new ArrayList<>());
+        dto.setGgriskprogramparamlist(new ArrayList<>());
+        return dto;
+    }
+
+    private static List<GgriskprogramclauseDTO> getGgriskprogramclauseList(String nonriskcode, String programcode) {
+        List<GgriskprogramclauseDTO> list = new ArrayList<>();
+        // 全司意外险特约一
+        GgriskprogramclauseDTO clause1 = new GgriskprogramclauseDTO();
+        clause1.setNonriskcode(nonriskcode);
+        clause1.setProgramcode(programcode);
+        clause1.setClausecode("1101_01");
+        clause1.setClausecname("全司意外险特约一");
+        clause1.setRemark("当被保险人与投保人不一致时,投保人已经就本保险合同载明的保险金额征得了被保险人的同意及认可。");
+        list.add(clause1);
+
+        // 山西驾乘意外险特约一
+        GgriskprogramclauseDTO clause2 = new GgriskprogramclauseDTO();
+        clause2.setNonriskcode(nonriskcode);
+        clause2.setProgramcode(programcode);
+        clause2.setClausecode("11190107_01");
+        clause2.setClausecname("山西驾乘意外险特约一");
+        clause2.setRemark("车辆驾驶员需持国家有关部门核发的有效驾驶证,驾驶投保车辆须符合国家的相关规定,受益人为法定。");
+        list.add(clause2);
+
+        // 山西驾乘意外险特约二
+        GgriskprogramclauseDTO clause3 = new GgriskprogramclauseDTO();
+        clause3.setNonriskcode(nonriskcode);
+        clause3.setProgramcode(programcode);
+        clause3.setClausecode("11190107_02");
+        clause3.setClausecname("山西驾乘意外险特约二");
+        clause3.setRemark("投保车辆必须符合国家规定的车辆使用标准、具备合法有效的行驶证、年检证明,并已投保交强险。");
+        list.add(clause3);
+
+        // 山西驾乘意外险特约四
+        GgriskprogramclauseDTO clause4 = new GgriskprogramclauseDTO();
+        clause4.setNonriskcode(nonriskcode);
+        clause4.setProgramcode(programcode);
+        clause4.setClausecode("11190107_04");
+        clause4.setClausecname("山西驾乘意外险特约四");
+        clause4.setRemark("被保险人每次发生的符合本保单所约定的合理医疗费用,保险人在每次扣除免赔__100___元后,按_80_%的比例进行赔付。");
+        list.add(clause4);
+
+        // 山西驾乘意外险特约五
+        GgriskprogramclauseDTO clause5 = new GgriskprogramclauseDTO();
+        clause5.setNonriskcode(nonriskcode);
+        clause5.setProgramcode(programcode);
+        clause5.setClausecode("11190107_05");
+        clause5.setClausecname("山西驾乘意外险特约五");
+        clause5.setRemark("严格按照车辆行驶证核定的座位数投保,投保内容和行驶证内容不符,则保单无效。");
+        list.add(clause5);
+
+        // 全司驾乘意外险特约一
+        GgriskprogramclauseDTO clause6 = new GgriskprogramclauseDTO();
+        clause6.setNonriskcode(nonriskcode);
+        clause6.setProgramcode(programcode);
+        clause6.setClausecode("111901_01");
+        clause6.setClausecname("全司驾乘意外险特约一");
+        clause6.setRemark("在保险期间内,被保险人乘坐或者驾驶保单中载明的机动车辆并在该车辆行驶过程中于机动车辆内遭受意外,保险人按保单约定承担保险责任。");
+        list.add(clause6);
+
+        return list;
+    }
+
+    private static List<GgriskprogramdetailsDTO> getGgriskprogramdetailsList(String nonriskcode, String programcode) {
+        List<GgriskprogramdetailsDTO> list = new ArrayList<>();
+
+        // 机动车辆驾乘意外伤害保险意外身故保险责任(2024款)
+        GgriskprogramdetailsDTO detail1 = new GgriskprogramdetailsDTO();
+        detail1.setNonriskcode(nonriskcode);
+        detail1.setProgramcode(programcode);
+        detail1.setSerialno(1);
+        detail1.setKindcode("1119066");
+        detail1.setKindname("机动车辆驾乘意外伤害保险意外身故保险责任(2024款)");
+        detail1.setKindrate("0.225");
+        detail1.setKindunitinsured("30000");
+        detail1.setKindsuminsured("240000");
+        detail1.setKindunitpremium("6.75");
+        detail1.setKindgrosspremium("54");
+        list.add(detail1);
+
+        // 机动车辆驾乘意外伤害保险意外残疾保险责任(2024款)
+        GgriskprogramdetailsDTO detail2 = new GgriskprogramdetailsDTO();
+        detail2.setNonriskcode(nonriskcode);
+        detail2.setProgramcode(programcode);
+        detail2.setSerialno(2);
+        detail2.setKindcode("1119067");
+        detail2.setKindname("机动车辆驾乘意外伤害保险意外残疾保险责任(2024款)");
+        detail2.setKindrate("0.09166");
+        detail2.setKindunitinsured("30000");
+        detail2.setKindsuminsured("240000");
+        detail2.setKindunitpremium("2.75");
+        detail2.setKindgrosspremium("22");
+        list.add(detail2);
+
+        // 附加机动车辆驾乘意外伤害医疗保险(2024款)
+        GgriskprogramdetailsDTO detail3 = new GgriskprogramdetailsDTO();
+        detail3.setNonriskcode(nonriskcode);
+        detail3.setProgramcode(programcode);
+        detail3.setSerialno(3);
+        detail3.setKindcode("1119065");
+        detail3.setKindname("附加机动车辆驾乘意外伤害医疗保险(2024款)");
+        detail3.setKindrate("1.0001");
+        detail3.setKindunitinsured("3000");
+        detail3.setKindsuminsured("24000");
+        detail3.setKindunitpremium("3");
+        detail3.setKindgrosspremium("24");
+        list.add(detail3);
+
+        return list;
+    }
+
     private String outofwarrantytype;
     private String outofwarrantytype;
     private String clauseType;
     private String clauseType;
     private List<String> ecarChargingPosts;
     private List<String> ecarChargingPosts;
     private List<String> carInsureDevices;
     private List<String> carInsureDevices;
     private String effectfLag;
     private String effectfLag;
-    private List<Object> accidentInsuranceList;
+    private String drivingtype;
+    private String relationCarOwner = "a";
+    private List<AccidentInsuranceDTO> accidentInsuranceList;
     private List<EpersonliabilityDTO> epersonliabilityList;
     private List<EpersonliabilityDTO> epersonliabilityList;
     private String begintimeBi;
     private String begintimeBi;
     private String begintimeCi;
     private String begintimeCi;
@@ -151,4 +293,81 @@ public class HbCrawlerCalculationRequest extends HbBaseRequest{
         private String quantity;
         private String quantity;
         private String unitAmount;
         private String unitAmount;
     }
     }
+
+    @Data
+    public static class AccidentInsuranceDTO implements Serializable {
+        @Serial
+        private static final long serialVersionUID = -9183755801236888528L;
+
+        private String id;
+        private String plyappno;
+        private String proposalno;
+        private String policycode;
+        private String nonriskcode;
+        private String programcode;
+        private String programname;
+        private String companycode;
+        private String resourcetype;
+        private String suminsured;
+        private String sumgrosspremium;
+        private String sumuwpricetaxtotal;
+        private Boolean ifdefault;
+        private String seatcount;
+        private String begintime;
+        private String endtime;
+        private String sumitcoretime;
+        private Integer buynum;
+        private String proposalnostatus;
+        private String proposalnoinfo;
+        private List<GgriskprogramclauseDTO> ggriskprogramclauselist;
+        private List<Object> ggriskprogramdeductiblelist;
+        private List<GgriskprogramdetailsDTO> ggriskprogramdetailslist;
+        private List<Object> ggriskprogramparamlist;
+        private String familyinsureitem;
+        private String gasinsureitem;
+        private String risk1205field;
+        private String risk1283items;
+        private String drivingtype;
+        private String relationcarowner;
+    }
+
+    @Data
+    public static class GgriskprogramclauseDTO implements Serializable {
+        @Serial
+        private static final long serialVersionUID = -9183755801236888529L;
+
+        private String id;
+        private String plyappno;
+        private String insureRiskId;
+        private String nonriskcode;
+        private String programcode;
+        private String clausecode;
+        private String clausecname;
+        private String remark;
+        private String serialno;
+    }
+
+    @Data
+    public static class GgriskprogramdetailsDTO implements Serializable {
+        @Serial
+        private static final long serialVersionUID = 9162613613204458328L;
+
+        private String id;
+        private String plyappno;
+        private String insureRiskId;
+        private String nonriskcode;
+        private String programcode;
+        private Integer serialno;
+        private String kindcode;
+        private String kindname;
+        private String kindrate;
+        private String kindunitinsured;
+        private String kindsuminsured;
+        private String kindunitpremium;
+        private String kindgrosspremium;
+        private String itemDetailCode;
+        private String itemDetailName;
+        private String kindInd;
+        private String calculateInd;
+    }
 }
 }

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

@@ -57,7 +57,7 @@ public class HbCrawlerQuoteimmediatelyRequest extends HbBaseRequest {
         carInsureItemDTO.setNegotiationValue(Double.parseDouble(depreciationPrice));
         carInsureItemDTO.setNegotiationValue(Double.parseDouble(depreciationPrice));
         carInsureItemDTO.setLicenseKindCode(carInfoVo.getLicenseKindCode());
         carInsureItemDTO.setLicenseKindCode(carInfoVo.getLicenseKindCode());
         carInsureItemDTO.setVehicleType(carInfoVo.getCarTypeCode());
         carInsureItemDTO.setVehicleType(carInfoVo.getCarTypeCode());
-        carInsureItemDTO.setTransferDate(carInfoVo.getTransferDate());
+        carInsureItemDTO.setTransferDate(dateFormat(carInfoVo.getTransferDate()));
         carInsureItemDTO.setSeatCount(contentDTO.getSeatCount());
         carInsureItemDTO.setSeatCount(contentDTO.getSeatCount());
         carInsureItemDTO.setPurchasePrice(Double.parseDouble(contentDTO.getPurchasePriceNotTax()));
         carInsureItemDTO.setPurchasePrice(Double.parseDouble(contentDTO.getPurchasePriceNotTax()));
         carInsureItemDTO.setExhaustscale(String.valueOf(contentDTO.getExhaustScale()));
         carInsureItemDTO.setExhaustscale(String.valueOf(contentDTO.getExhaustScale()));
@@ -161,6 +161,10 @@ public class HbCrawlerQuoteimmediatelyRequest extends HbBaseRequest {
     }
     }
 
 
     private String dateFormat(String date){
     private String dateFormat(String date){
+        // 空字符串直接返回
+        if (date == null || date.trim().isEmpty()){
+            return date;
+        }
         // 1. 解析为 LocalDateTime
         // 1. 解析为 LocalDateTime
         ZonedDateTime zdt = null;
         ZonedDateTime zdt = null;
         if (date.length() == 10){
         if (date.length() == 10){

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

@@ -81,6 +81,11 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
      */
      */
     @Override
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) throws JsonProcessingException {
     public QuoteResultsVo quote(QuoteVo quoteVo) throws JsonProcessingException {
+
+        //http://192.168.5.250:8080/quote/quote
+
+
+
         // 1.0 获取token的请求头
         // 1.0 获取token的请求头
         AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
         AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
         HttpHeaders headers = hbCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
         HttpHeaders headers = hbCrawlerRequestComponent.getHeaders(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
@@ -189,9 +194,11 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
             }
             }
         });
         });
 
 
-        List<Object> accidnentList = new ArrayList<>();
-        quoteVo.getAccidentalDrivings().stream().filter(e -> StrUtil.isNotEmpty(e.getProductCode())).filter(e -> ObjectUtil.isNull(contentMap.get(e.getProductCode().trim()))).forEach(accidnentList::add);
-        calculationRequest.setAccidentInsuranceList(accidnentList);
+        List<HbCrawlerCalculationRequest.AccidentInsuranceDTO> accidentList = new ArrayList<>();
+        quoteVo.getAccidentalDrivings().stream()
+                .filter(e -> StrUtil.isNotEmpty(e.getProductCode()))
+                .forEach(e -> accidentList.add(HbCrawlerCalculationRequest.convertToAccidentInsuranceDTO(e)));
+        calculationRequest.setAccidentInsuranceList(accidentList);
     }
     }
 
 
     // 重复投保提取时间
     // 重复投保提取时间
@@ -277,6 +284,12 @@ public class HengBangCrawlerRequestImpl implements HengBangCrawlerRequest {
                 underwritingResultsVo.setUnderwritingResult("核保失败:" + response.getDesCription());
                 underwritingResultsVo.setUnderwritingResult("核保失败:" + response.getDesCription());
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
             } else {
             } else {
+                //核保成功  获取支付二维码
+                //延迟3秒 等待生成
+                PaymentLinkVo paymentLinkVo = new PaymentLinkVo();
+                paymentLinkVo.setOrder(underwritingVo.getOrder());
+                underwritingResultsVo.setPaymentLink(getPaymentLink(paymentLinkVo).getPaymentLink());
+                underwritingResultsVo.setCompanyOrderNo(hbCrawlerOrder.getPlyappno());
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
                 underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
             }
             }
             return underwritingResultsVo;
             return underwritingResultsVo;

File diff suppressed because it is too large
+ 0 - 0
tenant/insurance/quotation-hengbang/src/main/java/com/jzg/quotation/hengbang/crawler/utils/HengBangAESUtil.java


+ 10 - 4
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java

@@ -283,7 +283,7 @@ public class UnifyOrderManager {
             //匹配规则 每报价()次,可得()次抽奖机会,每日最多()次抽奖
             //匹配规则 每报价()次,可得()次抽奖机会,每日最多()次抽奖
             HttpResult<List<LotteryActivityVO>> result = localLivingClient.queryActivityRules(lotteryScene);
             HttpResult<List<LotteryActivityVO>> result = localLivingClient.queryActivityRules(lotteryScene);
             if (result == null || result.getCode() != 200 || result.getData() == null) {
             if (result == null || result.getCode() != 200 || result.getData() == null) {
-                log.error("活动列表异常");
+                log.error("统一报价,查询本地生活的活动列表异常");
             } else {
             } else {
                 for (LotteryActivityVO activity : result.getData()) {
                 for (LotteryActivityVO activity : result.getData()) {
                     // 检查活动是否有效
                     // 检查活动是否有效
@@ -323,7 +323,7 @@ public class UnifyOrderManager {
                             // 业务员报价次数是否大于等于本活动规定时间范围内的报价次数
                             // 业务员报价次数是否大于等于本活动规定时间范围内的报价次数
                             // 统计业务员的报价次数
                             // 统计业务员的报价次数
                             int count = insOrdersService.countQuoteNum(baseController.getUserSystemCode(), quoteVo.getOrder().getRealQuoteUserId(), activity.getActivityStartTime(), activity.getActivityEndTime());
                             int count = insOrdersService.countQuoteNum(baseController.getUserSystemCode(), quoteVo.getOrder().getRealQuoteUserId(), activity.getActivityStartTime(), activity.getActivityEndTime());
-                            if (count >= Integer.parseInt(table.getQutNum())) {
+                            if (count >= Integer.parseInt(table.getQutNum()) && count <= Integer.parseInt(table.getQutLotteryMax())) {
                                 // 存本地记录 等绑定后更新本地记录的同步状态字段即可
                                 // 存本地记录 等绑定后更新本地记录的同步状态字段即可
                                 completeRule(baseController.getUserSystemCode(), quoteVo.getOrder().getRealQuoteUserId(), null, activity.getId(),
                                 completeRule(baseController.getUserSystemCode(), quoteVo.getOrder().getRealQuoteUserId(), null, activity.getId(),
                                         table.getId(), table.getQutNum() ,table.getQutLotteryNum() ,table.getQutLotteryMax() ,YesNoEnum.NO.getCode(), 6);
                                         table.getId(), table.getQutNum() ,table.getQutLotteryNum() ,table.getQutLotteryMax() ,YesNoEnum.NO.getCode(), 6);
@@ -376,9 +376,15 @@ public class UnifyOrderManager {
      */
      */
     private void completeRule(String tenantId, String userId, String userPhone, String activityId,
     private void completeRule(String tenantId, String userId, String userPhone, String activityId,
                                   String tableId, String qutNum, String qutLotteryNum, String qutLotteryMax,Integer status, Integer activityType) {
                                   String tableId, String qutNum, String qutLotteryNum, String qutLotteryMax,Integer status, Integer activityType) {
+        SysUserActivityCompleteInRule exist = null;
         // 先查询是否已存在记录(防重入)
         // 先查询是否已存在记录(防重入)
-        SysUserActivityCompleteInRule exist = insOrdersService.selectByRule(
-                tenantId, userId, activityId, qutNum, activityType);
+        if (9 != activityType) {
+            exist = insOrdersService.selectByRule(
+                    tenantId, userId, activityId, qutNum, activityType);
+        } else {
+            exist = insOrdersService.selectByRuleAndUserPhone(
+                    activityId, userPhone, qutNum, activityType);
+        }
 
 
         if (exist != null) {
         if (exist != null) {
             return;
             return;

+ 2 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/mapper/InsOrdersMapper.java

@@ -203,4 +203,6 @@ public interface InsOrdersMapper extends BaseMapper<InsOrders> {
      * @return
      * @return
      */
      */
     Double queryTotalFee(String insOrderNo);
     Double queryTotalFee(String insOrderNo);
+
+    SysUserActivityCompleteInRule selectByRuleAndUserPhone(String activityId, String userPhone, String qutNum, Integer activityType);
 }
 }

+ 10 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/InsOrdersService.java

@@ -272,4 +272,14 @@ public interface InsOrdersService extends IService<InsOrders> {
      * @return
      * @return
      */
      */
     Double queryTotalFee(String insOrderNo);
     Double queryTotalFee(String insOrderNo);
+
+    /**
+     * 获取营销活动规则表中符合的规则记录--承保--只有手机号
+     * @param activityId
+     * @param userPhone
+     * @param qutNum
+     * @param activityType
+     * @return
+     */
+    SysUserActivityCompleteInRule selectByRuleAndUserPhone(String activityId, String userPhone, String qutNum, Integer activityType);
 }
 }

+ 1 - 5
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/IdentifyServiceImpl.java

@@ -213,8 +213,4 @@ public class IdentifyServiceImpl implements IdentifyService {
         }
         }
 
 
     }
     }
-
-
-
-
-}
+}

+ 5 - 0
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/service/impl/InsOrdersServiceImpl.java

@@ -1618,4 +1618,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     public Double queryTotalFee(String insOrderNo) {
     public Double queryTotalFee(String insOrderNo) {
         return insOrdersMapper.queryTotalFee(insOrderNo);
         return insOrdersMapper.queryTotalFee(insOrderNo);
     }
     }
+
+    @Override
+    public SysUserActivityCompleteInRule selectByRuleAndUserPhone(String activityId, String userPhone, String qutNum, Integer activityType) {
+        return insOrdersMapper.selectByRuleAndUserPhone(activityId, userPhone, qutNum, activityType);
+    }
 }
 }

+ 12 - 0
tenant/insurance/quotation-summary/src/main/resources/mapper/InsOrdersMapper.xml

@@ -1514,6 +1514,18 @@
             LIMIT 1
             LIMIT 1
     </select>
     </select>
 
 
+    <select id="selectByRuleAndUserPhone" resultType="com.jzg.commons.entity.po.SysUserActivityCompleteInRule">
+        SELECT *
+        FROM sys_user_activity_complete_in_rule
+        WHERE
+          activity_id = #{activityId}
+          AND activity_type = #{activityType}
+          AND rule_complete_num = #{qutNum}
+          AND user_phone = #{userPhone}
+          AND is_delete = 0
+            LIMIT 1
+    </select>
+
     <insert id="insertActivityCompleteInRule" parameterType="com.jzg.commons.entity.po.SysUserActivityCompleteInRule">
     <insert id="insertActivityCompleteInRule" parameterType="com.jzg.commons.entity.po.SysUserActivityCompleteInRule">
         INSERT INTO sys_user_activity_complete_in_rule (
         INSERT INTO sys_user_activity_complete_in_rule (
             id,
             id,

+ 1 - 1
tenant/organization/src/main/resources/mapper/SysUserActivityCompleteInRuleMapper.xml

@@ -18,7 +18,7 @@
           AND user_id = #{userId}
           AND user_id = #{userId}
           AND activity_id = #{activityId}
           AND activity_id = #{activityId}
           AND activity_type = #{activityType}
           AND activity_type = #{activityType}
-          AND rule_sign_num = #{ruleSignNum}
+          AND rule_complete_num = #{ruleSignNum}
           AND is_delete = 0
           AND is_delete = 0
         LIMIT 1
         LIMIT 1
     </select>
     </select>

Some files were not shown because too many files changed in this diff