Beispiel #1
0
        public void DoProduct(Guid productId, Guid customerId, Guid slId, int stepCode, double qty, double unQty, double freezeQty)
        {
            var spBll  = new StockProduct();
            var spInfo = spBll.GetModel(productId, customerId);

            if (spInfo == null)
            {
                throw new ArgumentException(MC.M_StockProductInvalidError);
            }
            var pslaList = JsonConvert.DeserializeObject <List <ProductStockLocationAttrInfo> >(spInfo.StockLocations);
            var currTime = DateTime.Now;

            if (stepCode == (int)EnumData.EnumStep.发货)
            {
                #region 发货

                var pslItem = pslaList.FirstOrDefault(m => m.StockLocationId.Equals(slId));
                if (pslItem == null)
                {
                    throw new ArgumentException(MC.GetString(MC.Params_Data_NotExist, "库位ID为“" + slId + "”"));
                }
                pslItem.FreezeQty += freezeQty;
                pslItem.Qty       -= freezeQty;
                if (pslItem.Qty == 0 && pslItem.FreezeQty == 0)
                {
                    pslaList.Remove(pslItem);
                }
                spInfo.Qty       -= freezeQty;
                spInfo.FreezeQty += freezeQty;

                #endregion
            }
            else if (stepCode == (int)EnumData.EnumStep.架)
            {
                #region  架

                var pslItem = pslaList.FirstOrDefault(m => m.StockLocationId.Equals(slId));
                if (pslItem == null)
                {
                    var slBll  = new StockLocation();
                    var slInfo = slBll.GetModel(slId);
                    if (slInfo == null)
                    {
                        throw new ArgumentException(MC.GetString(MC.Params_Data_NotExist, "库位ID为“" + slId + "”"));
                    }
                    pslaList.Add(new ProductStockLocationAttrInfo(slId, slInfo.Code, slInfo.Named, qty, 0, currTime));
                }
                else
                {
                    pslItem.Qty += qty;
                    if (pslItem.Qty == 0 && pslItem.FreezeQty == 0)
                    {
                        pslaList.Remove(pslItem);
                    }
                }
                spInfo.Qty   += qty;
                spInfo.UnQty -= qty;
                if (spInfo.UnQty < 0)
                {
                    throw new ArgumentException(MC.GetString(MC.Request_InvalidQty, qty.ToString()));
                }

                #endregion
            }
            spInfo.StockLocations = JsonConvert.SerializeObject(pslaList);
            spBll.Update(spInfo);
        }
Beispiel #2
0
        public void DoShelfMissionProduct(string itemAppend)
        {
            var items          = itemAppend.Split(new char[] { '$' }, StringSplitOptions.RemoveEmptyEntries);
            var shelfMissionId = Guid.Parse(items[0]);
            var orderId        = Guid.Parse(items[1]);
            var productId      = Guid.Parse(items[2]);

            var smBll  = new ShelfMission();
            var smInfo = smBll.GetModel(shelfMissionId);

            if (smInfo == null)
            {
                throw new ArgumentException(MC.GetString(MC.Params_Data_NotExist, shelfMissionId.ToString()));
            }

            var oBll      = new OrderReceipt();
            var orderInfo = oBll.GetModel(orderId);

            if (orderInfo == null)
            {
                throw new ArgumentException(MC.GetString(MC.Params_Data_NotExist, orderId.ToString()));
            }

            var pBll        = new Product();
            var productInfo = pBll.GetModel(productId);
            var minVolume   = productInfo.OutPackVolume == 0 ? 1 : productInfo.OutPackVolume;

            var slItems  = items[3].Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
            var slBll    = new StockLocation();
            var pslaList = new List <ProductStockLocationAttrInfo>();
            var dicSl    = new Dictionary <Guid, float>();
            var totalQty = 0f;
            var currTime = DateTime.Now;

            foreach (var item in slItems)
            {
                var subItems = item.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                var slId     = Guid.Parse(subItems[0]);
                var qty      = float.Parse(subItems[1]);

                var slInfo = slBll.GetModel(slId);
                if (slInfo == null)
                {
                    throw new ArgumentException(MC.GetString(MC.Params_Data_NotExist, "库位ID为" + slId + ""));
                }
                pslaList.Add(new ProductStockLocationAttrInfo(slId, slInfo.Code, slInfo.Named, qty, 0, currTime));
                dicSl.Add(slId, qty);
                totalQty += qty;
            }

            var smpBll  = new ShelfMissionProduct();
            var smpInfo = smpBll.GetModel(shelfMissionId, orderId, productId);

            if (smpInfo == null)
            {
                throw new ArgumentException(MC.Data_NotExist);
            }
            smpInfo.Qty            += totalQty;
            smpInfo.StockLocations  = JsonConvert.SerializeObject(pslaList);
            smpInfo.LastUpdatedDate = currTime;
            smpBll.Update(smpInfo);

            smBll.SetTotalProduct(shelfMissionId.ToString());

            #region 库存库位货品

            var spBll = new StockProduct();
            spBll.DoProduct(productId, orderInfo.CustomerId, (int)EnumData.EnumStep.架, dicSl);

            #endregion
        }
