Exemplo n.º 1
0
        /// <summary>
        ///     商品查询列表,次函数基本完成了商品列表的所有功能
        /// </summary>
        /// <param name="productApiInput"></param>
        public async Task <ProductItemApiOutput> GetProductItemsAsync(ProductApiInput productApiInput)
        {
            var apiOutput = new ProductItemApiOutput();
            // 如果商城模式不正常,或者商品模式的货币类型不正常,则商品不显示
            var moneyTypesids = Resolve <IAutoConfigService>().MoneyTypes().Select(r => r.Id);

            productApiInput.PriceStyles = Resolve <IAutoConfigService>()
                                          .GetList <PriceStyleConfig>(r => r.Status == Status.Normal)
                                          .Where(r => moneyTypesids.Contains(r.MoneyTypeId)).ToList();
            var model     = Repository <IProductRepository>().GetProductItems(productApiInput, out var count);
            var proIdList = model.Select(x => x.Id);
            var skuList   = Resolve <IProductSkuService>().GetList(x => proIdList.Contains(x.ProductId));

            model.ForEach(r => {
                r.ThumbnailUrl = Resolve <IApiService>().ApiImageUrl(r.ThumbnailUrl);
                r.Price        = decimal.Round(r.Price, 2);
                r.Stock        = skuList.Where(x => x.ProductId == r.Id).Sum(x => x.Stock);
                r.DisplayPrice =
                    Resolve <IProductService>().GetDisplayPrice(r.Price, r.PriceStyleId, 0M); //库存改为 sku库存的总和
            });

            apiOutput.ProductItems = model;
            apiOutput.TotalSize    = count / productApiInput.PageSize + 1;
            apiOutput.StyleType    = 1;
            return(await Task.FromResult(apiOutput));
        }
Exemplo n.º 2
0
        /// <summary>
        ///     获取虚拟订货商品列表
        /// </summary>
        /// <param name="parameter">参数</param>
        public ProductItemApiOutput GetProductItems(ApiBaseInput parameter)
        {
            var productApiInput = new ProductApiInput
            {
                ProductIds = GetAllProductIds().JoinToString(",")
            };
            var result = Resolve <IProductService>().GetProductItems(productApiInput);

            return(result);
        }
Exemplo n.º 3
0
        public ApiResult <ProductItemApiOutput> List([FromQuery] ProductApiInput parameter)
        {
            if (AutoModel.BasicUser != null)
            {
                parameter.UserId = AutoModel.BasicUser.Id;
            }
            var apiOutput = Resolve <IProductService>().GradePriceList(parameter);

            return(ApiResult.Success(apiOutput));
        }
Exemplo n.º 4
0
        public ApiResult <ProductItemApiOutput> List([FromQuery] ProductApiInput parameter)
        {
            var apiOutput = Resolve <IProductService>().GetProductItems(parameter);
            var config    = Resolve <IAutoConfigService>().GetValue <MemberDiscountConfig>();

            if ((AutoModel?.BasicUser?.Id ?? 0) != 0)
            {
                parameter.LoginUserId = AutoModel.BasicUser.Id;
            }

            var loginUser = Resolve <IUserService>().GetSingle(parameter.LoginUserId);
            var isAdmin   = Resolve <IUserService>().IsAdmin(parameter.LoginUserId);

            apiOutput.IsFrontShowPrice = true;

            // 不进行该判断
            StringValues isTenant = string.Empty;

            if (Request.Headers.TryGetValue("zk-tenant", out isTenant))
            {
                //如果有租户头 判断是否为空 ,如果不为空则表示有值
                var tenant = Resolve <IUserService>().GetSingle(s => s.Mobile == isTenant.FirstOrDefault());
                //如果有租户头 判断是否为空 ,如果不为空则表示有值
                //if (isTenant.Where(s => !(string.IsNullOrEmpty(s) || s == "null"||s== "[object Null]")).Count() <= 0)
                if (tenant == null) //不是租户 则判断是否显示价格
                {
                    if (loginUser == null)
                    {
                        apiOutput.IsFrontShowPrice = false;
                        apiOutput.PriceAlterText   = config.PriceAlterText;
                    }
                    else if (!isAdmin && loginUser.GradeId == Guid.Parse("72BE65E6-3000-414D-972E-1A3D4A366000"))
                    {
                        apiOutput.IsFrontShowPrice = config.IsFrontShowPrice;
                        apiOutput.PriceAlterText   = config.PriceAlterText;
                    }
                }
            }
            else
            {
                //如果没有该头部 直接判断
                if (loginUser == null)
                {
                    apiOutput.IsFrontShowPrice = false;
                    apiOutput.PriceAlterText   = config.PriceAlterText;
                }
                else if (!isAdmin && loginUser.GradeId == Guid.Parse("72BE65E6-3000-414D-972E-1A3D4A366000"))
                {
                    apiOutput.IsFrontShowPrice = config.IsFrontShowPrice;
                    apiOutput.PriceAlterText   = config.PriceAlterText;
                }
            }

            return(ApiResult.Success(apiOutput));
        }
