/// <summary> /// 根据芒果商城的入库订单生成入库订单接口的HTTP request XML实例。 /// </summary> /// <param name="pEntryOrderId">芒果商城主入库订单ID</param> /// <param name="pPurchaseOrderId">芒果商城主采购订单ID</param> /// <returns>若成功则返回被创建的实例;否则返回null</returns> static public HttpReqXmlBase GetReqXmlBody_EntryOrderCreate(string pEntryOrderId, string pPurchaseOrderId) { HttpReqXml_EntryOrderCreate reqObj = null; List <HttpReqXml_EntryOrderCreate_Order> reqSubOrderList = new List <HttpReqXml_EntryOrderCreate_Order>(1); #region validate arguments if (string.IsNullOrEmpty(pEntryOrderId)) { C_WMS.Data.Utility.MyLog.Instance.Error("根据芒果商城的入库订单[{0}]生成入库订单接口的HTTP request XML实例结束,非法入参", pEntryOrderId); return(reqObj); } #endregion // get main entry order from ‘主入库单表’ CWmsEntryOrder cwmsOrder = GetCWmsEntryOrder(pEntryOrderId); if (null == cwmsOrder) { C_WMS.Data.Utility.MyLog.Instance.Error("根据入库订单[{0}]获取主入库订单实体失败.", pEntryOrderId); return(reqObj); } // TODO: 暂不处理采购订单,目前我们的一个入库单可能对应多个主采购单,但在仓储系统里一个入库单对应一个采购单(采购单编号可以传入空值) // sub entry order list reqObj = new HttpReqXml_EntryOrderCreate(); reqObj.entryOrder.CopyFrom(cwmsOrder); foreach (var cwmsSubOrder in cwmsOrder.SubOrders) { HttpReqXml_EntryOrderCreate_Order orderLine = new HttpReqXml_EntryOrderCreate_Order(); orderLine.CopyFrom(cwmsSubOrder.Value as CWmsSubEntryOder); reqSubOrderList.Add(orderLine); } reqObj.orders = reqSubOrderList.ToArray(); return(reqObj); }
/// <summary> /// 从CWmsEntryOrder实例中拷贝订单信息 /// </summary> /// <param name="pSrc">源订单实例</param> /// <returns>若成功则返回string.Empty; 否则返回错误描述</returns> public string CopyFrom(CWmsEntryOrder pSrc) { #if !C_WMS_V1 throw new NotFiniteNumberException(); #else if (null == pSrc) { C_WMS.Data.Utility.MyLog.Instance.Warning("Failed, {0}.{1}(pSrc={2})", MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, pSrc); return("非法参数,pSrc为null"); } try { // 获取承运商信息 var logistics = pSrc.Handler.GetLogistics(pSrc);// CWmsDataFactory.GetLogisticsBy(TCWmsOrderCategory.EEntryOrder, string.Empty); totalOrderLines = pSrc.SubOrders.Count.ToString(); entryOrderCode = pSrc.Id; ownerCode = CWmsDataFactory.GetOwner(pSrc.MangoOrder.WarehouseId.ToString()).Code; // TODO: 根据仓库Id判断货主 purchaseOrderCode = string.Empty; // 无法确定采购订单Id(多个主采购订单的子单据都可以加到一个主入库单中) warehouseCode = CWmsDataFactory.GetWarehouse(pSrc.MangoOrder.WarehouseId.ToString()).Name; // CWmsConsts.cStrDefaultWarehouseId; // TODO: get warehous ID orderCreateTime = pSrc.MangoOrder.AddTime.ToString(); orderType = TWmsOrderType.QTRK.ToString(); // TODO: need to identify purchase entry and no-purchase entry for inventory adding from nowhere operatorCode = MangoMis.Frame.Frame.CommonFrame.userid.ToString(); // 操作人Id为当前登录用户 operatorName = MangoMis.Frame.Frame.CommonFrame.userid.User().UserName2; // 获取人员名称 logisticsCode = logistics.WmsID; logisticsName = logistics.logisticsName; operateTime = DateTime.Now.ToString(); // 操作时间为当前时间 remark = pSrc.MangoOrder.Remark; return(string.Empty); } catch (Exception ex) { C_WMS.Data.Utility.MyLog.Instance.Warning(ex, "!!Exception in {0}.{1}({2})", MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, pSrc); return(ex.Message); } #endif }
/// <summary> /// 根据主入库订单ID获取主入库订单及其所有子订单的实例 /// </summary> /// <param name="pOrderId">芒果商城主入库单ID</param> /// <returns>CWmsEntryOrder对象</returns> static public CWmsEntryOrder GetCWmsEntryOrder(string pOrderId) { try { CWmsEntryOrder outObj = null; List <MangoSubEntryOrder> tmpList = null; string errMsg = string.Empty; // get mango order MangoEntryOrder mangoOrder = MangoFactory.GetMangoOrder(TCWmsOrderCategory.EEntryOrder, pOrderId) as MangoEntryOrder; // get sub orders errMsg = MangoFactory.GetVMangoSubEntryOrders(pOrderId, out tmpList); // create CWmsEntryOrder if successful if (null != mangoOrder && string.IsNullOrEmpty(errMsg) && 0 < tmpList?.Count) { outObj = new CWmsEntryOrder(); (outObj.MangoOrder as MangoEntryOrder).CopyFrom(mangoOrder); outObj.WmsOrder.SetWmsOrderType(TWmsOrderType.CGRK);// 默认采购入库 foreach (var s in tmpList) { int tmpPlanQty = -1; CWmsSubEntryOder cso = new CWmsSubEntryOder(); (cso.MangoOrder as MangoSubEntryOrder).CopyFrom(s); #region // 获取应收数量 if (0 >= s.ProductBuyId.Int()) { // 无采购入库Id,判断为芒果网络商品入库(补),实收数量即为应收数量 (cso.WmsOrderDetail as Wms.Data.WmsEntryOrderDetail).planQty = CWmsUtility.Decimal2Int(s.ProductInputCount.Decimal()); } else { // 有采购入库Id,取采购入库单中的应收数量 (cso.WmsOrderDetail as Wms.Data.WmsEntryOrderDetail).planQty = (TError.RunGood.Int() == MangoFactory.GetPlanQuantityByPid(s.ProductBuyId.ToString(), out tmpPlanQty)) ? tmpPlanQty : -1; } #endregion // 设置商品Id cso.Product.ItemCode = (string.IsNullOrEmpty(s.ProductGuiGeID.ToString()) || "0".Equals(s.ProductGuiGeID.ToString())) ? s.ProductId.ToString() : string.Format("{0}-{1}", s.ProductId, s.ProductGuiGeID); outObj.SubOrders.Add(s.ProductInputId.ToString(), cso); } // TODO: other operations } else { C_WMS.Data.Utility.MyLog.Instance.Error("根据主入库订单ID({0})获取主入库订单及其所有子订单的实例失败, mangoOrder=(1}, 子单据数量={2}", pOrderId, mangoOrder, tmpList?.Count); } return(outObj); } catch (Exception ex) { C_WMS.Data.Utility.MyLog.Instance.Error(ex, "根据主入库订单ID({0})获取主入库订单及其所有子订单的实例异常", pOrderId); return(null); } }
/// <summary> /// 根据过滤器获取满足条件的全部入库订单。若执行成功则返回获取的行数,否则返回小于或等于0 /// static public int GetVEntryOrders(List[CommonFilterModel], out List[CWmsEntryOrder], out string) /// </summary> /// <param name="pFilters">过滤器</param> /// <param name="pOutList">返回满足条件的全部入库订单,若执行失败则返回数量为0的列表实体</param> /// <param name="pErrMsg"></param> /// <returns></returns> static public int GetV_EntryOrders(List <CommonFilterModel> pFilters, out IEnumerable <CWmsEntryOrder> pOutList, out string pErrMsg) { int err = TError.WCF_RunError.Int(); List <MangoEntryOrder> orderList = null; try { if (0 >= (err = MangoFactory.GetVMangoEntryOrders(pFilters, out orderList, out pErrMsg)) || null == orderList) { pOutList = null; pErrMsg = string.Format("根据过滤器获取入库订单失败, err={0}, orderList={2}, errMsg={1}", err, pErrMsg, orderList); C_WMS.Data.Utility.MyLog.Instance.Warning(pErrMsg); return(err); } else { foreach (MangoEntryOrder smo in orderList) { #region 获取子入库单 List <MangoSubEntryOrder> subList = null; errMsg = MangoFactory.GetVMangoSubEntryOrders(smo?.ProductInputMainId.ToString(), out subList); if (null == subList || 0 == subList.Count) { C_WMS.Data.Utility.MyLog.Instance.Error("在{0}中,获取主入库单({1})的子入库单失败, err={2}, errMsg={3}", System.Reflection.MethodBase.GetCurrentMethod().Name, smo?.ProductInputMainId, err, errMsg); continue; } #endregion #region 处理子入库单 CWmsEntryOrder ceo = new CWmsEntryOrder(); foreach (var mso in subList) { if (null == mso) { C_WMS.Data.Utility.MyLog.Instance.Error("在{0}中,主入库单({1})中有空引用的子入库订单实体", System.Reflection.MethodBase.GetCurrentMethod().Name, smo?.ProductInputMainId); ceo.SubOrders.Clear(); break; } CWmsSubEntryOder cso = new CWmsSubEntryOder(); (cso.MangoOrder as MangoSubEntryOrder).CopyFrom(mso); ceo.SubOrders.Add(mso.ProductInputId.ToString(), cso); } #endregion if (0 < ceo.SubOrders.Count) { (ceo.MangoOrder as MangoEntryOrder).CopyFrom(smo); pOutList.Add(ceo); } else { C_WMS.Data.Utility.MyLog.Instance.Error("在{0}中,主入库单({1})没有获取到任何子入库订单实体", System.Reflection.MethodBase.GetCurrentMethod().Name, smo?.ProductInputMainId); } } // foreach (MangoEntryOrder smo in orderList) err = Enumerable.Count(pOutList); pErrMsg = (0 < err) ? string.Empty : string.Format(""); return(err); } } catch (Exception ex) { pOutList = null; pErrMsg = ex.Message; Data.Utility.MyLog.Instance.Error(ex, "根据过滤条件获取主入库订单发生异常"); return(TError.Post_NoChange.Int()); } }
/// <summary> /// construct by object of CWmsEntryOrder /// </summary> /// <param name="pOrder">source order.</param> public HttpReqXml_EntryOrderCreate(CWmsEntryOrder pOrder) { throw new NotImplementedException(); }