예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }