public async Task Initialzie(DateTime date, string userName)
        {
            var dateStr = date.ToString("yyyy-MM-dd");
            var item    = await _collectiveDayRepository.GetSingleAsync(x => x.Date == dateStr, x => x.SubscriptionProductSnapshots);

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

            var productForSubscriptions = await _productForSubscriptionRepository.All.Where(x => !x.Deleted).ToListAsync();

            if (item != null)
            {
                if (item.Status >= SubscriptionDayStatus.已初始化)
                {
                    throw new Exception("该专送日已经初始化, 操作失败");
                }
                item.Status = SubscriptionDayStatus.已初始化;
                item.SetModification(userName, "初始化");
                InitializeSubscriptionProducts(userName, item, productForSubscriptions, products);
                _collectiveDayRepository.Update(item);
            }
            else
            {
                item = new SubscriptionDay
                {
                    Date   = dateStr,
                    Status = SubscriptionDayStatus.已初始化
                };
                item.SetCreation(userName, "初始化");
                InitializeSubscriptionProducts(userName, item, productForSubscriptions, products);
                _collectiveDayRepository.Add(item);
            }
        }
        private void InitializeSubscriptionProducts(string userName, SubscriptionDay item, List <ProductForSubscription> productForSubscriptions, List <Product> products)
        {
            var dbDayProducts = item.SubscriptionProductSnapshots;

            foreach (var dayProduct in dbDayProducts)
            {
                var productForSubscription =
                    productForSubscriptions.SingleOrDefault(x => x.Id == dayProduct.ProductForSubscriptionId);
                if (productForSubscription == null)
                {
                    throw new Exception($"未能找到商超产品: {dayProduct.Name}");
                }
                var product = products.SingleOrDefault(x => x.Id == productForSubscription.ProductId);
                if (product == null)
                {
                    throw new Exception($"未能找到产品: {dayProduct.Name}");
                }
                SetSubscriptionProductSnapshot(dayProduct, productForSubscription, product);
                dayProduct.SetModification(userName, "重新初始化");
                _collectiveProductSnapshotRepository.Update(dayProduct);
            }
            var dayProductIds        = dbDayProducts.Select(x => x.ProductForSubscriptionId).ToList();
            var collectiveProductIds = productForSubscriptions.Select(x => x.Id).ToList();
            var toAddIds             = collectiveProductIds.Except(dayProductIds).ToList();
            var toAdd = productForSubscriptions.Where(x => toAddIds.Contains(x.Id)).ToList();

            foreach (var pr in toAdd)
            {
                var dayProduct = new SubscriptionProductSnapshot
                {
                    ProductForSubscriptionId = pr.Id,
                };
                dayProduct.SetCreation(userName, "初始化");
                var product = products.SingleOrDefault(x => x.Id == pr.ProductId);
                if (product == null)
                {
                    throw new Exception($"未能找到产品, 专送产品ID: {pr.Id}");
                }
                SetSubscriptionProductSnapshot(dayProduct, pr, product);
                item.SubscriptionProductSnapshots.Add(dayProduct);
            }
        }