Explorar o código

拉取淘宝订单完成。

xian %!s(int64=3) %!d(string=hai) anos
pai
achega
3fe2d93e04
Modificáronse 17 ficheiros con 1182 adicións e 118 borrados
  1. 7 0
      pom.xml
  2. 2 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/cm/SalesOrderService.java
  3. 31 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/SalesOrderServiceImpl.java
  4. 1 1
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/salesOrderMapper.xml
  5. 218 96
      watero-rst-service/src/main/java/com/iamberry/rst/service/order/OrderSyncLogServiceImpl.java
  6. 11 0
      watero-rst-service/src/main/java/com/iamberry/rst/util/GenerateKeyUtil.java
  7. 3 3
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/MQTask.java
  8. 12 0
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/TaobaoConfig.java
  9. 506 0
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/TaobaoTask.java
  10. 124 0
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminTaobaoAuthController.java
  11. 72 5
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java
  12. 80 0
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/test/TestOrderController.java
  13. 2 1
      watero-rst-web/src/main/resources/watero-rst-ioc.xml
  14. 1 1
      watero-rst-web/src/main/webapp/WEB-INF/views/cm/inventory/inventory_list.ftl
  15. 21 0
      watero-rst-web/src/main/webapp/WEB-INF/views/taobao/redirect.ftl
  16. 58 0
      watero-rst-web/src/main/webapp/WEB-INF/views/taobao/token.ftl
  17. 33 11
      watero-rst-web/src/main/webapp/common/js/salesOrder/salesOrder.js

+ 7 - 0
pom.xml

@@ -523,6 +523,13 @@
 			<version>6.0.0</version>
 		</dependency>
 
+		<!-- mybatis分页 -->
+		<dependency>
+			<groupId>com.taobao.taobao-sdk-java-auto</groupId>
+			<artifactId>taobao-sdk-java-auto</artifactId>
+			<version>2.0.0</version>
+		</dependency>
+
 	</dependencies>
 	<build>
 		<plugins>

+ 2 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/cm/SalesOrderService.java

