Jelajahi Sumber

增加订单同步列表

wangxiaoming 5 tahun lalu
induk
melakukan
d3ea9b2b87

+ 12 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/order/OrderSyncLog.java

@@ -32,6 +32,10 @@ public class  OrderSyncLog  implements  Serializable {
     @DateTimeFormat( pattern = "yyyy-MM-dd HH:mm:ss" )
     @JsonFormat ( pattern = "yyyy-MM-dd", timezone = "GMT+8" )
     private Date syncLogCreateDate;
+
+    //平台名称
+    private String syncPlatName;
+
     public Integer getSyncLogId(){
         return syncLogId;
     }
@@ -86,4 +90,12 @@ public class  OrderSyncLog  implements  Serializable {
     public void setSyncLogCreateDate(Date syncLogCreateDate){
         this.syncLogCreateDate = syncLogCreateDate;
     }
+
+    public String getSyncPlatName() {
+        return syncPlatName;
+    }
+
+    public void setSyncPlatName(String syncPlatName) {
+        this.syncPlatName = syncPlatName;
+    }
 }

+ 11 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/order/OrderSyncLogService.java

@@ -1,6 +1,7 @@
 package com.iamberry.rst.faces.order;
 
 import com.iamberry.rst.core.order.OrderSyncLog;
+import com.iamberry.rst.core.page.PagedResult;
 
 import java.util.Date;
 import java.util.List;
@@ -17,6 +18,16 @@ public interface OrderSyncLogService {
      * @return List
      */
     List<OrderSyncLog> getSyncLogList(OrderSyncLog orderSyncLog);
+
+    /**
+     * 页面
+     * @param pageNO
+     * @param pageSize
+     * @param orderSyncLog
+     * @param isTotalNum
+     * @return
+     */
+    PagedResult<OrderSyncLog> listOrderSyncLogPage(int pageNO, int pageSize, OrderSyncLog orderSyncLog, boolean isTotalNum);
     /**
      * 查询单条数据
      * @param  id

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

@@ -1952,6 +1952,9 @@
             <if test="salesReturnGoods != null and salesReturnGoods == 2">
                 AND  oi.item_return_num <![CDATA[>]]> 0
             </if>
+            <if test="salesExOrderId != null">
+                AND tt.sales_ex_orderId = #{salesExOrderId}
+            </if>
             <if test="salesPostNum !=null and salesPostNum !=''">
                 AND tt.sales_post_num = #{salesPostNum}
             </if>

+ 29 - 4
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.github.pagehelper.PageHelper;
 import com.iamberry.app.tool.util.MD5;
 import com.iamberry.rst.core.address.City;
 import com.iamberry.rst.core.address.District;
@@ -9,6 +10,7 @@ import com.iamberry.rst.core.cm.SalesOrderItem;
 import com.iamberry.rst.core.dm.DealerChannel;
 import com.iamberry.rst.core.dm.DealerProduct;
 import com.iamberry.rst.core.order.*;
+import com.iamberry.rst.core.page.PagedResult;
 import com.iamberry.rst.core.tools.LogisticsInfo;
 import com.iamberry.rst.faces.address.AddressService;
 import com.iamberry.rst.faces.cm.SalesOrderService;
@@ -23,6 +25,7 @@ import com.iamberry.rst.service.order.mapper.OrderSyncPlatformMapper;
 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.rst.util.PageUtil;
 import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
 import org.apache.http.client.methods.HttpPost;
@@ -104,6 +107,13 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
         return  orderSyncLogMapper.getSyncLogList(orderSyncLog);
     }
 
+    @Override
+    public PagedResult<OrderSyncLog> listOrderSyncLogPage(int pageNO, int pageSize,OrderSyncLog orderSyncLog, boolean isTotalNum) {
+        PageHelper.startPage(pageNO, pageSize, isTotalNum);
+        List<OrderSyncLog> list = orderSyncLogMapper.getSyncLogList(orderSyncLog);
+        return PageUtil.getPage(list);
+    }
+
     /**
      * 查询单条数据
      * @param  id
@@ -218,13 +228,25 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
             orderSyncLog.setSyncLogErrorMsg(newErrorMsg);  //失败信息
         }
         //因为系统每10分钟拉取一次订单,日志过多,所以在此控制,没有必要的日志,没有必要录入
-        if(orderSyncLog.getSyncLogRecentNum() != 0){
+        if(type == 1){
+            if(orderSyncLog.getSyncLogRecentNum() != 0){
+                //该条查询当天最近的一条日志,与当前日志想匹配,如果错误相同,则不处理,如果不相同与添加日志,进一步节省sql存储空间
+                OrderSyncLog osl = orderSyncLogMapper.getSyncLogLast(orderSyncPlatform.getSyncPlatId());
+                if(osl != null){
+                    if(!orderSyncLog.getSyncLogErrorMsg().equals(osl.getSyncLogErrorMsg())){
+                        orderSyncLogMapper.save(orderSyncLog);
+                    }
+                }else{
+                    orderSyncLogMapper.save(orderSyncLog);
+                }
+            }
+        }else{
             orderSyncLogMapper.save(orderSyncLog);
         }
 
         if(type == 1){
             //刷新定会任务最新获取时间-小亚通订单生成之后还需要审核操作,所以中间会存在时间差导致订单拉取不过来,
-            // 因此时间不会及时刷新,考虑到系统等问题,因为时间调整每晚12点刷新拉取时间
+            // 因此时间不会及时刷新,考虑到系统等问题,因为时间调整7天前的时间
             Calendar endCreateTimeCalendar = Calendar.getInstance();
             endCreateTimeCalendar.setTime(orderSyncPlatform.getSyncOrderLastTime());
             endCreateTimeCalendar.add(Calendar.DATE, 7);//增加7天
@@ -236,7 +258,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                 newDateCalendar.set(Calendar.HOUR_OF_DAY,0);
                 newDateCalendar.set(Calendar.MINUTE,0);
                 newDateCalendar.set(Calendar.SECOND,0);
-                newDateCalendar.add(Calendar.DATE, -1);
+                newDateCalendar.add(Calendar.DATE, -7);
                 endCreateTime = newDateCalendar.getTime();
                 orderSyncPlatform.setSyncOrderLastTime(endCreateTime);
 
@@ -509,6 +531,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
      */
     @Override
     public boolean syncXYTOrderShip(Integer[] salesOrderIds) {
+        boolean flag = true;
         Integer successNum = 0,errorNum = 0;
         StringBuffer allSb = new StringBuffer();
         StringBuffer errorSb = new StringBuffer();
@@ -594,10 +617,12 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                     salesOrderService.update(shipSalesOrder);
                     successNum++;
                 }else{
+                    flag = false;
                     errorSb.append("发货失败交易号:" + salesOrder.getSalesDealCode() + ",失败原因:"+shipResultJson+";");
                     errorNum++;
                 }
             }catch (Exception e){
+                flag = false;
                 errorSb.append("发货失败交易号:" + salesOrder.getSalesDealCode() + ",失败原因:"+shipResultJson+";");
                 errorNum++;
                 e.printStackTrace();
@@ -623,7 +648,7 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
             }
             orderSyncLogMapper.save(orderSyncLog);
         }
