Esempio n. 1
0
        } // int DoRunL(CWmsOrdersSync_EntryOrderImpl)

        /// <summary>
        /// 同步当前主入库订单。若执行成功则返回TError.RunGood,否则返回其他
        /// </summary>
        /// <param name="pImpl">implementor of CWmsOrdersSync_EntryOrder</param>
        /// <returns></returns>
        int DoSyncSingleOrder(CWmsOrdersSync_StockoutOrderImpl pImpl)
        {
            if (null == pImpl)
            {
                C_WMS.Data.Utility.MyLog.Instance.Error("CWmsOrdersSync_StockoutOrder.在{0}中,输入参数pHandler为空", MethodBase.GetCurrentMethod().Name);
                return(TError.Post_ParamError.Int());
            }

            int err = TError.RunGood.Int();
            HttpRespXml_StockoutOrderCreate respObj = null;
            HttpReqXml_StockoutOrderCreate  reqObj  = pImpl.GetCurrentStockoutOrder_ReqXmlObj();

            #region 根据当前待处理的主入库订单创建RequestXMLObject
            if (null == reqObj)
            {
                C_WMS.Data.Utility.MyLog.Instance.Error("CWmsOrdersSync_StockoutOrder.在{0}中,根据当前待处理的主出库订单[{1}]创建RequestXMLObject失败。", MethodBase.GetCurrentMethod().Name, pImpl.CurrentOrder?.GetId());
                return(err = TError.Pro_HaveNoData.Int());
            }
            #endregion

            #region 执行同步 -and- handle response
            if (null != (respObj = mDlgtDoHttpTransaction.Invoke(reqObj)) && respObj.IsSuccess())
            {
                _currentOrderSyncOk = true; // 更新商城中该单据isToWms为‘同步成功’和Dict709中该行的状态为'同步成功'
            } // if ( null  == respObj && respObj.IsSuccess())
            else
            {
                C_WMS.Data.Utility.MyLog.Instance.Error("CWmsOrdersSync_StockoutOrder.在{0}中,同步单据{3}的HTTP通讯失败.\r\nREQUEST={1}\r\nRESPONSE={2}", MethodBase.GetCurrentMethod().Name, reqObj, respObj, pImpl.CurrentOrder?.GetId());
            } // else
            #endregion
            return(err);
        }
