package com.ydtech.components; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.ydtech.config.properties.ZmApiConfigurationProperties; import com.ydtech.exception.SystemException; import com.ydtech.modules.order.entity.api.zm.BaseRequest; import com.ydtech.modules.order.entity.api.zm.BaseResponse; import com.ydtech.modules.order.entity.api.zm.request.*; import com.ydtech.modules.order.entity.api.zm.response.*; import lombok.extern.slf4j.Slf4j; import org.springframework.http.*; import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; import org.springframework.web.client.RestTemplate; import java.util.List; /** * * @author wenks * @version 0.0.2 * @description 中煤 APi 请求 * @date 2023/4/21 9:08 */ @Slf4j @Component public class ZhongmeiRequestApiComponents { private final ZmApiConfigurationProperties properties; private final RestTemplate restTemplate; public ZhongmeiRequestApiComponents(ZmApiConfigurationProperties zmApiConfigurationProperties, RestTemplate restTemplate) { this.properties = zmApiConfigurationProperties; this.restTemplate = restTemplate; } private T post(K k, String url, Class tClass) { HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity yaQuoteInfoVoHttpEntity = new HttpEntity<>(k, httpHeaders); String jsonString = JSON.toJSONString(k); log.info("---------> 请求参数:{}", jsonString); ResponseEntity response = restTemplate.postForEntity(url, yaQuoteInfoVoHttpEntity, String.class); String body = response.getBody(); log.info("---------> 响应参数:{}", body); T t = JSON.parseObject(body, tClass); if (ObjectUtils.isEmpty(t)) { throw new SystemException("请求失败"); } return t; } /** * @param 请求体 * @param 响应体 * @param request 请求内容 * @param tClass 响应类型 * @param verify 结果是否需要验证 * @return 响应内容 */ private Response request(Request request, Class tClass, boolean verify, String domain) { request.setHead(properties.getHead()); String url = domain + request.getHead().getTransCode() + ".do"; Response response = post(request, url, tClass); if (verify) { validationResults(response); } return response; } /** * 常规 */ private Response routineRequest(Request request, Class tClass, boolean verify) { return request(request, tClass, verify, properties.getUrl()); } /** * 影像 */ private void imageRequest(Request request, Class tClass, boolean verify) { request(request, tClass, verify, properties.getImageUrl()); } /** * 短信 */ private Response smsRequest(Request request, Class tClass, boolean verify) { return request(request, tClass, verify, properties.getSmsUrl()); } /** * 车型查询 传入必要车辆信息,返回车型列表给用户选择 */ public List modelQuery(ModelsQueryRequest request, Class tClass) { return routineRequest(request, tClass, true).getSimpleStadarCar(); } /** * 报价 传入必要投保方案信息,返回投保单保费及车船税 */ public QuotedPriceResponse quotedPrice(QuotedPriceRequest request, Class tClass) { return routineRequest(request, tClass, true); } /** * 提交核保 传入投保单必要信息,对投保单进行审核 */ public SubmitResponse submit(SubmitRequest request, Class tClass) { request.setCallbackUrl(properties.getCallbackDomain() + properties.getCallbackUrl()); request.setPageUrl(properties.getPageUrl()); request.setPassMsgUrl(properties.getCallbackDomain() + properties.getPassMsgUrl()); return routineRequest(request, tClass, false); } /** * 上传影像 传入订单信息,查询是否生成保单成功 */ public void uploadImage(UploadImageRequest request, Class tClass) { imageRequest(request, tClass, true); } /** * 缴费查询 */ public OrderStatusResponse orderStatus(OrderStatusRequest request, Class tClass) { return routineRequest(request, tClass, true); } /** * 核保状态查询 传入单号查询该单核保状态 */ public SubmitStatusQueryResponse submitStatus(SubmitStatusQueryRequest request, Class tClass) { return routineRequest(request, tClass, true); } /** * 电子保单下载 传入单号相关信息下载电子保单 */ public InsurancePolicyPrintResponse insurancePolicyPrint(InsurancePolicyPrintRequest request, Class tClass) { return routineRequest(request, tClass, true); } /** * 校验发短信接口 校验此单是否需要发送短信 */ public CheckSMScodeResponse checkSMScode(CheckSMScodeRequest request, Class tClass) { return smsRequest(request, tClass, true); } /** * 验证校验码正确 录入校验码校验是否正确 */ public ValidSMScodeResponse checkSMScode(ValidSMScodeRequest request, Class tClass) { return smsRequest(request, tClass, true); } public void validationResults(T t) { if ("-1".equals(t.getHead().getReturnCode())) { throw new SystemException(t.getHead().getReturnMessage()); } } }