Exemplo n.º 5
0
        public ApiResult <ProductItemApiOutput> ListExt([FromQuery] ProductApiInput parameter)
        {
            if (!string.IsNullOrEmpty(parameter.Keyword))
            {
                //TODO:111 搜索关键字在这里进行存储,存储用户id,搜索时间,关键字,会员等级
            }

            var apiOutput = Resolve <IProductService>().GetProductItems(parameter);

            return(ApiResult.Success(apiOutput));
        }
Exemplo n.º 6
0
        /// <summary>
        /// 获取具有会员等级价的商品列表
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        public ProductItemApiOutput GradePriceList(ProductApiInput parameter)
        {
            var apiOutput = Resolve <IProductService>().GetProductItems(parameter);
            var config    = Resolve <IAutoConfigService>().GetValue <MemberDiscountConfig>();
            var loginUser = Resolve <IUserService>().GetSingle(parameter.UserId);

            apiOutput.IsFrontShowPrice = config.IsFrontShowPrice;
            apiOutput.PriceAlterText   = config.PriceAlterText;
            if (loginUser != null && config.ShowPriceGradeIds.Contains(loginUser.GradeId))
            {
                apiOutput.IsFrontShowPrice = true;
                apiOutput.PriceAlterText   = config.PriceAlterText;
            }

            return(apiOutput);
        }
Exemplo n.º 7
0
        /// <summary>
        ///     list
        /// </summary>
        /// <param name="productApiInput"></param>
        /// <returns></returns>
        public ProductItemApiOutput GetProducts(ProductApiInput productApiInput)
        {
            productApiInput.PriceStyleId = _presaleProductStyleId;
            var model = Repository <IProductRepository>().GetProductItems(productApiInput, out var count);
            //linked product
            var productIds     = model.Select(p => p.Id).ToList();
            var linkedProducts = Repository <IPresaleProductRepository>()
                                 .GetList(p => productIds.Contains(p.ProductId) && p.PriceStyleId == _presaleProductStyleId)
                                 .ToList();

            model.ForEach(r => {
                r.ThumbnailUrl = Resolve <IApiService>().ApiImageUrl(r.ThumbnailUrl);
                r.Price        = decimal.Round(r.Price, 2);
                r.IsLinked     = linkedProducts.Exists(p => p.ProductId == r.Id);
            });

            var apiOutput = new ProductItemApiOutput();

            apiOutput.ProductItems = model;
            apiOutput.TotalSize    = count / productApiInput.PageSize + 1;
            return(apiOutput);
        }
