Browse Source

2021-10-17
获取领星订单数据

zxl 4 years ago
parent
commit
0653bbd233

+ 38 - 1
src/main/java/com/uas/eis/dao/BaseDao.java

@@ -29,6 +29,8 @@ public class BaseDao{
 	
 	@Autowired
 	private JdbcTemplate jdbcTemplate;
+	static final String CREATE_SEQ = "CREATE SEQUENCE ?" + // 创建序列
+			" MINVALUE 1 MAXVALUE 99999999999 INCREMENT BY 1 START WITH 3000 CACHE 20 NOORDER NOCYCLE ";
 	
 	public JdbcTemplate getJdbcTemplate() {
 		return jdbcTemplate;
@@ -518,7 +520,7 @@ public class BaseDao{
 		return null;
 	}
 
-	/**
+	/**3
 	 * 查询结果集
 	 * 
 	 * @param sql
@@ -579,5 +581,40 @@ public class BaseDao{
 		}
 		return datas;
 	}
+
+	/**
+	 * 获取序列号
+	 *
+	 * @param seq
+	 *            指定的序列名
+	 */
+	public int getSeqId(String seq) {
+		try {
+		/*	if ("true".equals(BaseUtil.getXmlSetting("group"))) {
+				boolean isBase = checkIf("basedataset", "upper(bds_sequence)=upper('" + seq + "') and nvl(bds_editable,0)=1");
+				if (isBase) {
+					// 集团版基础资料(客户,供应商...)统一到资料中心取号
+					String dataCenter = BaseUtil.getXmlSetting("dataSob");
+					seq = dataCenter + "." + seq;
+				}
+			}*/
+			String sql = "select " + seq + ".nextval from dual";
+			SqlRowList rs = queryForRowSet(sql);
+			if (rs.next()) {
+				return rs.getInt(1);
+			} else {// 如果不存在就创建序列
+				int count = getCountByCondition("user_sequences", "Sequence_Name='" + seq.toUpperCase() + "'");
+				if (count == 0)
+					getJdbcTemplate().execute(CREATE_SEQ.replace("?", seq));
+				return getSeqId(seq);
+			}
+		} catch (Exception e) {
+			int count = getCountByCondition("user_sequences", "Sequence_Name='" + seq.toUpperCase() + "'");
+			if (count == 0)
+				getJdbcTemplate().execute(CREATE_SEQ.replace("?", seq));
+			return getSeqId(seq);
+		}
+	}
+
 	
 }

+ 18 - 1
src/main/java/com/uas/eis/sdk/okhttp/AKRestClient.java

@@ -5,6 +5,7 @@ import com.uas.eis.sdk.core.HttpRequest;
 import com.uas.eis.sdk.core.HttpResponse;
 import com.uas.eis.sdk.entity.Result;
 import com.uas.eis.sdk.resp.AccessTokenGetResp;
+import com.uas.eis.sdk.resp.Order;
 import com.uas.eis.sdk.resp.SellerGetResp;
 import com.uas.eis.sdk.sign.ApiSign;
 import lombok.Builder;
@@ -70,7 +71,22 @@ public class AKRestClient {
         HttpResponse execute = HttpExecutor.create().execute(build);
         return execute.readEntity(SellerGetResp.class);
     }
-    public Object getSellerOrders(String appId,  String access_token, Map<String, Object> requestParams) throws Exception {
+    public Order getSellerOrders(String appId,  String access_token, Map<String, Object> requestParams) throws Exception {
+        Map<String, Object> requestHeaders = defaultHeaders(appId, access_token);
+        String sign = getRequestSign(appId, requestHeaders, requestParams);
+        HttpRequest<Object> build = HttpRequest.builder(Object.class)
+                .method(HttpMethod.POST)
+                .endpoint(this.endpoint)
+                .path("erp/sc/data/mws/orders")
+                .queryParams(requestHeaders)
+                .queryParam("sign", sign)
+                .json(JSON.toJSONString(requestParams))
+                .build();
+        HttpResponse execute = HttpExecutor.create().execute(build);
+        return execute.readEntity(Order.class);
+    }
+
+    public Object getSellerOrders2(String appId,  String access_token, Map<String, Object> requestParams) throws Exception {
         Map<String, Object> requestHeaders = defaultHeaders(appId, access_token);
         String sign = getRequestSign(appId, requestHeaders, requestParams);
         HttpRequest<Object> build = HttpRequest.builder(Object.class)
@@ -85,6 +101,7 @@ public class AKRestClient {
         return execute.readEntity(Object.class);
     }
 
+
     public Map<String,Object> defaultHeaders(String appId,String access_token) {
         Map<String, Object> requestHeaders = new HashMap<>();
         requestHeaders.put("timestamp", System.currentTimeMillis() / 1000 + "");

+ 48 - 0
src/main/java/com/uas/eis/sdk/resp/Order.java

@@ -0,0 +1,48 @@
+package com.uas.eis.sdk.resp;
+
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 订单信息
+ * */
+@Data
+public class Order {
+
+    /**
+     * 状态码
+     * */
+    private Integer code;
+
+    /**
+     *请求接口信息
+     * */
+    private String message;
+
+    /**
+     * 数据校验失败时得错误信息
+     * */
+    private String errorDetails;
+
+    /**
+     * 数据校验失败时得错误信息
+     * */
+    private String request_id;
+
+    /**
+     * 响应时间
+     * */
+    private String response_time;
+
+    /**
+     * 订单详情
+     * */
+    private List<OrderDetail> data;
+
+    /**
+     * 	订单总数量
+     * */
+    private Integer total;
+}

+ 110 - 0
src/main/java/com/uas/eis/sdk/resp/OrderDetail.java

@@ -0,0 +1,110 @@
+package com.uas.eis.sdk.resp;
+
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 订单详情信息
+ * */
+@Data
+public class OrderDetail {
+
+    /**
+     *订单号
+     * */
+    private String amazon_order_id;
+
+    /**
+     *下单时间
+     * */
+    private String purchase_date_local;
+
+    /**
+     *订单状态
+     * */
+    private String order_status;
+    /**
+     *币种
+     * */
+    private String order_total_currency_code;
+    /**
+     *订单金额
+     * */
+    private String order_total_amount;
+    /**
+     *发货渠道
+     * */
+    private String fulfillment_channel;
+    /**
+     *买家姓名
+     * */
+    private String buyer_name;
+    /**
+     *买家邮件
+     * */
+    private String buyer_email;
+    /**
+     *退款状态
+     * */
+    private Integer is_return;
+    /**
+     *是否多渠道订单
+     * */
+    private Integer is_mcf_order;
+    /**
+     *是否评测订单
+     * */
+    private Integer is_assessed;
+    /**
+     *发货时限
+     * */
+    private Date earliest_ship_date;
+    /**
+     *发货日期
+     * */
+    private Date shipment_date;
+    /**
+     *订单更新站点时间
+     * */
+    private Date last_update_date;
+    /**
+     *收件人
+     * */
+    private String name;
+    /**
+     *收件地址
+     * */
+    private String address;
+    /**
+     *店铺名称
+     * */
+    private String seller_name;
+    /**
+     *物流运单号
+     * */
+    private String tracking_number;
+    /**
+     *邮编
+     * */
+    private String postal_code;
+    /**
+     *电话
+     * */
+    private String phone;
+    /**
+     *	付款时间
+     * */
+    private String posted_date;
+    /**
+     *商品列表
+     * */
+    private List<OrderItem> item_list;
+    /**
+     *订单总数量
+     * */
+    private Integer total;
+
+}

+ 29 - 0
src/main/java/com/uas/eis/sdk/resp/OrderItem.java

@@ -0,0 +1,29 @@
+package com.uas.eis.sdk.resp;
+
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 商品列表
+ * */
+@Data
+public class OrderItem {
+
+    /**
+     *ASIN
+     * */
+    private String asin;
+
+    /**
+     * 数量
+     * */
+    private int quantity_ordered;
+
+    /**
+     * MSKU
+     * */
+    private String seller_sku;
+
+}

+ 152 - 21
src/main/java/com/uas/eis/serviceImpl/LingxingServiceImpl.java

@@ -4,14 +4,18 @@ import com.uas.eis.config.LingXingConfig;
 import com.uas.eis.sdk.entity.Result;
 import com.uas.eis.sdk.okhttp.AKRestClient;
 import com.uas.eis.sdk.resp.AccessTokenGetResp;
+import com.uas.eis.sdk.resp.Order;
 import com.uas.eis.sdk.resp.SellerGetResp;
 import com.uas.eis.service.LingxingService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
+import com.uas.eis.dao.BaseDao;
 
 import javax.annotation.Resource;
-import java.util.HashMap;
-import java.util.Map;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * @author: zhouy
@@ -23,39 +27,166 @@ public class LingxingServiceImpl implements LingxingService {
     @Resource
     private LingXingConfig lingXingConfig;
 
+    @Autowired
+    private BaseDao baseDao;
+
+    /** 接口请求成功状态码 */
+    private final static Integer SUCCESS_CODE = 0;
+
 
     @Override
     @Async("taskExecutor")
     public void getSellerOrders(String appId) {
         String appSecret = lingXingConfig.getApps().get(appId);
         try {
-            /**
-             * 获取Token
-             * */
-            AccessTokenGetResp accessTokenGetResp = AKRestClient.builder().endpoint(lingXingConfig.getApiUrl()).build().getAccessToken(appId, appSecret);
-            System.out.println(accessTokenGetResp.getData());
-            /**
-             * 获取店铺信息
-             * */
-            SellerGetResp sellerGetResp = AKRestClient.builder().endpoint(lingXingConfig.getApiUrl()).build().getSellers(appId,
-                    String.valueOf(accessTokenGetResp.getData().get("access_token")) );
-            //待完善记录店铺信息
+            List<String> sssqls = new ArrayList<>();
+            String startdate = null;
+            String enddate = "";
+            Calendar calendar = Calendar.getInstance();
+            calendar.add(Calendar.DATE, -1);
+            //判断是否有对接记录13
+            int count = baseDao.getCountByCondition("MESSAGELOGLX", "MLL_RESULT='对接订单完成'");
+            if (count == 0) {
+                startdate = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
+                enddate = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
+            } else {
+                Object start = baseDao.getFieldDataByCondition("MESSAGELOGLX", "max(to_char(MLL_DATE,'yyyy-mm-dd'))", "MLL_RESULT='对接订单完成'");
+                startdate = start.toString();
+                enddate = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
+            }
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            //判断最新获取日期是否小于当前日期前一天
+            if ((sdf.parse(enddate).compareTo(sdf.parse(startdate)) > 0 && count > 0) || (sdf.parse(startdate).compareTo(sdf.parse(enddate)) == 0 && count == 0)) {
+                sssqls.add("insert into MESSAGELOGLX (MLL_ID,MLL_DATE,MLL_CONTENT,MLL_RESULT,MLL_APPID) " +
+                        "values(MESSAGELOGLX_SEQ.nextval,sysdate,'对接订单开始','对接订单开始','" + appId + "')");
+                /**
+                 * 获取Token
+                 * */
+                AccessTokenGetResp accessTokenGetResp = AKRestClient.builder().endpoint(lingXingConfig.getApiUrl()).build().getAccessToken(appId, appSecret);
+                //System.out.println(accessTokenGetResp.getData());
+                sssqls.add("insert into MESSAGELOGLX (MLL_ID,MLL_DATE,MLL_CONTENT,MLL_RESULT,MLL_APPID) " +
+                        "values(MESSAGELOGLX_SEQ.nextval,sysdate,'获取Token','获取Token成功','" + appId + "')");
+                /**
+                 * 获取店铺信息
+                 * */
+                SellerGetResp sellerGetResp = AKRestClient.builder().endpoint(lingXingConfig.getApiUrl()).build().getSellers(appId,
+                        String.valueOf(accessTokenGetResp.getData().get("access_token")));
+                sssqls.add("insert into MESSAGELOGLX (MLL_ID,MLL_DATE,MLL_CONTENT,MLL_RESULT,MLL_APPID) " +
+                        "values(MESSAGELOGLX_SEQ.nextval,sysdate,'获取店铺信息','获取店铺信息成功','" + appId + "')");
+                //待完善记录店铺信息
+                // todo 判断是否存在数据,没有直接返回
+                if (!this.isEmpty(sellerGetResp) && !this.isEmpty(sellerGetResp.getData()) && sellerGetResp.getData().size() > 0) {
+
+                    String finalStartdate = startdate;
+                    String finalEnddate = enddate;
+                    sellerGetResp.getData().stream().forEach(seller -> {
+                        //循环封装获取到得商店数据信息
+                        //System.out.println(seller.toString());
+                        //批量向数据库添加数据
+                        sssqls.add("insert into SALESHOP (SS_ID,SS_SID,SS_MID,SS_NAME,SS_REGION,SS_COUNTRY,SS_SELLERID,SS_DATE) " +
+                                "values(SALESHOP_SEQ.nextval," + seller.getSid() + "," + seller.getMid() + ",'" + seller.getName() + "','" + seller.getRegion()
+                                + "','" + seller.getCountry() + "','" + seller.getSeller_account_id() + "',sysdate)");
 
 
-            //订单信息
+                        //订单信息
+                        Map<String, Object> requestParam = new HashMap<>();
+                        requestParam.put("sid", 622);
+                        requestParam.put("start_date", finalStartdate);
+                        requestParam.put("end_date", finalEnddate);
+                        //上次同步时间
 
-            Map<String ,Object> requestParam = new HashMap<>();
-            requestParam.put("sid", 622);
-            requestParam.put("start_date", "2021-07-03");
-            requestParam.put("end_date", "2021-08-04");
-            //上次同步时间
+                        Order o1 = null;
+                        try {
+                            o1 = AKRestClient.builder().endpoint(lingXingConfig.getApiUrl()).build().getSellerOrders(appId,
+                                    String.valueOf(accessTokenGetResp.getData().get("access_token")), requestParam);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                        if (!this.isEmpty(o1) && !this.isEmpty(o1.getData()) && o1.getData().size() > 0) {
 
-            Object o1 = AKRestClient.builder().endpoint(lingXingConfig.getApiUrl()).build().getSellerOrders(appId,
-                    String.valueOf(accessTokenGetResp.getData().get("access_token")), requestParam);
+                            o1.getData().stream().forEach(orderDetail -> {
+                                int soid = baseDao.getSeqId("SALEORDER_SEQ");
+                                sssqls.add("insert into SALEORDER (SO_ID,SO_CODE,SO_DATE,SO_CURRENCY," +
+                                        "SO_AMOUNT,SO_FULFILLMENT,SO_BUYERNAME,SO_BUYEREMAIL,SO_RETURN," +
+                                        "SO_ISMCFORDER,SO_ISASSESSED,SO_EARLIESTDATE,SO_SHIPDATE,SO_UPDATEDATE," +
+                                        "SO_RECEIVINGNAME,SO_RECEIVINGADDRESS,SO_SELLERNAME,SO_TRACKINGNUMBER,SO_POSTALCODE," +
+                                        "SO_PHONE,SO_POSTEDDATE,SO_TOTALQTY,SO_DJDATE) " +
+                                        "values (" + soid + ",'" + orderDetail.getAmazon_order_id() + "',to_date('" + orderDetail.getPurchase_date_local() + "','yyyy-mm-dd hh24:mi:ss'),'" + orderDetail.getOrder_total_currency_code() + "'," +
+                                        orderDetail.getOrder_total_amount() + ",'" + orderDetail.getFulfillment_channel() + "','" + orderDetail.getBuyer_name() + "','" + orderDetail.getBuyer_email() + "','" + orderDetail.getIs_return() + "'," +
+                                        "'" + orderDetail.getIs_mcf_order() + "','" + orderDetail.getIs_assessed() + "',to_date('" + this.dateFormatTo(orderDetail.getEarliest_ship_date()) + "','yyyy-mm-dd hh24:mi:ss'),to_date('" + this.dateFormatTo(orderDetail.getShipment_date()) + "','yyyy-mm-dd hh24:mi:ss'),to_date('" + this.dateFormatTo(orderDetail.getLast_update_date()) + "','yyyy-mm-dd hh24:mi:ss')," +
+                                        "'" + orderDetail.getName() + "','" + orderDetail.getAddress() + "','" + orderDetail.getSeller_name() + "'," + "'" + orderDetail.getTracking_number() + "','" + orderDetail.getPostal_code() + "'," +
+                                        "'" + orderDetail.getPhone() + "',to_date('" + orderDetail.getPosted_date() + "','yyyy-mm-dd hh24:mi:ss')," + orderDetail.getTotal() + ",sysdate)");
+                                if (!this.isEmpty(orderDetail) && !this.isEmpty(orderDetail.getItem_list()) && orderDetail.getItem_list().size() > 0) {
+                                    orderDetail.getItem_list().stream().forEach(orderItem -> {
+                                        sssqls.add("insert into SALEITEM(SI_ID,SI_SOID,SI_ASIN,SI_QUANTITYORDERED,SI_SELLERSKU)" +
+                                                "values(SALEITEM_SEQ.nextval," + soid + ",'" + orderItem.getAsin() + "','" + orderItem.getQuantity_ordered() + "','" + orderItem.getSeller_sku() + "')");
+                                    });
+                                }
+                            });
+                        }
+                    });
+                }
+                sssqls.add("insert into MESSAGELOGLX (MLL_ID,MLL_DATE,MLL_CONTENT,MLL_RESULT,MLL_APPID) " +
+                        "values(MESSAGELOGLX_SEQ.nextval,sysdate,'获取订单信息','获取订单信息成功','" + appId + "')");
+                sssqls.add("insert into MESSAGELOGLX (MLL_ID,MLL_DATE,MLL_CONTENT,MLL_RESULT,MLL_APPID) " +
+                        "values(MESSAGELOGLX_SEQ.nextval,sysdate,'对接订单完成','对接订单完成','" + appId + "')");
+                baseDao.execute(sssqls);
+            }
 
 
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
+
+    public String dateFormatTo(Date date){
+        if(date != null) {
+            Date ship_date = null;
+            String formatDate = null;
+            try {
+                String ship = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US)
+                        .format(date);
+                ship_date = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US)
+                        .parse(ship);
+                formatDate = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss").format(ship_date);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            return formatDate;
+        }
+        return "";
+    }
+
+    /**
+     * 判断对象空
+     * */
+    public static boolean isEmpty(Object obj)
+
+    {
+        if (obj == null)
+
+        {
+            return true;
+
+        }
+
+        if ((obj instanceof List))
+
+        {
+            return ((List) obj).size() == 0;
+
+        }
+
+        if ((obj instanceof String))
+
+        {
+            return ((String) obj).trim().equals("");
+
+        }
+
+        return false;
+
+    }
+
+
 }

+ 2 - 0
src/main/java/com/uas/eis/task/LingxingTask.java

@@ -6,6 +6,7 @@ import com.uas.eis.service.LingxingService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
@@ -34,6 +35,7 @@ public class LingxingTask {
     @Autowired
     private BaseDao baseDao;
     //定时注解 @cron
+    @Scheduled(cron = "0 0 0 * * ? *")
     public void getSellerOrders(){
         logger.info("同步领星订单-开始");
         Date date = new Date();

+ 1 - 1
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -15,7 +15,7 @@ public class UasEisApplicationTests {
 
 	@Test
 	public void Test() {
-		lingxingService.getSellers("ak_lZl4KJ3zHdBga");
+		lingxingService.getSellerOrders("ak_lZl4KJ3zHdBga");
 	}
 
 }