Beispiel #3
0
        public void DoProduct(Guid productId, Guid customerId, Guid slId, bool isIncrease, double qty, double unQty, double freezeQty, int stepCode, string status)
        {
            var spInfo        = dal.GetModel(productId, customerId);
            var sStepCode     = Common.GetStepCode(spInfo == null ? null : spInfo.StepCode, stepCode.ToString(), false);
            var sLastStepName = Enum.GetName(typeof(EnumData.EnumStep), stepCode);
            var currQty       = 0d;
            var currFreezeQty = 0d;

            if (!isIncrease)
            {
                #region 对库存货物“减”处理

                if (spInfo != null)
                {
                    if (unQty > 0)
                    {
                        currQty      += unQty;
                        spInfo.UnQty -= unQty;
                        if (spInfo.UnQty < 0)
                        {
                            throw new ArgumentException(MC.M_QtyInvalidError);
                        }
                    }
                    var pslaList = JsonConvert.DeserializeObject <List <ProductStockLocationAttrInfo> >(spInfo.StockLocations);
                    var pslaInfo = pslaList.FirstOrDefault(m => m.StockLocationId.Equals(slId));
                    if (pslaInfo != null)
                    {
                        pslaInfo.Qty       -= currQty;
                        pslaInfo.FreezeQty -= currFreezeQty;
                    }
                    spInfo.StockLocations = JsonConvert.SerializeObject(pslaList);

                    if (spInfo.StepCode == ((int)EnumData.EnumStep.收货).ToString() && spInfo.Qty == 0 && spInfo.UnQty == 0 && spInfo.FreezeQty == 0)
                    {
                        dal.Delete(productId, customerId);
                    }
                    else
                    {
                        dal.Update(spInfo);
                    }
                }

                #endregion
            }
            else
            {
                #region 对库存货物“增”处理

                if (spInfo != null)
                {
                    #region 已存在相应数据,则执行修改操作

                    if (unQty > 0)
                    {
                        spInfo.UnQty += unQty;
                        currQty      += unQty;
                    }
                    var pslaList = JsonConvert.DeserializeObject <List <ProductStockLocationAttrInfo> >(spInfo.StockLocations);
                    var pslaInfo = pslaList.FirstOrDefault(m => m.StockLocationId.Equals(slId));
                    if (pslaInfo != null)
                    {
                        pslaInfo.Qty += unQty;
                    }
                    else
                    {
                        var slBll  = new StockLocation();
                        var slInfo = slBll.GetModel(slId);
                        if (slInfo == null)
                        {
                            throw new ArgumentException(MC.GetString(MC.Params_Data_NotExist, slId.ToString()));
                        }
                        pslaList.Add(new ProductStockLocationAttrInfo(slId, slInfo.Code, slInfo.Named, currQty, currFreezeQty, DateTime.Now));
                    }
                    spInfo.StockLocations = JsonConvert.SerializeObject(pslaList);

                    dal.Update(spInfo);

                    #endregion
                }
                else
                {
                    #region 否则执行新增操作

                    if (unQty > 0)
                    {
                        currQty += unQty;
                    }
                    var slBll  = new StockLocation();
                    var slInfo = slBll.GetModel(slId);
                    if (slInfo == null)
                    {
                        throw new ArgumentException(MC.GetString(MC.Params_Data_NotExist, slId.ToString()));
                    }

                    var pslaList = new List <ProductStockLocationAttrInfo>();
                    pslaList.Add(new ProductStockLocationAttrInfo(slId, slInfo.Code, slInfo.Named, currQty, currFreezeQty, DateTime.Now));

                    spInfo = new StockProductInfo(productId, customerId, qty, unQty, freezeQty, sStepCode, sLastStepName, status, JsonConvert.SerializeObject(pslaList), "", DateTime.Now);
                    dal.Insert(spInfo);

                    #endregion
                }

                #endregion
            }
        }
