|
|
@@ -0,0 +1,111 @@
|
|
|
+package com.java110.scm.supplier.defaultSupplier;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.java110.core.client.RestTemplate;
|
|
|
+import com.java110.core.log.LoggerFactory;
|
|
|
+import com.java110.dto.supplierConfig.SupplierConfigDto;
|
|
|
+import com.java110.utils.cache.CommonCache;
|
|
|
+import com.java110.utils.exception.CmdException;
|
|
|
+import com.java110.utils.util.StringUtil;
|
|
|
+import com.java110.vo.ResultVo;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.springframework.http.*;
|
|
|
+import org.springframework.web.client.HttpStatusCodeException;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+public class DefaultSupplierFactory {
|
|
|
+
|
|
|
+ private static final Logger logger = LoggerFactory.getLogger(DefaultSupplierFactory.class);
|
|
|
+
|
|
|
+ //应用ID
|
|
|
+ public static final String APP_ID = "APP_ID";
|
|
|
+
|
|
|
+ //应用秘钥
|
|
|
+ public static final String APP_SECURE = "APP_SECURE";
|
|
|
+
|
|
|
+ public static final String TOKEN_URL = "TOKEN_URL";
|
|
|
+ public static final String COUPON_QRCODE_URL = "COUPON_QRCODE_URL";
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 封装头信息
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private static HttpHeaders getHeaders(RestTemplate outRestTemplate, List<SupplierConfigDto> supplierConfigDtos) {
|
|
|
+ HttpHeaders httpHeaders = new HttpHeaders();
|
|
|
+ httpHeaders.add("access-token", get(outRestTemplate, false, supplierConfigDtos));
|
|
|
+ //httpHeaders.add("Content-Type", "application/x-www-form-urlencoded");
|
|
|
+ return httpHeaders;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String get(RestTemplate restTemplate, boolean refreshAccessToken, List<SupplierConfigDto> supplierConfigDtos) {
|
|
|
+ String appId = getConfigValue(supplierConfigDtos, APP_ID);
|
|
|
+ String appSecure = getConfigValue(supplierConfigDtos, APP_SECURE);
|
|
|
+ String tokenUrl = getConfigValue(supplierConfigDtos, TOKEN_URL);
|
|
|
+
|
|
|
+ String token = CommonCache.getValue(appId + "_ACCESS_TOKEN");
|
|
|
+ if (!StringUtil.isEmpty(token) && !refreshAccessToken) {
|
|
|
+ return token;
|
|
|
+ }
|
|
|
+ HttpHeaders headers = new HttpHeaders();
|
|
|
+ JSONObject param = new JSONObject();
|
|
|
+ param.put("appId", appId);
|
|
|
+ param.put("appSecure", appSecure);
|
|
|
+ HttpEntity httpEntity = new HttpEntity(param, headers);
|
|
|
+ ResponseEntity<String> tokenRes = restTemplate.exchange(tokenUrl, HttpMethod.POST, httpEntity, String.class);
|
|
|
+
|
|
|
+ if (tokenRes.getStatusCode() != HttpStatus.OK) {
|
|
|
+ throw new IllegalArgumentException("获取token失败" + tokenRes.getBody());
|
|
|
+ }
|
|
|
+ JSONObject tokenObj = JSONObject.parseObject(tokenRes.getBody());
|
|
|
+
|
|
|
+ if (!tokenObj.containsKey("code") || ResultVo.CODE_OK != tokenObj.getInteger("code")) {
|
|
|
+ throw new IllegalArgumentException("获取token失败" + tokenRes.getBody());
|
|
|
+ }
|
|
|
+
|
|
|
+ token = tokenObj.getJSONObject("data").getString("accessToken");
|
|
|
+ int expiresIn = tokenObj.getJSONObject("data").getInteger("expiresIn");
|
|
|
+
|
|
|
+ CommonCache.setValue(appId + "_ACCESS_TOKEN", token, expiresIn - 200);
|
|
|
+
|
|
|
+ return token;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String getConfigValue(List<SupplierConfigDto> supplierConfigDtos, String key) {
|
|
|
+ for (SupplierConfigDto supplierConfigDto : supplierConfigDtos) {
|
|
|
+ if (supplierConfigDto.getColumnKey().equals(key)) {
|
|
|
+ return supplierConfigDto.getColumnValue();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ public static JSONObject execute(RestTemplate outRestTemplate, JSONObject param, String url, List<SupplierConfigDto> supplierConfigDtos) {
|
|
|
+ ResponseEntity<String> responseEntity = null;
|
|
|
+ HttpEntity httpEntity = null;
|
|
|
+ JSONObject paramOut = null;
|
|
|
+ try {
|
|
|
+ httpEntity = new HttpEntity(param.toJSONString(), getHeaders(outRestTemplate, supplierConfigDtos));
|
|
|
+ responseEntity = outRestTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
|
|
|
+ paramOut = JSONObject.parseObject(responseEntity.getBody());
|
|
|
+
|
|
|
+ if (paramOut.getInteger("code") != ResultVo.CODE_OK) {
|
|
|
+ throw new CmdException(paramOut.getString("msg"));
|
|
|
+ }
|
|
|
+ } catch (HttpStatusCodeException e) {
|
|
|
+ logger.error("请求失败" + e.getResponseBodyAsString(), e);
|
|
|
+ throw e;
|
|
|
+ } catch (Exception e){
|
|
|
+ logger.error("请求失败", e);
|
|
|
+ throw e;
|
|
|
+ }finally {
|
|
|
+ logger.debug("请求url:{},请求报文:{},返回报文:{}", url, httpEntity, responseEntity);
|
|
|
+ }
|
|
|
+
|
|
|
+ return paramOut;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|