ZhongmeiRequestApiComponents.java 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package com.ydtech.modules.order.components;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.serializer.SerializerFeature;
  4. import com.ydtech.config.properties.ZmApiConfigurationProperties;
  5. import com.ydtech.exception.SystemException;
  6. import com.ydtech.modules.order.entity.api.zm.BaseRequest;
  7. import com.ydtech.modules.order.entity.api.zm.BaseResponse;
  8. import com.ydtech.modules.order.entity.api.zm.request.*;
  9. import com.ydtech.modules.order.entity.api.zm.response.*;
  10. import com.ydtech.modules.order.utils.AESUtilsWithDataBase;
  11. import lombok.extern.slf4j.Slf4j;
  12. import org.springframework.http.HttpEntity;
  13. import org.springframework.http.HttpHeaders;
  14. import org.springframework.http.MediaType;
  15. import org.springframework.http.ResponseEntity;
  16. import org.springframework.stereotype.Component;
  17. import org.springframework.util.ObjectUtils;
  18. import org.springframework.web.client.RestTemplate;
  19. import java.util.List;
  20. /**
  21. * @author wenks
  22. * @version 0.0.2
  23. * @description 中煤 APi 请求
  24. * @date 2023/4/21 9:08
  25. */
  26. @Slf4j
  27. @Component
  28. public class ZhongmeiRequestApiComponents {
  29. private final ZmApiConfigurationProperties properties;
  30. private final RestTemplate restTemplate;
  31. public ZhongmeiRequestApiComponents(ZmApiConfigurationProperties zmApiConfigurationProperties, RestTemplate restTemplate) {
  32. this.properties = zmApiConfigurationProperties;
  33. this.restTemplate = restTemplate;
  34. }
  35. /**
  36. * 加密请求
  37. * @param q 请求参数
  38. * @param url 请求url
  39. * @param tClass 响应类型
  40. * @param <Q> Request 请求体
  41. * @param <S> Response 响应体
  42. * @return <S>
  43. */
  44. private <Q extends BaseRequest, S extends BaseResponse> S post(Q q, String url, Class<S> tClass) {
  45. HttpHeaders httpHeaders = new HttpHeaders();
  46. httpHeaders.setContentType(MediaType.APPLICATION_JSON);
  47. String jsonString = JSON.toJSONString(q, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
  48. log.info("---------> 请求参数:{}", jsonString);
  49. // 加密
  50. String sessionKey = properties.getSessionKey();
  51. String s = AESUtilsWithDataBase.encryptECBPK5Hex(jsonString, sessionKey);
  52. log.info("---------> 加密后的参数:{}", s);
  53. HttpEntity<String> httpEntity = new HttpEntity<>(s, httpHeaders);
  54. ResponseEntity<String> response = restTemplate.postForEntity(url, httpEntity, String.class);
  55. String body = response.getBody();
  56. S t = AESUtilsWithDataBase.decryptMessage(body, tClass, "响应参数", sessionKey);
  57. if (ObjectUtils.isEmpty(t)) {
  58. throw new SystemException("请求失败");
  59. }
  60. return t;
  61. }
  62. // /**
  63. // * @param q 请求参数
  64. // * @param url 请求url
  65. // * @param tClass 响应类型
  66. // * @param <Q> Request 请求体
  67. // * @param <S> Response 响应体
  68. // * @return <S>
  69. // */
  70. // private <Q extends BaseRequest, S extends BaseResponse> S post(Q q, String url, Class<S> tClass) {
  71. // String jsonString = JSON.toJSONString(q);
  72. // log.info("---------> 请求参数:{}", jsonString);
  73. //
  74. // HttpHeaders httpHeaders = new HttpHeaders();
  75. // httpHeaders.setContentType(MediaType.APPLICATION_JSON);
  76. //
  77. // HttpEntity<Q> yaQuoteInfoVoHttpEntity = new HttpEntity<>(q, httpHeaders);
  78. // ResponseEntity<String> response = restTemplate.postForEntity(url, yaQuoteInfoVoHttpEntity, String.class);
  79. // String body = response.getBody();
  80. // log.info("---------> 响应参数:{}", body);
  81. //
  82. // S t = JSON.parseObject(body, tClass);
  83. // if (ObjectUtils.isEmpty(t)) {
  84. // throw new SystemException("请求失败");
  85. // }
  86. //
  87. // return t;
  88. // }
  89. /**
  90. * @param <Q> Request 请求体
  91. * @param <S> Response 响应体
  92. * @param request 请求内容
  93. * @param tClass 响应类型
  94. * @param verify 结果是否需要验证
  95. * @return 响应内容
  96. */
  97. private <Q extends BaseRequest, S extends BaseResponse> S request(Q request, Class<S> tClass, boolean verify, String domain) {
  98. String url = domain + request.getHead().getTransCode() + ".do";
  99. S response = post(request, url, tClass);
  100. if (verify) {
  101. validationResults(response);
  102. }
  103. return response;
  104. }
  105. /**
  106. * @param <Q> Request 请求体
  107. * @param <S> Response 响应体
  108. * 常规
  109. */
  110. private <Q extends BaseRequest, S extends BaseResponse> S routineRequest(Q request, Class<S> tClass, boolean verify) {
  111. return request(request, tClass, verify, properties.getUrl());
  112. }
  113. /**
  114. * @param <Q> Request 请求体
  115. * @param <S> Response 响应体
  116. * 影像
  117. */
  118. private <Q extends BaseRequest, S extends BaseResponse> void imageRequest(Q request, Class<S> tClass, boolean verify) {
  119. request(request, tClass, verify, properties.getUrl());
  120. }
  121. /**
  122. * @param <Q> Request 请求体
  123. * @param <S> Response 响应体
  124. * 短信
  125. */
  126. private <Q extends BaseRequest, S extends BaseResponse> S smsRequest(Q request, Class<S> tClass, boolean verify) {
  127. return request(request, tClass, verify, properties.getSmsUrl());
  128. }
  129. /**
  130. * 车型查询 传入必要车辆信息,返回车型列表给用户选择
  131. */
  132. public List<ModelsQueryResponse.SimpleStadarCarDTO> modelQuery(ModelsQueryRequest request, Class<ModelsQueryResponse> tClass) {
  133. return routineRequest(request, tClass, true).getSimpleStadarCar();
  134. }
  135. /**
  136. * 报价 传入必要投保方案信息,返回投保单保费及车船税
  137. */
  138. public QuotedPriceResponse quotedPrice(QuotedPriceRequest request, Class<QuotedPriceResponse> tClass) {
  139. return routineRequest(request, tClass, true);
  140. }
  141. /**
  142. * 提交核保 传入投保单必要信息,对投保单进行审核
  143. */
  144. public SubmitResponse submit(SubmitRequest request, Class<SubmitResponse> tClass) {
  145. request.setCallbackUrl(properties.getCallbackDomain() + properties.getCallbackUrl());
  146. request.setPageUrl(properties.getPageUrl());
  147. request.setPassMsgUrl(properties.getCallbackDomain() + properties.getPassMsgUrl());
  148. return routineRequest(request, tClass, false);
  149. }
  150. /**
  151. * 上传影像 传入订单信息,查询是否生成保单成功
  152. */
  153. public void uploadImage(UploadImageRequest request, Class<UploadImageResponse> tClass) {
  154. imageRequest(request, tClass, true);
  155. }
  156. /**
  157. * 缴费查询
  158. */
  159. public OrderStatusResponse orderStatus(OrderStatusRequest request, Class<OrderStatusResponse> tClass) {
  160. return routineRequest(request, tClass, true);
  161. }
  162. /**
  163. * 核保状态查询 传入单号查询该单核保状态
  164. */
  165. public SubmitStatusQueryResponse submitStatus(SubmitStatusQueryRequest request, Class<SubmitStatusQueryResponse> tClass) {
  166. return routineRequest(request, tClass, true);
  167. }
  168. /**
  169. * 电子保单下载 传入单号相关信息下载电子保单
  170. */
  171. public InsurancePolicyPrintResponse insurancePolicyPrint(InsurancePolicyPrintRequest request, Class<InsurancePolicyPrintResponse> tClass) {
  172. return routineRequest(request, tClass, true);
  173. }
  174. /**
  175. * 校验发短信接口 校验此单是否需要发送短信
  176. */
  177. public CheckSMScodeResponse checkSMScode(CheckSMScodeRequest request, Class<CheckSMScodeResponse> tClass) {
  178. return smsRequest(request, tClass, true);
  179. }
  180. /**
  181. * 验证校验码正确 录入校验码校验是否正确
  182. */
  183. public ValidSMScodeResponse checkSMScode(ValidSMScodeRequest request, Class<ValidSMScodeResponse> tClass) {
  184. return smsRequest(request, tClass, true);
  185. }
  186. public <T extends BaseResponse> void validationResults(T t) {
  187. if ("-1".equals(t.getHead().getReturnCode())) {
  188. throw new SystemException(t.getHead().getReturnMessage());
  189. }
  190. }
  191. }