-        return true;
+        return  flag;
     }
 
     @Override

+ 5 - 1
watero-rst-service/src/main/java/com/iamberry/rst/service/order/mapper/orderSyncLogMapper.xml

@@ -23,7 +23,7 @@
         t.sync_log_error_msg,
         t.sync_log_create_date
     </sql>
-    <select id="getOrderSyncLogList" resultMap="BaseResultMap" parameterType="OrderSyncLog" >
+    <select id="getSyncLogList" resultMap="BaseResultMap" parameterType="OrderSyncLog" >
         select
         <include refid="Base_List" />
         from tb_rst_order_sync_log t
@@ -41,6 +41,7 @@
                 AND t.sync_log_mode = #{syncLogMode}
             </if>
         </where>
+        ORDER BY t.sync_log_id DESC
     </select>
     <select id="getSyncLogLast" resultMap="BaseResultMap" parameterType="Integer" >
         select
@@ -48,7 +49,10 @@
         from tb_rst_order_sync_log t
         where
         t.sync_plat_id = #{syncPlatId}
+        AND t.sync_log_mode = 1
+        AND date_format(t.sync_log_create_date,'%Y-%m-%d') = date_format(now(),'%Y-%m-%d')
         ORDER BY t.sync_log_id DESC
+        LIMIT 1
     </select>
     <select id="getSyncLogById" resultMap="BaseResultMap" parameterType="OrderSyncLog" >
         select

