Example #1
0
        public OPC_SKU Sync(int productId, int colorValueId, int sizeValueId)
        {
            using (var db = new YintaiHZhouContext())
            {
                var skuExt = db.OPC_SKU.FirstOrDefault(p => p.ColorValueId == colorValueId &&
                                                       p.SizeValueId == sizeValueId &&
                                                       p.ProductId == productId);
                // 如果已经存在SKU记录直接返回
                if (skuExt != null)
                {
                    return(skuExt);
                }

                // 创建新的Sku并返回
                var newSku = new OPC_SKU()
                {
                    ProductId    = productId,
                    ColorValueId = colorValueId,
                    SizeValueId  = sizeValueId
                };

                db.OPC_SKU.Add(newSku);
                db.SaveChanges();

                return(newSku);
            }
        }
        private static void Process(OPC_SKU sku)
        {
            var list = new List <IStockAttregateProcessor>();

            list.Add(new Set4SaleProcessor());
            list.Add(new AggregateToInveontoryProcessor());
            var handler = new DefaultStockHandler(list);
            IStockAggregator aggregator = new DefaultStockAggregator();

            handler.Process(aggregator.Aggregate(QueryStocks(sku.Id)));
        }
        public Inventory Sync(OPC_SKU sku)
        {
            using (var db = new YintaiHZhouContext())
            {
                var stocks = db.OPC_Stock.Where(x => x.SkuId == sku.Id);
                if (!stocks.Any())
                {
                    return(null);
                }

                int amount = 0;

                if (stocks.Any(x => x.Count > 0))
                {
                    var price = stocks.Where(x => x.Count >= 0).Min(x => x.Price);
                    var cnt   = stocks.Where(x => x.Price == price).Sum(x => x.Count);
                    if (cnt.HasValue)
                    {
                        amount = cnt.Value;
                    }
                }

                var inventory = db.Inventories.FirstOrDefault(x => x.ProductId == sku.ProductId && x.PColorId == sku.ColorValueId && x.PSizeId == sku.SizeValueId);
                if (inventory == null)
                {
                    inventory = db.Inventories.Add(new Inventory()
                    {
                        ProductId          = sku.ProductId,
                        PColorId           = sku.ColorValueId,
                        PSizeId            = sku.SizeValueId,
                        UpdateDate         = DateTime.Now,
                        UpdateUser         = SystemDefine.SystemUser,
                        ChannelInventoryId = 0,
                        Amount             = amount
                    });
                }
                else
                {
                    inventory.UpdateDate = DateTime.Now;
                    inventory.UpdateUser = SystemDefine.SystemUser;
                    inventory.Amount     = amount;
                }
                db.SaveChanges();
                return(inventory);
            }
        }