|
@@ -1,20 +1,26 @@
|
|
|
package com.jzg.quotation.bohai.crawler.component;
|
|
package com.jzg.quotation.bohai.crawler.component;
|
|
|
|
|
|
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
import com.alibaba.fastjson2.JSON;
|
|
|
|
|
+import com.fasterxml.jackson.core.type.TypeReference;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
|
+import com.jzg.commons.entity.quote.vo.image.InsuranceImageVo;
|
|
|
import com.jzg.commons.exception.SystemException;
|
|
import com.jzg.commons.exception.SystemException;
|
|
|
import com.jzg.commons.util.AssertionUtils;
|
|
import com.jzg.commons.util.AssertionUtils;
|
|
|
import com.jzg.quotation.bohai.api.constant.enums.RequestType;
|
|
import com.jzg.quotation.bohai.api.constant.enums.RequestType;
|
|
|
import com.jzg.quotation.bohai.api.constant.enums.ResponseCode;
|
|
import com.jzg.quotation.bohai.api.constant.enums.ResponseCode;
|
|
|
import com.jzg.quotation.bohai.api.entity.request.BoHaiBaseRequest;
|
|
import com.jzg.quotation.bohai.api.entity.request.BoHaiBaseRequest;
|
|
|
|
|
+import com.jzg.quotation.bohai.api.entity.request.ImageUploadRequest;
|
|
|
import com.jzg.quotation.bohai.api.entity.request.UnderwritingRequest;
|
|
import com.jzg.quotation.bohai.api.entity.request.UnderwritingRequest;
|
|
|
import com.jzg.quotation.bohai.api.entity.response.BoHaiBaseResponse;
|
|
import com.jzg.quotation.bohai.api.entity.response.BoHaiBaseResponse;
|
|
|
|
|
+import com.jzg.quotation.bohai.api.entity.response.ImageUploadResponse;
|
|
|
import com.jzg.quotation.bohai.api.entity.response.UnderwritingResponse;
|
|
import com.jzg.quotation.bohai.api.entity.response.UnderwritingResponse;
|
|
|
import com.jzg.quotation.bohai.crawler.constant.enums.RequestUrl;
|
|
import com.jzg.quotation.bohai.crawler.constant.enums.RequestUrl;
|
|
|
import com.jzg.quotation.bohai.crawler.entity.request.*;
|
|
import com.jzg.quotation.bohai.crawler.entity.request.*;
|
|
|
import com.jzg.quotation.bohai.crawler.entity.request.quote.CarModelDataDTO;
|
|
import com.jzg.quotation.bohai.crawler.entity.request.quote.CarModelDataDTO;
|
|
|
import com.jzg.quotation.bohai.crawler.entity.response.*;
|
|
import com.jzg.quotation.bohai.crawler.entity.response.*;
|
|
|
import com.jzg.quotation.bohai.crawler.properties.BoHaiCrawlerProperties;
|
|
import com.jzg.quotation.bohai.crawler.properties.BoHaiCrawlerProperties;
|
|
|
|
|
+import com.jzg.quotation.bohai.crawler.util.BatchNumberGenerator;
|
|
|
import com.jzg.quotation.bohai.crawler.util.DESEncryption;
|
|
import com.jzg.quotation.bohai.crawler.util.DESEncryption;
|
|
|
import com.jzg.quotation.bohai.crawler.util.DESUtil;
|
|
import com.jzg.quotation.bohai.crawler.util.DESUtil;
|
|
|
import com.jzg.quotation.commons.component.RequestComponent;
|
|
import com.jzg.quotation.commons.component.RequestComponent;
|
|
@@ -23,14 +29,16 @@ import com.jzg.quotation.commons.standard.CrawlerRequestUrlStandard;
|
|
|
import com.jzg.quotation.commons.utils.RequestObjectConversion;
|
|
import com.jzg.quotation.commons.utils.RequestObjectConversion;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
+import org.springframework.core.io.ByteArrayResource;
|
|
|
import org.springframework.http.HttpHeaders;
|
|
import org.springframework.http.HttpHeaders;
|
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.http.ResponseEntity;
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
import org.springframework.util.LinkedMultiValueMap;
|
|
import org.springframework.util.LinkedMultiValueMap;
|
|
|
import org.springframework.util.MultiValueMap;
|
|
import org.springframework.util.MultiValueMap;
|
|
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
-import java.util.List;
|
|
|
|
|
-import java.util.UUID;
|
|
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* @description: 渤海财险爬虫请求组件
|
|
* @description: 渤海财险爬虫请求组件
|
|
@@ -42,6 +50,8 @@ import java.util.UUID;
|
|
|
@RequiredArgsConstructor
|
|
@RequiredArgsConstructor
|
|
|
public class BoHaiCrawlerRequestComponent {
|
|
public class BoHaiCrawlerRequestComponent {
|
|
|
|
|
|
|
|
|
|
+ private static final String TOKEN = "114050281-e867bc9aab4951bdc2803f54c81892e8";
|
|
|
|
|
+
|
|
|
// 循环次数
|
|
// 循环次数
|
|
|
public static final int CIRCULATE_NUMBER = 3;
|
|
public static final int CIRCULATE_NUMBER = 3;
|
|
|
|
|
|
|
@@ -63,7 +73,8 @@ public class BoHaiCrawlerRequestComponent {
|
|
|
BoHaiCrawlerCaptchaResponse captcha = captcha(CIRCULATE_NUMBER);
|
|
BoHaiCrawlerCaptchaResponse captcha = captcha(CIRCULATE_NUMBER);
|
|
|
// 登录存入缓存当中
|
|
// 登录存入缓存当中
|
|
|
BoHaiCrawlerAuthenticateRequest request = new BoHaiCrawlerAuthenticateRequest(captcha, username, password);
|
|
BoHaiCrawlerAuthenticateRequest request = new BoHaiCrawlerAuthenticateRequest(captcha, username, password);
|
|
|
- BoHaiCrawlerBaseRequest crawlerBaseRequest = new BoHaiCrawlerBaseRequest(request);
|
|
|
|
|
|
|
+ //BoHaiCrawlerBaseRequest crawlerBaseRequest = new BoHaiCrawlerBaseRequest(request);
|
|
|
|
|
+ BoHaiCrawlerBaseRequest crawlerBaseRequest = null;
|
|
|
return requestComponent.objectPost(RequestUrl.AUTHENTICATE.getRequestUrl(""), crawlerBaseRequest, BoHaiCrawlerBaseResponse.class);
|
|
return requestComponent.objectPost(RequestUrl.AUTHENTICATE.getRequestUrl(""), crawlerBaseRequest, BoHaiCrawlerBaseResponse.class);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -170,31 +181,13 @@ public class BoHaiCrawlerRequestComponent {
|
|
|
*/
|
|
*/
|
|
|
public <BoHaiResponse> BoHaiResponse request(CrawlerRequestUrlStandard crawlerRequestUrlStandard, Object request, Class<BoHaiResponse> responseClass, HttpHeaders headers) {
|
|
public <BoHaiResponse> BoHaiResponse request(CrawlerRequestUrlStandard crawlerRequestUrlStandard, Object request, Class<BoHaiResponse> responseClass, HttpHeaders headers) {
|
|
|
try {
|
|
try {
|
|
|
- //String jsonString = JSON.toJSONString(request);
|
|
|
|
|
- ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
|
- String jsonString = objectMapper.writeValueAsString(request);
|
|
|
|
|
- log.info("请求参数:{}", jsonString);
|
|
|
|
|
- DESUtil des = new DESUtil("c2lub3NvZnQuY2hhbm5lbC55ZHBpYw==");
|
|
|
|
|
- // 参数加密
|
|
|
|
|
- String encrypt = des.des_encrypt(jsonString);
|
|
|
|
|
- log.info("请求参数加密:{}", encrypt);
|
|
|
|
|
- //生成md5值
|
|
|
|
|
- String md5Value = DESUtil.md5(encrypt + "c2lub3NvZnQuY2hhbm5lbC55ZHBpYw==");
|
|
|
|
|
- log.info("请求参数md5的值:{}", md5Value);
|
|
|
|
|
-
|
|
|
|
|
- BoHaiCrawlerVehicleConfirmationReqeust2 boHaiCrawlerVehicleConfirmationReqeust2 = new BoHaiCrawlerVehicleConfirmationReqeust2();
|
|
|
|
|
- boHaiCrawlerVehicleConfirmationReqeust2.setEncryptionData(encrypt);
|
|
|
|
|
- boHaiCrawlerVehicleConfirmationReqeust2.setMd5(md5Value);
|
|
|
|
|
-
|
|
|
|
|
- //真正的请求
|
|
|
|
|
- ResponseEntity<String> responseEntity = requestComponent.objectPost2(RequestUrl.VEHICLECONFIRMATION.getRequestUrl(boHaiCrawlerProperties.getBaseUrl2()), boHaiCrawlerVehicleConfirmationReqeust2, String.class, headers);
|
|
|
|
|
|
|
+ ResponseEntity<String> responseEntity = requestComponent.objectPost2(crawlerRequestUrlStandard.getRequestUrl(boHaiCrawlerProperties.getBaseUrl2()), request, String.class, headers);
|
|
|
|
|
|
|
|
String responseString = responseEntity.getBody();
|
|
String responseString = responseEntity.getBody();
|
|
|
log.info("请求返回参数:{}", responseString);
|
|
log.info("请求返回参数:{}", responseString);
|
|
|
-
|
|
|
|
|
AssertionUtils.isEmpty(responseString, "请求异常请重试");
|
|
AssertionUtils.isEmpty(responseString, "请求异常请重试");
|
|
|
// 参数解密
|
|
// 参数解密
|
|
|
- String decrypt = des.des_decrypt(responseString);
|
|
|
|
|
|
|
+ String decrypt = DESUtil.des_decrypt(responseString);
|
|
|
log.info("请求返回参数解密:{}", decrypt);
|
|
log.info("请求返回参数解密:{}", decrypt);
|
|
|
return JSON.parseObject(decrypt, responseClass);
|
|
return JSON.parseObject(decrypt, responseClass);
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
@@ -214,19 +207,67 @@ public class BoHaiCrawlerRequestComponent {
|
|
|
* @return BoHaiResponse
|
|
* @return BoHaiResponse
|
|
|
*/
|
|
*/
|
|
|
public <BoHaiResponse> BoHaiResponse request1(CrawlerRequestUrlStandard crawlerRequestUrlStandard, Object request, Class<BoHaiResponse> responseClass, HttpHeaders headers) {
|
|
public <BoHaiResponse> BoHaiResponse request1(CrawlerRequestUrlStandard crawlerRequestUrlStandard, Object request, Class<BoHaiResponse> responseClass, HttpHeaders headers) {
|
|
|
- // 参数
|
|
|
|
|
- //BoHaiCrawlerBaseRequest1 crawlerBaseRequest = new BoHaiCrawlerBaseRequest1(request);
|
|
|
|
|
- //ResponseEntity<BoHaiCrawlerBaseResponse> responseEntity = requestComponent.objectPost("", crawlerBaseRequest, BoHaiCrawlerBaseResponse.class, headers);
|
|
|
|
|
- ResponseEntity<BoHaiCrawlerBaseResponse1> responseEntity = requestComponent.objectPost(RequestUrl.CAR.getRequestUrl(boHaiCrawlerProperties.getBaseUrl()), request, BoHaiCrawlerBaseResponse1.class, headers);
|
|
|
|
|
- BoHaiCrawlerBaseResponse1 boHaiCrawlerBaseResponse = responseEntity.getBody();
|
|
|
|
|
- log.info("boHaiCrawlerBaseResponse参数的值:{}", JSON.toJSONString(boHaiCrawlerBaseResponse));
|
|
|
|
|
-
|
|
|
|
|
- AssertionUtils.isEmpty(boHaiCrawlerBaseResponse, "请求异常请重试");
|
|
|
|
|
- if (!boHaiCrawlerBaseResponse.getCode().equals(Integer.valueOf(0))) {
|
|
|
|
|
- throw new SystemException(boHaiCrawlerBaseResponse.getMsg());
|
|
|
|
|
|
|
+
|
|
|
|
|
+ ResponseEntity<BoHaiResponse> responseEntity = requestComponent.objectPost(crawlerRequestUrlStandard.getRequestUrl(boHaiCrawlerProperties.getBaseUrl2()), request, responseClass, headers);
|
|
|
|
|
+
|
|
|
|
|
+ AssertionUtils.isEmpty(responseEntity, "请求异常请重试");
|
|
|
|
|
+ BoHaiResponse body = responseEntity.getBody();
|
|
|
|
|
+ return JSON.parseObject(JSON.toJSONString(body), responseClass);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 请求(请求参数没有加密)
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param url
|
|
|
|
|
+ * @param request
|
|
|
|
|
+ * @param responseClass
|
|
|
|
|
+ * @param headers
|
|
|
|
|
+ * @return BoHaiResponse
|
|
|
|
|
+ */
|
|
|
|
|
+ public <BoHaiResponse> BoHaiResponse requestForUpload(String url, Object request, Class<BoHaiResponse> responseClass, HttpHeaders headers) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ ResponseEntity<String> responseEntity = requestComponent.objectPostForUpload(url, request, String.class, headers);
|
|
|
|
|
+ String result = responseEntity.getBody();
|
|
|
|
|
+
|
|
|
|
|
+ AssertionUtils.isEmpty(result, "请求异常请重试");
|
|
|
|
|
+ //参数解密
|
|
|
|
|
+ String decrypt = DESUtil.des_decrypt(result);
|
|
|
|
|
+ log.info("解密的值:{}", decrypt);
|
|
|
|
|
+ return (BoHaiResponse) parseImageUploadResponse(decrypt);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ throw new RuntimeException(e);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 解析JSON字符串为BoHaiCrawlerImageUploadResponse
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param jsonString JSON字符串
|
|
|
|
|
+ * @return BoHaiCrawlerImageUploadResponse
|
|
|
|
|
+ */
|
|
|
|
|
+ public static BoHaiCrawlerImageUploadResponse parseImageUploadResponse(String jsonString) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(jsonString);
|
|
|
|
|
+ // 创建响应对象
|
|
|
|
|
+ BoHaiCrawlerImageUploadResponse response = new BoHaiCrawlerImageUploadResponse();
|
|
|
|
|
+ Map<String, BoHaiCrawlerImageUploadResponse.ImageInfo> dataMap = new HashMap<>();
|
|
|
|
|
+ // 遍历所有键值对
|
|
|
|
|
+ for (String fileName : jsonObject.keySet()) {
|
|
|
|
|
+ JSONObject imageJson = jsonObject.getJSONObject(fileName);
|
|
|
|
|
+ if (imageJson != null) {
|
|
|
|
|
+ BoHaiCrawlerImageUploadResponse.ImageInfo imageInfo = new BoHaiCrawlerImageUploadResponse.ImageInfo();
|
|
|
|
|
+ imageInfo.setPageUrl(imageJson.getString("PAGE_URL"));
|
|
|
|
|
+ imageInfo.setThumUrl(imageJson.getString("THUM_URL"));
|
|
|
|
|
+ dataMap.put(fileName, imageInfo);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ response.setData(dataMap);
|
|
|
|
|
+ return response;
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("解析图片上传响应失败: {}", e.getMessage(), e);
|
|
|
|
|
+ throw new RuntimeException("JSON解析失败", e);
|
|
|
}
|
|
}
|
|
|
- CarModelDataDTO data = boHaiCrawlerBaseResponse.getData();
|
|
|
|
|
- return JSON.parseObject(JSON.toJSONString(data), responseClass);
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -242,7 +283,6 @@ public class BoHaiCrawlerRequestComponent {
|
|
|
//BoHaiCrawlerBaseResponse response = requestComponent.get(RequestUrl.COMPANIES.getRequestUrl(boHaiCrawlerProperties.getBaseUrl()), multiValueMap, "", BoHaiCrawlerBaseResponse.class, headers);
|
|
//BoHaiCrawlerBaseResponse response = requestComponent.get(RequestUrl.COMPANIES.getRequestUrl(boHaiCrawlerProperties.getBaseUrl()), multiValueMap, "", BoHaiCrawlerBaseResponse.class, headers);
|
|
|
BoHaiCrawlerBaseResponse response = requestComponent.get("", multiValueMap, "", BoHaiCrawlerBaseResponse.class, headers);
|
|
BoHaiCrawlerBaseResponse response = requestComponent.get("", multiValueMap, "", BoHaiCrawlerBaseResponse.class, headers);
|
|
|
BoHaiCrawlerCompaniesResponse daJiaCrawlerCompaniesResponse = DESEncryption.decryptStrToObject(response.getResult(), BoHaiCrawlerCompaniesResponse.class);
|
|
BoHaiCrawlerCompaniesResponse daJiaCrawlerCompaniesResponse = DESEncryption.decryptStrToObject(response.getResult(), BoHaiCrawlerCompaniesResponse.class);
|
|
|
-
|
|
|
|
|
return daJiaCrawlerCompaniesResponse.getList()
|
|
return daJiaCrawlerCompaniesResponse.getList()
|
|
|
.stream()
|
|
.stream()
|
|
|
.filter(x -> cDptCde.equals(x.getCDptCde()))
|
|
.filter(x -> cDptCde.equals(x.getCDptCde()))
|
|
@@ -320,11 +360,192 @@ public class BoHaiCrawlerRequestComponent {
|
|
|
/**
|
|
/**
|
|
|
* 核保
|
|
* 核保
|
|
|
*
|
|
*
|
|
|
- * @param boHaiCrawlerUnderwritingRequest2 核保请求实体
|
|
|
|
|
|
|
+ * @param boHaiCrawlerUnderwritingRequest2
|
|
|
* @param headers
|
|
* @param headers
|
|
|
* @return BoHaiCrawlerUnderwritingResponse
|
|
* @return BoHaiCrawlerUnderwritingResponse
|
|
|
*/
|
|
*/
|
|
|
public BoHaiCrawlerUnderwritingResponse underwriting(BoHaiCrawlerUnderwritingRequest2 boHaiCrawlerUnderwritingRequest2, HttpHeaders headers) throws Exception {
|
|
public BoHaiCrawlerUnderwritingResponse underwriting(BoHaiCrawlerUnderwritingRequest2 boHaiCrawlerUnderwritingRequest2, HttpHeaders headers) throws Exception {
|
|
|
return request(RequestUrl.UNDERWRITING, boHaiCrawlerUnderwritingRequest2, BoHaiCrawlerUnderwritingResponse.class, headers);
|
|
return request(RequestUrl.UNDERWRITING, boHaiCrawlerUnderwritingRequest2, BoHaiCrawlerUnderwritingResponse.class, headers);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 上传影像件
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param imageUploadRequest
|
|
|
|
|
+ * @return BoHaiCrawlerImageUploadSubmitResponse
|
|
|
|
|
+ */
|
|
|
|
|
+ public BoHaiCrawlerImageUploadSubmitResponse uploadImage(BoHaiCrawlerImageUploadRequestDto boHaiCrawlerImageUploadRequest, HttpHeaders headers) throws Exception {
|
|
|
|
|
+ //1、调用第一个接口:上传图片
|
|
|
|
|
+ List<String> imageNameList = new LinkedList<>();
|
|
|
|
|
+ List<InsuranceImageVo> imageVoList = boHaiCrawlerImageUploadRequest.getImageVoList();
|
|
|
|
|
+ //生成批次号
|
|
|
|
|
+ String batchNumber = BatchNumberGenerator.generateBatchNumber();
|
|
|
|
|
+ for (InsuranceImageVo insuranceImageVo : imageVoList) {
|
|
|
|
|
+ if (Objects.nonNull(insuranceImageVo)) {
|
|
|
|
|
+ List<InsuranceImageVo.ImageDTO> imageBase64List = insuranceImageVo.getImageBase64List();
|
|
|
|
|
+ for (InsuranceImageVo.ImageDTO imageDTO : imageBase64List) {
|
|
|
|
|
+ imageDTO.setBatchNum(batchNumber);
|
|
|
|
|
+ BoHaiCrawlerImageUploadResponse boHaiCrawlerImageUploadResponse = uploadImage(imageDTO, headers);
|
|
|
|
|
+ Map<String, BoHaiCrawlerImageUploadResponse.ImageInfo> data = boHaiCrawlerImageUploadResponse.getData();
|
|
|
|
|
+ data.keySet().forEach(key -> imageNameList.add(key));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ log.info("调用渤海保司第一个上传接口成功");
|
|
|
|
|
+
|
|
|
|
|
+ //2、调用第二个接口:上传图片提交
|
|
|
|
|
+ BoHaiCrawlerImageUploadSubmitRequest boHaiCrawlerImageUploadSubmitRequest = buildImageUploadSubmitRequest(
|
|
|
|
|
+ boHaiCrawlerImageUploadRequest, imageNameList, batchNumber);
|
|
|
|
|
+ //String jsonString = JSON.toJSONString(request);
|
|
|
|
|
+ ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
|
+ String jsonString = objectMapper.writeValueAsString(boHaiCrawlerImageUploadSubmitRequest);
|
|
|
|
|
+ log.info("请求参数:{}", jsonString);
|
|
|
|
|
+ // 参数加密
|
|
|
|
|
+ String encrypt = DESUtil.des_encrypt(jsonString);
|
|
|
|
|
+ log.info("请求参数加密:{}", encrypt);
|
|
|
|
|
+ //生成md5值
|
|
|
|
|
+ String md5Value = DESUtil.md5(encrypt + "c2lub3NvZnQuY2hhbm5lbC55ZHBpYw==");
|
|
|
|
|
+ log.info("请求参数md5的值:{}", md5Value);
|
|
|
|
|
+
|
|
|
|
|
+ BoHaiCrawlerImageUploadSubmitEncryptionRequest boHaiCrawlerImageUploadSubmitEncryptionRequest = new BoHaiCrawlerImageUploadSubmitEncryptionRequest();
|
|
|
|
|
+ boHaiCrawlerImageUploadSubmitEncryptionRequest.setEncryptionData(encrypt);
|
|
|
|
|
+ boHaiCrawlerImageUploadSubmitEncryptionRequest.setMd5(md5Value);
|
|
|
|
|
+
|
|
|
|
|
+ BoHaiCrawlerImageUploadSubmitResponse boHaiCrawlerImageUploadSubmitResponse = request(RequestUrl.UPLOAD_SUBMIT, boHaiCrawlerImageUploadSubmitEncryptionRequest, BoHaiCrawlerImageUploadSubmitResponse.class, headers);
|
|
|
|
|
+ String returnCode = boHaiCrawlerImageUploadSubmitResponse.getHead().getReturnCode();
|
|
|
|
|
+ if (!"0".equals(returnCode)) {
|
|
|
|
|
+ log.error("上传影像提交失败,返回码:{},返回消息:{}", returnCode, boHaiCrawlerImageUploadSubmitResponse.getHead().getReturnMessage());
|
|
|
|
|
+ throw new SystemException("上传影像提交失败,返回码:" + returnCode + ",返回消息:" + boHaiCrawlerImageUploadSubmitResponse.getHead().getReturnMessage());
|
|
|
|
|
+ }else{
|
|
|
|
|
+ log.info("上传影像成功");
|
|
|
|
|
+ }
|
|
|
|
|
+ return boHaiCrawlerImageUploadSubmitResponse;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 构建图片上传提交请求对象
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param boHaiCrawlerImageUploadRequest 请求DTO
|
|
|
|
|
+ * @param files 文件数组
|
|
|
|
|
+ * @param batchNumber 批次号
|
|
|
|
|
+ * @return BoHaiCrawlerImageUploadSubmitRequest
|
|
|
|
|
+ */
|
|
|
|
|
+ private BoHaiCrawlerImageUploadSubmitRequest buildImageUploadSubmitRequest(
|
|
|
|
|
+ BoHaiCrawlerImageUploadRequestDto boHaiCrawlerImageUploadRequest, List<String> imageNameList, String batchNumber) {
|
|
|
|
|
+
|
|
|
|
|
+ BoHaiCrawlerImageUploadSubmitRequest submitRequest = new BoHaiCrawlerImageUploadSubmitRequest();
|
|
|
|
|
+ // 设置请求头信息
|
|
|
|
|
+ BoHaiCrawlerImageUploadSubmitRequest.Head head = new BoHaiCrawlerImageUploadSubmitRequest.Head();
|
|
|
|
|
+ head.setToken(TOKEN);
|
|
|
|
|
+ head.setTransType("Req");
|
|
|
|
|
+ head.setTransCode("UploadImage");
|
|
|
|
|
+ submitRequest.setHead(head);
|
|
|
|
|
+
|
|
|
|
|
+ // 设置用户和机构信息
|
|
|
|
|
+ submitRequest.setUserCode("114050281");
|
|
|
|
|
+ submitRequest.setUserName("郝壮明");
|
|
|
|
|
+ submitRequest.setOrgCode("14070201");
|
|
|
|
|
+ submitRequest.setOrgName("山西分公司介休支公司业务一部");
|
|
|
|
|
+
|
|
|
|
|
+ // 设置业务代码
|
|
|
|
|
+ submitRequest.setCode("ECM10002");
|
|
|
|
|
+ submitRequest.setRoleCode("cxcb");
|
|
|
|
|
+ // 设置批次号
|
|
|
|
|
+ submitRequest.setBatchNum(batchNumber);
|
|
|
|
|
+
|
|
|
|
|
+ // 构建批次列表
|
|
|
|
|
+ List<BoHaiCrawlerImageUploadSubmitRequest.BatchInfo> bathList = new ArrayList<>();
|
|
|
|
|
+ BoHaiCrawlerImageUploadSubmitRequest.BatchInfo batchInfo = new BoHaiCrawlerImageUploadSubmitRequest.BatchInfo();
|
|
|
|
|
+ //分类代码(重要)
|
|
|
|
|
+ batchInfo.setAppCode("CXCB_TB");
|
|
|
|
|
+ batchInfo.setAppName("车险投保资料");
|
|
|
|
|
+ batchInfo.setBusiNo(boHaiCrawlerImageUploadRequest.getOrderNo());
|
|
|
|
|
+
|
|
|
|
|
+ // 构建页面列表
|
|
|
|
|
+ List<BoHaiCrawlerImageUploadSubmitRequest.PageInfo> pagelist = new ArrayList<>();
|
|
|
|
|
+ BoHaiCrawlerImageUploadSubmitRequest.PageInfo pageInfo = new BoHaiCrawlerImageUploadSubmitRequest.PageInfo();
|
|
|
|
|
+ pageInfo.setId("CXCB_TB001");
|
|
|
|
|
+
|
|
|
|
|
+ // 构建子分类列表
|
|
|
|
|
+ List<BoHaiCrawlerImageUploadSubmitRequest.ChildInfo> children = new ArrayList<>();
|
|
|
|
|
+ BoHaiCrawlerImageUploadSubmitRequest.ChildInfo childInfo = new BoHaiCrawlerImageUploadSubmitRequest.ChildInfo();
|
|
|
|
|
+ childInfo.setId("CXCB_TB001001");
|
|
|
|
|
+
|
|
|
|
|
+ // 构建页面详情列表
|
|
|
|
|
+ List<BoHaiCrawlerImageUploadSubmitRequest.PageDetail> pages = new ArrayList<>();
|
|
|
|
|
+ for (String imageName : imageNameList) {
|
|
|
|
|
+ BoHaiCrawlerImageUploadSubmitRequest.PageDetail pageDetail = new BoHaiCrawlerImageUploadSubmitRequest.PageDetail();
|
|
|
|
|
+ pageDetail.setFileName(imageName);
|
|
|
|
|
+ pages.add(pageDetail);
|
|
|
|
|
+ }
|
|
|
|
|
+ childInfo.setPages(pages);
|
|
|
|
|
+ children.add(childInfo);
|
|
|
|
|
+ pageInfo.setChildren(children);
|
|
|
|
|
+ pagelist.add(pageInfo);
|
|
|
|
|
+ batchInfo.setPagelist(pagelist);
|
|
|
|
|
+
|
|
|
|
|
+ batchInfo.setComCode("14070201");
|
|
|
|
|
+ batchInfo.setComName("山西分公司介休支公司业务一部");
|
|
|
|
|
+ batchInfo.setUserCode("114050281");
|
|
|
|
|
+ batchInfo.setUserName("郝壮明");
|
|
|
|
|
+
|
|
|
|
|
+ bathList.add(batchInfo);
|
|
|
|
|
+ submitRequest.setBathList(bathList);
|
|
|
|
|
+
|
|
|
|
|
+ submitRequest.setRoleCodeJS("cxcb_image_cd");
|
|
|
|
|
+ return submitRequest;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 上传影像文件 第一个接口
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param imageDTO
|
|
|
|
|
+ * @param headers
|
|
|
|
|
+ * @return BoHaiCrawlerImageUploadResponse
|
|
|
|
|
+ */
|
|
|
|
|
+ public BoHaiCrawlerImageUploadResponse uploadImage(InsuranceImageVo.ImageDTO imageDTO, HttpHeaders headers) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (imageDTO.getImageBase64Str() == null || imageDTO.getImageBase64Str().equals("")) {
|
|
|
|
|
+ log.error("base64字符串不能为空");
|
|
|
|
|
+ throw new SystemException("base64字符串不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (imageDTO.getImageByte() == null || imageDTO.getImageByte().length == 0) {
|
|
|
|
|
+ log.error("字节数组不能为空");
|
|
|
|
|
+ throw new SystemException("字节数组不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //验证base64和字节数组是否匹配
|
|
|
|
|
+ byte[] base64DecodedBytes = Base64.getDecoder().decode(imageDTO.getImageBase64Str());
|
|
|
|
|
+ if (!Arrays.equals(base64DecodedBytes, imageDTO.getImageByte())) {
|
|
|
|
|
+ log.warn("base64字符串与字节数组不匹配");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 构建完整请求URL - batchNum作为查询参数
|
|
|
|
|
+ String fullUrl = RequestUrl.UPLOAD_IMAGE.getRequestUrl(boHaiCrawlerProperties.getBaseUrl2()) + "?batchNum=" + imageDTO.getBatchNum();
|
|
|
|
|
+ log.info("影像上传接口一地址:{}", fullUrl);
|
|
|
|
|
+ //创建请求体
|
|
|
|
|
+ MultiValueMap<String, Object> requestBody = new LinkedMultiValueMap<>();
|
|
|
|
|
+ ByteArrayResource resource = new ByteArrayResource(imageDTO.getImageByte()) {
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public String getFilename() {
|
|
|
|
|
+ return imageDTO.getImageName();
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+ requestBody.add("file[]", resource);
|
|
|
|
|
+ BoHaiCrawlerImageUploadResponse boHaiCrawlerImageUploadResponse = requestForUpload(fullUrl, requestBody, BoHaiCrawlerImageUploadResponse.class, headers);
|
|
|
|
|
+ log.info("boHaiCrawlerImageUploadResponse对象的值:{}",JSON.toJSONString(boHaiCrawlerImageUploadResponse));
|
|
|
|
|
+ Map<String, BoHaiCrawlerImageUploadResponse.ImageInfo> data = boHaiCrawlerImageUploadResponse.getData();
|
|
|
|
|
+ if (CollectionUtils.isEmpty(data)) {
|
|
|
|
|
+ log.error("上传影像失败,返回数据为空");
|
|
|
|
|
+ throw new SystemException("上传影像失败,返回数据为空");
|
|
|
|
|
+ }
|
|
|
|
|
+ return boHaiCrawlerImageUploadResponse;
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ throw new SystemException("上传影像异常: " + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
}
|
|
}
|