Przeglądaj źródła

泰康核保成功记录保单单号信息

wangrq 3 miesięcy temu
rodzic
commit
2c60d76f7f

+ 30 - 1
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/cache/RedisCacheUtil.java

@@ -5,10 +5,12 @@ import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.jzg.quotation.taikang.crawler.model.TKLoginSession;
 import com.jzg.quotation.taikang.crawler.model.api.PreciseInitResult;
+import com.jzg.quotation.taikang.crawler.model.entity.po.TKCrawlerOrder;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RBucket;
 import org.redisson.api.RedissonClient;
 import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
 
 import java.time.Duration;
 
@@ -18,6 +20,8 @@ public class RedisCacheUtil {
 
     private final RedissonClient redissonClient;
     private static final String SESSION = "SESSION";
+    public static String TAIKANG_ORDER_RESPONSE = "taikang:order:response:";
+    public static final long TAIKANG_ORDER_RESPONSE_TIME = 1L;
 
     public RedisCacheUtil(RedissonClient redissonClient) {
         this.redissonClient = redissonClient;
@@ -84,7 +88,7 @@ public class RedisCacheUtil {
     public void setCache(String cacheInfo, String key, String sign) {
         String response = JSONObject.toJSONString(cacheInfo);
         RBucket<String> bucket = redissonClient.getBucket(key + sign);
-        bucket.set(response, Duration.ofHours(3L));
+        bucket.set(response, Duration.ofDays(TAIKANG_ORDER_RESPONSE_TIME));
     }
 
     public String getCache(String key, String sign) {
@@ -92,5 +96,30 @@ public class RedisCacheUtil {
         return bucket1.get();
     }
 
+    /**
+     * 缓存订单信息
+     *
+     * @param orderNo   订单号
+     * @param order 报价请求信息
+     */
+    public void cacheOrderRequest(String orderNo, TKCrawlerOrder order) {
+        String responseStr = JSONObject.toJSONString(order);
+        redissonClient.getBucket(TAIKANG_ORDER_RESPONSE + orderNo).set(responseStr, Duration.ofDays(TAIKANG_ORDER_RESPONSE_TIME));
+    }
+
+    /**
+     * 获取订单报价信息
+     *
+     * @param orderNo 订单号
+     * @return 报价订单返回
+     */
+    public TKCrawlerOrder getOrderResponse(String orderNo) {
+        String o = (String) redissonClient.getBucket(TAIKANG_ORDER_RESPONSE + orderNo).get();
+        TKCrawlerOrder tiJinCrawlerOrder = JSON.parseObject(o, TKCrawlerOrder.class);
+        // if (ObjectUtils.isEmpty(tiJinCrawlerOrder)) {
+        //     throw new RuntimeException("订单信息不存在");
+        // }
+        return tiJinCrawlerOrder;
+    }
 
 }

+ 108 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/model/entity/po/TKCrawlerOrder.java

@@ -0,0 +1,108 @@
+package com.jzg.quotation.taikang.crawler.model.entity.po;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.time.LocalDateTime;
+
+/**
+ * @description: 泰康财险爬虫订单实体
+ * @author:
+ * @date:
+ **/
+@Data
+@Document(collection = "taikang.crawler.order")
+@NoArgsConstructor
+@AllArgsConstructor
+public class TKCrawlerOrder {
+
+    /**
+     * MongoDB主键ID
+     */
+    @Id
+    private String id;
+
+    /**
+     * 系统内部订单号
+     */
+    private String ordersNo;
+
+    /**
+     * 泰康财险订单号(保司返回)
+     */
+    private String orderNo;
+
+    /**
+     * 业务唯一标识
+     */
+    private String busUniqueId;
+
+    /**
+     * 交强险投保单号
+     */
+    private String ciApplyNo;
+
+    /**
+     * 商业险投保单号
+     */
+    private String syApplyNo;
+
+    /**
+     * 非车投保单号
+     */
+    private String niApplyNumber;
+
+    /**
+     * 交强险保单号
+     */
+    private String ciPolicyNo;
+
+    /**
+     * 商业险保单号
+     */
+    private String biPolicyNo;
+
+    /**
+     * 非车险保单号
+     */
+    private String niPolicyNo;
+
+    /**
+     * 交强险保费
+     */
+    private String ciPremium;
+
+    /**
+     * 商业险保费
+     */
+    private String biPremium;
+
+    /**
+     * 总保费
+     */
+    private String totalPremium;
+
+    /**
+     * 报价是否成功
+     */
+    private Boolean quoteSuccess;
+
+    /**
+     * 错误信息
+     */
+    private String errorMsg;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+}

+ 21 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/repository/TKCrawlerOrderRepository.java

@@ -0,0 +1,21 @@
+package com.jzg.quotation.taikang.crawler.repository;
+
+import com.jzg.quotation.taikang.crawler.model.entity.po.TKCrawlerOrder;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+/**
+ * @description: 泰康财险爬虫订单仓库
+ * @author:
+ * @date:
+ **/
+public interface TKCrawlerOrderRepository extends MongoRepository<TKCrawlerOrder, String> {
+
+    /**
+     * 根据系统内部订单号查询紫金财险爬虫订单
+     *
+     * @param ordersNo
+     * @return TKCrawlerOrder
+     */
+    TKCrawlerOrder findByOrdersNo(String ordersNo);
+
+}

+ 33 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/TKCrawlerOrderService.java

@@ -0,0 +1,33 @@
+package com.jzg.quotation.taikang.crawler.service;
+
+import com.jzg.commons.entity.quote.vo.QuoteVo;
+import com.jzg.commons.entity.quote.vo.aggregated.UnderwritingResultsVo;
+import com.jzg.commons.entity.quote.vo.aggregated.UnderwritingVo;
+import com.jzg.quotation.taikang.crawler.model.entity.TKOrderData;
+import com.jzg.quotation.taikang.crawler.model.entity.po.TKCrawlerOrder;
+
+/**
+ * @description: 紫金财险爬虫订单服务
+ * @author:
+ * @date:
+ **/
+public interface TKCrawlerOrderService {
+
+    /**
+     * 保存紫金财险爬虫订单
+     *
+     * @param
+     * @param
+     * @param success
+     */
+    void save(UnderwritingVo underwritingVo, UnderwritingResultsVo underwritingResultsVo, String mainOrderId, boolean success);
+
+    /**
+     * 根据系统内部订单号查询紫金财险爬虫订单
+     *
+     * @param ordersNo
+     * @return TKCrawlerOrder
+     */
+    TKCrawlerOrder getByOrdersNo(String ordersNo);
+
+}

+ 16 - 20
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/TKHttpAPIService.java

@@ -204,9 +204,9 @@ public class TKHttpAPIService {
         param.setTplatLoginKey(tplatLoginKey);
 
         // 这3个参数不传也能正常得到数据,暂时不了解有什么影响
-        //param.setOrderManageFlag("null");
-        //param.setRequestId("");
-        //param.setCrossRenewalFlag("");
+        // param.setOrderManageFlag("null");
+        // param.setRequestId("");
+        // param.setCrossRenewalFlag("");
 
         HttpHeaders httpHeaders = new HttpHeaders();
         httpHeaders.add("tkCarRequestToken", token);
@@ -267,7 +267,7 @@ public class TKHttpAPIService {
 
         CarTypeResult.Response response = client.request(HttpURL.carType, param, httpHeaders, CarTypeResult.Response.class);
 
-        //checkResponseUnknownField(response);
+        // checkResponseUnknownField(response);
 
         return response.getPassengerSeat();
     }
@@ -1149,9 +1149,9 @@ public class TKHttpAPIService {
     public String proposalDownload(String proposalNo) {
         ProposalDownloadParam param = new ProposalDownloadParam();
         param.setTplatformId(proposalNo);
-        //测试不传这两参数也可以
-        //param.setOrderId(null);
-        //param.setFromId(null);
+        // 测试不传这两参数也可以
+        // param.setOrderId(null);
+        // param.setFromId(null);
 
         StringResponse response = client.request(HttpURL.proposalDownload, param, null, StringResponse.class);
 
@@ -1169,7 +1169,7 @@ public class TKHttpAPIService {
     public String imageDownloadPolicy(String subPolicyNo) {
         ImageDownloadPolicyParam param = new ImageDownloadPolicyParam();
         param.setChannelCode("OffWeb");
-        //param.setInputData("2025-03-20 17:18:23");
+        // param.setInputData("2025-03-20 17:18:23");
         param.setSubPolicyNo(subPolicyNo);
 
         StringResponse response = client.request(HttpURL.imageDownloadPolicy, param, null, StringResponse.class);
@@ -1211,26 +1211,22 @@ public class TKHttpAPIService {
      * <p>
      * 不需要 token 也能查询
      *
-     * @param tplatformId
+     * @param session
      * @param proposalNo
      * @return
      */
-    public OrderCompleteAgentResult.OrderCompleteAgentResultEntity orderCompleteAgent(String token, String tplatformId, String proposalNo) {
+    public OrderCompleteAgentResult.OrderCompleteAgentResultEntity orderCompleteAgent(TKLoginSession session, String proposalNo) {
         OrderCompleteAgentParam param = new OrderCompleteAgentParam();
         param.setChannelCode("OffWeb");
         param.setFullProposalNo(proposalNo);
-        //param.setFromId("67107");
-        param.setTplatformId(tplatformId);
+        param.setFromId("67107");
+        param.setTplatformId(session.getTplatformId());
+        param.setTplatLoginKey(session.getTplatLoginKey());
         param.setPageNo(1);
-        param.setPageSizePerPage(1);
+        param.setPageSizePerPage(15);
 
-        HttpHeaders httpHeaders = null;
-
-        if (token != null) {
-            httpHeaders = new HttpHeaders();
-            // 没有 token 也能查询
-            httpHeaders.add("tkCarRequestToken", token);
-        }
+        HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.add("tkcarrequesttoken", session.getToken());
 
         OrderCompleteAgentResult.Response response = client.request(HttpURL.orderCompleteAgent, param, httpHeaders, OrderCompleteAgentResult.Response.class);
 

+ 58 - 0
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/impl/TKCrawlerOrderServiceImpl.java

@@ -0,0 +1,58 @@
+package com.jzg.quotation.taikang.crawler.service.impl;
+
+import com.jzg.commons.entity.quote.vo.aggregated.UnderwritingResultsVo;
+import com.jzg.commons.entity.quote.vo.aggregated.UnderwritingVo;
+import com.jzg.quotation.taikang.crawler.cache.RedisCacheUtil;
+import com.jzg.quotation.taikang.crawler.model.entity.po.TKCrawlerOrder;
+import com.jzg.quotation.taikang.crawler.repository.TKCrawlerOrderRepository;
+import com.jzg.quotation.taikang.crawler.service.TKCrawlerOrderService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+/**
+ * @description: 紫金财险爬虫订单服务实现
+ * @author:
+ * @date:
+ **/
+@Service
+@RequiredArgsConstructor
+public class TKCrawlerOrderServiceImpl implements TKCrawlerOrderService {
+
+    private final TKCrawlerOrderRepository tkCrawlerOrderRepository;
+    private final RedisCacheUtil redisCacheUtil;
+
+
+    /**
+     * 保存泰康财险爬虫订单
+     *
+     * @param underwritingVo
+     * @param underwritingResultsVo
+     * @param mainOrderId
+     * @param success
+     */
+    @Override
+    public void save(UnderwritingVo underwritingVo, UnderwritingResultsVo underwritingResultsVo, String mainOrderId, boolean success) {
+        TKCrawlerOrder order = new TKCrawlerOrder();
+        order.setOrdersNo(underwritingVo.getOrder().getOrdersNo());
+        order.setOrderNo(underwritingResultsVo.getCompanyOrderNo());
+        order.setBusUniqueId(mainOrderId);
+        order.setQuoteSuccess(success);
+        order.setErrorMsg(underwritingResultsVo.getUnderwritingResult());
+        order.setCiApplyNo(underwritingResultsVo.getJqApplyNo());
+        order.setCiPolicyNo(underwritingResultsVo.getJqPolicyno());
+        order.setSyApplyNo(underwritingResultsVo.getSyApplyNo());
+        order.setBiPolicyNo(underwritingResultsVo.getSyPolicyno());
+        order.setCreateTime(LocalDateTime.now());
+        order.setUpdateTime(LocalDateTime.now());
+        tkCrawlerOrderRepository.save(order);
+        // 缓存数据
+        redisCacheUtil.cacheOrderRequest(underwritingVo.getOrder().getOrdersNo(), order);
+    }
+
+    @Override
+    public TKCrawlerOrder getByOrdersNo(String ordersNo) {
+        return tkCrawlerOrderRepository.findByOrdersNo(ordersNo);
+    }
+}

+ 20 - 15
tenant/insurance/quotation-taikang/src/main/java/com/jzg/quotation/taikang/crawler/service/impl/TKQuotationBaseServiceImpl.java

@@ -23,8 +23,10 @@ import com.jzg.quotation.taikang.crawler.model.entity.TKAreaInfoVo;
 import com.jzg.quotation.taikang.crawler.model.entity.TKCarAccident;
 import com.jzg.quotation.taikang.crawler.model.entity.TKInsureInfo;
 import com.jzg.quotation.taikang.crawler.model.entity.TKOrderData;
+import com.jzg.quotation.taikang.crawler.model.entity.po.TKCrawlerOrder;
 import com.jzg.quotation.taikang.crawler.repository.TKLoginSessionRepository;
 import com.jzg.quotation.taikang.crawler.repository.TKPreciseInitResultRepository;
+import com.jzg.quotation.taikang.crawler.service.TKCrawlerOrderService;
 import com.jzg.quotation.taikang.crawler.service.TKHttpAPIService;
 import com.jzg.quotation.taikang.crawler.service.TKQuotationBaseService;
 import com.jzg.quotation.taikang.crawler.service.TKSimpleService;
@@ -67,6 +69,10 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
     @Resource
     private RedisCacheUtil redisCacheUtil;
 
+    @Resource
+    private TKCrawlerOrderService tkCrawlerOrderService;
+
+
     private TKLoginSession loginSession(String username, String password) {
         // 缓存获取
         TKLoginSession session = redisCacheUtil.getSessionCache(username);
@@ -242,19 +248,15 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
             underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.PAY_PENDING);
             // 保司订单号
             underwritingResultsVo.setCompanyOrderNo(proposalNo);
-            // 支付连接
-//        underwritingResultsVo.setPaymentLink();
 
+            // tkCrawlerOrderService.save(underwritingVo, underwritingResultsVo, preciseInitResult.getMainOrderId(), true);
         } else {
             underwritingResultsVo.setUnderwritingResult("核保失败");
             underwritingResultsVo.setUnderwritingStatus(InsOrderStatusEnum.AUDIT_FAIL);
+            // tkCrawlerOrderService.save(underwritingVo, underwritingResultsVo, preciseInitResult.getMainOrderId(), false);
         }
 
-
         return underwritingResultsVo;
-
-        // 支付的二维码数据示例:https://car.tk.cn/ep/#/insureProcess/payUnion?orderID=WBPC202503121144127720000&proposalNo=00671071370142500000004363&turnFlag=0&isRetrans=1&userid=&fromId=67107&tkSignature=TKSIGNATURE&tplatformId=feda77e829d4dedbbd8b4e236bacfac5&isTPLATFlag=1&clientId=feda77e829d4dedbbd8b4e236bacfac5
-        // 包含的主要参数:orderID、proposalNo、fromId、tplatformId、clientId
     }
 
     @Override
@@ -275,8 +277,8 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
         CarCheckUploadFileParam param = new CarCheckUploadFileParam();
         // 泰康订单
         String orderID = redisCacheUtil.getCache(insuranceUploadImageVo.getOrder().getOrdersNo(), "DD");
-        // 泰康保单号
-        String proposalNo = redisCacheUtil.getCache(insuranceUploadImageVo.getOrder().getOrdersNo(), "HB");
+        // 泰康保单号, 现在获取不到,核保成功之后才会返回
+        // String proposalNo = redisCacheUtil.getCache(insuranceUploadImageVo.getOrder().getOrdersNo(), "HB");
 
         param.setChannelCode("OffWeb");
         param.setTplatformId(session.getTplatformId());
@@ -481,19 +483,21 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
     public DownloadPolicyResultVo downloadPolicy(DownloadPolicyVo orderBase) {
         AttributionInformationVo attributionInformationVo = orderBase.getOrder().getAttributionInformationVo();
         TKLoginSession session = loginSession(attributionInformationVo.getUsername(), attributionInformationVo.getPassword());
-        String token = session.getToken();
-        String tplatformId = session.getTplatformId();
         // 泰康保单号
-        String proposalNo = redisCacheUtil.getCache(orderBase.getOrder().getOrdersNo(), "HB");
+        TKCrawlerOrder tkCrawlerOrder = redisCacheUtil.getOrderResponse(orderBase.getOrder().getOrdersNo());
+        if (tkCrawlerOrder == null) {
+            tkCrawlerOrder = tkCrawlerOrderService.getByOrdersNo(orderBase.getOrder().getOrdersNo());
+        }
 
-        OrderCompleteAgentResult.OrderCompleteAgentResultEntity orderCompleteAgentResultEntity = httpService.orderCompleteAgent(token, tplatformId, proposalNo);
+        OrderCompleteAgentResult.OrderCompleteAgentResultEntity orderCompleteAgentResultEntity = httpService.orderCompleteAgent(session, tkCrawlerOrder.getOrderNo());
 
         if (orderCompleteAgentResultEntity == null) {
             return null;
         }
 
+        DownloadPolicyResultVo downloadPolicyResultVo = new DownloadPolicyResultVo();
         // 投保单,base64
-        String proposal = httpService.proposalDownload(proposalNo);
+        String proposal = httpService.proposalDownload(tkCrawlerOrder.getOrderNo());
 
         // 商业险子保单号BI
         String subPolicyNoBi = orderCompleteAgentResultEntity.getSubPolicyNoBi();
@@ -503,18 +507,19 @@ public class TKQuotationBaseServiceImpl implements TKQuotationBaseService {
             String policy = httpService.imageDownloadPolicy(subPolicyNoBi);
             // 获取发票下载地址 url
             String pdf = httpService.imageGetInvoiceURL(subPolicyNoBi, "PDF");
+            downloadPolicyResultVo.setSyUrl(pdf);
         }
 
         // 交强险子保单号CI
         String subPolicyNoCi = orderCompleteAgentResultEntity.getSubPolicyNoCi();
-
         if (subPolicyNoCi != null) {
             // 交强险子保单,base64格式
             String policy = httpService.imageDownloadPolicy(subPolicyNoCi);
             // 获取发票下载地址 url
             String pdf = httpService.imageGetInvoiceURL(subPolicyNoCi, "PDF");
+            downloadPolicyResultVo.setJqUrl(pdf);
         }
-        return null;
+        return downloadPolicyResultVo;
     }
 
     @Override

+ 2 - 2
tenant/insurance/quotation-taikang/src/test/java/com/jzg/quotation/taikang/crawler/TKHttpAPIServiceTest1.java

@@ -730,7 +730,7 @@ public class TKHttpAPIServiceTest1 {
         carInfo.setBrandName("奥迪FV7251FBCBG轿车");
         carInfo.setPurchasePrice("380000");
         carInfo.setExhaustScale("2498");
-        carInfo.setSeatFlag("1");
+        carInfo.setSeatFlag(1);
 
         TKCarModel TKCarModel = new TKCarModel();
         TKCarModel.setVehicleWeight(new BigDecimal("1800"));
@@ -1254,7 +1254,7 @@ public class TKHttpAPIServiceTest1 {
 
         long begin = System.currentTimeMillis();
 
-        OrderCompleteAgentResult.OrderCompleteAgentResultEntity orderCompleteAgentResult = httpService.orderCompleteAgent(null, tplatformId, no);
+        OrderCompleteAgentResult.OrderCompleteAgentResultEntity orderCompleteAgentResult = httpService.orderCompleteAgent(null, no);
 
         long end = System.currentTimeMillis();