+ 80 - 11
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminOrderPlatformController.java

@@ -1,18 +1,30 @@
 package com.iamberry.rst.controllers.order;
 
 
+import com.iamberry.rst.core.cm.SalesOrder;
+import com.iamberry.rst.core.order.OrderSyncLog;
+import com.iamberry.rst.core.page.PagedResult;
+import com.iamberry.rst.faces.cm.SalesOrderService;
 import com.iamberry.rst.faces.order.OrderSyncLogService;
 import com.iamberry.rst.faces.order.OrderSyncPlatformService;
+import com.iamberry.rst.util.GenerateKeyUtil;
+import com.iamberry.rst.utils.StitchAttrUtil;
 import com.iamberry.wechat.tools.ResponseJson;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 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.Calendar;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 /**
  * 同步订单
@@ -27,6 +39,34 @@ public class AdminOrderPlatformController {
     private OrderSyncPlatformService orderSyncPlatformService;
     @Autowired
     private OrderSyncLogService orderSyncLogService;
+    @Autowired
+    private SalesOrderService salesOrderService;
+    @Autowired
+    private GenerateKeyUtil generateKeyUtil ;
+
+    /**
+     * 批次列表
+     * @param request
+     * @return
+     */
+    @RequiresPermissions("salesOrder:sync:salesOrder")
+    @RequestMapping("/sync_list")
+    public ModelAndView syncList(HttpServletRequest request, OrderSyncLog orderSyncLog,
+                                         @RequestParam(value = "pageSize", defaultValue = "10", required = false) Integer pageSize,
+                                         @RequestParam(value = "pageNO", defaultValue = "1", required = false) Integer pageNO,
+                                         @RequestParam(value = "totalNum", defaultValue = "0", required = false) Integer totalNum) {
+        ModelAndView mv = new ModelAndView("order/sync/order_sync");
+
+        PagedResult<OrderSyncLog> pagedResult = orderSyncLogService.listOrderSyncLogPage(pageNO, pageSize, orderSyncLog, totalNum == 0);
+        if (totalNum != 0) {
+            pagedResult.setTotal(totalNum);
+        }
+
+        StitchAttrUtil.getSa()
+                .addDatePro("yyyy-MM-dd HH:mm:ss", "startDate", "endDate","syncLogCreateDate")
+                .setModelAndView(orderSyncLog, mv, "/admin/sync_order/sync/sync_list", pagedResult);
+        return mv;
+    }
 
     @ResponseBody
     @RequestMapping("/pull")
