|
@@ -1,40 +1,71 @@
|
|
|
package com.zswl.cloud.springBtach.server.core.api.xiaoju;
|
|
|
|
|
|
-import com.xiaoju.open.oil.commons.config.OilConfig;
|
|
|
-import com.xiaoju.open.oil.core.QueryClient;
|
|
|
-import com.xiaoju.open.oil.core.QueryClientFactory;
|
|
|
-import com.xiaoju.open.oil.interfaces.domain.AllowanceInfo;
|
|
|
-import com.xiaoju.open.oil.interfaces.request.QueryApiStorePriceRequest;
|
|
|
-import com.xiaoju.open.oil.interfaces.request.QueryCalPriceRequest;
|
|
|
-import com.xiaoju.open.oil.interfaces.request.QueryStoreDetailRequest;
|
|
|
-import com.xiaoju.open.oil.interfaces.request.QueryTokenRequest;
|
|
|
-import com.xiaoju.open.oil.interfaces.response.QueryApiStorePriceResponse;
|
|
|
-import com.xiaoju.open.oil.interfaces.response.QueryCalPriceResponse;
|
|
|
-import com.xiaoju.open.oil.interfaces.response.QueryStoreDetailResponse;
|
|
|
-import com.xiaoju.open.oil.interfaces.response.QueryTokenResponse;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.hutool.json.JSONObject;
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
+import com.google.gson.Gson;
|
|
|
+import com.zswl.cloud.springBtach.server.core.api.xiaoju.sdk.OpenRequest;
|
|
|
+import com.zswl.cloud.springBtach.server.core.api.xiaoju.sdk.QueryTokenRequest;
|
|
|
+import com.zswl.cloud.springBtach.server.core.api.xiaoju.sdk.request.*;
|
|
|
+import com.zswl.cloud.springBtach.server.core.api.xiaoju.sdk.response.*;
|
|
|
+import com.zswl.cloud.springBtach.server.core.api.xiaoju.sdk.util.HttpClient;
|
|
|
+import com.zswl.cloud.springBtach.server.core.api.xiaoju.sdk.util.HttpResponseData;
|
|
|
+import com.zswl.cloud.springBtach.server.core.api.xiaoju.sdk.util.SecurityService;
|
|
|
+import com.zswl.cloud.springBtach.server.core.helper.RedisHelper;
|
|
|
+import lombok.SneakyThrows;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
-import java.util.List;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
|
|
|
@Component
|
|
|
public class XiaoJuApi {
|
|
|
|
|
|
+
|
|
|
+ @Value("${xiaoju.appId}")
|
|
|
+ private String appid;
|
|
|
+
|
|
|
+ @Value("${xiaoju.appSecret}")
|
|
|
+ private String appSecret;
|
|
|
+
|
|
|
+ @Value("${xiaoju.dataSecret}")
|
|
|
+ private String dataSecret;
|
|
|
+
|
|
|
+ @Value("${xiaoju.dataSecretIV}")
|
|
|
+ private String dataSecretIV;
|
|
|
+
|
|
|
+ @Value("${xiaoju.sigSecret}")
|
|
|
+ private String sigSecret;
|
|
|
+
|
|
|
+ @Value("${xiaoju.serverUrl}")
|
|
|
+ private String serverUrl;
|
|
|
+
|
|
|
@Autowired
|
|
|
- OilConfig oilConfig;
|
|
|
+ RedisHelper redisHelper;
|
|
|
+
|
|
|
+ private final String redis_token = "xiaoju_token";
|
|
|
+
|
|
|
+// @Autowired
|
|
|
+// OilConfig oilConfig;
|
|
|
|
|
|
- public String queryToken() {
|
|
|
+ public QueryTokenResponse queryToken() {
|
|
|
|
|
|
QueryTokenRequest queryTokenRequest = new QueryTokenRequest();
|
|
|
- queryTokenRequest.setAppSecret(oilConfig.getAppSecret());
|
|
|
- QueryClient queryClient = QueryClientFactory.create(oilConfig);
|
|
|
- QueryTokenResponse queryTokenResponse = queryClient.api().queryToken(queryTokenRequest);
|
|
|
- return queryTokenResponse.getAccessToken();
|
|
|
- }
|
|
|
+ queryTokenRequest.setAppSecret(appSecret);
|
|
|
+ String post = post(queryTokenRequest.getApiMethodName(), queryTokenRequest);
|
|
|
+ QueryTokenResponse bean = JSONUtil.toBean(post, QueryTokenResponse.class);
|
|
|
+
|
|
|
+ redisHelper.cacheValue(redis_token, "Bearer " + bean.getAccessToken(), bean.getAvailableTime());
|
|
|
|
|
|
+ return bean;
|
|
|
+ }
|
|
|
|
|
|
- public QueryStoreDetailResponse queryStoreDetail(String userId, String storeId,Float latitude,Float longitude) {
|
|
|
+ public QueryStoreDetailResponse queryStoreDetail(String userId, String storeId, Float latitude, Float longitude) {
|
|
|
|
|
|
QueryStoreDetailRequest queryStoreDetailRequest = new QueryStoreDetailRequest();
|
|
|
|
|
@@ -43,47 +74,113 @@ public class XiaoJuApi {
|
|
|
queryStoreDetailRequest.setOutUserId(userId);
|
|
|
queryStoreDetailRequest.setStoreId(storeId);
|
|
|
queryStoreDetailRequest.setOpenChannel(1);
|
|
|
+ String post = post(queryStoreDetailRequest.getApiMethodName(), queryStoreDetailRequest);
|
|
|
|
|
|
- QueryClient queryClient = QueryClientFactory.create(oilConfig);
|
|
|
-
|
|
|
- return queryClient.api().queryStoreDetail(queryStoreDetailRequest);
|
|
|
+ return JSONUtil.toBean(post, QueryStoreDetailResponse.class);
|
|
|
}
|
|
|
|
|
|
// 查询门店价格
|
|
|
- public List<QueryApiStorePriceResponse> queryStorePrice(String userId, List<String> storeIdList) {
|
|
|
+ public ArrayList queryStorePrice(QueryApiStorePriceRequest queryApiStorePriceRequest) {
|
|
|
+
|
|
|
+ String post = post(queryApiStorePriceRequest.getApiMethodName(), queryApiStorePriceRequest);
|
|
|
+
|
|
|
+ Gson gson = new Gson();
|
|
|
+ ArrayList arrayList = gson.fromJson(post, ArrayList.class);
|
|
|
+
|
|
|
+ return arrayList;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // // 价格计算
|
|
|
+ public QueryCalPriceResponse queryCalPrice(QueryCalPriceRequest queryCalPriceRequest) {
|
|
|
+ String post = post(queryCalPriceRequest.getApiMethodName(), queryCalPriceRequest);
|
|
|
+ return JSONUtil.toBean(post, QueryCalPriceResponse.class);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
- QueryApiStorePriceRequest queryApiStorePriceRequest = new QueryApiStorePriceRequest();
|
|
|
- queryApiStorePriceRequest.setOpenChannel(1);
|
|
|
- queryApiStorePriceRequest.setOutUserId(userId);
|
|
|
- queryApiStorePriceRequest.setStoreIds(storeIdList);
|
|
|
- QueryClient queryClient = QueryClientFactory.create(oilConfig);
|
|
|
+ // 批量计算价格
|
|
|
+ public QueryCalBatchPriceResponse queryCalPrices(QueryCalBatchPriceRequest queryCalBatchPriceRequest) {
|
|
|
+ String post = post(queryCalBatchPriceRequest.getApiMethodName(), queryCalBatchPriceRequest);
|
|
|
|
|
|
- return queryClient.api().queryStorePrice(queryApiStorePriceRequest);
|
|
|
+ return JSONUtil.toBean(post, QueryCalBatchPriceResponse.class);
|
|
|
|
|
|
}
|
|
|
|
|
|
- // 价格计算
|
|
|
- public QueryCalPriceResponse queryCalPrice(String userId, String storeId,String itemName,Integer amount, AllowanceInfo allowanceInfo) {
|
|
|
- QueryCalPriceRequest queryCalPriceRequest = new QueryCalPriceRequest();
|
|
|
- queryCalPriceRequest.setStoreId(storeId);
|
|
|
- queryCalPriceRequest.setOpenChannel(1);
|
|
|
- queryCalPriceRequest.setOutUserId(userId);
|
|
|
- queryCalPriceRequest.setItemName(itemName);
|
|
|
- queryCalPriceRequest.setAmount(amount);
|
|
|
|
|
|
- // 优惠券
|
|
|
-// List<AllowanceInfo> allowanceInfos = new ArrayList<>();
|
|
|
-// AllowanceInfo allowanceInfo = new AllowanceInfo();
|
|
|
-// allowanceInfo.setAllowanceId("E1-4ji-1kiJSL");
|
|
|
-// allowanceInfo.setAllowanceType(2);
|
|
|
-// allowanceInfos.add(allowanceInfo);
|
|
|
- queryCalPriceRequest.setPromotionInfo(List.of(allowanceInfo));
|
|
|
+ // 创建订单
|
|
|
+ public QueryNewOrderResponse queryNewOrder(QueryNewOrderRequest queryNewOrderRequest) {
|
|
|
|
|
|
- QueryClient queryClient = QueryClientFactory.create(oilConfig);
|
|
|
+ String post = post(queryNewOrderRequest.getApiMethodName(), queryNewOrderRequest);
|
|
|
|
|
|
- return queryClient.api().queryCalPrice(queryCalPriceRequest);
|
|
|
+ return JSONUtil.toBean(post, QueryNewOrderResponse.class);
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 同步订单状态
|
|
|
+ public void syncOrderStatus(SynOrderStatusRequest synOrderStatusRequest) {
|
|
|
+
|
|
|
+ String post = post(synOrderStatusRequest.getApiMethodName(), synOrderStatusRequest);
|
|
|
+
|
|
|
+// return JSONUtil.toBean(post, QueryNewOrderResponse.class);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 退款状态同步
|
|
|
+ public void SyncRefundStatus(SynRefundStatusRequest synRefundStatusRequest) {
|
|
|
+
|
|
|
+ String post = post(synRefundStatusRequest.getApiMethodName(), synRefundStatusRequest);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 下单前查询最优可用券
|
|
|
+ public void queryOrderPromotionList(QueryOrderPromotionListRequest queryOrderPromotionListRequest) {
|
|
|
+
|
|
|
+ String post = post(queryOrderPromotionListRequest.getApiMethodName(), queryOrderPromotionListRequest);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 查询多个门店可用券
|
|
|
+ public void queryStorePromotionList(QueryStorePromotionListRequest queryStorePromotionListRequest) {
|
|
|
+// QueryStorePromotionListRequest request = new QueryStorePromotionListRequest();
|
|
|
+// request.setMobile("152102401323");
|
|
|
+// request.setOutUserId("1223131");
|
|
|
+// List<String> storeIdList = new ArrayList<String>();
|
|
|
+// storeIdList.add("5429504232738269218");
|
|
|
+// request.setStoreIdList(storeIdList);
|
|
|
+
|
|
|
+ String post = post(queryStorePromotionListRequest.getApiMethodName(), queryStorePromotionListRequest);
|
|
|
+
|
|
|
+ ArrayList bean = JSONUtil.toBean(post, ArrayList.class);
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
+ @SneakyThrows
|
|
|
+ private String post(String url, OpenRequest oilRequest) {
|
|
|
+ String data = SecurityService.genEncodeData(JSONUtil.toJsonStr(oilRequest), dataSecret, dataSecretIV);
|
|
|
+ String yyyyMMddHHmmss = DateUtil.format(new Date(), "yyyyMMddHHmmss");
|
|
|
+ JSONObject entries = new JSONObject();
|
|
|
+ entries.set("appKey", appid);
|
|
|
+ entries.set("timeStamp", yyyyMMddHHmmss);
|
|
|
+ entries.set("data", data);
|
|
|
+ entries.set("sig", SecurityService.genSigData(appid + data + yyyyMMddHHmmss, sigSecret));
|
|
|
+
|
|
|
+
|
|
|
+ Object token = redisHelper.getValue(redis_token);
|
|
|
+ if (ObjectUtil.isEmpty(token) && !url.equals("/open/energy/v1/queryToken")) {
|
|
|
+ QueryTokenResponse queryTokenResponse = queryToken();
|
|
|
+ token = "Bearer " + queryTokenResponse.getAccessToken();
|
|
|
+ }
|
|
|
+
|
|
|
+ HttpResponseData httpResponseData = HttpClient.doPost(serverUrl + url, JSONUtil.toJsonStr(entries).getBytes("UTF-8"), Map.of("Authorization", String.valueOf(token)));
|
|
|
+
|
|
|
+ JSONObject entries1 = JSONUtil.parseObj(httpResponseData.getBody());
|
|
|
+ if (!entries1.get("code").equals("0")) {
|
|
|
+ throw new RuntimeException("小橘接口失败:{}" + httpResponseData.getBody());
|
|
|
+ }
|
|
|
+ return SecurityService.genDecodeData(String.valueOf(entries1.get("data")), dataSecret, dataSecretIV);
|
|
|
}
|
|
|
|
|
|
|