Beispiel #4
0
        public void DoProduct(Guid slId, Guid productId, bool isIncrease, double qty, double freezeQty)
        {
            var slpInfo = dal.GetModel(slId);

            if (!isIncrease)
            {
                #region 对库位货物“减”处理

                if (slpInfo != null)
                {
                    var slpaList = JsonConvert.DeserializeObject <List <StockLocationProductAttrInfo> >(slpInfo.ProductAttr);
                    var slpaInfo = slpaList.FirstOrDefault(m => m.ProductId.Equals(productId));
                    if (slpaInfo != null)
                    {
                        if (qty > 0)
                        {
                            slpaInfo.Qty -= qty;
                            if (slpaInfo.Qty < 0)
                            {
                                throw new ArgumentException(MC.GetString(MC.Request_InvalidQty, qty.ToString()));
                            }
                        }
                        if (freezeQty > 0)
                        {
                            slpaInfo.FreezeQty -= freezeQty;
                            if (slpaInfo.FreezeQty < 0)
                            {
                                throw new ArgumentException(MC.GetString(MC.Request_InvalidQty, freezeQty.ToString()));
                            }
                        }
                        if (slpaInfo.Qty <= 0 && slpaInfo.FreezeQty <= 0)
                        {
                            slpaList.Remove(slpaInfo);
                        }

                        slpInfo.ProductAttr = JsonConvert.SerializeObject(slpaList);
                        dal.Update(slpInfo);
                    }
                }

                #endregion
            }
            else
            {
                #region 对库位货物“增”处理

                if (slpInfo != null)
                {
                    #region 已存在相应数据,则执行修改操作

                    var slpaList = JsonConvert.DeserializeObject <List <StockLocationProductAttrInfo> >(slpInfo.ProductAttr);
                    var slpaInfo = slpaList.FirstOrDefault(m => m.ProductId.Equals(productId));
                    if (slpaInfo != null)
                    {
                        if (qty > 0)
                        {
                            slpaInfo.Qty += qty;
                        }
                        if (freezeQty > 0)
                        {
                            slpaInfo.FreezeQty += freezeQty;
                        }
                    }
                    else
                    {
                        slpaList.Add(new StockLocationProductAttrInfo(productId, qty, freezeQty, DateTime.Now));
                    }
                    slpInfo.ProductAttr = JsonConvert.SerializeObject(slpaList);
                    dal.Update(slpInfo);

                    #endregion
                }
                else
                {
                    #region 否则执行新增操作

                    var slpaList = new List <StockLocationProductAttrInfo>();
                    slpaList.Add(new StockLocationProductAttrInfo(productId, qty > 0 ? qty : 0, freezeQty > 0 ? freezeQty : 0, DateTime.Now));

                    var slBll     = new StockLocation();
                    var slInfo    = slBll.GetModel(slId);
                    var maxVolume = slInfo.Volume;
                    if (qty > 0)
                    {
                        maxVolume -= qty;
                    }
                    slpInfo = new StockLocationProductInfo(slId, JsonConvert.SerializeObject(slpaList), maxVolume);

                    dal.Insert(slpInfo);

                    #endregion
                }

                #endregion
            }
        }