|
|
@@ -6,6 +6,7 @@ import com.jzg.commons.exception.SystemException;
|
|
|
import com.jzg.commons.util.StringUtils;
|
|
|
import com.jzg.quotation.chengtai.api.entity.ChengTaiApiConfigureParameters;
|
|
|
import com.jzg.quotation.chengtai.api.entity.ChengTaiEncrypted;
|
|
|
+import com.jzg.quotation.chengtai.api.entity.constants.ResponseCode;
|
|
|
import com.jzg.quotation.chengtai.api.entity.constants.enums.RequestUrl;
|
|
|
import com.jzg.quotation.chengtai.api.entity.request.*;
|
|
|
import com.jzg.quotation.chengtai.api.entity.response.*;
|
|
|
@@ -18,6 +19,7 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
import org.redisson.api.RLock;
|
|
|
import org.redisson.api.RMap;
|
|
|
import org.redisson.api.RedissonClient;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.http.HttpHeaders;
|
|
|
import org.springframework.http.MediaType;
|
|
|
import org.springframework.http.ResponseEntity;
|
|
|
@@ -56,16 +58,19 @@ public class ChengTaiRequestApiComponent {
|
|
|
String encryptStr = RSAUtil.encryptString(ctPublicKey, baseStr); //加密
|
|
|
String signatureStr = RSAUtil.signature(baseStr, privateKey); //加签
|
|
|
ChengTaiEncrypted chengTaiEncrypted = new ChengTaiEncrypted(encryptStr,chengTaiApiProperties,signatureStr);
|
|
|
-
|
|
|
+ System.out.println(JSON.toJSON(chengTaiEncrypted));
|
|
|
ResponseEntity<B> bResponseEntity = requestComponent.objectPost(url, chengTaiEncrypted, responseType, httpHeaders);
|
|
|
|
|
|
String body = JSON.toJSONString(bResponseEntity.getBody());//需要联调观察数据格式
|
|
|
-
|
|
|
+ B res = JSON.parseObject(body).toJavaObject(responseType);
|
|
|
+ if (!ResponseCode.R_000.getCode().equals(res.getCode())){throw new SystemException(res.message);}
|
|
|
// 解密响应
|
|
|
- String newSource = RSAUtil.decryptString(privateKey, body);
|
|
|
-// info = new String(Base64.getDecoder().decode(newSource), Charset.forName("UTF-8"));
|
|
|
-// flag = RSAUtil.signatureVerfiy(newSource, body, ctPublicKey);
|
|
|
- return JSON.parseObject(body).toJavaObject(responseType);
|
|
|
+ String newSource = RSAUtil.decryptString(privateKey, res.encryptionMessage);
|
|
|
+ String info = new String(Base64.getDecoder().decode(newSource), Charset.forName("UTF-8"));
|
|
|
+ boolean flag = RSAUtil.signatureVerfiy(newSource, res.signature, ctPublicKey);
|
|
|
+ if(!flag){throw new SystemException(res.message);}
|
|
|
+ res.setDecodeData(info);
|
|
|
+ return res;
|
|
|
}catch (Exception e){
|
|
|
throw new SystemException(e.toString());
|
|
|
}
|
|
|
@@ -76,17 +81,20 @@ public class ChengTaiRequestApiComponent {
|
|
|
}
|
|
|
|
|
|
public <T extends BaseRequest, B extends BaseResponse> B requestUrlToken(String url, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
|
|
|
- String busReqString = JSON.toJSONString(requestBody, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
|
|
|
try{
|
|
|
-
|
|
|
ResponseEntity<B> bResponseEntity = requestComponent.objectPost(url, requestBody, responseType, httpHeaders);
|
|
|
String body = JSON.toJSONString(bResponseEntity.getBody());//需要联调观察数据格式
|
|
|
+ B res = JSON.parseObject(body).toJavaObject(responseType);
|
|
|
+ if (!ResponseCode.R_000.getCode().equals(res.getCode())){throw new SystemException(res.message);}
|
|
|
PrivateKey privateKey = RSAUtil.getPrivateKeyFromPKCS8("RSA", chengTaiApiProperties.getPrivateKey());
|
|
|
+ PublicKey ctPublicKey = RSAUtil.getPublicKeyFromX509("RSA", chengTaiApiProperties.getCtPublicKey());
|
|
|
// 解密响应
|
|
|
- String newSource = RSAUtil.decryptString(privateKey, body);
|
|
|
-// info = new String(Base64.getDecoder().decode(newSource), Charset.forName("UTF-8"));
|
|
|
-// flag = RSAUtil.signatureVerfiy(newSource, body, ctPublicKey);
|
|
|
- return JSON.parseObject(body).toJavaObject(responseType);
|
|
|
+ String newSource = RSAUtil.decryptString(privateKey, res.encryptionMessage);
|
|
|
+ String info = new String(Base64.getDecoder().decode(newSource), Charset.forName("UTF-8"));
|
|
|
+ boolean flag = RSAUtil.signatureVerfiy(newSource, res.signature, ctPublicKey);
|
|
|
+ if(!flag){throw new SystemException(res.message);}
|
|
|
+ res.setDecodeData(info);
|
|
|
+ return res;
|
|
|
}catch (Exception e){
|
|
|
throw new SystemException(e.toString());
|
|
|
}
|
|
|
@@ -121,20 +129,20 @@ public class ChengTaiRequestApiComponent {
|
|
|
|
|
|
HttpHeaders httpHeaders = new HttpHeaders();
|
|
|
String authorization = (String) redissonClient
|
|
|
- .getMap(CacheConstant.CHENGTAI_AUTHORIZATION + chengTaiApiConfigureParameters.getPartnerCode())
|
|
|
+ .getMap(CacheConstant.CHENGTAI_AUTHORIZATION + chengTaiApiConfigureParameters.getUserId())
|
|
|
.get(AUTHORIZATION);
|
|
|
|
|
|
if (StringUtils.isNotBlank(authorization)) {
|
|
|
System.out.print("---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n");
|
|
|
System.out.printf("authorization:" + authorization);
|
|
|
System.out.print("---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n");
|
|
|
- httpHeaders.set(AUTHORIZATION, authorization);
|
|
|
+ httpHeaders.set(AUTHTOKEN, authorization);
|
|
|
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
|
|
|
return httpHeaders;
|
|
|
}
|
|
|
|
|
|
// 使用分布式锁 只有一个人可以访问登录
|
|
|
- RLock lock = redissonClient.getLock(CacheConstant.CT_ACCESS_LOCK + chengTaiApiConfigureParameters.getPartnerCode());
|
|
|
+ RLock lock = redissonClient.getLock(CacheConstant.CT_ACCESS_LOCK + chengTaiApiConfigureParameters.getUserId());
|
|
|
try {
|
|
|
boolean isLock = lock.tryLock(1, 10000, TimeUnit.MILLISECONDS);
|
|
|
if (isLock) {
|
|
|
@@ -174,12 +182,12 @@ public class ChengTaiRequestApiComponent {
|
|
|
*/
|
|
|
private HttpHeaders getToken(ChengTaiApiConfigureParameters chengTaiApiConfigureParameters, HttpHeaders httpHeaders) {
|
|
|
|
|
|
- ChengTaiTokenRequest request = new ChengTaiTokenRequest(chengTaiApiConfigureParameters.getPartnerCode());
|
|
|
+ ChengTaiTokenRequest request = new ChengTaiTokenRequest(chengTaiApiProperties.getPartnerCode());
|
|
|
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
|
|
|
ChengTaiTokenResponse accessToken = getAccessToken(request,httpHeaders);
|
|
|
httpHeaders.set(AUTHTOKEN, accessToken.getAccessToken());
|
|
|
// 3.1 存入redis中
|
|
|
- RMap<Object, Object> rMap = redissonClient.getMap(CacheConstant.CHENGTAI_AUTHORIZATION + chengTaiApiConfigureParameters.getPartnerCode());
|
|
|
+ RMap<Object, Object> rMap = redissonClient.getMap(CacheConstant.CHENGTAI_AUTHORIZATION + chengTaiApiConfigureParameters.getUserId());
|
|
|
rMap.put(AUTHORIZATION, accessToken.getAccessToken());
|
|
|
rMap.expire(Duration.ofHours(CacheConstant.CHENGTAI_AUTHORIZATION_TIME));
|
|
|
return httpHeaders;
|
|
|
@@ -193,10 +201,14 @@ public class ChengTaiRequestApiComponent {
|
|
|
* @return 出参实体
|
|
|
*/
|
|
|
private ChengTaiTokenResponse getAccessToken(ChengTaiTokenRequest chengTaiTokenRequest, HttpHeaders httpHeaders) {
|
|
|
- return requestRequestUrlToken(RequestUrl.Z00001,
|
|
|
+ ChengTaiTokenResponse response = requestRequestUrlToken(RequestUrl.Z00001,
|
|
|
chengTaiTokenRequest,
|
|
|
ChengTaiTokenResponse.class,
|
|
|
httpHeaders);
|
|
|
+ ChengTaiTokenResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(ChengTaiTokenResponse.class);
|
|
|
+ res.setCode(response.getCode());
|
|
|
+ res.setMessage(response.getMessage());
|
|
|
+ return res;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -208,7 +220,15 @@ public class ChengTaiRequestApiComponent {
|
|
|
* @return 出参实体
|
|
|
*/
|
|
|
public CarInfoResponse carinfoQuery(CarInfoRequest carInfoRequest, HttpHeaders httpHeaders, String partnerCode) {
|
|
|
- return requestRequestUrl(RequestUrl.Z00002, carInfoRequest, CarInfoResponse.class, httpHeaders, partnerCode);
|
|
|
+ CarInfoResponse response = requestRequestUrl(RequestUrl.Z00002,
|
|
|
+ carInfoRequest,
|
|
|
+ CarInfoResponse.class,
|
|
|
+ httpHeaders,
|
|
|
+ partnerCode);
|
|
|
+ CarInfoResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(CarInfoResponse.class);
|
|
|
+ res.setCode(response.getCode());
|
|
|
+ res.setMessage(response.getMessage());
|
|
|
+ return res;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -220,7 +240,16 @@ public class ChengTaiRequestApiComponent {
|
|
|
* @return 出参实体
|
|
|
*/
|
|
|
public QueryCarActualValueResponse queryActualValue(QueryCarActualValueRequest carActualValueRequest, HttpHeaders httpHeaders, String partnerCode) {
|
|
|
- return requestRequestUrl(RequestUrl.Z00003, carActualValueRequest, QueryCarActualValueResponse.class, httpHeaders, partnerCode);
|
|
|
+ QueryCarActualValueResponse response = requestRequestUrl(RequestUrl.Z00003,
|
|
|
+ carActualValueRequest,
|
|
|
+ QueryCarActualValueResponse.class,
|
|
|
+ httpHeaders,
|
|
|
+ partnerCode);
|
|
|
+
|
|
|
+ QueryCarActualValueResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(QueryCarActualValueResponse.class);
|
|
|
+ res.setCode(response.getCode());
|
|
|
+ res.setMessage(response.getMessage());
|
|
|
+ return res;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -232,7 +261,15 @@ public class ChengTaiRequestApiComponent {
|
|
|
* @return 出参实体
|
|
|
*/
|
|
|
public InsurePremiumResponse calculatePremium(InsurePremiumRequest insurePremiumRequest, HttpHeaders httpHeaders, String partnerCode) {
|
|
|
- return requestRequestUrl(RequestUrl.Z00004, insurePremiumRequest, InsurePremiumResponse.class, httpHeaders, partnerCode);
|
|
|
+ InsurePremiumResponse response = requestRequestUrl(RequestUrl.Z00004,
|
|
|
+ insurePremiumRequest,
|
|
|
+ InsurePremiumResponse.class,
|
|
|
+ httpHeaders,
|
|
|
+ partnerCode);
|
|
|
+ InsurePremiumResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(InsurePremiumResponse.class);
|
|
|
+ res.setCode(response.getCode());
|
|
|
+ res.setMessage(response.getMessage());
|
|
|
+ return res;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -243,7 +280,15 @@ public class ChengTaiRequestApiComponent {
|
|
|
* @return 出参实体
|
|
|
*/
|
|
|
public PayUrlResponse getPayUrl(PayUrlRequest payUrlRequest, HttpHeaders httpHeaders, String partnerCode) {
|
|
|
- return requestRequestUrl(RequestUrl.Z00010, payUrlRequest, PayUrlResponse.class, httpHeaders, partnerCode);
|
|
|
+ PayUrlResponse response = requestRequestUrl(RequestUrl.Z00010,
|
|
|
+ payUrlRequest,
|
|
|
+ PayUrlResponse.class,
|
|
|
+ httpHeaders,
|
|
|
+ partnerCode);
|
|
|
+ PayUrlResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(PayUrlResponse.class);
|
|
|
+ res.setCode(response.getCode());
|
|
|
+ res.setMessage(response.getMessage());
|
|
|
+ return res;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -255,6 +300,14 @@ public class ChengTaiRequestApiComponent {
|
|
|
* @return
|
|
|
*/
|
|
|
public UploadFileResponse submitImage(UploadFileRequest uploadFileRequest, HttpHeaders httpHeaders, String partnerCode) {
|
|
|
- return requestRequestUrl(RequestUrl.Z00005, uploadFileRequest, UploadFileResponse.class, httpHeaders, partnerCode);
|
|
|
+ UploadFileResponse response = requestRequestUrl(RequestUrl.Z00005,
|
|
|
+ uploadFileRequest,
|
|
|
+ UploadFileResponse.class,
|
|
|
+ httpHeaders,
|
|
|
+ partnerCode);
|
|
|
+ UploadFileResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(UploadFileResponse.class);
|
|
|
+ res.setCode(response.getCode());
|
|
|
+ res.setMessage(response.getMessage());
|
|
|
+ return res;
|
|
|
}
|
|
|
}
|