ZhongmeiRequestApiComponents.java 6.4 KB

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