@@ -55,20 +95,49 @@ public class AdminOrderPlatformController {
 
     @ResponseBody
     @RequestMapping("/send")
-    public ResponseJson sendOrder(HttpServletRequest request,Integer orderId){
+    public ResponseJson sendOrder(HttpServletRequest request,String salesExOrderId){
         ResponseJson rj = ResponseJson.getFAILURE();
-        Integer[] orderIds = new Integer[1];
-        orderIds[0] = orderId;
-        boolean flag = orderSyncLogService.syncXYTOrderShipInspec(orderId);
-        if(flag){
-            boolean shipFlag = orderSyncLogService.syncXYTOrderShip(orderIds);
-            if(shipFlag){
-                rj = ResponseJson.getSUCCESS();
-                rj.setResultMsg("上传单号成功");
-                return rj;
+        if(salesExOrderId == null || "".equals(salesExOrderId)){
+            rj.setResultMsg("请输入商家订单号");
+            return rj;
+        }
+
+        salesExOrderId = salesExOrderId.trim();
+
+        SalesOrder salesOrder = new SalesOrder();
+        salesOrder.setSalesExOrderId(salesExOrderId);
+        List<SalesOrder> salesOrderList = salesOrderService.salesOrderListAndItem(salesOrder);
+
+        if(salesOrderList != null && salesOrderList.size() > 0){
+            Set<Integer> set = new HashSet<>();
+            for (SalesOrder so:salesOrderList){
+                if(!generateKeyUtil.isXytBatchId(so.getSalesBatchId())){    //不是小亚通第三方的订单,直接通过,不走该程序
+                    rj.setResultMsg("发货失败,该订单不是小亚通的订单");
+                    return rj;
+                }
+                boolean flag = orderSyncLogService.syncXYTOrderShipInspec(so.getSalesId());
+                if(flag){
+                    set.add(so.getSalesId());
+                }
+            }
+            if(set.size() > 0){
+                Integer[] orderIds = set.toArray(new Integer[]{});
+                boolean shipFlag = orderSyncLogService.syncXYTOrderShip(orderIds);
+                if(shipFlag){
+                    rj = ResponseJson.getSUCCESS();
+                    rj.setResultMsg("上传单号成功");
+                    return rj;
+                }else{
+                    rj.setResultMsg("发货失败,请检查状态重试");
+                    return rj;
+                }
+            }else{
+                rj.setResultMsg("改订单检测发货未通过,请在RST和小亚通系统核对该订单状态");
+                return  rj;
             }
+        }else{
+            rj.setResultMsg("未查询到订单");
         }
-        rj.setResultMsg("上传订单失败");
         return  rj;
     }
 

+ 163 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/order/sync/order_sync.ftl

@@ -0,0 +1,163 @@
+<!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>订单同步</title>
+    <style>
+        html{-webkit-text-size-adjust:none;}
+        *{padding: 0;margin: 0;}
+        .my-input{border: 1px solid rgba(0,0,0,.1);padding: 1px 5px;height: 32px;margin-right: 10px;}
+        /*.my-input::-webkit-input-placeholder,.my-select{color: #dcdcdc;}*/
+        .my-select{border: 1px solid rgba(0,0,0,.1);padding:6px 50px 6px 15px;height: 34px; -webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/select-11.png) right center no-repeat;background-size:auto 100%;}
+        .my-btn-search{border: 1px solid #50a2ea;padding: 1px 25px;height: 32px;background-color: #fff;color: #50a2ea;}
+        .barcodeImg{margin:10px 0px}
+        .table-bg thead th{background-color: #e2f6ff;}
+        input[type=radio]{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-1.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+        input[type=radio]:checked{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-2.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+    </style>
+</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 radius r" href="javascript:location.replace(location.href);" title="刷新" ><i class="Hui-iconfont">&#xe68f;</i></a>
+</nav>
+<div class="page-container">
+    <div class="text-c">
+        <form action="${path}/admin/order_batch/batch_list" method="post">
+            <button type="button" class="my-btn-search" onclick="sync_order_fun()" >拉取全部订单</button>
+
+
+            <input type="text" class="my-input trim_input" id="salesExOrderId" style="margin-top: -3px;width:118px;margin-left: 50px;height: 32px;padding: 0px 0px 0px 2px;" value="" placeholder="商城订单编号" />
+
+            <button type="button" class="my-btn-search" onclick="sync_order_send()" >发货</button>
+        </form>
+    </div>
+
+    <div class="mt-20">
+        <table class="table table-border table-bordered table-bg table-hover table-sort">
+        <thead>
+        <tr class="text-c">
+            <th width="40">同步类型</th>
+            <th width="30">总数量</th>
+            <th width="30">失败数量</th>
+            <th width="100">备注</th>
+            <th width="200">错误信息</th>
+            <th width="50">同步时间</th>
+        </tr>
+        </thead>
+        <tbody>
+            <#if page.dataList?? &&  (page.dataList?size > 0) >
+                    <#list page.dataList as orderSyncLog>
+                        <tr class="text-c">
+                            <#--<td>${orderSyncLog.syncPlatName!''}</td>-->
+                            <td>
+                                <#if orderSyncLog.syncLogMode == 1>
+                                    定时同步
+                                <#elseif orderSyncLog.syncLogMode == 2>
+                                    手动同步
+                                <#elseif orderSyncLog.syncLogMode == 3>
+                                    发货
+                                </#if>
+                            </td>
+                            <td>${orderSyncLog.syncLogRecentNum!''}</td>
+                            <td>${orderSyncLog.syncLogErrorNum!''}</td>
+                            <td>${orderSyncLog.syncLogMsg!''}</td>
+                            <td>${orderSyncLog.syncLogErrorMsg!''}</td>
+                            <td>${(orderSyncLog.syncLogCreateDate?string("yyyy-MM-dd HH:mm:ss"))!''}</td>
+                        </tr>
+                    </#list>
+            <#else>
+                <tr><td colspan="9" class="td-manage text-c" >暂时没有日志,请添加!</td></tr>
+            </#if>
+        </tbody>
+    </table>
+    </div>
+</div>
+
+<tfoot>
+<#include "/base/page_util.ftl">
+</tfoot>
+<script>
+    $(function () {
+    });
+
+    /**
+     * 拉取订单
+     */
+    function sync_order_fun(){
+        var loadIndex = layer.load(1, {
+            shade: [0.5,'#fff'] //0.1透明度的白色背景
+        });
+        $.ajax('${path}/admin/sync_order/pull?dates=' + new Date().getTime(), {
+            data: {},
+            dataType: 'json',
+            type: 'post',
+            timeout: 15000,
+            success: function(dt) {
+                layer.msg("拉取成功", {icon: 1, time: 3000});
+                if(loadIndex != 0 ){
+                    layer.close(loadIndex);
+                }
+                location.reload();
+            },
+            error: function(xhr, type, errorThrown) {
+                layer.msg("拉取失败,请重试!", {icon: 5, time: 3000});
+                if(loadIndex != 0 ){
+                    layer.close(loadIndex);
+                }
+            }
+        });
+    }
+
+    /**
+     * 订单发货
+     */
+    function sync_order_send(){
+        var salesExOrderId = $("#salesExOrderId").val();
+        if(!isEmpty(salesExOrderId)){
+            layer.msg("请输入商城订单编号", {icon: 2, time: 3000});
+            return false;
+        }
+        var loadIndex = layer.load(1, {
+            shade: [0.5,'#fff'] //0.1透明度的白色背景
+        });
+        $.ajax('${path}/admin/sync_order/send?dates=' + new Date().getTime(), {
+            data: {
+                salesExOrderId:salesExOrderId
+            },
+            dataType: 'json',
+            type: 'post',
+            timeout: 15000,
+            success: function(dt) {
+                if(loadIndex != 0 ){
+                    layer.close(loadIndex);
+                }
+                var index = layer.alert(dt.resultMsg, function (index) {
+                    if (dt.returnCode == 200) {
+                        layer.close(index);
+                        location.reload();
+                    }else {
+                        layer.close(index);
+                        location.reload();
+                    }
+                });
+            },
+            error: function(xhr, type, errorThrown) {
+                layer.msg("发货失败,请重试!", {icon: 5, time: 3000});
+                if(loadIndex != 0 ){
+                    layer.close(loadIndex);
+                }
+            }
+        });
+    }
+</script>
+</body>
+</html>