Пример #1
0
        public async Task Initialzie(DateTime date, string userName)
        {
            var dateStr = date.ToString("yyyy-MM-dd");
            var item    = await _retailDayRepository.GetSingleAsync(x => x.Date == dateStr, x => x.RetailProductSnapshots);

            var products = await _productRepository.All.Where(x => !x.Deleted).ToListAsync();

            var productForRetails = await _productForRetailRepository.All.Where(x => !x.Deleted).ToListAsync();

            if (item != null)
            {
                if (item.Initialized)
                {
                    throw new Exception("该零售日已经初始化, 操作失败");
                }
                item.Initialized = true;
                item.SetModification(userName, "初始化");
                InitializeRetailProducts(userName, item, productForRetails, products);
                _retailDayRepository.Update(item);
            }
            else
            {
                item = new RetailDay
                {
                    Date        = dateStr,
                    Initialized = true
                };
                item.SetCreation(userName, "初始化");
                InitializeRetailProducts(userName, item, productForRetails, products);
                _retailDayRepository.Add(item);
            }
        }
Пример #2
0
        private void InitializeRetailProducts(string userName, RetailDay item, List <ProductForRetail> productForRetails, List <Product> products)
        {
            var dbDayProducts = item.RetailProductSnapshots;

            foreach (var dayProduct in dbDayProducts)
            {
                var productForRetail =
                    productForRetails.SingleOrDefault(x => x.Id == dayProduct.ProductForRetailId);
                if (productForRetail == null)
                {
                    throw new Exception($"未能找到零售产品: {dayProduct.Name}");
                }
                var product = products.SingleOrDefault(x => x.Id == productForRetail.ProductId);
                if (product == null)
                {
                    throw new Exception($"未能找到产品: {dayProduct.Name}");
                }
                SetRetailProductSnapshot(dayProduct, productForRetail, product);
                dayProduct.SetModification(userName, "重新初始化");
                _retailProductSnapshotRepository.Update(dayProduct);
            }
            var dayProductIds    = dbDayProducts.Select(x => x.ProductForRetailId).ToList();
            var retailProductIds = productForRetails.Select(x => x.Id).ToList();
            var toAddIds         = retailProductIds.Except(dayProductIds).ToList();
            var toAdd            = productForRetails.Where(x => toAddIds.Contains(x.Id)).ToList();

            foreach (var pr in toAdd)
            {
                var dayProduct = new RetailProductSnapshot
                {
                    ProductForRetailId = pr.Id,
                };
                dayProduct.SetCreation(userName, "初始化");
                var product = products.SingleOrDefault(x => x.Id == pr.ProductId);
                if (product == null)
                {
                    throw new Exception($"未能找到产品, 零售产品ID: {pr.Id}");
                }
                SetRetailProductSnapshot(dayProduct, pr, product);
                item.RetailProductSnapshots.Add(dayProduct);
            }
        }