} // 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); }
/// <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)