Exemplo n.º 8
0
        public List <ProductItem> GetProductItems(ProductApiInput input, out long count)
        {
            if (input.PageIndex < 0)
            {
                input.PageIndex = 1;
            }

            if (input.PageSize > 100)
            {
                input.PageSize = 100;
            }

            #region 标签 分类查询

            var TcSql = string.Empty;

            if (input.ClassIds != null && input.ClassIds.Count > 1)
            {
                TcSql =
                    $"{TcSql} AND Type='{typeof(ProductClassRelation).FullName}'  AND Id in ({input.ClassIds.ToSqlString()})  or FatherId in ({input.ClassIds.ToSqlString()}) ";
            }

            if (input.TagIds != null && input.TagIds.Count > 1)
            {
                TcSql =
                    $"{TcSql} AND Type='{typeof(ProductTagRelation).FullName}'  AND Id in ({input.TagIds.ToSqlString()})  or FatherId in ({input.TagIds.ToSqlString()}) ";
            }

            if (!string.IsNullOrEmpty(TcSql))
            {
                TcSql = $@"SELECT DISTINCT EntityId FROM Basic_RelationIndex  WHERE RelationId IN(
                        SELECT Id FROM Basic_Relation WHERE 1=1 {TcSql} )";
            }

            #endregion 标签 分类查询

            var sqlWhere = string.Empty;
            if (!string.IsNullOrEmpty(input.Keyword))
            {
                sqlWhere = $"{sqlWhere} AND Name Like '%{input.Keyword}%'";
            }

            if (input.MinPrice.HasValue)
            {
                sqlWhere = $"{sqlWhere} AND Price>{input.MinPrice}";
            }

            if (input.MaxPrice.HasValue)
            {
                sqlWhere = $"{sqlWhere} AND Price<{input.MaxPrice}";
            }

            if (input.PriceStyleId.HasValue)
            {
                sqlWhere = $"{sqlWhere} AND PriceStyleId ='{input.PriceStyleId}'";
            }

            if (input.BrandId.HasValue)
            {
                sqlWhere = $"{sqlWhere} AND  BrandId ='{input.BrandId}'";
            }

            if (!TcSql.IsNullOrEmpty())
            {
                sqlWhere = $"{sqlWhere} AND Id in ({TcSql})";
            }

            if (!input.ProductIds.IsNullOrEmpty())
            {
                sqlWhere = $"{sqlWhere} AND Id in ({input.ProductIds})";
            }
            //商品状态过滤  商品店铺过滤
            sqlWhere = $"{sqlWhere} AND ProductStatus= {(int)GoodsStatus.Online}";
            //  sqlWhere = $"{sqlWhere} AND StoreId>0";

            // 库存
            sqlWhere = $"{sqlWhere} AND Stock >= 1 ";

            var priceStyleId = Guid.Empty;

            // 商城模式状态不正常,获取不存在的,商品不显示
            if (input.PriceStyles != null && input.PriceStyles.Count > 0 && !input.PriceStyleId.IsGuidNullOrEmpty())
            {
                input.PriceStyles = input.PriceStyles
                                    .Where(r => input.PriceStyleId != null && r.Id == (Guid)input.PriceStyleId).ToList();
                var priceStyleIdList = input.PriceStyles.Select(r => r.Id).ToList();
                sqlWhere = $"{sqlWhere} AND PriceStyleId ='{input.PriceStyleId}' ";
            }

            var sqlCount = $"SELECT COUNT(Id) [Count] FROM Shop_Product where 1=1 {sqlWhere}";
            count = RepositoryContext.ExecuteScalar(sqlCount)?.ConvertToLong() ?? 0;

            //排序处理  desc 降序
            var sort = string.Empty;
            if (input.SortOrder != ProductSortOrder.Defualt)
            {
                sort = input.SortOrder.ToString();
            }
            else
            {
                sort = "Id";
            }

            if (input.OrderType == 0)
            {
                sort = $"{sort} desc";
            }
            // 如果有传入指定数量,不分页,输出具体的数量
            if (input.Count > 0)
            {
                input.PageSize  = input.Count;
                input.PageIndex = 1;
            }

            var sql    = $@"SELECT TOP {input.PageSize} * FROM (
                        SELECT  ROW_NUMBER() OVER (ORDER BY {sort}) AS RowNumber,* FROM Shop_Product  where 1=1 {
                    sqlWhere
                }
                               ) as A
                        WHERE RowNumber > {input.PageSize}*({input.PageIndex}-1) ";
            var result = new List <ProductItem>();
            using (var dr = RepositoryContext.ExecuteDataReader(sql)) {
                while (dr.Read())
                {
                    result.Add(ReadProduct(dr));
                }
            }

            return(result);
        }
Exemplo n.º 9
0
        public async Task <ApiResult <ProductItemApiOutput> > ListAsync([FromQuery] ProductApiInput parameter)
        {
            var apiOutput = await Resolve <IProductService>().GetProductItemsAsync(parameter);

            return(await Task.FromResult(ApiResult.Success(apiOutput)));
        }
Exemplo n.º 10
0
        public ApiResult <ProductItemApiOutput> List1([FromQuery] ProductApiInput parameter)
        {
            var apiOutput = Resolve <IProductService>().GetProductItems(parameter);

            return(ApiResult.Success(apiOutput));
        }