|
|
@@ -0,0 +1,828 @@
|
|
|
+package com.jzg.quotation.dadi.crawler.component;
|
|
|
+
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.alibaba.nacos.common.utils.CollectionUtils;
|
|
|
+import com.jzg.commons.entity.po.SysUploadFiles;
|
|
|
+import com.jzg.commons.entity.quote.vo.AttributionInformationVo;
|
|
|
+import com.jzg.commons.entity.quote.vo.CarInfoVo;
|
|
|
+import com.jzg.commons.entity.quote.vo.QuoteVo;
|
|
|
+import com.jzg.commons.entity.quote.vo.RiskInfoVo;
|
|
|
+import com.jzg.commons.entity.quote.vo.aggregated.UnderwritingVo;
|
|
|
+import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
|
|
|
+import com.jzg.commons.exception.ValidateException;
|
|
|
+import com.jzg.commons.util.DateTimeUtils;
|
|
|
+import com.jzg.commons.util.MinioUtils;
|
|
|
+import com.jzg.quotation.commons.client.PlatformClient;
|
|
|
+import com.jzg.quotation.commons.service.ExteriorUtilsRequest;
|
|
|
+import com.jzg.quotation.commons.utils.DateUtil;
|
|
|
+import com.jzg.quotation.dadi.crawler.constant.entity.DaDiFuelVehicleInsurance;
|
|
|
+import com.jzg.quotation.dadi.crawler.constant.entity.DaDiNewEnergyVehicleInsurance;
|
|
|
+import com.jzg.quotation.dadi.crawler.constant.enums.RequestUrl;
|
|
|
+import com.jzg.quotation.dadi.crawler.constant.po.DaDiCrawlerOrder;
|
|
|
+import com.jzg.quotation.dadi.crawler.entity.DaDiCrawlerConfigureParameters;
|
|
|
+import com.jzg.quotation.dadi.crawler.entity.request.*;
|
|
|
+import com.jzg.quotation.dadi.crawler.entity.response.*;
|
|
|
+import com.jzg.quotation.dadi.crawler.network.NetworkRequest;
|
|
|
+import com.jzg.quotation.dadi.crawler.properties.DaDiCrawlerProperties;
|
|
|
+import com.jzg.quotation.dadi.utils.CaptchaUtils;
|
|
|
+import com.jzg.quotation.dadi.utils.DaDiAESUtils;
|
|
|
+import com.jzg.quotation.dadi.utils.DaDiAliOssUtils;
|
|
|
+import com.jzg.quotation.dadi.utils.DaDiVehicleUtils;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.compress.utils.IOUtils;
|
|
|
+import org.apache.http.util.TextUtils;
|
|
|
+import org.springframework.http.HttpHeaders;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
+
|
|
|
+import java.io.InputStream;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.UUID;
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author Liub
|
|
|
+ * @version 1.0
|
|
|
+ * @description: 【大地财险】 爬虫请求组件
|
|
|
+ * @date 2026/05/21 14:41
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Component
|
|
|
+@RequiredArgsConstructor
|
|
|
+public class DaDiCrawlerRequestComponent {
|
|
|
+
|
|
|
+ private final MinioUtils minioUtils;
|
|
|
+
|
|
|
+ private final NetworkRequest networkRequest;
|
|
|
+
|
|
|
+ private final PlatformClient platformClient;
|
|
|
+
|
|
|
+ private final DaDiAliOssUtils daDiAliOssUtils;
|
|
|
+
|
|
|
+ private final ExteriorUtilsRequest exteriorUtilsRequest;
|
|
|
+
|
|
|
+ private final DaDiCrawlerProperties daDiCrawlerProperties;
|
|
|
+
|
|
|
+ private final DaDiCrawlerCacheComponent daDiCrawlerCacheComponent;
|
|
|
+
|
|
|
+ private static final Pattern JQ_PATTERN = Pattern.compile("起保日期 (\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2});终保日期 (\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2});");
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 验证码
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public DaDiCrawlerCaptchaResponse captcha() {
|
|
|
+ try {
|
|
|
+ // 请求 - 使用Hutool网络工具类
|
|
|
+ String url = RequestUrl.IDENTIFY_CODE.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ String responseBody = networkRequest.doPost(url);
|
|
|
+ DaDiCrawlerCaptchaResponse daDiCrawlerCaptcha = JSONObject.parseObject(responseBody, DaDiCrawlerCaptchaResponse.class);
|
|
|
+
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiCrawlerCaptcha.getData());
|
|
|
+ DaDiCrawlerCaptchaResponse recordResponse = JSONObject.parseObject(resJson, DaDiCrawlerCaptchaResponse.class);
|
|
|
+
|
|
|
+ // 识别验证码
|
|
|
+ String systemCode = exteriorUtilsRequest.captchaIdentify(recordResponse.getSrc());
|
|
|
+ daDiCrawlerCaptcha.setSrc(systemCode);
|
|
|
+ daDiCrawlerCaptcha.setRandomNum(recordResponse.getRandomNum());
|
|
|
+ daDiCrawlerCaptcha.setSolve(CaptchaUtils.solveToString(systemCode));
|
|
|
+ log.info("识别的验证码[{}],验证码编号[{}],验证码计算结果[{}]", systemCode, recordResponse.getRandomNum(), CaptchaUtils.solveToString(systemCode));
|
|
|
+ return daDiCrawlerCaptcha;
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 登录
|
|
|
+ *
|
|
|
+ * @param username 用户名称
|
|
|
+ * @param password 密码
|
|
|
+ * @param captcha 验证码
|
|
|
+ * @param randomNum 验证码编号
|
|
|
+ * @return 成功返回Token和用户信息
|
|
|
+ */
|
|
|
+ public DaDiCrawlerAuthenticateResponse daDiLogin(String username, String password, String captcha, String randomNum) {
|
|
|
+ try {
|
|
|
+ String url = RequestUrl.LOGIN.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DaDiCrawlerAuthenticateRequest authenticateRequest = new DaDiCrawlerAuthenticateRequest(password, username, captcha, randomNum);
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(authenticateRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody);
|
|
|
+ log.info("\n----------------------> 登录请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiCrawlerCaptcha = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiCrawlerCaptcha.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiCrawlerCaptcha.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiCrawlerCaptcha.getData());
|
|
|
+ DaDiCrawlerAuthenticateResponse daDiCrawlerAuthenticateResponse = JSONObject.parseObject(resJson, DaDiCrawlerAuthenticateResponse.class);
|
|
|
+ log.info("\n----------------------> 响应结果解析成功, \n----------------------> 解析结果:[{}],\n----------------------> 解析token:[{}],", resJson, daDiCrawlerAuthenticateResponse.getToken());
|
|
|
+ return daDiCrawlerAuthenticateResponse;
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取Token
|
|
|
+ */
|
|
|
+ public String getToken(String username, String password) {
|
|
|
+ String token = daDiCrawlerCacheComponent.getToken(username);
|
|
|
+ if (!StringUtils.hasLength(token)) {
|
|
|
+ // 登录验证码获取
|
|
|
+ DaDiCrawlerCaptchaResponse captchaResponse = captcha();
|
|
|
+ log.info("获取到的验证码[{}],验证码编号[{}]", captchaResponse.getSrc(), captchaResponse.getRandomNum());
|
|
|
+ DaDiCrawlerAuthenticateResponse daDiCrawlerAuthenticateResponse = daDiLogin(username, password, captchaResponse.getSolve(), captchaResponse.getRandomNum());
|
|
|
+ daDiCrawlerCacheComponent.cacheToken(username, daDiCrawlerAuthenticateResponse.getToken());
|
|
|
+ daDiCrawlerCacheComponent.cacheThirdComeCode(username, daDiCrawlerAuthenticateResponse.getThirdComeCode());
|
|
|
+ return daDiCrawlerAuthenticateResponse.getToken();
|
|
|
+ }
|
|
|
+ return token;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取代理信息
|
|
|
+ *
|
|
|
+ * @param headers
|
|
|
+ * @param parameters
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public DaDiAgentInfoResponse getAgentInfo(HttpHeaders headers, DaDiCrawlerConfigureParameters parameters, String username) throws Exception {
|
|
|
+ String url = RequestUrl.GET_LOGIN_COM_INFO.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DaDiAgentListRequest authenticateRequest = new DaDiAgentListRequest(parameters.getAgentName(), username);
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(authenticateRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+// log.info("\n----------------------> 获取代理信息列表请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiCrawlerCaptcha = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiCrawlerCaptcha.isSuccess()) {
|
|
|
+ if (daDiCrawlerCaptcha.getCode().equals("10000")) {
|
|
|
+ daDiCrawlerCacheComponent.removeToken(username);
|
|
|
+ }
|
|
|
+ throw new ValidateException(daDiCrawlerCaptcha.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiCrawlerCaptcha.getData());
|
|
|
+ List<DaDiAgentInfoResponse> daDiAgentInfoResponseList = JSONObject.parseArray(resJson, DaDiAgentInfoResponse.class);
|
|
|
+// log.info("\n----------------------> 获取代理信息列表结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiAgentInfoResponse daDiAgentInfoResponse = daDiAgentInfoResponseList.stream().filter(agentInfo -> agentInfo.getAgentCode().equals(parameters.getAgentName())).findFirst().orElse(null);
|
|
|
+ return daDiAgentInfoResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取代理协议信息
|
|
|
+ *
|
|
|
+ * @param headers
|
|
|
+ * @param agentInfo
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public DaDiAgencyAgreementInfoResponse getAgencyAgreementInfo(HttpHeaders headers, DaDiAgentInfoResponse agentInfo) throws Exception {
|
|
|
+ String url = RequestUrl.GET_AGENCY_AGREEMENT_INFO.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DaDiAgencyAgreementInfoRequest authenticateRequest = new DaDiAgencyAgreementInfoRequest(agentInfo.getAgentCode(), "DEJ", agentInfo.getBusinessSource(), agentInfo.getAgentCode(), agentInfo.getUserCode());
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(authenticateRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+// log.info("\n----------------------> 获取代理协议信息请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiCrawlerCaptcha = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiCrawlerCaptcha.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiCrawlerCaptcha.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiCrawlerCaptcha.getData());
|
|
|
+// log.info("\n----------------------> 获取代理协议信息结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiAgencyAgreementInfoResponse daDiAgencyAgreementInfoResponse = JSONObject.parseObject(resJson, DaDiAgencyAgreementInfoResponse.class);
|
|
|
+ return daDiAgencyAgreementInfoResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取车辆渠道信息
|
|
|
+ *
|
|
|
+ * @param headers
|
|
|
+ * @param carInfo 车辆信息
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public DaDiVehicleChannelInfoResponse.CarModel getDaDiVehicleChannelInfo(HttpHeaders headers, CarInfoVo carInfo, DaDiAgentInfoResponse agentInfo, DaDiVehiclePricResponse vehiclePricVo) throws Exception {
|
|
|
+ String url = RequestUrl.QUERY_CAR_MODEL.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DaDiVehicleModelRequest carModelRequest = new DaDiVehicleModelRequest(carInfo, new DaDiVehicleChannelInfoResponse.CarModel(), agentInfo, vehiclePricVo);
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(carModelRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 获取车辆渠道信息请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiCrawlerCaptcha = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiCrawlerCaptcha.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiCrawlerCaptcha.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiCrawlerCaptcha.getData());
|
|
|
+ log.info("\n----------------------> 获取车辆渠道信息结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiVehicleChannelInfoResponse daDiVehicleChannelInfo = JSONObject.parseObject(resJson, DaDiVehicleChannelInfoResponse.class);
|
|
|
+ DaDiVehicleChannelInfoResponse.CarModel vehicleModelVO = new DaDiVehicleChannelInfoResponse.CarModel();
|
|
|
+ if (daDiVehicleChannelInfo.getCarModels().size() > 0) {
|
|
|
+ if (daDiVehicleChannelInfo.getCarModels().size() == 1) {
|
|
|
+ vehicleModelVO = daDiVehicleChannelInfo.getCarModels().get(0);
|
|
|
+ } else {
|
|
|
+ for (DaDiVehicleChannelInfoResponse.CarModel item : daDiVehicleChannelInfo.getCarModels()) {
|
|
|
+ if (item.getSeatCount() >= Integer.parseInt(carInfo.getSeatCount()) || item.getPurchasePrice() == Double.parseDouble(carInfo.getPurchasePrice()) || TextUtils.isEmpty(carInfo.getCarYear()) ? true : item.getMarketYear() == carInfo.getCarYear()) {
|
|
|
+ vehicleModelVO = item;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (item.getSeatCount() >= Integer.parseInt(carInfo.getSeatCount()) || item.getPurchasePrice() > Double.parseDouble(carInfo.getPurchasePrice())) {
|
|
|
+ vehicleModelVO = item;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (item.getSeatCount() >= Integer.parseInt(carInfo.getSeatCount()) || TextUtils.isEmpty(carInfo.getCarYear()) ? true : item.getMarketYear() == carInfo.getCarYear()) {
|
|
|
+ vehicleModelVO = item;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ throw new ValidateException("车型查询异常,请联系开发人员");
|
|
|
+ }
|
|
|
+ if (vehicleModelVO == null) {
|
|
|
+ throw new ValidateException("未匹配到车型,请更换车型后重新报价");
|
|
|
+ } else {
|
|
|
+ vehicleModelVO.setSeatCount(Integer.parseInt(carInfo.getSeatCount()));
|
|
|
+ if (!TextUtils.isEmpty(carInfo.getLimitLoad())) {
|
|
|
+ vehicleModelVO.setTonCount(Integer.parseInt(carInfo.getLimitLoad()));
|
|
|
+ }
|
|
|
+ if (!TextUtils.isEmpty(carInfo.getCompleteKerbMass())) {
|
|
|
+ vehicleModelVO.setNet(Integer.parseInt(carInfo.getCompleteKerbMass()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ DaDiVehicleCheckInfoResponse daDiVehicleCheckInfo = checkCarModel(headers, carInfo, vehicleModelVO, agentInfo, vehiclePricVo);
|
|
|
+ if (daDiVehicleCheckInfo.getSameFlag().equals("N")) {
|
|
|
+ vehicleModelVO.setVehicleJingyou(daDiVehicleCheckInfo.getCarModelList().get(0).getVehicleJingyou());
|
|
|
+ } else {
|
|
|
+ DaDiVehicleChannelInfoResponse.VehicleJingyou vehicleJingyou = vehicleModelVO.getVehicleJingyou();
|
|
|
+ vehicleJingyou.setIndustryVehicleCode(daDiVehicleCheckInfo.getCarModelList().get(0).getIndustryVehicleCode());
|
|
|
+ vehicleModelVO.setVehicleJingyou(vehicleJingyou);
|
|
|
+ }
|
|
|
+ if (!TextUtils.isEmpty(carInfo.getDisplacement())) {
|
|
|
+ vehicleModelVO.getVehicleJingyou().setDisplacement(carInfo.getDisplacement());
|
|
|
+ }
|
|
|
+ return vehicleModelVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 验证车型信息
|
|
|
+ *
|
|
|
+ * @param headers
|
|
|
+ * @param vehicleModelVO 车辆信息
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private DaDiVehicleCheckInfoResponse checkCarModel(HttpHeaders headers, CarInfoVo carInfo, DaDiVehicleChannelInfoResponse.CarModel vehicleModelVO, DaDiAgentInfoResponse agentInfo, DaDiVehiclePricResponse vehiclePricVo) throws Exception {
|
|
|
+ String url = RequestUrl.CHECK_CAR_MODEL.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DaDiVehicleModelRequest carModelRequest = new DaDiVehicleModelRequest(carInfo, vehicleModelVO, agentInfo, vehiclePricVo);
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(carModelRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 验证车型信息信息请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiCrawlerCaptcha = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiCrawlerCaptcha.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiCrawlerCaptcha.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiCrawlerCaptcha.getData());
|
|
|
+ log.info("\n----------------------> 验证车型信息结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiVehicleCheckInfoResponse daDiVehicleCheckInfo = JSONObject.parseObject(resJson, DaDiVehicleCheckInfoResponse.class);
|
|
|
+ return daDiVehicleCheckInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取车辆价格信息
|
|
|
+ *
|
|
|
+ * @param headers 请求头
|
|
|
+ * @param carInfo 车辆信息
|
|
|
+ * @param daDiVehicleChannelRequest 渠道信息
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public DaDiVehiclePricResponse getDaDiVehiclePric(HttpHeaders headers, CarInfoVo carInfo, DaDiVehicleChannelRequest daDiVehicleChannelRequest, DaDiVehicleChannelInfoResponse.CarModel vehicleModelVO) throws Exception {
|
|
|
+ String url = RequestUrl.GET_CAR_PRICE.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DaDiVehiclePricRequest daDiVehiclePricRequest = new DaDiVehiclePricRequest(carInfo, daDiVehicleChannelRequest, vehicleModelVO);
|
|
|
+ // === 发送请求 ===
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(daDiVehiclePricRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 获取车辆价格信息请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+ log.info("\n----------------------> 获取车辆价格信息结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiVehiclePricResponse daDiVehiclePricResponse = JSONObject.parseObject(resJson, DaDiVehiclePricResponse.class);
|
|
|
+ return daDiVehiclePricResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取订单号
|
|
|
+ *
|
|
|
+ * @param headers
|
|
|
+ * @param quoteVo 报价信息
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String getOrderNo(HttpHeaders headers, QuoteVo quoteVo, DaDiVehicleChannelInfoResponse.CarModel vehicleModelVO, DaDiAgentInfoResponse agentInfoVo, DaDiVehicleChannelRequest daDiVehicleChannelRequest, DaDivehicleOwnerInfoRequest daDivehicleOwnerInfoRequest, DaDiVehiclePricResponse vehiclePricVo) throws Exception {
|
|
|
+ String url = RequestUrl.GET_TEMPORARY_ORDER.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DaDiVehicleModelRequest carModelRequest = new DaDiVehicleModelRequest(quoteVo.getCarInfoVo(), vehicleModelVO, agentInfoVo, vehiclePricVo);
|
|
|
+ DaDiTemporaryOrderRequest daDiTemporaryOrder = new DaDiTemporaryOrderRequest(quoteVo, agentInfoVo, daDiVehicleChannelRequest, carModelRequest, daDivehicleOwnerInfoRequest);
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(daDiTemporaryOrder));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+// log.info("\n----------------------> 获取订单号请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+// log.info("\n----------------------> 获取订单号结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiTemporaryOrderResponse daDiTemporaryOrderResponse = JSONObject.parseObject(resJson, DaDiTemporaryOrderResponse.class);
|
|
|
+ return daDiTemporaryOrderResponse.getOrderId();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取尊享保障方案
|
|
|
+ *
|
|
|
+ * @param headers 请求头
|
|
|
+ * @param daDiVehicleChannelRequest 渠道信息
|
|
|
+ * @param orderNo 订单号
|
|
|
+ */
|
|
|
+ public DaDiJointSalesResponse getJointSales(HttpHeaders headers, QuoteVo quoteVo, DaDiVehicleChannelRequest daDiVehicleChannelRequest, String orderNo) throws Exception {
|
|
|
+ String url = RequestUrl.GET_JOINT_SALES.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DaDiJointSalesRequest daDiJointSalesRequest = new DaDiJointSalesRequest(daDiVehicleChannelRequest, orderNo, quoteVo.getCarInfoVo());
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(daDiJointSalesRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 获取尊享保障方案请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+ log.info("\n----------------------> 获取尊享保障方案结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiJointSalesResponse daDiJointSalesResponse = JSONObject.parseObject(resJson, DaDiJointSalesResponse.class);
|
|
|
+ return daDiJointSalesResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取税种信息
|
|
|
+ *
|
|
|
+ * @param headers 请求头
|
|
|
+ * @param quoteVo 报价信息
|
|
|
+ * @param daDiVehicleChannelRequest 渠道信息
|
|
|
+ * @param orderId 订单号
|
|
|
+ */
|
|
|
+ public DaDiTaxConfigResponse getTaxConfig(HttpHeaders headers, String orderId, QuoteVo quoteVo, DaDiVehicleChannelRequest daDiVehicleChannelRequest) throws Exception {
|
|
|
+ String url = RequestUrl.GET_TAX_CONFIG.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DaDiTaxConfigRequest daDiTaxConfigRequest = new DaDiTaxConfigRequest(daDiVehicleChannelRequest.getComCode(), daDiVehicleChannelRequest.getUserCode(), orderId);
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(daDiTaxConfigRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 获取税种信息请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+ log.info("\n----------------------> 获取税种信息结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiTaxConfigResponse daDiTaxConfigResponse = JSONObject.parseObject(resJson, DaDiTaxConfigResponse.class);
|
|
|
+ return daDiTaxConfigResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取特约信息
|
|
|
+ *
|
|
|
+ * @param headers 请求头
|
|
|
+ * @param daDiVehicleChannelRequest 渠道信息
|
|
|
+ * @param orderNo 订单号
|
|
|
+ */
|
|
|
+ public DaDiSpecialInformationResponse getSpecialInformation(HttpHeaders headers, DaDiVehicleChannelRequest daDiVehicleChannelRequest, String orderNo) throws Exception {
|
|
|
+ String url = RequestUrl.GET_SPECIAL_INFORMATION.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DaDiSpecialInformationRequest daDiSpecialInformationRequest = new DaDiSpecialInformationRequest(daDiVehicleChannelRequest.getComCode(), daDiVehicleChannelRequest.getUserCode(), orderNo);
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(daDiSpecialInformationRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+// log.info("\n----------------------> 获取特约信息请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+// log.info("\n----------------------> 获取特约信息结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiSpecialInformationResponse daDiSpecialInformationResponse = JSONObject.parseObject(resJson, DaDiSpecialInformationResponse.class);
|
|
|
+ return daDiSpecialInformationResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取报价信息
|
|
|
+ *
|
|
|
+ * @param headers 渠道信息
|
|
|
+ * @param quoteVo 报价信息
|
|
|
+ */
|
|
|
+ public DaDiQuoteResponse getDaDiQuote(HttpHeaders headers, String orderId, List<DaDiQuoteResponse.ChecksDTO> checks, QuoteVo quoteVo, DaDiVehicleChannelRequest daDiVehicleChannelRequest, DaDiVehicleChannelInfoResponse.CarModel vehicleModelVO, DaDiAgentInfoResponse agentInfoVo, DaDiVehiclePricResponse vehiclePricVo) throws Exception {
|
|
|
+
|
|
|
+ DaDiFuelVehicleInsurance daDiFuelVehicleInsurance = new DaDiFuelVehicleInsurance();
|
|
|
+// log.info("\n----------------------> 燃油车险类型, \n----------------------> 燃油车险类型:[{}],", JSON.toJSONString(daDiFuelVehicleInsurance));
|
|
|
+
|
|
|
+ DaDiNewEnergyVehicleInsurance daDiNewEnergyVehicleInsurance = new DaDiNewEnergyVehicleInsurance();
|
|
|
+// log.info("\n----------------------> 新能源车险类型, \n----------------------> 新能源车险类型:[{}],", JSON.toJSONString(daDiNewEnergyVehicleInsurance));
|
|
|
+
|
|
|
+ //2.4 获取尊享保障方案
|
|
|
+ DaDiJointSalesResponse jointSales = null;
|
|
|
+ if (!CollUtil.isEmpty(quoteVo.getAccidentalDrivings())) {
|
|
|
+ jointSales = getJointSales(headers, quoteVo, daDiVehicleChannelRequest, orderId);
|
|
|
+ }
|
|
|
+
|
|
|
+ //2.6 获取特约信息
|
|
|
+ DaDiSpecialInformationResponse specialInformation = getSpecialInformation(headers, daDiVehicleChannelRequest, orderId);
|
|
|
+
|
|
|
+ // 获取税务信息
|
|
|
+ DaDiTaxConfigResponse taxConfig = getTaxConfig(headers, orderId, quoteVo, daDiVehicleChannelRequest);
|
|
|
+ //构造车型信息
|
|
|
+ DaDiVehicleModelRequest carModelRequest = new DaDiVehicleModelRequest(quoteVo.getCarInfoVo(), vehicleModelVO, agentInfoVo, vehiclePricVo);
|
|
|
+ //构造车险信息
|
|
|
+ DaDiInsurancePlanRequest daDiInsurancePlanRequest = new DaDiInsurancePlanRequest(quoteVo, taxConfig, carModelRequest, daDiFuelVehicleInsurance, daDiNewEnergyVehicleInsurance, specialInformation, jointSales);
|
|
|
+
|
|
|
+ String url = RequestUrl.CALCULATION_PREMIUM.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+
|
|
|
+ DaDiQuoteRequest daDiQuoteRequest = new DaDiQuoteRequest(quoteVo, orderId, checks, daDiVehicleChannelRequest.getComCode(), daDiInsurancePlanRequest, carModelRequest, daDiVehicleChannelRequest);
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(daDiQuoteRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 获取报价信息请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+ log.info("\n----------------------> 获取报价信息结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiQuoteResponse daDiQuoteResponse = JSONObject.parseObject(resJson, DaDiQuoteResponse.class);
|
|
|
+ //重复投保
|
|
|
+ DaDiQuoteResponse.TrafficReinsureInfoDTO trafficReinsureInfoDTO = daDiQuoteResponse.getTrafficReinsureInfo();
|
|
|
+ String trafficErrorMessage = daDiQuoteResponse.getTrafficErrorMessage();
|
|
|
+
|
|
|
+ //验证码
|
|
|
+ List<DaDiQuoteResponse.ChecksDTO> checksList = daDiQuoteResponse.getChecks();
|
|
|
+
|
|
|
+ // 无重复投保信息,直接返回
|
|
|
+ if (trafficReinsureInfoDTO == null && TextUtils.isEmpty(trafficErrorMessage) && CollectionUtils.isEmpty(checksList)) {
|
|
|
+ DaDiQuoteResponse.UwResultDTO uwResult = daDiQuoteResponse.getUwResult();
|
|
|
+ String uwTypeText = DaDiVehicleUtils.UW_TYPE_DICT.get(uwResult.getUwType());
|
|
|
+ String eMsg = "";
|
|
|
+ List<DaDiQuoteResponse.UwResultDTO.UnderwriteRuleInfosDTO> underwriteRuleInfos = uwResult.getUnderwriteRuleInfos();
|
|
|
+
|
|
|
+ for (DaDiQuoteResponse.UwResultDTO.UnderwriteRuleInfosDTO underwriteRuleInfo : underwriteRuleInfos) {
|
|
|
+ if (!"3".equals(underwriteRuleInfo.getUwType())) {
|
|
|
+ eMsg += underwriteRuleInfo.getRuleDescription() + ";";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!TextUtils.isEmpty(eMsg) && !TextUtils.isEmpty(uwTypeText) && !uwTypeText.contains("人工核保")) {
|
|
|
+ throw new ValidateException(uwTypeText + ":" + eMsg);
|
|
|
+ }
|
|
|
+ saveInfo(headers, quoteVo, orderId, daDiQuoteResponse, daDiVehicleChannelRequest, carModelRequest);
|
|
|
+ return daDiQuoteResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 提取起保/终保日期
|
|
|
+ String startTime = trafficReinsureInfoDTO != null ? trafficReinsureInfoDTO.getEffectiveEndDate() + ":00" : null;
|
|
|
+ String endTime = null;
|
|
|
+ if (!TextUtils.isEmpty(startTime)) {
|
|
|
+ String beginDateStr = DateUtil.strAllToDateToStr(startTime, "yyyy-MM-dd HH:mm:ss", "yyyyMMddHHmmss");
|
|
|
+ endTime = trafficReinsureInfoDTO != null ? DateUtil.getNextYearDateStrTranfer(beginDateStr) : null;
|
|
|
+ if (trafficReinsureInfoDTO != null) {
|
|
|
+ log.info("识别到交强重复投保,重复投保单号:{},重复起保时间:{},终保时间:{}", trafficReinsureInfoDTO.getPolicyNo(), startTime, endTime);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 若日期不完整,尝试从错误消息中正则提取
|
|
|
+ if (TextUtils.isEmpty(startTime) && !TextUtils.isEmpty(trafficErrorMessage)) {
|
|
|
+ Matcher jqMatcher = JQ_PATTERN.matcher(trafficErrorMessage);
|
|
|
+ if (jqMatcher.find()) {
|
|
|
+ startTime = jqMatcher.group(1);
|
|
|
+ endTime = jqMatcher.group(2);
|
|
|
+ } else {
|
|
|
+ throw new ValidateException(trafficErrorMessage);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 有起保日期,更新风险信息并重新报价
|
|
|
+ if (!TextUtils.isEmpty(startTime)) {
|
|
|
+ RiskInfoVo ciRisk = quoteVo.getCiRiskInfoVo();
|
|
|
+ ciRisk.setStartDate(startTime);
|
|
|
+ ciRisk.setEndDate(endTime);
|
|
|
+ quoteVo.setCiRiskInfoVo(ciRisk);
|
|
|
+ return getDaDiQuote(headers, orderId, new ArrayList<>(), quoteVo, daDiVehicleChannelRequest, vehicleModelVO, agentInfoVo, vehiclePricVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (CollectionUtils.isNotEmpty(checksList)) {
|
|
|
+ for (DaDiQuoteResponse.ChecksDTO item : checksList) {
|
|
|
+ // 识别验证码
|
|
|
+ String systemCode = exteriorUtilsRequest.captchaIdentify(item.getCheckCode());
|
|
|
+ item.setCheckCode(systemCode);
|
|
|
+ }
|
|
|
+ return getDaDiQuote(headers, orderId, checksList, quoteVo, daDiVehicleChannelRequest, vehicleModelVO, agentInfoVo, vehiclePricVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 无法自动处理,抛出异常
|
|
|
+ String message = trafficReinsureInfoDTO != null ? String.format("识别到交强重复投保,重复投保单号:%s,重复起保时间:%s,终保时间:%s", trafficReinsureInfoDTO.getPolicyNo(), startTime, endTime) : trafficErrorMessage;
|
|
|
+ throw new ValidateException(message);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存订单信息
|
|
|
+ */
|
|
|
+ public void saveInfo(HttpHeaders headers, QuoteVo quoteVo, String orderId, DaDiQuoteResponse daDiQuoteResponse, DaDiVehicleChannelRequest daDiVehicleChannelRequest, DaDiVehicleModelRequest carModelRequest) throws Exception {
|
|
|
+ String url = RequestUrl.SAVE_INFO.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ String token = headers.getFirst("X-Access-Token");
|
|
|
+ DadiSaveInfoRequest dadiSaveInfoRequest = new DadiSaveInfoRequest(quoteVo, daDiQuoteResponse, daDiVehicleChannelRequest, carModelRequest, orderId, token);
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(dadiSaveInfoRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 保存信息请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ getCurTaskProgress(headers, quoteVo, orderId, daDiVehicleChannelRequest, daDiQuoteResponse, carModelRequest);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取月任务
|
|
|
+ *
|
|
|
+ * @param headers
|
|
|
+ * @param quoteVo
|
|
|
+ * @param daDiVehicleChannelRequest
|
|
|
+ */
|
|
|
+ public DaDiCurTaskResponse getCurTaskProgress(HttpHeaders headers, QuoteVo quoteVo, String orderId, DaDiVehicleChannelRequest daDiVehicleChannelRequest, DaDiQuoteResponse daDiQuoteResponse, DaDiVehicleModelRequest carModelRequest) throws Exception {
|
|
|
+ String url = RequestUrl.CUR_TASK_PROGRESS.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DadiCurTaskRequest dadiSaveInfoRequest = new DadiCurTaskRequest(daDiVehicleChannelRequest.getComCode(), daDiVehicleChannelRequest.getUserCode(), daDiVehicleChannelRequest.getAgentCode());
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(dadiSaveInfoRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 获取月任务请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+ log.info("\n----------------------> 获取获取月任务结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiCurTaskResponse daDiCurTaskResponse = JSONObject.parseObject(resJson, DaDiCurTaskResponse.class);
|
|
|
+ insuredInfo(headers, quoteVo, orderId, daDiCurTaskResponse, daDiQuoteResponse, daDiVehicleChannelRequest, carModelRequest);
|
|
|
+ return daDiCurTaskResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 保存人员信息
|
|
|
+ *
|
|
|
+ * @param quoteVo
|
|
|
+ * @param daDiCurTaskResponse
|
|
|
+ */
|
|
|
+ public void insuredInfo(HttpHeaders headers, QuoteVo quoteVo, String orderId, DaDiCurTaskResponse daDiCurTaskResponse, DaDiQuoteResponse daDiQuoteResponse, DaDiVehicleChannelRequest daDiVehicleChannelRequest, DaDiVehicleModelRequest carModelRequest) throws Exception {
|
|
|
+ String url = RequestUrl.INSURED_INFO.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DadiInsuredInfoRequest.QuoteRequest quoteRequest = new DadiInsuredInfoRequest.QuoteRequest(quoteVo, daDiCurTaskResponse, daDiQuoteResponse, daDiVehicleChannelRequest, carModelRequest, orderId);
|
|
|
+ DadiInsuredInfoRequest dadiSaveInfoRequest = new DadiInsuredInfoRequest(quoteVo, orderId, quoteRequest, daDiVehicleChannelRequest.getComCode(), daDiVehicleChannelRequest.getUserCode());
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(dadiSaveInfoRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 保存人员信息请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+ log.info("\n----------------------> 保存人员信息结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 提交订单
|
|
|
+ *
|
|
|
+ * @param quoteVo
|
|
|
+ * @param orderId
|
|
|
+ * @param daDiQuoteResponse
|
|
|
+ * @param daDiVehicleChannelRequest
|
|
|
+ */
|
|
|
+ public DaDiSubmitOrderResponse submitOrder(HttpHeaders headers, QuoteVo quoteVo, String orderId, DaDiQuoteResponse daDiQuoteResponse, DaDiVehicleChannelRequest daDiVehicleChannelRequest) throws Exception {
|
|
|
+ String url = RequestUrl.SUBMIT_ORDER.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DaDiSubmitOrderRequest daDiSubmitOrderRequest = new DaDiSubmitOrderRequest(orderId, daDiVehicleChannelRequest.getComCode(), daDiVehicleChannelRequest.getUserCode(), new ArrayList<>());
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(daDiSubmitOrderRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 提交订单请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+ log.info("\n----------------------> 提交订单结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiSubmitOrderResponse daDiSubmitOrderResponse = JSONObject.parseObject(resJson, DaDiSubmitOrderResponse.class);
|
|
|
+ return daDiSubmitOrderResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取核保信息
|
|
|
+ */
|
|
|
+ public DaDiGetUnderwritingResponse getUnderwriting(HttpHeaders headers, UnderwritingVo underwritingVo, DaDiCrawlerOrder daDiCrawlerOrder) throws Exception {
|
|
|
+ AttributionInformationVo attributionInformationVo = underwritingVo.getOrder().getAttributionInformationVo();
|
|
|
+ String url = RequestUrl.SUBMIT_UNDERWRITE.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ String thirdComeCode = daDiCrawlerCacheComponent.getThirdComeCode(attributionInformationVo.getUsername());
|
|
|
+ DaDiUnderwritingRequest daDiUnderwritingRequest = new DaDiUnderwritingRequest(daDiCrawlerOrder.getPlyappno(), thirdComeCode, attributionInformationVo.getUsername());
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(daDiUnderwritingRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 获取核保信息请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+ log.info("\n----------------------> 获取核保信息结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiGetUnderwritingResponse daDiGetUnderwritingResponse = JSONObject.parseObject(resJson, DaDiGetUnderwritingResponse.class);
|
|
|
+ return daDiGetUnderwritingResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取订单信息
|
|
|
+ */
|
|
|
+ public DaDiOrderInfoResponse getOrderInfo(HttpHeaders headers, AttributionInformationVo attributionInformationVo, String orderId) throws Exception {
|
|
|
+ String url = RequestUrl.ORDER_INFO.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DaDiOrderInfoRequest daDiOrderInfoRequest = new DaDiOrderInfoRequest(attributionInformationVo.getUsername(), orderId);
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(daDiOrderInfoRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 获取订单信息请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+ log.info("\n----------------------> 获取订单信息结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiOrderInfoResponse daDiGetOrderInfoResponse = JSONObject.parseObject(resJson, DaDiOrderInfoResponse.class);
|
|
|
+ return daDiGetOrderInfoResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取支付号
|
|
|
+ */
|
|
|
+ public DaDiPayNoDataResponse getPayNo(HttpHeaders headers, String orderId, AttributionInformationVo attributionInformationVo) throws Exception {
|
|
|
+ String url = RequestUrl.GET_PAY_NO.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ String thirdComeCode = daDiCrawlerCacheComponent.getThirdComeCode(attributionInformationVo.getUsername());
|
|
|
+ DaDiPayNoDataRequest daDiEleProposalQRCoreDataRequest = new DaDiPayNoDataRequest(orderId, thirdComeCode, attributionInformationVo.getUsername());
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(daDiEleProposalQRCoreDataRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 获取支付号请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+ log.info("\n----------------------> 获取支付号结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiPayNoDataResponse daDiEleProposalQRCoreDataResponse = JSONObject.parseObject(resJson, DaDiPayNoDataResponse.class);
|
|
|
+ return daDiEleProposalQRCoreDataResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取支付二维码
|
|
|
+ */
|
|
|
+ public DaDiEleProposalQRCoreDataResponse getEleProposalQRCoreData(HttpHeaders headers, String orderId, AttributionInformationVo attributionInformationVo) throws Exception {
|
|
|
+ String url = RequestUrl.GET_ELE_PROPOSAL_QR_CORE.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ String thirdComeCode = daDiCrawlerCacheComponent.getThirdComeCode(attributionInformationVo.getUsername());
|
|
|
+ DaDiEleProposalQRCoreDataRequest daDiEleProposalQRCoreDataRequest = new DaDiEleProposalQRCoreDataRequest(orderId, thirdComeCode, attributionInformationVo.getUsername());
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(daDiEleProposalQRCoreDataRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 获取支付二维码请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+ log.info("\n----------------------> 获取支付二维码结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiEleProposalQRCoreDataResponse daDiEleProposalQRCoreDataResponse = JSONObject.parseObject(resJson, DaDiEleProposalQRCoreDataResponse.class);
|
|
|
+ return daDiEleProposalQRCoreDataResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 订单详情查询
|
|
|
+ */
|
|
|
+ public DaDiQueryOrderInfoResponse queryOrderInfo(HttpHeaders headers, String orderId, AttributionInformationVo attributionInformationVo) throws Exception {
|
|
|
+ String url = RequestUrl.QUERY_ORDER_INFO.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DaDiQueryOrderInfoRequest daDiQueryOrderInfoRequest = new DaDiQueryOrderInfoRequest(orderId, attributionInformationVo.getUsername());
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(daDiQueryOrderInfoRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 订单详情查询请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+ log.info("\n----------------------> 订单详情查询结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiQueryOrderInfoResponse daDiQueryOrderInfoResponse = JSONObject.parseObject(resJson, DaDiQueryOrderInfoResponse.class);
|
|
|
+ return daDiQueryOrderInfoResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 订单状态查询
|
|
|
+ */
|
|
|
+ public DaDiQueryOrderStatusResponse queryOrderStatus(HttpHeaders headers, String orderId, AttributionInformationVo attributionInformationVo) throws Exception {
|
|
|
+ String url = RequestUrl.QUERY_ORDER_STATUS.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ DaDiQueryOrderInfoRequest daDiQueryOrderInfoRequest = new DaDiQueryOrderInfoRequest(orderId, attributionInformationVo.getUsername());
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(daDiQueryOrderInfoRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 订单状态查询请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+ log.info("\n----------------------> 订单状态查询结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiQueryOrderStatusResponse daDiQueryOrderStatusResponse = JSONObject.parseObject(resJson, DaDiQueryOrderStatusResponse.class);
|
|
|
+ return daDiQueryOrderStatusResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上传影像
|
|
|
+ */
|
|
|
+ public DaDiUploadImageResponse uploadImage(HttpHeaders headers, String orderId, AttributionInformationVo attributionInformationVo) throws Exception {
|
|
|
+ DaDiOrderInfoResponse orderInfo = getOrderInfo(headers, attributionInformationVo, orderId);
|
|
|
+ String bussNo = TextUtils.isEmpty(orderInfo.getBusinessApplicationNo()) ? orderInfo.getTrafficApplicationNo() : orderInfo.getBusinessApplicationNo();
|
|
|
+ String url = RequestUrl.UPLOAD_IMAGE.getRequestUrl(daDiCrawlerProperties.getBaseUrl());
|
|
|
+ String thirdComeCode = daDiCrawlerCacheComponent.getThirdComeCode(attributionInformationVo.getUsername());
|
|
|
+ DaDiUploadImageRequest daDiUploadImageRequest = new DaDiUploadImageRequest(bussNo, attributionInformationVo.getUsername(), thirdComeCode);
|
|
|
+ String requestBody = DaDiAESUtils.encryptStr(JSON.toJSONString(daDiUploadImageRequest));
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, headers);
|
|
|
+ log.info("\n----------------------> 上传图片请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiBaseResponse daDiBaseResponse = JSONObject.parseObject(responseBody, DaDiBaseResponse.class);
|
|
|
+ if (!daDiBaseResponse.isSuccess()) {
|
|
|
+ throw new ValidateException(daDiBaseResponse.getMsg());
|
|
|
+ }
|
|
|
+ String resJson = DaDiAESUtils.decryptStr(daDiBaseResponse.getData());
|
|
|
+ log.info("\n----------------------> 上传图片结果解析成功, \n----------------------> 解析结果:[{}],", resJson);
|
|
|
+ DaDiUploadImageResponse daDiUploadImageResponse = JSONObject.parseObject(resJson, DaDiUploadImageResponse.class);
|
|
|
+ daDiUploadImageResponse.setBussNo(bussNo);
|
|
|
+ return daDiUploadImageResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * OSS初始化参数
|
|
|
+ */
|
|
|
+ public DaDiOssInitParamResponse getOssInitParam(String imagetoken) {
|
|
|
+ String url = RequestUrl.OSS_INIT_PARAM.getUri() + "?token=" + imagetoken + "&t=" + System.currentTimeMillis();
|
|
|
+ networkRequest.setCookie("token", imagetoken);
|
|
|
+ String responseBody = networkRequest.doGet(url, null, null);
|
|
|
+ log.info("\n----------------------> OSS初始化参数请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiOssInitParamResponse daDiOssInitParamResponse = JSONObject.parseObject(responseBody, DaDiOssInitParamResponse.class);
|
|
|
+ if (daDiOssInitParamResponse.getAccessKeyVo() == null) {
|
|
|
+ throw new ValidateException("获取oss初始化参数失败");
|
|
|
+ }
|
|
|
+ return daDiOssInitParamResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上传影像
|
|
|
+ *
|
|
|
+ * @param imageVoList 影像列表
|
|
|
+ */
|
|
|
+ public void uploadAliOssImage(List<InsuranceImageVo> imageVoList, String bussNo, DaDiOssInitParamResponse ossInitParam) throws Exception {
|
|
|
+ for (InsuranceImageVo insuranceImageVo : imageVoList) {
|
|
|
+ for (InsuranceImageVo.ImageDTO imageDTO : insuranceImageVo.getImageBase64List()) {
|
|
|
+ // 根据imageId查询文件信息
|
|
|
+ SysUploadFiles uploadFile = platformClient.getUploadFile(imageDTO.getImageId());
|
|
|
+ if (uploadFile == null) {
|
|
|
+ log.error("大地上传影像失败,未找到文件信息,imageId:{}", imageDTO.getImageId());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 获取文件名
|
|
|
+ String fileName = uploadFile.getFileName();
|
|
|
+ // 获取文件流
|
|
|
+ String imgUrl = minioUtils.getPresignedObjectUrl(uploadFile.getBucketName(), fileName);
|
|
|
+ log.info("大地影像上传,获取文件预签名URL,imgUrl:{}", imgUrl);
|
|
|
+ InputStream inputStream = minioUtils.getObject(uploadFile.getBucketName(), fileName);
|
|
|
+ log.info("大地影像上传,获取获取文件流,inputStream:{}", inputStream);
|
|
|
+ if (inputStream == null) {
|
|
|
+ log.error("大地上传影像失败,获取文件预签名URL失败,imageId:{}", imageDTO.getImageId());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 下载文件内容为byte[]
|
|
|
+ byte[] imageBytes = IOUtils.toByteArray(inputStream);
|
|
|
+ if (imageBytes == null || imageBytes.length == 0) {
|
|
|
+ log.error("大地上传影像失败,文件内容为空,imageId:{}", imageDTO.getImageId());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ log.info("大地下载影像成功,imageId:{},fileName:{}", imageDTO.getImageId(), fileName);
|
|
|
+ // 构造文件名
|
|
|
+ fileName = "UW/" + DateTimeUtils.getFormatTime("yyyy/MM/dd/HH") + "/" + bussNo + "/" + UUID.randomUUID().toString().replace("-", "") + ".jpg";
|
|
|
+ String upload = daDiAliOssUtils.upload(ossInitParam, imageBytes, fileName);
|
|
|
+ log.info("大地上传影像成功,imageId:{},upload---->:{}", imageDTO.getImageId(), upload);
|
|
|
+ String base64Str = imageDTO.getImageBase64Str();
|
|
|
+ if (base64Str.startsWith("http")) {
|
|
|
+ base64Str = minioUtils.getBase64Str(uploadFile.getBucketName(), uploadFile.getFileName());
|
|
|
+ }
|
|
|
+ imageDTO.setImageBase64Str(base64Str);
|
|
|
+ SaveFileIdx(ossInitParam, bussNo, imageDTO, fileName, insuranceImageVo.getImageCode());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public DaDiSaveFileIdxResponse SaveFileIdx(DaDiOssInitParamResponse ossInitParam, String bussNo, InsuranceImageVo.ImageDTO image, String imageName, String imgType) throws Exception {
|
|
|
+ String url = RequestUrl.SAVE_FILE_IDX.getUri();
|
|
|
+ networkRequest.setCookie("token", ossInitParam.getToken());
|
|
|
+ DaDiSaveFileIdxRequest daDiSaveFileIdxRequest = new DaDiSaveFileIdxRequest(ossInitParam, bussNo, image, imageName, imgType);
|
|
|
+ String requestBody = JSON.toJSONString(daDiSaveFileIdxRequest);
|
|
|
+ String responseBody = networkRequest.doPost(url, requestBody, null);
|
|
|
+ log.info("\n----------------------> 保存影像索引请求成功, \n----------------------> 响应结果:[{}],", responseBody);
|
|
|
+ DaDiSaveFileIdxResponse daDiSaveFileIdxResponse = JSONObject.parseObject(responseBody, DaDiSaveFileIdxResponse.class);
|
|
|
+ return daDiSaveFileIdxResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|