xian 3 år sedan
förälder
incheckning
c000698506

+ 1 - 1
pom.xml

@@ -527,7 +527,7 @@
 		<dependency>
 			<groupId>com.taobao.taobao-sdk-java-auto</groupId>
 			<artifactId>taobao-sdk-java-auto</artifactId>
-			<version>3.0.0</version>
+			<version>3.0.1</version>
 		</dependency>
 
 	</dependencies>

+ 66 - 6
watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/TaobaoTask.java

@@ -1,6 +1,5 @@
 package com.iamberry.rst.controllers.mq;
 
-import com.alibaba.dubbo.common.json.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.iamberry.redis.RedisUtils;
@@ -26,11 +25,11 @@ import com.taobao.api.TaobaoClient;
 import com.taobao.api.domain.Order;
 import com.taobao.api.domain.Trade;
 import com.taobao.api.internal.util.StringUtils;
+import com.taobao.api.request.TopOaidDecryptRequest;
 import com.taobao.api.request.TradeFullinfoGetRequest;
-import com.taobao.api.request.TradesSoldGetRequest;
 import com.taobao.api.request.TradesSoldIncrementGetRequest;
+import com.taobao.api.response.TopOaidDecryptResponse;
 import com.taobao.api.response.TradeFullinfoGetResponse;
-import com.taobao.api.response.TradesSoldGetResponse;
 import com.taobao.api.response.TradesSoldIncrementGetResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -38,8 +37,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
-
-import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -184,7 +181,7 @@ public class TaobaoTask {
         }
         TaobaoClient detailsClient = new DefaultTaobaoClient(TaobaoConfig.TAOBAO_URL, TaobaoConfig.appkey, TaobaoConfig.secret);
         TradeFullinfoGetRequest req = new TradeFullinfoGetRequest();
-        req.setFields("tid,pay_time,seller_memo,buyer_memo,type,status,price,discount_fee,total_fee,payment,orders,receiver_name,receiver_state,receiver_address,receiver_zip,receiver_mobile,receiver_phone,receiver_town,receiver_city,receiver_district");
+        req.setFields("created,tid,pay_time,seller_memo,buyer_memo,type,status,price,discount_fee,total_fee,payment,orders,receiver_name,receiver_state,receiver_address,receiver_zip,receiver_mobile,receiver_phone,receiver_town,receiver_city,receiver_district");
         req.setTid(tid);
         req.setIncludeOaid("true");
         TradeFullinfoGetResponse rsp = null;
@@ -221,6 +218,7 @@ public class TaobaoTask {
         trade.setStatus(data.getString("status"));
         trade.setSellerMemo(data.getString("seller_memo"));
         trade.setBuyerMemo(data.getString("buyer_memo"));
+        trade.setOaid(data.getString("oaid"));
         JSONObject temp = data.getJSONObject("orders");
         JSONArray orders = temp.getJSONArray("order");
         trade.setOrders(new ArrayList<>(orders.size()));
@@ -246,6 +244,68 @@ public class TaobaoTask {
             order.setTotalFee(t.getString("total_fee"));
             trade.getOrders().add(order);
         }
+        // 缓存订单信息的OAID
+        if (trade.getOaid() != null && trade.getReceiverMobile().contains("*")) {
+            String oaidKey = "OAID_" + trade.getTidStr();
+            RedisUtils.put(oaidKey, trade.getOaid());
+            RedisUtils.expire(oaidKey, DateTimeUtil.addDay(new Date(), 3));
+            // 查询地址数据是否已经被获取解密
+            String addrKey = "ADDR_" + trade.getTidStr();
+            String addr = RedisUtils.get(addrKey);
+            if (addr != null) {
+                // 从缓存数据库获取解密数据
+                TopOaidDecryptResponse.Receiver receiver = JSONObject.parseObject(addr, TopOaidDecryptResponse.Receiver.class);
+                trade.setReceiverName(receiver.getName());
+                trade.setReceiverMobile(receiver.getMobile());
+                trade.setReceiverAddress(receiver.getAddressDetail());
+                trade.setReceiverTown(receiver.getTown());
+                trade.setReceiverDistrict(receiver.getDistrict());
+                trade.setReceiverCity(receiver.getCity());
+                trade.setReceiverState(receiver.getState());
+            } else {
+                // 发起解密请求
+                TaobaoClient client = new DefaultTaobaoClient(TaobaoConfig.TAOBAO_URL, TaobaoConfig.appkey, TaobaoConfig.secret);
+                TopOaidDecryptRequest req = new TopOaidDecryptRequest();
+                List<TopOaidDecryptRequest.ReceiverQuery> list2 = new ArrayList<TopOaidDecryptRequest.ReceiverQuery>();
+                TopOaidDecryptRequest.ReceiverQuery obj3 = new TopOaidDecryptRequest.ReceiverQuery();
+                list2.add(obj3);
+                obj3.setOaid(trade.getOaid());
+                obj3.setTid(trade.getTid().toString());
+                obj3.setScene("1005");
+                req.setQueryList(list2);
+                TopOaidDecryptResponse rsp = null;
+                try {
+                    rsp = client.execute(req, (String) AdminTaobaoAuthController.getToken().get("token"));
+                    logger.info("请求解密后的数据:{}", rsp.getBody());
+                    JSONObject body = JSONObject.parseObject(rsp.getBody());
+                    JSONObject topOaidDecryptResponse = body.getJSONObject("top_oaid_decrypt_response");
+                    JSONObject receiverList = topOaidDecryptResponse.getJSONObject("receiver_list");
+                    JSONArray receiver1 = receiverList.getJSONArray("receiver");
+                    JSONObject rece = receiver1.getJSONObject(0);
+                    TopOaidDecryptResponse.Receiver receiver = JSONObject.parseObject(rece.toJSONString(), TopOaidDecryptResponse.Receiver.class);
+                    /** 解密数据赋值 */
+                    // 姓名
+                    trade.setReceiverName(receiver.getName());
+                    // 电话
+                    trade.setReceiverMobile(receiver.getMobile());
+                    // 省份
+                    trade.setReceiverState(receiver.getState());
+                    // 城市
+                    trade.setReceiverCity(receiver.getCity());
+                    // 区域
+                    trade.setReceiverDistrict(receiver.getDistrict());
+                    // 街道
+                    trade.setReceiverTown(receiver.getTown());
+                    // 详细地址
+                    trade.setReceiverAddress(rece.getString("address_detail"));
+                    // 缓存数据
+                    RedisUtils.put(addrKey, rece.toJSONString());
+                    RedisUtils.expire(addrKey, DateTimeUtil.addDay(new Date(), 10));
+                } catch (ApiException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
         return trade;
     }