/// <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); }
/// <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); }
/// <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(); }