예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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
        }
예제 #3
0
        /// <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);
            }
        }
예제 #4
0
        /// <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());
            }
        }
예제 #5
0
 /// <summary>
 /// construct by object of CWmsEntryOrder
 /// </summary>
 /// <param name="pOrder">source order.</param>
 public HttpReqXml_EntryOrderCreate(CWmsEntryOrder pOrder)
 {
     throw new NotImplementedException();
 }