@@ -24,6 +24,8 @@ public interface SalesOrderService {
      */
     Integer addSalesOrder(SalesOrder salesOrder);
 
+    int addOrder(SalesOrder salesOrder);
+
     /**
      * 添加订单信息
      * @param salesOrder

+ 31 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/SalesOrderServiceImpl.java

@@ -40,6 +40,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
@@ -112,6 +113,36 @@ public class SalesOrderServiceImpl implements SalesOrderService {
     }
 
     @Override
+    @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.REPEATABLE_READ)
+    public int addOrder(SalesOrder salesOrder) {
+
+        // 2019年12月27日15:49:16新增快递策略 分配物流方式
+        List<SalesOrder> listS = new ArrayList<>();
+        listS.add(salesOrder);
+        setStrategyLogistics(listS);
+
+        try {
+            salesOrderMapper.addSalesOrder(salesOrder);
+            for (SalesOrderItem item : salesOrder.getSalesOrderItemList()) {
+                item.setItemOrderId(salesOrder.getSalesId());
+            }
+            salesOrderMapper.addOrderItemList(salesOrder.getSalesOrderItemList());
+            //添加操作跟踪记录
+            OrderTracking orderTracking = new OrderTracking();
+            //默认用户爱贝源自动拉取订单
+            orderTracking.setAdminId(10135);
+            orderTracking.setSalesDealCode(salesOrder.getSalesDealCode());
+            orderTracking.setTrackingDesc("创建订单(淘宝拉取订单)");
+            salesOrderService.addTracking(orderTracking);
+        } catch (DuplicateKeyException e) {
+            // 修改
+            logger.error("【淘宝订单】订单存在,无法添加");
+            return 1;
+        }
+        return 1;
+    }
+
+    @Override
     @Transactional
     public Integer addSalesOrderManual(SalesOrder salesOrder) {
         salesOrderMapper.addSalesOrder(salesOrder);

+ 1 - 1
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/salesOrderMapper.xml

@@ -2388,7 +2388,7 @@
           tb_rst_sales_order_info
         WHERE
           sales_status != 3 AND sales_batch_id != 'KS00000000000001'
-          <if test="storeIds != null">
+          <if test="storeIds != null and storeIds.length>0">
             AND sales_store_id IN
             <foreach collection="storeIds" item="storeId" index="index" separator="," open="(" close=")">
                 #{storeId}

+ 218 - 96
watero-rst-service/src/main/java/com/iamberry/rst/service/order/OrderSyncLogServiceImpl.java

@@ -1,5 +1,6 @@
 package com.iamberry.rst.service.order;
 
+import com.alibaba.fastjson.JSON;
 import com.github.pagehelper.PageHelper;
 import com.iamberry.app.tool.util.MD5;
 import com.iamberry.redis.RedisUtils;
@@ -29,6 +30,8 @@ import com.iamberry.rst.service.product.mapper.ProductMapper;
 import com.iamberry.rst.service.sys.mapper.SysConfigMapper;
 import com.iamberry.rst.util.GenerateKeyUtil;
 import com.iamberry.rst.util.PageUtil;
+import com.iamberry.wechat.tools.DateTimeUtil;
+import com.iamberry.wechat.tools.HttpClient431Util;
 import com.iamberry.wechat.tools.StrUtils;
 import com.iamberry.wechat.tools.payUtil.StringUtil;
 import org.apache.http.HttpResponse;
@@ -92,7 +95,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
     private Map<String, JSONObject> orderJsonMap = new LinkedHashMap<String, JSONObject>(){
         private static final long serialVersionUID = 1L;
         @Override
-        protected boolean removeEldestEntry(java.util.Map.Entry<String, JSONObject> pEldest) {
+        protected boolean removeEldestEntry(Map.Entry<String, JSONObject> pEldest) {
             return size() > maxSize;
         }
     };
@@ -159,7 +162,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
     public synchronized Integer syncXYTOrder(Integer type,String sta,Date creatTime) {
         if(type == 1){
             SysConfig sysConfig = sysConfigMapper.getSysConfigAllLock(CONFIG_ID);
-            Date date = new Date();
+            Date date = null;
             try {
                 date = SYS_CONFIG_SDF.parse(sysConfig.getConfigRemarks());
             } catch (ParseException e) {
@@ -167,7 +170,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                 logger.info("获取配置文件失败!");
                 return 0;
             }
-            Long timeDifference = date.getTime() - new Date().getTime();
+            long timeDifference = date.getTime() - System.currentTimeMillis();
             timeDifference = Math.abs(timeDifference);
             if(timeDifference < 270000){
                 Integer configParameter = Integer.valueOf(sysConfig.getConfigParameter());
@@ -183,39 +186,24 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
             logger.info("小亚通接口已关闭!");
             return 0;
         }
-        Map<String,Object> paramsMap = new HashMap<>();
-        List<Map<String,Object>> conditionTypeList = new ArrayList<>();
-        Map<String,Object> beginCreateTimeMap = new HashMap<>();
-        beginCreateTimeMap.put("condType","beginCreateTime");
-        String[] condValueCreatImes = new String[1];
+        // 参数集合
+        Map<String,Object> paramsMap = new HashMap<>(1);
+        String startCreateTime = null;
         if(creatTime == null){
-            condValueCreatImes[0] = sdf.format(orderSyncPlatform.getSyncOrderLastTime());
+            startCreateTime = sdf.format(orderSyncPlatform.getSyncOrderLastTime());
         }else{
-            condValueCreatImes[0] =  sdf.format(creatTime);
+            startCreateTime =  sdf.format(creatTime);
         }
-        beginCreateTimeMap.put("condValue", condValueCreatImes);//生成开始时间
-        conditionTypeList.add(beginCreateTimeMap);
-
-        //结束时间
+        paramsMap.put("startCreateTime", startCreateTime);
         Date endCreateTime = new Date();
-        Map<String,Object> endCreateTimeMap = new HashMap<>();
-        endCreateTimeMap.put("condType","endCreateTime");     //receiverName 收件人姓名 //receiverMobile收件人手机号码 //outOrderId原始订单号 //orderId系统订单号
-        String[] condValueEndCreateTimes = new String[1];
-        condValueEndCreateTimes[0] = sdf.format(endCreateTime);
-        endCreateTimeMap.put("condValue",condValueEndCreateTimes);//生成结束时间
-        conditionTypeList.add(endCreateTimeMap);
-
-        //订单状态  只获取代发货的订单
+        paramsMap.put("endCreateTime", sdf.format(endCreateTime));
         if(sta != null && !"".equals(sta)){
-            Map<String,Object> statusTimeMap = new HashMap<>();
-            statusTimeMap.put("condType","orderStatus");     //receiverName 收件人姓名 //receiverMobile收件人手机号码 //outOrderId原始订单号 //orderId系统订单号
-            String[] condValueStatuss = new String[1];
-            condValueStatuss[0] = sta; //只查询待发货
-            statusTimeMap.put("condValue",condValueStatuss);//生成结束时间
-            conditionTypeList.add(statusTimeMap);
+            paramsMap.put("orderStatus", sta);
         }
+        paramsMap.put("size", 20);
 
-        StringBuffer stringBuffer = new StringBuffer();
+        // 异常返回值,用于记录
+        StringBuilder stringBuffer = new StringBuilder();
         Integer amountAllNum = 0;   //同步总数量
         Integer amountSuccessAllNum = 0;   //同步成功总数量
         String batchId = ""; //批次id
@@ -224,15 +212,15 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         boolean pullFlag = true;
         Integer pageNumber = 1,pageSize=20; //控制分页
         while (pullFlag){
-            Map<String,Object> condMap = new HashMap<>();
-            condMap.put("pageNumber",pageNumber);
-            condMap.put("pageSize",pageSize);
-            condMap.put("conditionType",conditionTypeList);
-            paramsMap.put("cond",condMap);
-            String json = this.syncXYT("IOrderService.query",paramsMap);
-
+            // 请求页数
+            paramsMap.put("index",pageNumber);
+            // 发起请求
+            logger.info("小亚通请求的参数:{}", com.alibaba.fastjson.JSONObject.toJSONString(paramsMap));
+            String json = pullOrderNew(paramsMap);
+            logger.info("小亚通同步的数据:{}", json);
             //添加订单
             Map<String,Object> map = this.saveOrder(1,json,batchId);
+            // 判断返回数据
             Integer status = (Integer) map.get("status");
             batchId = (String) map.get("batchId");   //批次ID
             Integer amountNum = (Integer) map.get("amountNum"); //拉取订单数量
@@ -366,13 +354,17 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         }
 
         Map<String,Object> paramsMap = new HashMap<>();
-        List<Map<String,Object>> conditionTypeList = new ArrayList<>();
+        /*List<Map<String,Object>> conditionTypeList = new ArrayList<>();
         Map<String,Object> beginCreateTimeMap = new HashMap<>();
         beginCreateTimeMap.put("condType","beginCreateTime");
         String[] condValueCreatImes = new String[1];
         condValueCreatImes[0] = sdf.format(calendar.getTime());
         beginCreateTimeMap.put("condValue", condValueCreatImes);//生成开始时间
-        conditionTypeList.add(beginCreateTimeMap);
+        conditionTypeList.add(beginCreateTimeMap);*/
+
+        paramsMap.put("startCreateTime", sdf.format(calendar.getTime()));
+        paramsMap.put("shopId", "100206182446");
+        paramsMap.put("size", 20);
 
         //结束时间
 //        Date endCreateTime = new Date();
@@ -391,12 +383,12 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
 //        statusTimeMap.put("condValue",condValueStatuss);
 //        conditionTypeList.add(statusTimeMap);
 
-        Map<String,Object> shopMap = new HashMap<>();
+        /*Map<String,Object> shopMap = new HashMap<>();
         shopMap.put("condType","shopId");
         String[] shopIds = new String[1];
         shopIds[0] = "100206182446";
         shopMap.put("condValue",shopIds);
-        conditionTypeList.add(shopMap);
+        conditionTypeList.add(shopMap);*/
 
         StringBuilder stringBuffer = new StringBuilder();
         Integer amountAllNum = 0;   //同步总数量
@@ -407,12 +399,13 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         boolean pullFlag = true;
         Integer pageNumber = 1,pageSize=20; //控制分页
         while (pullFlag){
-            Map<String,Object> condMap = new HashMap<>();
+            /*Map<String,Object> condMap = new HashMap<>();
             condMap.put("pageNumber",pageNumber);
             condMap.put("pageSize",pageSize);
             condMap.put("conditionType",conditionTypeList);
-            paramsMap.put("cond",condMap);
-            String json = this.syncXYT("IOrderService.query",paramsMap);
+            paramsMap.put("cond",condMap);*/
+            paramsMap.put("index", pageNumber);
+            String json = pullOrderNew(paramsMap);
 
             //添加订单
             Map<String,Object> map = this.saveOrder(1,json,batchId);
@@ -467,6 +460,11 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         return amountSuccessAllNum;
     }
 
+    /***
+     * 同步京东仓的发货信息
+     * @param salesId  小亚通订单id
+     * @return
+     */
     @Override
     public Integer syncXYTOrderPostNum(Integer salesId){
         SalesOrder salesOrder = salesOrderService.getSalesOrderByIdConcise(salesId);
@@ -474,7 +472,12 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
             return 0;
         }
         OrderSyncPlatform orderSyncPlatform =  getXYTPlatform();
-        Map<String,Object> paramsMap = new HashMap<>();
+        // 请求参数
+        Map<String,Object> paramsMap = new HashMap<>(3);
+        paramsMap.put("orderId", salesOrder.getSalesDealCode());
+        paramsMap.put("index", 1);
+        paramsMap.put("size", 20);
+        /*
         List<Map<String,Object>> conditionTypeList = new ArrayList<>();
 
         String[] orderIds = {salesOrder.getSalesDealCode()};
@@ -482,25 +485,28 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         Map<String,Object> orderIdMap = new HashMap<>();
         orderIdMap.put("condType","orderId");
         orderIdMap.put("condValue",orderIds);
-        conditionTypeList.add(orderIdMap);
+        conditionTypeList.add(orderIdMap);*/
 
         boolean flag = true;
 
         StringBuffer errorMsg = new StringBuffer();
         errorMsg.append( "京东仓订单同步订单("+ salesOrder.getSalesDealCode() +")状态,京东订单号:"+ salesOrder.getSalesExOrderId() +",");
 
-        Map<String,Object> condMap = new HashMap<>();
+        /*Map<String,Object> condMap = new HashMap<>();
         condMap.put("pageNumber",1);
         condMap.put("pageSize",20);
         condMap.put("conditionType",conditionTypeList);
-        paramsMap.put("cond",condMap);
-        String json = this.syncXYT("IOrderService.query",paramsMap);
+        paramsMap.put("cond",condMap);*/
+        String json = pullOrderNew(paramsMap);
+
+        logger.info("{}", json);
+
         try {
             JSONObject jsonObj = new JSONObject(json);//转化为json格式
-            String resultMsg = jsonObj.getString("result_msg");
+            String resultMsg = jsonObj.getString("message");
             if("success".equals(resultMsg)) {
-                JSONObject dataObj = jsonObj.getJSONObject("data");    //数据
-                JSONArray beanListArray = dataObj.getJSONArray("beanList");
+                // JSONObject dataObj = jsonObj.getJSONObject("data");    //数据
+                JSONArray beanListArray = jsonObj.getJSONArray("data");
                 if (beanListArray.length() > 0) {
                     for (int i = 0; i < beanListArray.length(); i++) {
                         JSONObject job = beanListArray.getJSONObject(i);
@@ -508,7 +514,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                         String otherExtOrderId = null;
 
 //                      JSONObject consigneeObj = job.getJSONObject("consignee");   //用户信息
-                        JSONObject infoObj = job.getJSONObject("info");   //订单基本信息
+                        JSONObject infoObj = job.getJSONObject("orderInfo");   //订单基本信息
 //                      JSONArray itemsArray = job.getJSONArray("items");   //订单项基本信息
 
                         //小亚通订单编号
@@ -524,8 +530,8 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                         int orderStatus = infoObj.getInt("orderStatus");
                         if (60 == orderStatus || orderStatus == 70) {
                             JSONArray logisticsArray = null;
-                            if(job.has("logistics")){
-                                logisticsArray = job.getJSONArray("logistics");
+                            if(job.has("orderLogistics")){
+                                logisticsArray = job.getJSONArray("orderLogistics");
                             }
                             assert logisticsArray != null;
                             if(logisticsArray.length() < 1){
@@ -572,8 +578,8 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                                 so.setSalesDeliverTime(sdf.parse(deliveryTime));
                                 so.setSalesSendTime(sdf.parse(deliveryTime));
                             } else {
-                                if (job.has("info")) {
-                                    JSONObject info = job.getJSONObject("info");
+                                if (job.has("orderInfo")) {
+                                    JSONObject info = job.getJSONObject("orderInfo");
                                     if (info.has("deliveryTime")) {
                                         String deliveryTime = info.getString("deliveryTime");
                                         so.setOrderCaseDate(sdf.parse(deliveryTime));
@@ -656,7 +662,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
     public Integer syncXYTOrderOne(Integer type, String orderId) {
         Integer flag = 0;
         OrderSyncPlatform orderSyncPlatform =  getXYTPlatform();
-        List<Map<String,Object>> conditionTypeList = new ArrayList<>(5);
+        /*List<Map<String,Object>> conditionTypeList = new ArrayList<>(5);
 
         String[] orderIds = {orderId};
 
@@ -674,11 +680,22 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         Map<String,Object> condMap = new HashMap<>(3);
         condMap.put("pageNumber",1);
         condMap.put("pageSize",20);
-        condMap.put("conditionType",conditionTypeList);
+        condMap.put("conditionType",conditionTypeList);*/
 
-        Map<String,Object> paramsMap = new HashMap<>(1);
-        paramsMap.put("cond",condMap);
-        String json = this.syncXYT("IOrderService.query",paramsMap);
+        StringBuilder stringBuffer = new StringBuilder();
+        Integer amountAllNum = 0;   //同步总数量
+        Integer amountSuccessAllNum = 0;   //同步成功总数量
+        String batchId = ""; //批次id
+
+        Map<String,Object> paramsMap = new HashMap<>(3);
+        /*paramsMap.put("cond",condMap);*/
+        paramsMap.put("orderId", orderId);
+        paramsMap.put("index", 1);
+        paramsMap.put("size", 20);
+
+        String json = pullOrderNew(paramsMap);
+
+        logger.info(json);
 
         //添加订单
         Map<String,Object> map = this.saveOrder(1,json,batchId);
@@ -755,10 +772,14 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         }
 
         Map<String,Object> paramsMap = new HashMap<>();
+        paramsMap.put("orderId", orderId);
+        paramsMap.put("index", 1);
+        paramsMap.put("size", 20);
+
         List<Map<String,Object>> conditionTypeList = new ArrayList<>();
 
         //订单状态  只获取代发货的订单
-        Map<String,Object> orderMap = new HashMap<>();
+        /*Map<String,Object> orderMap = new HashMap<>();
         //receiverName 收件人姓名 //receiverMobile收件人手机号码 //outOrderId原始订单号 //orderId系统订单号
         orderMap.put("condType","orderId");
         String[] orders = new String[1];
@@ -772,15 +793,19 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         condMap.put("pageNumber",1);
         condMap.put("pageSize",20);
         condMap.put("conditionType",conditionTypeList);
-        paramsMap.put("cond",condMap);
-        String json = this.syncXYT("IOrderService.query",paramsMap);
+        paramsMap.put("cond",condMap);*/
+
+
+
+
+        String json = pullOrderNew(paramsMap);
         //转化为json格式
         JSONObject jsonObj = new JSONObject(json);
-        String resultMsg = jsonObj.getString("result_msg");
+        String resultMsg = jsonObj.getString("message");
         if("success".equals(resultMsg)){
             //数据
-            JSONObject dataObj = jsonObj.getJSONObject("data");
-            JSONArray beanListArray = dataObj.getJSONArray("beanList");
+            // JSONObject dataObj = jsonObj.getJSONObject("data");
+            JSONArray beanListArray = jsonObj.getJSONArray("data");
             if(beanListArray.length() > 0){
                 JSONObject job = beanListArray.getJSONObject(0);
                 //为了避免小亚通同一个订单查询多次,将订单保存在MAP中
@@ -802,7 +827,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
      */
     private boolean getIsShip(JSONObject job,SalesOrder salesOrder){
         //订单基本信息
-        JSONObject infoObj = job.getJSONObject("info");
+        JSONObject infoObj = job.getJSONObject("orderInfo");
         //订单状态::0 待支付;10 待成团;20 待发货;30 预售中;40 待审批;50 仓库代发货;60 已发货;70 已签收;80 已拒收;999 已作废
         int orderStatus = infoObj.getInt("orderStatus");
         //售后状态:0 没有售后 1 退款中  2 退款关闭 3 退款成功 4 退货中 5 退货关闭 6 退货成功 7 其它售后中  8 部分退货成功
@@ -811,7 +836,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
             //20 待发货
 
             //订单项基本信息
-            JSONArray itemsArray = job.getJSONArray("items");
+            JSONArray itemsArray = job.getJSONArray("orderItem");
             //循环检测所有订单项是否能够发货
             boolean allStatus = true;
             for (SalesOrderItem salesOrderItem : salesOrder.getSalesOrderItemList()) {
@@ -1021,11 +1046,11 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
             //原始订单号
             map.put("deliveryInfos",maps);
 
-            String shipResultJson = this.syncXYT("delivery",map);
+            String shipResultJson = deliveryNew(map);
             try{
                 //转化为json格式
                 JSONObject jsonObj = new JSONObject(shipResultJson);
-                String resultMsg = jsonObj.getString("result_msg");
+                String resultMsg = jsonObj.getString("message");
                 if("success".equals(resultMsg)) {
                     //修改同步物流状态
                     SalesOrder shipSalesOrder = new SalesOrder();
@@ -1192,8 +1217,8 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         salesOrder.setSalesStatus(1);
         // 发货的物流公司
         JSONArray logisticsArray = null;
-        if(job.has("logistics")){
-            logisticsArray = job.getJSONArray("logistics");
+        if(job.has("orderLogistics")){
+            logisticsArray = job.getJSONArray("orderLogistics");
         }
         if(logisticsArray.length() < 1){
             errorMsg.append("商城订单编号:").append(otherExtOrderId).append("发货异常,未拉取到发货单号");
@@ -1268,14 +1293,14 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         StringBuilder errorMsg = new StringBuilder();
         //转化为json格式
         JSONObject jsonObj = new JSONObject(json);
-        String resultMsg = jsonObj.getString("result_msg");
+        String resultMsg = jsonObj.getString("message");
         if("success".equals(resultMsg)){
             status = 1;
             msg = "拉取订单成功";
             // 数据
-            JSONObject dataObj = jsonObj.getJSONObject("data");
+            // JSONObject dataObj = jsonObj.getJSONObject("data");
             // 获取订单数据
-            JSONArray beanListArray = dataObj.getJSONArray("beanList");
+            JSONArray beanListArray = jsonObj.getJSONArray("data");
             pullAmount = beanListArray.length();
             amountNum = beanListArray.length();
             if(beanListArray.length() > 0){
@@ -1287,13 +1312,13 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                         //用户信息
                         JSONObject consigneeObj = job.getJSONObject("consignee");
                         //订单基本信息
-                        JSONObject infoObj = job.getJSONObject("info");
+                        JSONObject infoObj = job.getJSONObject("orderInfo");
                         //订单项基本信息
-                        JSONArray itemsArray = job.getJSONArray("items");
+                        JSONArray itemsArray = job.getJSONArray("orderItem");
                         JSONObject memoObj = null;
-                        if(job.has("memo")){
+                        if(job.has("orderMemos")){
                             //备注信息  如果没有备注,将为null
-                            memoObj = job.getJSONObject("memo");
+                            memoObj = job.getJSONObject("orderMemos");
                         }
 
                         SalesOrder salesOrder = new SalesOrder();
@@ -1442,8 +1467,12 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
 
                             //地址
                             receiverAddress = consigneeObj.getString("receiverAddress");
-                            if(receiverState.contains("上海") || receiverState.contains("北京")
-                                    || receiverState.contains("重庆") || receiverState.contains("天津")){
+                            if(
+                                    receiverState.contains("上海") ||
+                                    receiverState.contains("北京") ||
+                                    receiverState.contains("重庆") ||
+                                    receiverState.contains("天津")
+                            ){
                                 receiverDistrict = receiverCity;
                                 receiverCity = receiverState;
                             }
@@ -1462,7 +1491,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                         salesOrder.setSalesOpenId(consigneeObj.getString("receiverMobile"));
 
                         if(consigneeObj.has("receiverZip")){
-                            //收件人邮政编码
+                            // 收件人邮政编码
                             salesOrder.setSalesAddressPostcode(consigneeObj.getString("receiverZip"));
                         }else{
                             // 没有邮编,从系统开始查找
@@ -1548,11 +1577,12 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
 
                         //支付金额 - 订单总金额
                         Long totalFee = infoObj.getLong("totalFee");
+                        Long paidFee = infoObj.getLong("paidFee");
                         Integer amount = totalFee.intValue();
                         //本次支付金额
-                        salesOrder.setSalesLastMoney(amount);
+                        salesOrder.setSalesLastMoney(paidFee.intValue());
                         //已付金额-支付金额/折扣价
-                        salesOrder.setSalesPayMoney(amount);
+                        salesOrder.setSalesPayMoney(paidFee.intValue());
                         //订单总金额
                         salesOrder.setSalesAmount(amount);
 
@@ -1596,6 +1626,14 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                                 buyerMessage = memoObj.getString("buyerMessage");
                             }
                             salesUserRemark = buyerMessage;
+                            if (buyerMemo != null) {
+                                if (salesUserRemark == null) {
+                                    salesUserRemark = buyerMemo;
+                                } else {
+                                    salesUserRemark += buyerMemo;
+                                }
+                            }
+                            // 商家备注
                             SalesAdminRemark = orderMemo;
                             if(sellerMemo != null && !"".equals(sellerMemo)){
                                 SalesAdminRemark += "-"+sellerMemo;
@@ -1686,22 +1724,25 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                             //应付金额是指:购买数量的总应付金额
                             Long totalFeeLong = item.getLong("totalFee");
                             Integer totalFeeInt = totalFeeLong.intValue();
+                            int itemPaidFee = item.getInt("paidFee");
 
                             if(productColor.getProductIsSplit() == 1){
+                                // 产品需要拆分,获取拆分规则
                                 List<ProductCombinatInfo> productCombinatList = productMapper.combinatList(productColor.getColorProductId());
                                 if(productCombinatList == null || productCombinatList.size() < 1){
                                     logger.info("商城订单编号:"+otherExtOrderId+"-订单项中的SKU未查询到组合产品,SKU编号:"+extSkuId+"; ");
                                     errorMsg.append(otherExtOrderId).append("-订单项中的SKU未查询到组合产品,SKU编号:").append(extSkuId).append(";");
                                     break;
                                 }
-                                Integer advProductCombinatFree = totalFeeInt/productCombinatList.size();
+                                // 获取拆分产品的平均价格
+                                Integer advProductCombinatFree = itemPaidFee/productCombinatList.size();
                                 for (int m = 0;m<productCombinatList.size();m++) {
+                                    // 获取产品的拆卸新
                                     ProductCombinatInfo productCombinatInfo = productCombinatList.get(m);
-
                                     ProductColor sonPc = productColorMapper.getProductColorByBar(productCombinatInfo.getColorBar());
+                                    // 订单项数据
                                     SalesOrderItem salesOrderItem = new SalesOrderItem();
                                     salesOrderItem.setItemWarrantyStatus(itemWarrantyStatus);
-
                                     salesOrderItem.setItemOtherId(String.valueOf(orderItemId));
 
                                     Integer sonNum = num*productCombinatInfo.getCombinatItemNum();
@@ -1709,10 +1750,10 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                                     //计算价格
                                     Integer itemDiscountAllFeeInt = 0;
                                     if((m+1) >= productCombinatList.size()){
-                                        itemDiscountAllFeeInt = totalFeeInt;
+                                        itemDiscountAllFeeInt = itemPaidFee;
                                     }else{
                                         itemDiscountAllFeeInt = advProductCombinatFree;
-                                        totalFeeInt = totalFeeInt - itemDiscountAllFeeInt;
+                                        itemPaidFee = itemPaidFee - itemDiscountAllFeeInt;
                                     }
                                     Integer itemDiscountFeeInt = itemDiscountAllFeeInt/sonNum;
                                     //产品市场价
@@ -1753,9 +1794,9 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                                 //产品市场价
                                 salesOrderItem.setItemProductPrice(itemDiscountFeeInt);
                                 //产品折扣价
-                                salesOrderItem.setItemProductDiscount(itemDiscountFeeInt);
+                                salesOrderItem.setItemProductDiscount(itemPaidFee);
                                 //小结
-                                salesOrderItem.setItemTotal(totalFeeInt);
+                                salesOrderItem.setItemTotal(itemPaidFee);
 
                                 //itemCost;//单个成本  itemCostTotal;//成本小结  确认操作计算
                                 //产品数量
@@ -1891,7 +1932,6 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                                     throw new Exception("订单导入-未能从该客户中获取到对应产品的信息,客户名称:"+dealerChannel.getDealerName()+",---产品:"+ salesOrderItem.getItemProductName()+"("+ salesOrderItem.getItemProductColor() +")。");
                                 }
                                 salesOrderItem.setItemProductPrice(newPrice);
-                                salesOrderItem.setItemProductDiscount(newPrice);
                                 if(newPrice > 0){
                                     noZeroSalesOrderItemList.add(salesOrderItem);
                                 }
@@ -2095,10 +2135,13 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
      * @return
      */
     public String syncOrderOnce(String orderId) {
-        Map<String,Object> map = new HashMap<>();
         //原始订单号
-        map.put("orderId",orderId);
-        return this.syncXYT("IOrderService.query",map);
+        Map<String,Object> paramsMap = new HashMap<>();
+        paramsMap.put("orderId", orderId);
+        paramsMap.put("index", 1);
+        paramsMap.put("size", 20);
+
+        return pullOrderNew(paramsMap);
     }
 
     /**
@@ -2202,4 +2245,83 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         return result;
     }
 
+    /***
+     * 获取小亚通平台的访问token
+     * @return
+     */
+    public String getToken() {
+        // Redis获取数据
+        String token = RedisUtils.get("XYT_token");
+        // 是否重新请求
+        boolean isReq = false;
+        if (token == null || "".equals(token)) {
+            isReq = true;
+        } else {
+            com.alibaba.fastjson.JSONObject tokenObj = com.alibaba.fastjson.JSONObject.parseObject(token);
+            Date timeout = DateTimeUtil.parse(tokenObj.getString("timeout"), "yyyy-MM-dd HH:mm:ss");
+            if (timeout == null) {
+                isReq = true;
+            } else {
+                if (timeout.getTime() < System.currentTimeMillis()) {
+                    isReq = true;
+                } else {
+                    return tokenObj.getString("token");
+                }
+            }
+        }
+        if (isReq) {
+            Map<String, String> data = new HashMap<>(4);
+            data.put("client_id", "YoFLxga9L32iZgi3");
+            data.put("client_secret", "X7zRb7Dz70SIeW00");
+            data.put("tenant_id", "102299598854");
+            data.put("grant_type", "tenant_cli");
+
+            String s = null;
+            try {
+                s = HttpClient431Util.doPostContent(com.alibaba.fastjson.JSONObject.toJSONString(data), "application/json", "https://baseapi.xiaoyatong.com/auth/diamond/token/tenant");
+            } catch (Exception e) {
+                logger.error("", e);
+            }
+            com.alibaba.fastjson.JSONObject result = com.alibaba.fastjson.JSONObject.parseObject(s);
+            com.alibaba.fastjson.JSONObject rdata = result.getJSONObject("data");
+            String accessToken = rdata.getString("access_token");
+            int expiresIn = rdata.getIntValue("expires_in");
+            // 缓存token
+            Map<String, String> tokenMap = new HashMap<>(2);
+            tokenMap.put("token", accessToken);
+            tokenMap.put("timeout", DateTimeUtil.format(DateTimeUtil.addMinute(new Date(), (expiresIn/60)-30), "yyyy-MM-dd HH:mm:ss"));
+            token = com.alibaba.fastjson.JSONObject.toJSONString(tokenMap);
+            // 缓存Redis
+            RedisUtils.put("XYT_token", token);
+            // 返回数据
+            return accessToken;
+        }
+        // 转换数据并返回
+        return com.alibaba.fastjson.JSONObject.parseObject(token).getString("token");
+    }
+
+    /**
+     * 查询小亚通订单
+     */
+    public String pullOrderNew(Map<String, Object> param) {
+        try {
+            String s = HttpClient431Util.doPostContent(com.alibaba.fastjson.JSONObject.toJSONString(param), "application/json", "https://baseapi.xiaoyatong.com/v1/order/list?access_token=" + getToken());
+
+            return s;
+        } catch (Exception e) {
+            logger.error("", e);
+        }
+        return null;
+    }
+
+    public String deliveryNew(Map<String, Object> param) {
+        try {
+            String s = HttpClient431Util.doPostContent(com.alibaba.fastjson.JSONObject.toJSONString(param), "application/json", "https://baseapi.xiaoyatong.com/v1/order/delivery?access_token=" + getToken());
+            return s;
+        } catch (Exception e) {
+            logger.error("", e);
+        }
+        return null;
+    }
+
 }

+ 11 - 0
watero-rst-service/src/main/java/com/iamberry/rst/util/GenerateKeyUtil.java

@@ -66,6 +66,8 @@ public class GenerateKeyUtil {
     private final static String SC_BATCH = "C";
     /*小亚通添加批次编号*/
     private final static String SX_BATCH = "X";
+    /*淘宝添加批次编号*/
+    private final static String ST_BATCH = "T";
     /*获取redis编号前缀*/
     private final static String SC_DETECT = "detect_";
 
@@ -152,6 +154,15 @@ public class GenerateKeyUtil {
     }
 
     /**
+     * 获取批次号 setSalesBatchId -- 淘宝添加
+     * @return
+     */
+    public String getSalesBatchIdST(){
+        Integer number = getBatch();
+        return ("S"+ ST_BATCH + SDF_BATCH.format(new Date()) + String.format("%08d", number));
+    }
+
+    /**
      * 获取批次号 setSalesBatchId -- 批量导入
      * @return
      */

+ 3 - 3
watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/MQTask.java

@@ -41,8 +41,8 @@ import java.util.*;
 import static com.iamberry.rst.util.SmsConfig.*;
 
 
-@Component(value="mqTask")
-@Lazy(false)
+//@Component(value="mqTask")
+//@Lazy(false)
 public class MQTask implements InitializingBean {
 
 	private static Logger logger = LoggerFactory.getLogger(MQTask.class);
@@ -459,7 +459,7 @@ public class MQTask implements InitializingBean {
 	 * 定时拉取小亚通订单
 	 */
 //	@Scheduled(cron = "0 0/3 * * * ?")//每三分钟执行一次
-	@Scheduled(cron = "0 0/10 * * * ?")//每十分钟执行一次
+	@Scheduled(cron = "0 0/1 * * * ?")//每十分钟执行一次
 	public void syncXytOrder(){
 		if (isDebug) {
 			logger.info("debug模式,无法运行正式任务");

+ 12 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/TaobaoConfig.java

@@ -0,0 +1,12 @@
+package com.iamberry.rst.controllers.mq;
+
+public class TaobaoConfig {
+
+    public static final String TAOBAO_URL = "https://eco.taobao.com/router/rest";
+
+    public static final String appkey = "33060815";
+
+    public static final String secret = "16e44445788f75485fd03e6b333e8484";
+
+
+}

+ 506 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/TaobaoTask.java

@@ -0,0 +1,506 @@
+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;
+import com.iamberry.rst.controllers.order.AdminTaobaoAuthController;
+import com.iamberry.rst.core.address.City;
+import com.iamberry.rst.core.address.District;
+import com.iamberry.rst.core.address.Province;
+import com.iamberry.rst.core.cm.SalesOrder;
+import com.iamberry.rst.core.cm.SalesOrderItem;
+import com.iamberry.rst.core.order.OrderSyncLog;
+import com.iamberry.rst.core.order.ProductColor;
+import com.iamberry.rst.core.order.ProductCombinatInfo;
+import com.iamberry.rst.faces.address.AddressService;
+import com.iamberry.rst.faces.cm.SalesOrderService;
+import com.iamberry.rst.service.order.mapper.OrderSyncLogMapper;
+import com.iamberry.rst.service.product.mapper.ProductColorMapper;
+import com.iamberry.rst.service.product.mapper.ProductMapper;
+import com.iamberry.rst.util.GenerateKeyUtil;
+import com.iamberry.wechat.tools.DateTimeUtil;
+import com.taobao.api.ApiException;
+import com.taobao.api.DefaultTaobaoClient;
+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.TradeFullinfoGetRequest;
+import com.taobao.api.request.TradesSoldGetRequest;
+import com.taobao.api.request.TradesSoldIncrementGetRequest;
+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;
+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;
+
+/**
+ * @author root
+ */
+@Component
+@Lazy(false)
+public class TaobaoTask {
+
+    private static Logger logger = LoggerFactory.getLogger(TaobaoTask.class);
+
+    /** 是否允许淘宝抓取订单,true表示允许,false表示不允许 */
+    private static boolean isDebug = false;
+
+    @Autowired
+    private GenerateKeyUtil generateKeyUtil ;
+    @Autowired
+    private AddressService addressService;
+    @Autowired
+    private ProductColorMapper productColorMapper;
+    @Autowired
+    private ProductMapper productMapper;
+    @Autowired
+    private SalesOrderService salesOrderService;
+    @Autowired
+    private OrderSyncLogMapper orderSyncLogMapper;
+
+    static {
+        String debug = System.getProperty("isTaobao");
+        System.out.println("读取到的配置数据:" + debug);
+        if ("true".equalsIgnoreCase(debug)) {
+            isDebug = true;
+        }
+    }
+
+    //每30分钟执行一次
+    @Scheduled(fixedDelay = 1000 * 60 * 30, initialDelay = 3000)
+    public void syncOrder() {
+        if (!isDebug) {
+            logger.info("【淘宝订单】debug模式,无法运行正式任务");
+            return;
+        }
+        logger.info("【淘宝订单】开始抓取数据......");
+        // 组装请求数据
+        String startTime = RedisUtils.get("TAOBAO_SYNC_TIME");
+        if (startTime == null) {
+            startTime = DateTimeUtil.format(DateTimeUtil.addHour(-15), "yyyy-MM-dd HH:mm:ss");
+            RedisUtils.put("TAOBAO_SYNC_TIME", startTime);
+        }
+        // 批次号
+        String batchIdST = generateKeyUtil.getSalesBatchIdST();
+        // 结束时间
+        String endTime = DateTimeUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
+        // 循环抓取
+        boolean hasNext = true;
+        long pageNo = 1;
+        try {
+            int total = 0;
+            // 开始循环
+            while (hasNext) {
+                logger.info("【淘宝订单】抓取第{}页的数据......", pageNo);
+                // 抓取淘宝数据
+                TaobaoClient client = new DefaultTaobaoClient(TaobaoConfig.TAOBAO_URL, TaobaoConfig.appkey, TaobaoConfig.secret);
+                TradesSoldGetRequest req = new TradesSoldGetRequest();
+                req.setFields("tid,type,status,payment,orders,rx_audit_status");
+                req.setStartCreated(StringUtils.parseDateTime(startTime));
+                req.setEndCreated(StringUtils.parseDateTime(endTime));
+                req.setStatus("WAIT_SELLER_SEND_GOODS");
+                req.setPageNo(pageNo);
+                req.setPageSize(40L);
+                req.setUseHasNext(true);
+                TradesSoldGetResponse rsp = null;
+                try {
+                    rsp = client.execute(req, (String) AdminTaobaoAuthController.getToken().get("token"));
+                    logger.info("订单数据:{}, {}", rsp.getTotalResults(), rsp.getBody());
+                } catch (ApiException e) {
+                    logger.error("", e);
+                }
+                if (rsp == null) {
+                    logger.error("【淘宝订单】请求淘宝服务器失败!");
+                    return;
+                }
+                // 判断数据
+                List<Trade> trades1 = rsp.getTrades();
+                if (trades1 == null) {
+                    break;
+                }
+                if (trades1.size() == 0) {
+                    logger.info("【淘宝订单】数据请求完毕");
+                    break;
+                }
+                for (Trade trade : trades1) {
+                    Trade details = getOrderDetails(trade.getTid());
+                    if (details == null) {
+                        logger.error("【淘宝订单】{}获取订单详细数据失败", trade.getTid());
+                        return;
+                    }
+                    // 组装数据
+                    SalesOrder salesOrder = packageOrder(details);
+                    salesOrder.setSalesBatchId(batchIdST);
+                    salesOrderService.addOrder(salesOrder);
+                    total ++;
+                }
+                // 迭代数据
+                hasNext = rsp.getHasNext();
+                pageNo ++;
+            }
+
+            OrderSyncLog orderSyncLog = new OrderSyncLog();
+            orderSyncLog.setSyncPlatId(1);
+            orderSyncLog.setSyncLogType(1);
+            orderSyncLog.setSyncLogMode(1);
+            orderSyncLog.setSyncLogRecentNum(total); //同步总数量
+            orderSyncLog.setSyncLogErrorNum(0); //同步失败数量
+            orderSyncLog.setSyncLogMsg("拉取天猫订单");   //备注
+            orderSyncLogMapper.save(orderSyncLog);
+
+            RedisUtils.put("TAOBAO_SYNC_TIME", endTime);
+        } catch (Exception e) {
+            logger.error("", e);
+            OrderSyncLog orderSyncLog = new OrderSyncLog();
+            orderSyncLog.setSyncPlatId(1);
+            orderSyncLog.setSyncLogType(1);
+            orderSyncLog.setSyncLogMode(1);
+            orderSyncLog.setSyncLogRecentNum(1); //同步总数量
+            orderSyncLog.setSyncLogErrorNum(1); //同步失败数量
+            orderSyncLog.setSyncLogMsg("拉取天猫订单");   //备注
+            orderSyncLog.setSyncLogErrorMsg(e.getMessage());
+            orderSyncLogMapper.save(orderSyncLog);
+        }
+    }
+
+    public Trade getOrderDetails(Long tid) {
+        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.setTid(tid);
+        req.setIncludeOaid("true");
+        TradeFullinfoGetResponse rsp = null;
+        try {
+            rsp = detailsClient.execute(req, (String) AdminTaobaoAuthController.getToken().get("token"));
+            JSONObject body = JSONObject.parseObject(rsp.getBody());
+            JSONObject resp = body.getJSONObject("trade_fullinfo_get_response");
+            JSONObject trade = resp.getJSONObject("trade");
+            return convert(trade);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static Trade convert(JSONObject data) {
+        logger.info("转换数据:{}", data.toJSONString());
+        Trade trade = new Trade();
+        trade.setReceiverState(data.getString("receiver_state"));
+        trade.setReceiverCity(data.getString("receiver_city"));
+        trade.setReceiverDistrict(data.getString("receiver_district"));
+        trade.setReceiverTown(data.getString("receiver_town"));
+        trade.setTidStr(data.getString("tid_str"));
+        trade.setReceiverMobile(data.getString("receiver_mobile"));
+        trade.setDiscountFee(data.getString("discount_fee"));
+        trade.setTid(data.getLong("tid"));
+        trade.setPayTime(data.getDate("pay_time"));
+        trade.setReceiverZip(data.getString("receiver_zip"));
+        trade.setTotalFee(data.getString("total_fee"));
+        trade.setReceiverAddress(data.getString("receiver_address"));
+        trade.setReceiverName(data.getString("receiver_name"));
+        trade.setPayment(data.getString("payment"));
+        trade.setStatus(data.getString("status"));
+        trade.setSellerMemo(data.getString("seller_memo"));
+        trade.setBuyerMemo(data.getString("buyer_memo"));
+        JSONObject temp = data.getJSONObject("orders");
+        JSONArray orders = temp.getJSONArray("order");
+        trade.setOrders(new ArrayList<>(orders.size()));
+        for (int i = 0; i < orders.size(); i++) {
+            Order order = new Order();
+            JSONObject t = orders.getJSONObject(i);
+            // 转换数据
+            order.setAdjustFee(t.getString("adjust_fee"));
+            order.setBuyerRate(t.getBoolean("buyer_rate"));
+            order.setCid(t.getLong("cid"));
+            order.setDiscountFee(t.getString("discount_fee"));
+            order.setDivideOrderFee(t.getString("divide_order_fee"));
+            order.setNum(t.getLong("num"));
+            order.setNumIid(t.getLong("num_iid"));
+            order.setOid(t.getLong("oid"));
+            order.setOuterSkuId(t.getString("outer_sku_id"));
+            order.setPartMjzDiscount(t.getString("part_mjz_discount"));
+            order.setPayment(t.getString("payment"));
+            order.setPrice(t.getString("price"));
+            order.setRefundStatus(t.getString("refund_status"));
+            order.setSkuId(t.getString("sku_id"));
+            order.setStatus(t.getString("status"));
+            order.setTotalFee(t.getString("total_fee"));
+            trade.getOrders().add(order);
+        }
+        return trade;
+    }
+
+    /**
+     * 数据还需要完善地址库编码、成本价格
+     * @param trade
+     * @return
+     */
+    private SalesOrder packageOrder(Trade trade) {
+        String tid = trade.getTid().toString();
+        SalesOrder order = new SalesOrder();
+        order.setSalesOrderId(tid);
+        order.setSalesDealCode(tid);
+        order.setSalesExOrderId(tid);
+        if (trade.getDiscountFee() != null) {
+            order.setSalesDiscountMoney(changeY2F(trade.getDiscountFee()));
+        } else {
+            order.setSalesDiscountMoney(0);
+        }
+        order.setSalesDeliver(1);
+        order.setSalesOpenId(trade.getReceiverMobile());
+        order.setSalesPledgeMoney(0);
+        order.setSalesRemainDeposit(0);
+        order.setSalesOrderStatus(1);
+        order.setSalesStatus(0);
+        order.setSalesShippingStatus(0);
+        order.setSalesPayStatus(2);
+        order.setSalesProcessStatus(1);
+        order.setSalesIsSend(0);
+        order.setSalesIsLocked(0);
+        order.setSalesIsSeparate(0);
+        order.setSalesIsShip(1);
+        order.setSalesProcessRefund(0);
+        order.setSalesSendType(2);
+        order.setSalesSalesTime(trade.getCreated());
+        // 地址
+        String address = trade.getReceiverState() + " " + trade.getReceiverCity();
+        if(trade.getReceiverDistrict() != null) {
+            address = address + " " + trade.getReceiverDistrict();
+        }
+        if (trade.getReceiverTown() != null) {
+            address = address + " " + trade.getReceiverTown();
+        }
+        address = address + " " + trade.getReceiverAddress();
+        order.setSalesAddressInfo(address);
+        if (trade.getReceiverZip() != null && !"000000".equals(trade.getReceiverZip())) {
+            order.setSalesAddressPostcode(trade.getReceiverZip());
+        } else {
+            if (trade.getReceiverDistrict() != null) {
+                order.setSalesAddressPostcode(findZip(trade.getReceiverState(), trade.getReceiverCity(), trade.getReceiverDistrict(), trade.getReceiverAddress()));
+            } else {
+                order.setSalesAddressPostcode(findZip(trade.getReceiverState(), trade.getReceiverCity(), trade.getReceiverTown(), trade.getReceiverAddress()));
+            }
+        }
+        order.setSalesAddressName(trade.getReceiverName());
+        order.setSalesAddressTel(trade.getReceiverMobile());
+        order.setSalesAmount(changeY2F(trade.getPayment()));
+        order.setSalesPayMoney(changeY2F(trade.getPayment()));
+        order.setSalesPayType(5);
+        order.setSalesWaitMoney(0);
+        order.setSalesShippingFee(0);
+        order.setSalesLastMoney(0);
+        order.setSalesPayTime(trade.getPayTime());
+        order.setSalesCreateTime(trade.getCreated());
+        order.setSalesAdminRemark(trade.getSellerMemo());
+        order.setSalesUserRemark(trade.getBuyerMemo());
+        order.setSalesCompanyId(1);
+        order.setSalesStoreId(86);
+        order.setSalesType(1);
+        order.setSalesAddType(4);
+        order.setSalesAdminId(10135);
+        order.setSalesReturnStatus(1);
+        order.setSalesIsSublist(1);
+        order.setSalesErrorState(1);
+        order.setSalesQuality(1);
+        order.setSalesOrderItemList(new ArrayList<>(trade.getOrders().size()));
+        // 订单项
+        int warranty = 0;
+        for (Order tradeOrder : trade.getOrders()) {
+            SalesOrderItem item = new SalesOrderItem();
+            if (!tradeOrder.getRefundStatus().equalsIgnoreCase("NO_REFUND")) {
+                warranty = 1;
+                item.setItemWarrantyStatus(1);
+            }
+            ProductColor productColor = productColorMapper.getProductColorByBar(tradeOrder.getOuterSkuId());
+            if(productColor.getProductIsSplit() == 1){
+                List<ProductCombinatInfo> productCombinatList = productMapper.combinatList(productColor.getColorProductId());
+                if(productCombinatList == null || productCombinatList.size() < 1){
+                    logger.error("商城订单编号:"+productColor.getColorProductId()+"-订单项中的SKU未查询到组合产品,SKU编号:"+productColor.getColorProductId()+"; ");
+                    break;
+                }
+                int totalFeeInt = changeY2F(tradeOrder.getDivideOrderFee());
+                Integer advProductCombinatFree = totalFeeInt/productCombinatList.size();
+                for (int m = 0;m<productCombinatList.size();m++) {
+                    ProductCombinatInfo productCombinatInfo = productCombinatList.get(m);
+                    ProductColor sonPc = productColorMapper.getProductColorByBar(productCombinatInfo.getColorBar());
+                    SalesOrderItem salesOrderItem = new SalesOrderItem();
+                    if (!tradeOrder.getRefundStatus().equalsIgnoreCase("NO_REFUND")) {
+                        warranty = 1;
+                        salesOrderItem.setItemWarrantyStatus(1);
+                    }
+                    salesOrderItem.setItemOtherId(tradeOrder.getOid().toString());
+                    Integer sonNum = tradeOrder.getNum().intValue()*productCombinatInfo.getCombinatItemNum();
+                    //计算价格
+                    Integer itemDiscountAllFeeInt = 0;
+                    if((m+1) >= productCombinatList.size()){
+                        itemDiscountAllFeeInt = totalFeeInt;
+                    }else{
+                        itemDiscountAllFeeInt = advProductCombinatFree;
+                        totalFeeInt = totalFeeInt - itemDiscountAllFeeInt;
+                    }
+                    Integer itemDiscountFeeInt = itemDiscountAllFeeInt/sonNum;
+                    //产品市场价
+                    salesOrderItem.setItemProductPrice(itemDiscountFeeInt);
+                    //产品折扣价
+                    salesOrderItem.setItemProductDiscount(itemDiscountFeeInt);
+                    //小结
+                    salesOrderItem.setItemTotal(itemDiscountAllFeeInt);
+                    //产品数量
+                    salesOrderItem.setItemNum(sonNum);
+                    //colorBar
+                    salesOrderItem.setItemColorBar(sonPc.getColorBar());
+                    //产品id
+                    salesOrderItem.setItemProductId(sonPc.getColorProductId());
+                    salesOrderItem.setItemColorId(sonPc.getColorId());
+                    salesOrderItem.setItemProductType(sonPc.getProductType());
+                    salesOrderItem.setItemProductName(sonPc.getProductName());
+                    //产品颜色
+                    salesOrderItem.setItemProductColor(sonPc.getColorName());
+                    //商品简称
+                    salesOrderItem.setProductAbbreviation(sonPc.getProductAbbreviation());
+                    //所属产品简称
+                    salesOrderItem.setColorAbbreviation(sonPc.getColorAbbreviation());
+                    //重量
+                    salesOrderItem.setColorIsWeight(sonPc.getColorIsWeight());
+                    //是否是水机 1:水机 2;其它产品
+                    salesOrderItem.setColorIsMachine(sonPc.getColorIsMachine());
+                    //产品来源 1:产品颜色表,2:配件表
+                    salesOrderItem.setItemIsSource(1);
+                    order.getSalesOrderItemList().add(salesOrderItem);
+                }
+            }else{
+                item.setItemOtherId(tradeOrder.getOid().toString());
+                item.setItemNum(tradeOrder.getNum().intValue());
+                item.setItemColorBar(tradeOrder.getOuterSkuId());
+                item.setItemProductPrice(changeY2F(tradeOrder.getPrice())/item.getItemNum());
+                item.setItemProductDiscount(changeY2F(tradeOrder.getDivideOrderFee())/item.getItemNum());
+                item.setItemIsSource(1);
+                item.setItemReturnNum(0);
+                //小结
+                item.setItemTotal(changeY2F(tradeOrder.getDivideOrderFee()));
+                item.setItemProductId(productColor.getColorProductId());
+                item.setItemColorId(productColor.getColorId());
+                item.setItemProductType(productColor.getProductType());
+                item.setItemProductName(productColor.getProductName());
+                //产品颜色
+                item.setItemProductColor(productColor.getColorName());
+                //商品简称
+                item.setProductAbbreviation(productColor.getProductAbbreviation());
+                //所属产品简称
+                item.setColorAbbreviation(productColor.getColorAbbreviation());
+                //重量
+                item.setColorIsWeight(productColor.getColorIsWeight());
+                //是否是水机 1:水机 2;其它产品
+                item.setColorIsMachine(productColor.getColorIsMachine());
+                //产品来源 1:产品颜色表,2:配件表
+                item.setItemIsSource(1);
+                // 填充数据
+                order.getSalesOrderItemList().add(item);
+            }
+        }
+        order.setSalesWarrantyStatus(warranty);
+        return order;
+    }
+
+    private static int changeY2F(String price) {
+        double p = Double.parseDouble(price);
+        return (int)(p * 100);
+    }
+
+    private String findZip(String receiverState, String receiverCity, String receiverDistrict, String address) {
+        logger.info("地址数据:{}, {}, {}, {}", receiverState, receiverCity, receiverDistrict, address);
+        //获取省份
+        List<Province> provinceList = addressService.listProvince(new Province());
+        // 没有邮编,从系统开始查找
+        if(provinceList != null && provinceList.size() >0 ){
+            int provinceIdNum = 0;
+            int provinceId = 0;
+            for (Province proiv : provinceList) {
+                int proNum = 0;
+                String newPro = proiv.getProvince().replaceAll("省|自治区|壮族自治区|特别行政区|维吾尔自治区","");
+                if(newPro.contains(receiverState)){
+                    proNum++;
+                }
+                if(receiverState.contains(newPro)){
+                    proNum++;
+                }
+                if(proNum > provinceIdNum){
+                    provinceIdNum = proNum;
+                    provinceId = proiv.getProvinceId();
+                }
+            }
+
+            receiverCity = receiverCity.replaceAll("市|州|地区|自治区|特别行政区","");
+
+            int cityNum = 0;
+            Integer cityId = null;
+
+            City city = new City();
+            city.setProvinceId(provinceId);
+            List<City> cityList = addressService.listCity(city);
+            for (City ci:cityList) {
+                int ciNum = 0;
+                String newCi = ci.getCity().replaceAll("市|州|地区|自治区|特别行政区","");
+                if(receiverCity.contains(newCi)){
+                    ciNum ++;
+                }
+                if(newCi.contains(receiverCity)){
+                    ciNum ++;
+                }
+                if(cityNum < ciNum){
+                    cityNum = ciNum;
+                    cityId = ci.getCityId();
+                }
+            }
+            if(cityId == null){
+                throw new RuntimeException("未查询到该县区:"+address);
+            }
+
+            int districtNum = 0;
+            String postcode = null;
+
+            District district = new District();
+            district.setCityId(cityId);
+            List<District> districtList = addressService.listDistrict(district);
+            for (District dis:districtList) {
+                int disNum = 0;
+
+                String newDIs = dis.getDistrict();
+                String newLastNewArea  = newDIs.substring(newDIs.length()-1,newDIs.length());
+                newLastNewArea = newLastNewArea.replaceAll("县|区|镇|乡|市|州|洲","");
+                newDIs = newDIs.substring(0,newDIs.length()-1);
+                newDIs += newLastNewArea;
+
+                if(newDIs.contains(receiverDistrict)){
+                    disNum++;
+                }
+                if(receiverDistrict.contains(newDIs)){
+                    disNum++;
+                }
+                if(districtNum < disNum){
+                    districtNum = disNum;
+                    postcode = dis.getPostcode();
+                }
+            }
+            if(postcode != null){
+                return postcode;
+            }else{
+                throw new RuntimeException("未查询到该县区,原地址:"+address);
+            }
+        }else{
+            throw new RuntimeException("未查询到该省份,原地址:"+address);
+        }
+    }
+
+}

+ 124 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminTaobaoAuthController.java

@@ -0,0 +1,124 @@
+package com.iamberry.rst.controllers.order;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.JSONPObject;
+import com.iamberry.redis.RedisUtils;
+import com.iamberry.rst.controllers.mq.TaobaoConfig;
+import com.iamberry.wechat.tools.DateTimeUtil;
+import com.iamberry.wechat.tools.ResponseJson;
+import com.taobao.api.ApiException;
+import com.taobao.api.DefaultTaobaoClient;
+import com.taobao.api.TaobaoClient;
+import com.taobao.api.request.TopAuthTokenCreateRequest;
+import com.taobao.api.response.TopAuthTokenCreateResponse;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @author root
+ */
+@Controller
+@RequestMapping("/taobao")
+public class AdminTaobaoAuthController {
+
+    public static final Map<String, String> HREF_CACHE = new ConcurrentHashMap<>(10);
+
+    @RequestMapping("/tokenPage")
+    public ModelAndView tokenPage() {
+        return new ModelAndView("taobao/token").addObject("data", getToken());
+    }
+
+    public static Map<String, Object> getToken() {
+        String taobaoSession = RedisUtils.get("TAOBAO_SESSION");
+        // 判断数据
+        if (taobaoSession == null) {
+            return null;
+        }
+        JSONObject obj = JSONObject.parseObject(taobaoSession);
+        // 校验时间
+        Date time = obj.getDate("time");
+        if (time.getTime() <= System.currentTimeMillis()) {
+            return null;
+        }
+        // 组装
+        Map<String, Object> res = new HashMap<>();
+        res.put("token", obj.getString("token"));
+        res.put("time", obj.getDate("time"));
+        return res;
+    }
+
+    @ResponseBody
+    @RequestMapping("/check")
+    public ResponseJson checkToken() {
+        Map<String, Object> token = getToken();
+        if (token == null) {
+            return ResponseJson.getFAILURE();
+        }
+        Date time = (Date) token.get("time");
+        if (time.getTime() <= System.currentTimeMillis()) {
+            return ResponseJson.getFAILURE();
+        }
+        return ResponseJson.getSUCCESS().addResponseKeyValue("token", token);
+    }
+
+    @ResponseBody
+    @RequestMapping("/invalid")
+    public ResponseJson invalid() {
+        RedisUtils.del("TAOBAO_SESSION");
+        return ResponseJson.getSUCCESS();
+    }
+
+    @ResponseBody
+    @RequestMapping("/token")
+    public ModelAndView token(
+            @RequestParam("code") String code,
+            @RequestParam("state") String state,
+            HttpServletRequest request) {
+        TaobaoClient client = new DefaultTaobaoClient(TaobaoConfig.TAOBAO_URL, TaobaoConfig.appkey, TaobaoConfig.secret);
+        TopAuthTokenCreateRequest req = new TopAuthTokenCreateRequest();
+        req.setCode(code);
+        try {
+            TopAuthTokenCreateResponse rsp = client.execute(req);
+            JSONObject obj = JSONObject.parseObject(rsp.getTokenResult());
+            String token = obj.getString("access_token");
+            Integer timeout = obj.getInteger("expires_in");
+            System.out.println("token:" + rsp.getTokenResult());
+            // 缓存数据
+            Map<String, Object> data = new HashMap<>(2);
+            data.put("token", token);
+            data.put("time", DateTimeUtil.addMinute(new Date(), (timeout/60)-30));
+            RedisUtils.put("TAOBAO_SESSION", JSONObject.toJSONString(data));
+        } catch (ApiException e) {
+            e.printStackTrace();
+        }
+        // 跳转地址
+        String url = request.getContextPath() + "/admin/sys/_index";
+        String href = HREF_CACHE.get(state);
+        if (href != null) {
+            url = href;
+            HREF_CACHE.remove(state);
+        }
+        return new ModelAndView("taobao/redirect").addObject("url", url);
+    }
+
+    @RequestMapping("/auth")
+    public ModelAndView auth(@RequestParam("url") String href) {
+        // 存储跳转前的URL
+        int state = new Random(1_000_000).nextInt();
+        HREF_CACHE.put(state + "", href);
+        // 跳转
+        String url = "https://oauth.taobao.com/authorize?response_type=code&client_id=" + TaobaoConfig.appkey + "&redirect_uri=https://rst.iamberry.com/taobao/token&state=" + state + "&view=web";
+        return new ModelAndView("redirect:" + url);
+    }
+
+}

+ 72 - 5
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java

@@ -3,6 +3,7 @@ package com.iamberry.rst.controllers.order;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.iamberry.redis.RedisUtils;
+import com.iamberry.rst.controllers.mq.TaobaoTask;
 import com.iamberry.rst.core.cm.SalesOrder;
 import com.iamberry.rst.core.cm.SalesOrderItem;
 import com.iamberry.rst.core.cm.StoreInfo;
@@ -22,6 +23,7 @@ import com.iamberry.rst.faces.order.LogisticsInfoService;
 import com.iamberry.rst.faces.order.OrderDepartService;
 import com.iamberry.rst.faces.order.OrderSyncLogService;
 import com.iamberry.rst.faces.product.ProductService;
+import com.iamberry.rst.service.cm.mapper.SalesOrderMapper;
 import com.iamberry.rst.util.PageUtil;
 import com.iamberry.rst.utils.AdminUtils;
 import com.iamberry.rst.utils.OrderUtils;
@@ -29,6 +31,8 @@ import com.iamberry.rst.utils.StitchAttrUtil;
 import com.iamberry.wechat.tools.*;
 import com.iamberry.wechat.tools.payUtil.DatetimeUtil;
 import com.lowagie.text.html.HtmlParser;
+import com.taobao.api.domain.Order;
+import com.taobao.api.domain.Trade;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
@@ -91,6 +95,11 @@ public class AwaitSendController {
     private OrderDepartService orderDepartService;
     @Autowired
     private ComplaintDetectInfoService complaintDetectInfoService;
+    @Autowired
+    private TaobaoTask taobaoTask;
+    @Autowired
+    private SalesOrderMapper salesOrderMapper ;
+
     private static final Logger LOGGER = LoggerFactory.getLogger(AwaitSendController.class);
 
 
@@ -225,13 +234,71 @@ public class AwaitSendController {
         //小亚通拉取订单检测是否有退款等异常状态
         if (pagedResult != null && pagedResult.getDataList() != null && !pagedResult.getDataList().isEmpty()) {
             for (SalesOrder temp : pagedResult.getDataList()) {
-                if(temp.getSalesProcessRefund() != 1){
-                    boolean isShip = orderSyncLogService.syncXYTOrderShipInspec(temp.getSalesId());
-                    if(isShip){
+                // 校验淘宝订单
+                if (temp.getSalesBatchId().startsWith("ST")) {
+                    LOGGER.info("淘宝订单需要校验订单状态{}", temp.getSalesOrderId());
+                    Trade details = taobaoTask.getOrderDetails(Long.getLong(temp.getSalesOrderId()));
+                    LOGGER.info("获取到的淘宝订单数据:{}", JSONObject.toJSONString(details));
+                    int stats = 0;
+                    for (Order order : details.getOrders()) {
+                        if (!order.getRefundStatus().equals("NO_REFUND")) {
+                            stats ++;
+                        }
+                    }
+                    LOGGER.info("当前订单退款数量:{}", stats);
+                    if (stats != 0) {
+                        if (stats == details.getOrders().size()) {
+                            for (SalesOrderItem item : temp.getSalesOrderItemList()) {
+                                //修改订单项售后状态跟随小亚通平台
+                                SalesOrderItem newSalesOrderItem = new SalesOrderItem();
+                                newSalesOrderItem.setItemId(item.getItemId());
+                                newSalesOrderItem.setItemWarrantyStatus(1);
+                                salesOrderMapper.updateOrderItemObj(newSalesOrderItem);
+                            }
+                        } else {
+                            for (SalesOrderItem item : temp.getSalesOrderItemList()) {
+                                for (Order order : details.getOrders()) {
+                                    if (
+                                            item.getItemOtherId().equals(order.getOid().toString())
+                                                    &&
+                                            !order.getRefundStatus().equals("NO_REFUND")) {
+                                        //修改订单项售后状态跟随小亚通平台
+                                        SalesOrderItem newSalesOrderItem = new SalesOrderItem();
+                                        newSalesOrderItem.setItemId(item.getItemId());
+                                        newSalesOrderItem.setItemWarrantyStatus(1);
+                                        salesOrderMapper.updateOrderItemObj(newSalesOrderItem);
+                                    }
+                                }
+                            }
+                        }
+                        SalesOrder sonOrder = new SalesOrder();
+                        sonOrder.setSalesId(temp.getSalesId());
+                        sonOrder.setSalesShippingStatus(0);
+                        // 确认状态  0(未确认)1(确认)2(挂起)3(作废)
+                        sonOrder.setSalesStatus(0);
+                        // 有退款
+                        sonOrder.setSalesWarrantyStatus(1);
+                        if(salesOrderService.update(sonOrder) > 0){
+                            //添加操作跟踪信息
+                            OrderTracking orderTracking = new OrderTracking();
+                            orderTracking.setAdminId(1);
+                            orderTracking.setSalesDealCode(temp.getSalesDealCode());
+                            orderTracking.setTrackingDesc("发货检测第三方订单状态异常,退回未确认状态");
+                            salesOrderService.addTracking(orderTracking);
+                        }
+                    } else {
+                        salesOrderList.add(temp);
+                    }
+                } else {
+                    // 非淘宝订单
+                    if(temp.getSalesProcessRefund() != 1){
+                        boolean isShip = orderSyncLogService.syncXYTOrderShipInspec(temp.getSalesId());
+                        if(isShip){
+                            salesOrderList.add(temp);
+                        }
+                    }else{
                         salesOrderList.add(temp);
                     }
-                }else{
-                    salesOrderList.add(temp);
                 }
             }
         }

+ 80 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/test/TestOrderController.java

@@ -0,0 +1,80 @@
+package com.iamberry.rst.controllers.test;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.iamberry.rst.controllers.mq.TaobaoConfig;
+import com.iamberry.rst.controllers.order.AdminTaobaoAuthController;
+import com.iamberry.wechat.tools.ResponseJson;
+import com.taobao.api.ApiException;
+import com.taobao.api.DefaultTaobaoClient;
+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.TradeFullinfoGetRequest;
+import com.taobao.api.request.TradesSoldGetRequest;
+import com.taobao.api.response.TradeFullinfoGetResponse;
+import com.taobao.api.response.TradesSoldGetResponse;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@Controller
+@RequestMapping("/test")
+public class TestOrderController {
+
+    @ResponseBody
+    @RequestMapping("/order")
+    public ResponseJson order() {
+        TaobaoClient client = new DefaultTaobaoClient(TaobaoConfig.TAOBAO_URL, TaobaoConfig.appkey, TaobaoConfig.secret);
+        TradesSoldGetRequest req = new TradesSoldGetRequest();
+        req.setFields("tid,type,status,payment,orders,rx_audit_status");
+        req.setStartCreated(StringUtils.parseDateTime("2021-08-24 00:00:00"));
+        req.setEndCreated(StringUtils.parseDateTime("2021-08-25 00:00:00"));
+        req.setStatus("WAIT_SELLER_SEND_GOODS");
+
+        req.setPageNo(1L);
+        req.setPageSize(40L);
+        req.setUseHasNext(true);
+        TradesSoldGetResponse rsp = null;
+        try {
+            System.out.println((String) AdminTaobaoAuthController.getToken().get("token"));
+            rsp = client.execute(req, (String) AdminTaobaoAuthController.getToken().get("token"));
+        } catch (ApiException e) {
+            e.printStackTrace();
+        }
+        JSONObject json = JSONObject.parseObject(rsp.getBody());
+        JSONObject resp = json.getJSONObject("trades_sold_get_response");
+        if (resp.containsKey("trades")) {
+            JSONObject trades = resp.getJSONObject("trades");
+            JSONArray trade = trades.getJSONArray("trade");
+            for (int i = 0; i < trade.size(); i++) {
+                JSONObject order = trade.getJSONObject(i);
+                Long tid = order.getLong("tid");
+                // 获取订单详情
+                getOrderDetails(tid);
+            }
+        }
+        return ResponseJson.getSUCCESS();
+    }
+
+    public static void getOrderDetails(Long tid) {
+        TaobaoClient detailsClient = new DefaultTaobaoClient(TaobaoConfig.TAOBAO_URL, TaobaoConfig.appkey, TaobaoConfig.secret);
+        TradeFullinfoGetRequest req = new TradeFullinfoGetRequest();
+        req.setFields("tid,type,status,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;
+        try {
+            rsp = detailsClient.execute(req, (String) AdminTaobaoAuthController.getToken().get("token"));
+            for (Order order : rsp.getTrade().getOrders()) {
+                if (order.getRefundStatus().equals("NO_REFUND") || order.getRefundStatus().equals("SELLER_REFUSE_BUYER")) {
+
+                }
+            }
+        } catch (ApiException e) {
+            e.printStackTrace();
+        }
+        System.out.println(JSONObject.toJSONString(rsp));
+    }
+}

+ 2 - 1
watero-rst-web/src/main/resources/watero-rst-ioc.xml

@@ -37,7 +37,8 @@
     <aop:aspectj-autoproxy proxy-target-class="true"/>
 
 	<!-- 开启注解启动定时器 -->
-    <task:annotation-driven/>
+    <task:annotation-driven scheduler="myTask"/>
+	<task:scheduler id="myTask" pool-size="5"/>
 
 	<!-- DataSource -->
 	<import resource="classpath:watero-rst-db.xml"/>

+ 1 - 1
watero-rst-web/src/main/webapp/WEB-INF/views/cm/inventory/inventory_list.ftl

@@ -42,7 +42,7 @@
 <div class="page-container">
     <div class="text-c">
         <form name="form1" action="${path}/admin/inventory/select_inventory_list" method="post">
-            <input type="hidden" name="inventoryIDS" value="211,591,210,435,181,182,437,681,531,197,212,172,171,170,169,173,607,519,553,559,495,497,461,184,633,223,224,225,226,115,220,116,113,120,119,118,117,124,121,215,213,214,151,168,165"/>
+            <input type="hidden" name="inventoryIDS" value="211,591,210,435,181,182,437,681,531,197,212,172,171,170,169,173,607,519,553,559,495,497,461,184,633,223,224,225,226,115,220,116,113,120,119,118,117,124,121,215,213,214,151,168,165,1318,1320,1322,1313,1307,1292,1294,1290"/>
 
             <select class="select" name="warehouseId" style="height: 35px;width: 150px">
                 <option value ="">选择仓库</option>

+ 21 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/taobao/redirect.ftl

@@ -0,0 +1,21 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="renderer" content="webkit|ie-comp|ie-stand">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
+    <meta http-equiv="Cache-Control" content="no-siteapp" />
+    <#include "/base/add_base.ftl">
+    <title>正在启动授权......</title>
+</head>
+<body>
+<input type="hidden" id="hidden-href" value="${url}">
+<div class="pd-20">
+    正在启动授权......
+</div>
+</body>
+<script type="text/javascript">
+    location.href = $("#hidden-href").val();
+</script>
+</html>

+ 58 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/taobao/token.ftl

@@ -0,0 +1,58 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="renderer" content="webkit|ie-comp|ie-stand">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
+    <meta http-equiv="Cache-Control" content="no-siteapp" />
+    <link rel="Bookmark" href="/favicon.ico" >
+    <link rel="Shortcut Icon" href="/favicon.ico" />
+    <#include "/base/list_base.ftl">
+    <title>系统管理 - 管理员列表 - Watero-RST 1.0</title>
+</head>
+<body>
+<nav class="breadcrumb"><i class="Hui-iconfont">&#xe67f;</i> 首页 <span class="c-gray en">/</span> 订单管理 <span class="c-gray en">/</span> 淘宝认证 <a class="btn btn-success radius r" href="javascript:location.replace(location.href);" title="刷新" ><i class="Hui-iconfont">&#xe68f;</i></a></nav>
+<div class="page-container">
+
+     <table class="table table-border table-bordered table-hover">
+        <thead>
+            <tr class="text-c">
+                <th width="100">TOKEN</th>
+                <th width="20">过期时间</th>
+                <th width="10">操作</th>
+            </tr>
+        </thead>
+        <tbody>
+        <#if !((data)??)>
+            <tr class="text-c">
+                <td colspan="3">
+                    <span onclick="re_auth()" style="color: red;font-size: 16px">
+                        重新授权
+                        <i class="Hui-iconfont">&#xe61d;</i>
+                    </span>
+                </td>
+            </tr>
+        <#else>
+            <tr class="text-c">
+                <td>${(data.token)!}</td>
+                <td>${(data.time?string("yyyy-MM-dd HH:mm:ss"))!}</td>
+                <td class="td-manage">
+                    <a title="重新授权" href="javascript:re_auth()" class="ml-5" style="text-decoration:none"><i class="Hui-iconfont">&#xe61d;</i></a>
+                </td>
+            </tr>
+        </#if>
+        </tbody>
+    </table>
+</div>
+</body>
+<script type="text/javascript">
+
+    function re_auth() {
+        // 保存当前url
+        let href = window.location.href;
+        window.location.href = "${path}/taobao/auth?url=" + href;
+    }
+
+</script>
+</html>

+ 33 - 11
watero-rst-web/src/main/webapp/common/js/salesOrder/salesOrder.js

@@ -55,6 +55,7 @@ $(function(){
 
 var isSalesStore = true;
 var isSalesAmountTest = false;
+var isReq = false;
 $(function(){
     var loadIndex = 0;
     $("#form-order-add").Validform({
@@ -74,7 +75,16 @@ $(function(){
             var flag = false;
         },
         beforeSubmit: function (curform) {  //验证通过之后执行的函数
-
+            if (isReq) {
+                console.log("已发起过请求")
+                if (isSalesAmountTest) {
+                    console.log("开始请求")
+                    return true;
+                }
+                return false;
+            } else {
+                console.log("未发起过请求")
+            }
             var regx = /^[\w-_]{6,32}$/
             var salesDealCode = $("#salesDealCode").val();
             var salesBatchId = $("#salesBatchId").val();
@@ -163,6 +173,7 @@ $(function(){
             //判断客服人员没有更改默认的店铺,系统需要提示客服人员按需选择
             var salesStoreId = $("#salesStoreId").val();
             if(salesStoreId == 2 && !isSalesAmountTest){
+                isReq = true;
                 layer.confirm('确定已经选择正确的店铺了吗?', {
                     btn: ['是的','再选一次'] //按钮
                 }, function(){
@@ -173,28 +184,39 @@ $(function(){
                         $(curform).submit();
                         layer.closeAll();
                     }, function(){
+                        isReq = false;
                         layer.closeAll();
                         return false;
                     });
                 }, function(){
+                    isReq = false;
                     layer.closeAll();
                     return false;
                 });
             }else{
-                layer.confirm('请确认订单的销售价格,如果是自营店铺,请询问提供订单的同事了解销售价,非自营店铺不用更改金额信息!', {
-                    btn: ['是的','再选一次'] //按钮
-                }, function(){
-                    isSalesAmountTest = true;
-                    $(curform).submit();
-                    layer.closeAll();
-                }, function(){
-                    layer.closeAll();
-                    return false;
-                });
+                isReq = true;
+                (function (curform){
+                    layer.confirm('请确认订单的销售价格,如果是自营店铺,请询问提供订单的同事了解销售价,非自营店铺不用更改金额信息!', {
+                        btn: ['是的','再选一次'] //按钮
+                    }, function(){
+                        console.log("开始请求:" + curform);
+                        isSalesAmountTest = true;
+                        $(curform).submit();
+                        layer.closeAll();
+                    }, function(){
+                        isReq = false;
+                        layer.closeAll();
+                        return false;
+                    });
+                })(curform);
             }
+            console.log("isSalesAmountTest:" + isSalesAmountTest)
             return isSalesAmountTest;
         },
         callback: function (data) {//异步回调函数
+
+            isReq = false;
+
             if (data) {
                 var index = layer.alert(data.resultMsg, function (index) {
                     if (data.resultCode == 200) {