Esempio n. 2
0
        /// <summary>
        /// 执行处理逻辑。若仍要执行下一步一步操作,则应返回TError.RunGood;否则返回其他值
        /// </summary>
        /// <param name="pImpl">implementor of CWmsOrdersSync_EntryOrder</param>
        /// <returns>若仍要执行下一步一步操作,则应返回TError.RunGood;否则返回其他值</returns>
        public int DoRunL(CWmsOrdersSync_StockoutOrderImpl pImpl)
        {
            if (null == pImpl)
            {
                C_WMS.Data.Utility.MyLog.Instance.Error("CWmsOrdersSync_StockoutOrder.在{0}中,输入参数pHandler为空", MethodBase.GetCurrentMethod().Name);
                return(TError.Post_NoParam.Int());
            }

            // 仅当控制器为空闲(即EStopped)时才能被激活
            int err = TError.Post_NoChange.Int();

            switch (AsyncStatus)
            {
            case TAsyncStatus.EBegin:
            {
                _currentOrderSyncOk = false;
                err          = TError.RunGood.Int();
                mAsyncStatus = TAsyncStatus.EGetOrders;
                break;
            }

            case TAsyncStatus.EGetOrders:
            {
                err = pImpl.DoGetVStockoutOrders();
                C_WMS.Data.Utility.MyLog.Instance.Debug("{0}({1}), err={2}", MethodBase.GetCurrentMethod().Name, AsyncStatus, err);
                if (TError.RunGood.Int() == err)
                {
                    pImpl.CurrentStockoutOrder_SeekToFront();
                    mAsyncStatus = TAsyncStatus.ESyncOrderResetSyncFlag;
                }
                else
                {
                    C_WMS.Data.Utility.MyLog.Instance.Error("获取所有待同步的主入库订单失败, err={0}", err);
                    mAsyncStatus = TAsyncStatus.EFailed;
                }
                break;
            }

            case TAsyncStatus.ESyncOrderHttpTrans:
            {
                pImpl.ReloadSubOrders();            // 重新加载一次子出库订单,因为在同步前的重置flag操作结束后,子出库订单列表就被清空了
                if (TError.RunGood.Int() == (err = DoSyncSingleOrder(pImpl)))
                {
                    mAsyncStatus = TAsyncStatus.ESyncOrderUpdateSyncFlag;
                }         // 当前单据同步成功且还有待同步的单据,将待同步的单据置为下一条
                else if (TError.Pro_HaveNoData.Int() == err)
                {
                    mAsyncStatus = TAsyncStatus.ESyncOrderUpdateSyncFlag;
                }          // 没有待同步的单据(即所有单据都同步完成)
                else
                {
                    C_WMS.Data.Utility.MyLog.Instance.Debug("CWmsOrdersSync_StockoutOrder.{0}({ESyncOrderHttpTrans}), err={1}", MethodBase.GetCurrentMethod().Name, err);
                    mAsyncStatus = TAsyncStatus.EFailed;
                }

                break;
            }

            case TAsyncStatus.ESyncOrderResetSyncFlag:
            {
                //C_WMS.Data.Utility.MyLog.Instance.Debug("CWmsOrdersSync_StockoutOrder.{0}({1}), CurrentOrder={2}", MethodBase.GetCurrentMethod().Name, AsyncStatus, pImpl.CurrentOrder?.GetId());

                if (null == pImpl.CurrentOrder)
                {
                    mAsyncStatus = TAsyncStatus.ESuccess;
                }
                else
                {
                    err = pImpl.UpdateCurrentStockoutOrderSyncStatus(TDict285_Values.EUnknown, true);
                    if (TError.RunGood.Int() == err)
                    {
                        if (-1 == pImpl.CurrentSubStockoutOrder_MoveNext())
                        {
                            mAsyncStatus = TAsyncStatus.ESyncOrderHttpTrans;
                        }     // 没有待更新结果的子出库订单了,即当前主出库单在商城和709中的同步状态更新完成
                    }         // 更新主出库单及其子出库单的状态成功完成
                    else
                    {
                        C_WMS.Data.Utility.MyLog.Instance.Error("CWmsOrdersSync_StockoutOrder.在{0}中,重置主出库单{1}和子出库单{2}的同步状态失败,结束同步操作", pImpl.CurrentOrder?.GetId(), pImpl.CurrentSubOrder?.GetId());
                        mAsyncStatus = TAsyncStatus.EFailed;
                    }         // 更新主出库单及其子出库单的状态失败,结束本次批量同步
                }

                //C_WMS.Data.Utility.MyLog.Instance.Debug("CWmsOrdersSync_StockoutOrder.{0}(ESyncOrderResetSyncFlag), err={1}, CurrentOrder={2}", MethodBase.GetCurrentMethod().Name, err, pImpl.CurrentOrder?.GetId());
                break;
            }

            case TAsyncStatus.ESyncOrderUpdateSyncFlag:
            {
                //C_WMS.Data.Utility.MyLog.Instance.Debug("CWmsOrdersSync_StockoutOrder.{0}({1})开始, CurrentOrder={2}, CurrentSubOrder={3}", MethodBase.GetCurrentMethod().Name, AsyncStatus, pImpl.CurrentOrder?.GetId(), pImpl.CurrentSubOrder?.GetId());

                if (TError.RunGood.Int() == (err = pImpl.UpdateCurrentStockoutOrderSyncStatus((_currentOrderSyncOk) ? TDict285_Values.EDeleted : TDict285_Values.EUnknown, false)))
                {
                    if (-1 == pImpl.CurrentSubStockoutOrder_MoveNext())
                    {
                        pImpl.CurrentStockoutOrder_MoveNext();
                        _currentOrderSyncOk = false;
                        mAsyncStatus        = TAsyncStatus.ESyncOrderResetSyncFlag; // 开始下一个主出库单的同步
                    }                                                               // 没有待更新结果的子出库订单了
                }                                                                   // 更新主出库单及其子出库单的状态成功完成
                else
                {
                    C_WMS.Data.Utility.MyLog.Instance.Error("CWmsOrdersSync_StockoutOrder.在{0}中,重置主出库单{1}和子出库单{2}的同步状态失败,结束同步操作", pImpl.CurrentOrder?.GetId(), pImpl.CurrentSubOrder?.GetId());
                    mAsyncStatus = TAsyncStatus.EFailed;
                }        // 更新主出库单及其子出库单的状态失败,结束本次批量同步

                //C_WMS.Data.Utility.MyLog.Instance.Debug("CWmsOrdersSync_StockoutOrder.{0}(ESyncOrderUpdateSyncFlag)结束, err={1}, CurrentOrder={2}, CurrentSubOrder={3}", MethodBase.GetCurrentMethod().Name, err, pImpl.CurrentOrder?.GetId(), pImpl.CurrentSubOrder?.GetId());
                break;
            }

            case TAsyncStatus.ESuccess:
            case TAsyncStatus.EFailed:
            {
                mAsyncStatus = TAsyncStatus.EStopped;
                err          = TError.RunGood.Int();
                break;
            }

            case TAsyncStatus.EStopped:
            {
                pImpl.Dispose();
                break;
            }
            } // switch (AsyncStatus)

            return(err);
        } // int DoRunL(CWmsOrdersSync_EntryOrderImpl)