/// <summary>
        /// 添加购物车商品到当前会话
        /// 如果商品已在购物车则增加里面的数量
        /// </summary>
        /// <param name="productId">商品Id</param>
        /// <param name="type">购物车商品类型</param>
        /// <param name="parameters">匹配参数</param>
        public virtual void AddCartProduct(
            Guid productId, CartProductType type, ProductMatchParameters parameters)
        {
            // 检查是否允许非会员下单
            var configManager  = Application.Ioc.Resolve <GenericConfigManager>();
            var settings       = configManager.GetData <OrderSettings>();
            var sessionManager = Application.Ioc.Resolve <SessionManager>();
            var session        = sessionManager.GetSession();
            var user           = session.GetUser();

            if (user == null && !settings.AllowAnonymousVisitorCreateOrder)
            {
                throw new ForbiddenException(new T("Create order require user logged in"));
            }
            // 调用仓储添加购物车商品
            using (UnitOfWork.Scope()) {
                var repository = Application.Ioc.Resolve <CartProductRepository>();
                repository.AddOrIncrease(session, productId, type, parameters);
            }
            // 非会员登录时,在购物车商品添加成功后需要延长会话时间
            if (user == null)
            {
                session.SetExpiresAtLeast(SessionExpireDaysForNonUserPurcharse);
                sessionManager.SaveSession();
            }
            // 删除相关的缓存
            CartProductTotalCountCache.Remove(type);
        }
 /// <summary>
 /// 获取购物车商品的总数量(商品 * 订购数量)
 /// 结果会按当前用户Id和购物车商品类型缓存一定时间
 /// </summary>
 /// <param name="type">购物车商品类型</param>
 /// <returns></returns>
 public virtual long GetCartProductTotalCount(CartProductType type)
 {
     return(CartProductTotalCountCache.GetOrCreate(type, () => {
         var sessionManager = Application.Ioc.Resolve <SessionManager>();
         var session = sessionManager.GetSession();
         var repository = Application.Ioc.Resolve <CartProductRepository>();
         using (UnitOfWork.Scope()) {
             return repository
             .GetManyBySession(sessionManager.GetSession(), type)
             .Sum(p => (long?)p.Count);
         }
     }, CartProductTotalCountCacheTime) ?? 0);
 }
Example #3
0
        /// <summary>
        /// 获取购物车商品的总数量(商品 * 订购数量)
        /// 结果会按当前用户Id和购物车商品类型缓存一定时间
        /// </summary>
        /// <param name="type">购物车商品类型</param>
        /// <returns></returns>
        public virtual long GetCartProductTotalCount(CartProductType type)
        {
            // 从缓存获取
            var count = CartProductTotalCountCache.GetOrDefault(type);

            if (count != null)
            {
                return(count.Value);
            }
            // 从数据库获取
            var sessionManager = Application.Ioc.Resolve <SessionManager>();

            count = UnitOfWork.ReadRepository <CartProductRepository, long>(r =>
                                                                            r.GetManyBySession(sessionManager.GetSession(), type).Sum(p => (long?)p.Count) ?? 0);
            // 保存到缓存并返回
            CartProductTotalCountCache.Put(type, count, CartProductTotalCountCacheTime);
            return(count.Value);
        }
Example #4
0
        /// <summary>
        /// 删除当前会话下的购物车商品
        /// </summary>
        /// <param name="cartProductId">购物车商品Id</param>
        /// <returns></returns>
        public virtual bool DeleteCartProduct(long cartProductId)
        {
            // 从数据库删除,只删除当前会话下的购物车商品
            var  sessionManager = Application.Ioc.Resolve <SessionManager>();
            bool result         = UnitOfWork.WriteRepository <CartProductRepository, bool>(r => {
                var cartProduct = r.GetManyBySession(sessionManager.GetSession(), null)
                                  .FirstOrDefault(c => c.Id == cartProductId);
                if (cartProduct != null)
                {
                    r.Delete(cartProduct);
                    return(true);
                }
                return(false);
            });

            // 删除相关的缓存
            CartProductTotalCountCache.Clear();
            return(result);
        }
        /// <summary>
        /// 删除当前会话下的购物车商品
        /// </summary>
        /// <param name="cartProductId">购物车商品Id</param>
        /// <returns></returns>
        public virtual bool DeleteCartProduct(Guid cartProductId)
        {
            // 从数据库删除,只删除当前会话下的购物车商品
            var  sessionManager = Application.Ioc.Resolve <SessionManager>();
            var  repository     = Application.Ioc.Resolve <CartProductRepository>();
            bool result;

            using (UnitOfWork.Scope()) {
                var cartProduct = repository.GetManyBySession(sessionManager.GetSession(), null)
                                  .FirstOrDefault(c => c.Id == cartProductId);
                if (cartProduct != null)
                {
                    repository.Delete(cartProduct);
                    result = true;
                }
                result = false;
            }
            // 删除相关的缓存
            CartProductTotalCountCache.Remove(CartProductType.Default);
            CartProductTotalCountCache.Remove(CartProductType.Buynow);
            return(result);
        }
 /// <summary>
 /// 清理缓存
 /// </summary>
 public void ClearCache()
 {
     CartProductTotalCountCache.Clear();
 }