Пример #1
0
        public StoreProductInfo GetStoreProductModel(int ProductId, int StoreId)
        {
            StoreProductInfo result           = null;
            DbCommand        sqlStringCommand = base.database.GetSqlStringCommand("SELECT * FROM [Hishop_StoreProducts] WHERE ProductID = @ProductId AND StoreId = @StoreId");

            base.database.AddInParameter(sqlStringCommand, "ProductID", DbType.Int32, ProductId);
            base.database.AddInParameter(sqlStringCommand, "storeId", DbType.Int32, StoreId);
            using (IDataReader objReader = base.database.ExecuteReader(sqlStringCommand))
            {
                result = DataHelper.ReaderToModel <StoreProductInfo>(objReader);
            }
            return(result);
        }
Пример #2
0
        /// <summary>
        /// 搜索商城商品
        /// </summary>
        /// <param name="pageSize">每页数</param>
        /// <param name="pageNumber">当前页数</param>
        /// <param name="keyword">关键词</param>
        /// <param name="cateId">分类id</param>
        /// <param name="brandId">品牌id</param>
        /// <param name="filterPrice">筛选价格</param>
        /// <param name="catePriceRangeList">分类价格范围列表</param>
        /// <param name="attrValueIdList">属性值id列表</param>
        /// <param name="onlyStock">是否只显示有货</param>
        /// <param name="sortColumn">排序列</param>
        /// <param name="sortDirection">排序方向</param>
        /// <returns></returns>
        public List <StoreProductInfo> SearchMallProducts(int pageSize, int pageNumber, string keyword, int cateId, int brandId, int filterPrice, string[] catePriceRangeList, List <int> attrValueIdList, int onlyStock, int sortColumn, int sortDirection)
        {
            StringBuilder commandText = new StringBuilder();

            if (pageNumber == 1)
            {
                commandText.AppendFormat("SELECT TOP {1} [p].[pid],[p].[psn],[p].[cateid],[p].[brandid],[p].[storeid],[p].[storecid],[p].[storestid],[p].[skugid],[p].[name],[p].[shopprice],[p].[marketprice],[p].[costprice],[p].[state],[p].[isbest],[p].[ishot],[p].[isnew],[p].[displayorder],[p].[weight],[p].[showimg],[p].[salecount],[p].[visitcount],[p].[reviewcount],[p].[star1],[p].[star2],[p].[star3],[p].[star4],[p].[star5],[p].[addtime],[s].[name] AS [storename] FROM [{0}products] AS [p]", RDBSHelper.RDBSTablePre, pageSize);

                if (onlyStock == 1)
                {
                    commandText.AppendFormat(" LEFT JOIN [{0}productstocks] AS [ps] ON [p].[pid]=[ps].[pid]", RDBSHelper.RDBSTablePre);
                }

                commandText.AppendFormat(" LEFT JOIN [{0}productkeywords] AS [pk] ON [p].[pid]=[pk].[pid]", RDBSHelper.RDBSTablePre);

                commandText.AppendFormat(" LEFT JOIN [{0}stores] AS [s] ON [p].[storeid]=[s].[storeid]", RDBSHelper.RDBSTablePre);

                commandText.AppendFormat(" WHERE [p].[cateid]={0}", cateId);

                if (brandId > 0)
                {
                    commandText.AppendFormat(" AND [p].[brandid]={0}", brandId);
                }

                if (filterPrice > 0 && filterPrice <= catePriceRangeList.Length)
                {
                    string[] priceRange = StringHelper.SplitString(catePriceRangeList[filterPrice - 1], "-");
                    if (priceRange.Length == 1)
                    {
                        commandText.AppendFormat(" AND [p].[shopprice]>='{0}'", priceRange[0]);
                    }
                    else if (priceRange.Length == 2)
                    {
                        commandText.AppendFormat(" AND [p].[shopprice]>='{0}' AND [p].[shopprice]<'{1}'", priceRange[0], priceRange[1]);
                    }
                }

                commandText.Append(" AND [p].[state]=0");

                if (attrValueIdList.Count > 0)
                {
                    commandText.Append(" AND [p].[pid] IN (SELECT [pa1].[pid] FROM");
                    for (int i = 0; i < attrValueIdList.Count; i++)
                    {
                        if (i == 0)
                        {
                            commandText.AppendFormat(" (SELECT [pid] FROM [{0}productattributes] WHERE [attrvalueid]={1}) AS [pa1]", RDBSHelper.RDBSTablePre, attrValueIdList[i]);
                        }
                        else
                        {
                            commandText.AppendFormat(" INNER JOIN (SELECT [pid] FROM [{0}productattributes] WHERE [attrvalueid]={1}) AS [pa{2}] ON [pa{2}].[pid]=[pa{3}].[pid]", RDBSHelper.RDBSTablePre, attrValueIdList[i], i + 1, i);
                        }
                    }
                    commandText.Append(")");
                }

                if (onlyStock == 1)
                {
                    commandText.Append(" AND [ps].[number]>0");
                }

                commandText.AppendFormat(" AND [pk].[keyword]='{0}'", keyword);

                commandText.Append(" AND [s].[state]=0");

                commandText.Append(" ORDER BY ");
                switch (sortColumn)
                {
                case 0:
                    commandText.Append("[pk].[relevancy]");
                    break;

                case 1:
                    commandText.Append("[p].[salecount]");
                    break;

                case 2:
                    commandText.Append("[p].[shopprice]");
                    break;

                case 3:
                    commandText.Append("[p].[reviewcount]");
                    break;

                case 4:
                    commandText.Append("[p].[addtime]");
                    break;

                case 5:
                    commandText.Append("[p].[visitcount]");
                    break;

                default:
                    commandText.Append("[pk].[relevancy]");
                    break;
                }
                switch (sortDirection)
                {
                case 0:
                    commandText.Append(" DESC");
                    break;

                case 1:
                    commandText.Append(" ASC");
                    break;

                default:
                    commandText.Append(" DESC");
                    break;
                }
            }
            else
            {
                commandText.Append("SELECT [pid],[psn],[cateid],[brandid],[storeid],[storecid],[storestid],[skugid],[name],[shopprice],[marketprice],[costprice],[state],[isbest],[ishot],[isnew],[displayorder],[weight],[showimg],[salecount],[visitcount],[reviewcount],[star1],[star2],[star3],[star4],[star5],[addtime],[storename] FROM");
                commandText.Append(" (SELECT ROW_NUMBER() OVER (ORDER BY ");
                switch (sortColumn)
                {
                case 0:
                    commandText.Append("[pk].[relevancy]");
                    break;

                case 1:
                    commandText.Append("[p].[salecount]");
                    break;

                case 2:
                    commandText.Append("[p].[shopprice]");
                    break;

                case 3:
                    commandText.Append("[p].[reviewcount]");
                    break;

                case 4:
                    commandText.Append("[p].[addtime]");
                    break;

                case 5:
                    commandText.Append("[p].[visitcount]");
                    break;

                default:
                    commandText.Append("[pk].[relevancy]");
                    break;
                }
                switch (sortDirection)
                {
                case 0:
                    commandText.Append(" DESC");
                    break;

                case 1:
                    commandText.Append(" ASC");
                    break;

                default:
                    commandText.Append(" DESC");
                    break;
                }
                commandText.AppendFormat(") AS [rowid],[p].[pid],[p].[psn],[p].[cateid],[p].[brandid],[p].[storeid],[p].[storecid],[p].[storestid],[p].[skugid],[p].[name],[p].[shopprice],[p].[marketprice],[p].[costprice],[p].[state],[p].[isbest],[p].[ishot],[p].[isnew],[p].[displayorder],[p].[weight],[p].[showimg],[p].[salecount],[p].[visitcount],[p].[reviewcount],[p].[star1],[p].[star2],[p].[star3],[p].[star4],[p].[star5],[p].[addtime],[s].[name] AS [storename] FROM [{0}products] AS [p]", RDBSHelper.RDBSTablePre);

                if (onlyStock == 1)
                {
                    commandText.AppendFormat(" LEFT JOIN [{0}productstocks] AS [ps] ON [p].[pid]=[ps].[pid]", RDBSHelper.RDBSTablePre);
                }

                commandText.AppendFormat(" LEFT JOIN [{0}productkeywords] AS [pk] ON [p].[pid]=[pk].[pid]", RDBSHelper.RDBSTablePre);

                commandText.AppendFormat(" LEFT JOIN [{0}stores] AS [s] ON [p].[storeid]=[s].[storeid]", RDBSHelper.RDBSTablePre);

                commandText.AppendFormat(" WHERE [p].[cateid]={0}", cateId);

                if (brandId > 0)
                {
                    commandText.AppendFormat(" AND [p].[brandid]={0}", brandId);
                }

                if (filterPrice > 0 && filterPrice <= catePriceRangeList.Length)
                {
                    string[] priceRange = StringHelper.SplitString(catePriceRangeList[filterPrice - 1], "-");
                    if (priceRange.Length == 1)
                    {
                        commandText.AppendFormat(" AND [p].[shopprice]>='{0}'", priceRange[0]);
                    }
                    else if (priceRange.Length == 2)
                    {
                        commandText.AppendFormat(" AND [p].[shopprice]>='{0}' AND [p].[shopprice]<'{1}'", priceRange[0], priceRange[1]);
                    }
                }

                commandText.Append(" AND [p].[state]=0");

                if (attrValueIdList.Count > 0)
                {
                    commandText.Append(" AND [p].[pid] IN (SELECT [pa1].[pid] FROM");
                    for (int i = 0; i < attrValueIdList.Count; i++)
                    {
                        if (i == 0)
                        {
                            commandText.AppendFormat(" (SELECT [pid] FROM [{0}productattributes] WHERE [attrvalueid]={1}) AS [pa1]", RDBSHelper.RDBSTablePre, attrValueIdList[i]);
                        }
                        else
                        {
                            commandText.AppendFormat(" INNER JOIN (SELECT [pid] FROM [{0}productattributes] WHERE [attrvalueid]={1}) AS [pa{2}] ON [pa{2}].[pid]=[pa{3}].[pid]", RDBSHelper.RDBSTablePre, attrValueIdList[i], i + 1, i);
                        }
                    }
                    commandText.Append(")");
                }

                if (onlyStock == 1)
                {
                    commandText.Append(" AND [ps].[number]>0");
                }

                commandText.AppendFormat(" AND [pk].[keyword]='{0}'", keyword);

                commandText.Append(" AND [s].[state]=0");

                commandText.Append(") AS [temp]");
                commandText.AppendFormat(" WHERE [rowid] BETWEEN {0} AND {1}", pageSize * (pageNumber - 1) + 1, pageSize * pageNumber);
            }

            List <StoreProductInfo> storeProductList = new List <StoreProductInfo>();
            IDataReader             reader           = RDBSHelper.ExecuteReader(CommandType.Text, commandText.ToString());

            while (reader.Read())
            {
                StoreProductInfo storeProductInfo = new StoreProductInfo();

                storeProductInfo.Pid          = TypeHelper.ObjectToInt(reader["pid"]);
                storeProductInfo.PSN          = reader["psn"].ToString();
                storeProductInfo.CateId       = TypeHelper.ObjectToInt(reader["cateid"]);
                storeProductInfo.BrandId      = TypeHelper.ObjectToInt(reader["brandid"]);
                storeProductInfo.StoreId      = TypeHelper.ObjectToInt(reader["storeid"]);
                storeProductInfo.StoreCid     = TypeHelper.ObjectToInt(reader["storecid"]);
                storeProductInfo.StoreSTid    = TypeHelper.ObjectToInt(reader["storestid"]);
                storeProductInfo.SKUGid       = TypeHelper.ObjectToInt(reader["skugid"]);
                storeProductInfo.Name         = reader["name"].ToString();
                storeProductInfo.ShopPrice    = TypeHelper.ObjectToDecimal(reader["shopprice"]);
                storeProductInfo.MarketPrice  = TypeHelper.ObjectToDecimal(reader["marketprice"]);
                storeProductInfo.CostPrice    = TypeHelper.ObjectToDecimal(reader["costprice"]);
                storeProductInfo.State        = TypeHelper.ObjectToInt(reader["state"]);
                storeProductInfo.IsBest       = TypeHelper.ObjectToInt(reader["isbest"]);
                storeProductInfo.IsHot        = TypeHelper.ObjectToInt(reader["ishot"]);
                storeProductInfo.IsNew        = TypeHelper.ObjectToInt(reader["isnew"]);
                storeProductInfo.DisplayOrder = TypeHelper.ObjectToInt(reader["displayorder"]);
                storeProductInfo.Weight       = TypeHelper.ObjectToInt(reader["weight"]);
                storeProductInfo.ShowImg      = reader["showimg"].ToString();
                storeProductInfo.SaleCount    = TypeHelper.ObjectToInt(reader["salecount"]);
                storeProductInfo.VisitCount   = TypeHelper.ObjectToInt(reader["visitcount"]);
                storeProductInfo.ReviewCount  = TypeHelper.ObjectToInt(reader["reviewcount"]);
                storeProductInfo.Star1        = TypeHelper.ObjectToInt(reader["star1"]);
                storeProductInfo.Star2        = TypeHelper.ObjectToInt(reader["star2"]);
                storeProductInfo.Star3        = TypeHelper.ObjectToInt(reader["star3"]);
                storeProductInfo.Star4        = TypeHelper.ObjectToInt(reader["star4"]);
                storeProductInfo.Star5        = TypeHelper.ObjectToInt(reader["star5"]);
                storeProductInfo.AddTime      = TypeHelper.ObjectToDateTime(reader["addtime"]);
                storeProductInfo.StoreName    = reader["storename"].ToString();

                storeProductList.Add(storeProductInfo);
            }
            reader.Close();
            return(storeProductList);
        }
Пример #3
0
        /// <summary>
        /// 搜索商城商品
        /// </summary>
        /// <param name="pageSize">每页数</param>
        /// <param name="pageNumber">当前页数</param>
        /// <param name="word">搜索词</param>
        /// <param name="cateId">分类id</param>
        /// <param name="brandId">品牌id</param>
        /// <param name="filterPrice">筛选价格</param>
        /// <param name="attrValueIdList">属性值id列表</param>
        /// <param name="onlyStock">是否只显示有货</param>
        /// <param name="sortColumn">排序列</param>
        /// <param name="sortDirection">排序方向</param>
        /// <param name="categoryInfo">分类信息</param>
        /// <param name="catePriceRangeList">分类价格范围列表</param>
        /// <param name="cateAAndVList">分类筛选属性及其值列表</param>
        /// <param name="categoryList">分类列表</param>
        /// <param name="brandInfo">品牌信息</param>
        /// <param name="brandList">品牌列表</param>
        /// <param name="totalCount">商品总数量</param>
        /// <param name="productList">商品列表</param>
        public void SearchMallProducts(int pageSize, int pageNumber, string word, int cateId, int brandId, int filterPrice, List <int> attrValueIdList, int onlyStock, int sortColumn, int sortDirection, ref CategoryInfo categoryInfo, ref string[] catePriceRangeList, ref List <KeyValuePair <AttributeInfo, List <AttributeValueInfo> > > cateAAndVList, ref List <CategoryInfo> categoryList, ref BrandInfo brandInfo, ref List <BrandInfo> brandList, ref int totalCount, ref List <StoreProductInfo> productList)
        {
            //针对用户搜索词进行分词
            List <string> keywordList = Analyse(word);

            //构建关键词查询sql
            string keywordSql = BuildKeywordSql(keywordList);

            #region 设置分类列表

            categoryList = new List <CategoryInfo>();

            StringBuilder commandText3 = new StringBuilder();
            commandText3.AppendFormat("SELECT [cateid],[displayorder],[name],[pricerange],[parentid],[layer],[haschild],[path] FROM [{0}categories] WHERE [cateid] IN (SELECT DISTINCT [cateid] FROM [{0}products] WHERE [state]=0 AND [pid] IN (SELECT [pid] FROM [{0}productkeywords] WHERE [keyword] IN ({1})))",
                                      RDBSHelper.RDBSTablePre,
                                      keywordSql);
            IDataReader reader2 = RDBSHelper.ExecuteReader(CommandType.Text, commandText3.ToString());
            while (reader2.Read())
            {
                CategoryInfo info = new CategoryInfo();

                info.CateId       = TypeHelper.ObjectToInt(reader2["cateid"]);
                info.DisplayOrder = TypeHelper.ObjectToInt(reader2["displayorder"]);
                info.Name         = reader2["name"].ToString();
                info.PriceRange   = reader2["pricerange"].ToString();
                info.ParentId     = TypeHelper.ObjectToInt(reader2["parentid"]);
                info.Layer        = TypeHelper.ObjectToInt(reader2["layer"]);
                info.HasChild     = TypeHelper.ObjectToInt(reader2["haschild"]);
                info.Path         = reader2["path"].ToString();

                categoryList.Add(info);
            }
            reader2.Close();

            #endregion

            //当关联分类列表中一个分类也不存在时,认为商品也不存在,直接返回
            if (categoryList.Count < 1)
            {
                return;
            }

            if (cateId > 0)
            {
                foreach (CategoryInfo info in categoryList)
                {
                    if (info.CateId == cateId)
                    {
                        categoryInfo = info;
                        break;
                    }
                }

                //当筛选了分类,但是分类不在分类列表中,认为商品也不存在,直接返回
                if (categoryInfo == null)
                {
                    return;
                }
            }

            if (categoryInfo != null)
            {
                cateAAndVList      = Categories.GetCategoryFilterAAndVList(categoryInfo.CateId);
                catePriceRangeList = StringHelper.SplitString(categoryInfo.PriceRange, "\r\n");
            }

            #region 设置品牌列表

            brandList = new List <BrandInfo>();

            StringBuilder commandText4 = new StringBuilder();
            commandText4.AppendFormat("SELECT [brandid],[displayorder],[name],[logo] FROM [{0}brands] WHERE [brandid] IN (SELECT DISTINCT [brandid] FROM [{0}products] WHERE [state]=0 {1} AND [pid] IN (SELECT [pid] FROM [{0}productkeywords] WHERE [keyword] IN ({2})))",
                                      RDBSHelper.RDBSTablePre,
                                      categoryInfo == null ? "" : "AND [cateid]=" + categoryInfo.CateId,
                                      keywordSql);
            IDataReader reader3 = RDBSHelper.ExecuteReader(CommandType.Text, commandText4.ToString());
            while (reader3.Read())
            {
                BrandInfo info = new BrandInfo();

                info.BrandId      = TypeHelper.ObjectToInt(reader3["brandid"]);
                info.DisplayOrder = TypeHelper.ObjectToInt(reader3["displayorder"]);
                info.Name         = reader3["name"].ToString();
                info.Logo         = reader3["logo"].ToString();

                brandList.Add(info);
            }
            reader3.Close();

            #endregion

            //当品牌列表中一个品牌也不存在时,认为商品也不存在,直接返回
            if (brandList.Count < 1)
            {
                return;
            }

            //当筛选了品牌,但是品牌不在品牌列表中,认为商品也不存在,直接返回
            if (brandId > 0)
            {
                bool flag = true;
                foreach (BrandInfo info in brandList)
                {
                    if (info.BrandId == brandId)
                    {
                        brandInfo = info;
                        flag      = false;
                        break;
                    }
                }
                if (flag)
                {
                    return;
                }
            }

            #region 获取商品列表

            StringBuilder commandText1 = new StringBuilder();
            if (pageNumber == 1)
            {
                commandText1.AppendFormat("SELECT TOP {1} [p].[pid],[p].[psn],[p].[cateid],[p].[brandid],[p].[storeid],[p].[storecid],[p].[storestid],[p].[skugid],[p].[name],[p].[shopprice],[p].[marketprice],[p].[costprice],[p].[state],[p].[isbest],[p].[ishot],[p].[isnew],[p].[displayorder],[p].[weight],[p].[showimg],[p].[salecount],[p].[visitcount],[p].[reviewcount],[p].[star1],[p].[star2],[p].[star3],[p].[star4],[p].[star5],[p].[addtime],[s].[name] AS [storename] FROM [{0}products] AS [p]", RDBSHelper.RDBSTablePre, pageSize);

                if (onlyStock == 1)
                {
                    commandText1.AppendFormat(" LEFT JOIN [{0}productstocks] AS [ps] ON [p].[pid]=[ps].[pid]", RDBSHelper.RDBSTablePre);
                }

                commandText1.AppendFormat(" LEFT JOIN [{0}productkeywords] AS [pk] ON [p].[pid]=[pk].[pid]", RDBSHelper.RDBSTablePre);

                commandText1.AppendFormat(" LEFT JOIN [{0}stores] AS [s] ON [p].[storeid]=[s].[storeid]", RDBSHelper.RDBSTablePre);

                commandText1.Append(" WHERE [p].[state]=0");

                if (categoryInfo != null)
                {
                    commandText1.AppendFormat(" AND [p].[cateid]={0}", categoryInfo.CateId);
                }

                if (brandId > 0)
                {
                    commandText1.AppendFormat(" AND [p].[brandid]={0}", brandId);
                }

                if (categoryInfo != null && filterPrice > 0 && filterPrice <= catePriceRangeList.Length)
                {
                    string[] priceRange = StringHelper.SplitString(catePriceRangeList[filterPrice - 1], "-");
                    if (priceRange.Length == 1)
                    {
                        commandText1.AppendFormat(" AND [p].[shopprice]>='{0}'", priceRange[0]);
                    }
                    else if (priceRange.Length == 2)
                    {
                        commandText1.AppendFormat(" AND [p].[shopprice]>='{0}' AND [p].[shopprice]<'{1}'", priceRange[0], priceRange[1]);
                    }
                }

                if (categoryInfo != null && attrValueIdList.Count > 0 && attrValueIdList.Count <= cateAAndVList.Count)
                {
                    commandText1.Append(" AND [p].[pid] IN (SELECT [pa1].[pid] FROM");
                    for (int i = 0; i < attrValueIdList.Count; i++)
                    {
                        if (i == 0)
                        {
                            commandText1.AppendFormat(" (SELECT [pid] FROM [{0}productattributes] WHERE [attrvalueid]={1}) AS [pa1]", RDBSHelper.RDBSTablePre, attrValueIdList[i]);
                        }
                        else
                        {
                            commandText1.AppendFormat(" INNER JOIN (SELECT [pid] FROM [{0}productattributes] WHERE [attrvalueid]={1}) AS [pa{2}] ON [pa{2}].[pid]=[pa{3}].[pid]", RDBSHelper.RDBSTablePre, attrValueIdList[i], i + 1, i);
                        }
                    }
                    commandText1.Append(")");
                }

                if (onlyStock == 1)
                {
                    commandText1.Append(" AND [ps].[number]>0");
                }

                commandText1.AppendFormat(" AND [pk].[keyword] IN ({0})", keywordSql);

                commandText1.Append(" AND [s].[state]=0");

                commandText1.Append(" ORDER BY ");
                switch (sortColumn)
                {
                case 0:
                    commandText1.Append("[pk].[relevancy]");
                    break;

                case 1:
                    commandText1.Append("[p].[salecount]");
                    break;

                case 2:
                    commandText1.Append("[p].[shopprice]");
                    break;

                case 3:
                    commandText1.Append("[p].[reviewcount]");
                    break;

                case 4:
                    commandText1.Append("[p].[addtime]");
                    break;

                case 5:
                    commandText1.Append("[p].[visitcount]");
                    break;

                default:
                    commandText1.Append("[pk].[relevancy]");
                    break;
                }
                switch (sortDirection)
                {
                case 0:
                    commandText1.Append(" DESC");
                    break;

                case 1:
                    commandText1.Append(" ASC");
                    break;

                default:
                    commandText1.Append(" DESC");
                    break;
                }
                commandText1.Append(",[p].[pid] DESC");
            }
            else
            {
                commandText1.Append("SELECT [pid],[psn],[cateid],[brandid],[storeid],[storecid],[storestid],[skugid],[name],[shopprice],[marketprice],[costprice],[state],[isbest],[ishot],[isnew],[displayorder],[weight],[showimg],[salecount],[visitcount],[reviewcount],[star1],[star2],[star3],[star4],[star5],[addtime],[storename] FROM");
                commandText1.Append(" (SELECT ROW_NUMBER() OVER (ORDER BY ");
                switch (sortColumn)
                {
                case 0:
                    commandText1.Append("[pk].[relevancy]");
                    break;

                case 1:
                    commandText1.Append("[p].[salecount]");
                    break;

                case 2:
                    commandText1.Append("[p].[shopprice]");
                    break;

                case 3:
                    commandText1.Append("[p].[reviewcount]");
                    break;

                case 4:
                    commandText1.Append("[p].[addtime]");
                    break;

                case 5:
                    commandText1.Append("[p].[visitcount]");
                    break;

                default:
                    commandText1.Append("[pk].[relevancy]");
                    break;
                }
                switch (sortDirection)
                {
                case 0:
                    commandText1.Append(" DESC");
                    break;

                case 1:
                    commandText1.Append(" ASC");
                    break;

                default:
                    commandText1.Append(" DESC");
                    break;
                }
                commandText1.Append(",[p].[pid] DESC");
                commandText1.AppendFormat(") AS [rowid],[p].[pid],[p].[psn],[p].[cateid],[p].[brandid],[p].[storeid],[p].[storecid],[p].[storestid],[p].[skugid],[p].[name],[p].[shopprice],[p].[marketprice],[p].[costprice],[p].[state],[p].[isbest],[p].[ishot],[p].[isnew],[p].[displayorder],[p].[weight],[p].[showimg],[p].[salecount],[p].[visitcount],[p].[reviewcount],[p].[star1],[p].[star2],[p].[star3],[p].[star4],[p].[star5],[p].[addtime],[s].[name] AS [storename] FROM [{0}products] AS [p]", RDBSHelper.RDBSTablePre);

                if (onlyStock == 1)
                {
                    commandText1.AppendFormat(" LEFT JOIN [{0}productstocks] AS [ps] ON [p].[pid]=[ps].[pid]", RDBSHelper.RDBSTablePre);
                }

                commandText1.AppendFormat(" LEFT JOIN [{0}productkeywords] AS [pk] ON [p].[pid]=[pk].[pid]", RDBSHelper.RDBSTablePre);

                commandText1.AppendFormat(" LEFT JOIN [{0}stores] AS [s] ON [p].[storeid]=[s].[storeid]", RDBSHelper.RDBSTablePre);

                commandText1.Append(" WHERE [p].[state]=0");

                if (categoryInfo != null)
                {
                    commandText1.AppendFormat(" AND [p].[cateid]={0}", categoryInfo.CateId);
                }

                if (brandId > 0)
                {
                    commandText1.AppendFormat(" AND [p].[brandid]={0}", brandId);
                }

                if (categoryInfo != null && filterPrice > 0 && filterPrice <= catePriceRangeList.Length)
                {
                    string[] priceRange = StringHelper.SplitString(catePriceRangeList[filterPrice - 1], "-");
                    if (priceRange.Length == 1)
                    {
                        commandText1.AppendFormat(" AND [p].[shopprice]>='{0}'", priceRange[0]);
                    }
                    else if (priceRange.Length == 2)
                    {
                        commandText1.AppendFormat(" AND [p].[shopprice]>='{0}' AND [p].[shopprice]<'{1}'", priceRange[0], priceRange[1]);
                    }
                }

                if (categoryInfo != null && attrValueIdList.Count > 0 && attrValueIdList.Count == cateAAndVList.Count)
                {
                    commandText1.Append(" AND [p].[pid] IN (SELECT [pa1].[pid] FROM");
                    for (int i = 0; i < attrValueIdList.Count; i++)
                    {
                        if (i == 0)
                        {
                            commandText1.AppendFormat(" (SELECT [pid] FROM [{0}productattributes] WHERE [attrvalueid]={1}) AS [pa1]", RDBSHelper.RDBSTablePre, attrValueIdList[i]);
                        }
                        else
                        {
                            commandText1.AppendFormat(" INNER JOIN (SELECT [pid] FROM [{0}productattributes] WHERE [attrvalueid]={1}) AS [pa{2}] ON [pa{2}].[pid]=[pa{3}].[pid]", RDBSHelper.RDBSTablePre, attrValueIdList[i], i + 1, i);
                        }
                    }
                    commandText1.Append(")");
                }

                if (onlyStock == 1)
                {
                    commandText1.Append(" AND [ps].[number]>0");
                }

                commandText1.AppendFormat(" AND [pk].[keyword] IN ({0}) ", keywordSql);

                commandText1.Append(" AND [s].[state]=0");

                commandText1.Append(") AS [temp]");
                commandText1.AppendFormat(" WHERE [rowid] BETWEEN {0} AND {1}", pageSize * (pageNumber - 1) + 1, pageSize * pageNumber);
            }

            productList = new List <StoreProductInfo>();
            IDataReader reader1 = RDBSHelper.ExecuteReader(CommandType.Text, commandText1.ToString());
            while (reader1.Read())
            {
                StoreProductInfo storeProductInfo = new StoreProductInfo();

                storeProductInfo.Pid          = TypeHelper.ObjectToInt(reader1["pid"]);
                storeProductInfo.PSN          = reader1["psn"].ToString();
                storeProductInfo.CateId       = TypeHelper.ObjectToInt(reader1["cateid"]);
                storeProductInfo.BrandId      = TypeHelper.ObjectToInt(reader1["brandid"]);
                storeProductInfo.StoreId      = TypeHelper.ObjectToInt(reader1["storeid"]);
                storeProductInfo.StoreCid     = TypeHelper.ObjectToInt(reader1["storecid"]);
                storeProductInfo.StoreSTid    = TypeHelper.ObjectToInt(reader1["storestid"]);
                storeProductInfo.SKUGid       = TypeHelper.ObjectToInt(reader1["skugid"]);
                storeProductInfo.Name         = reader1["name"].ToString();
                storeProductInfo.ShopPrice    = TypeHelper.ObjectToDecimal(reader1["shopprice"]);
                storeProductInfo.MarketPrice  = TypeHelper.ObjectToDecimal(reader1["marketprice"]);
                storeProductInfo.CostPrice    = TypeHelper.ObjectToDecimal(reader1["costprice"]);
                storeProductInfo.State        = TypeHelper.ObjectToInt(reader1["state"]);
                storeProductInfo.IsBest       = TypeHelper.ObjectToInt(reader1["isbest"]);
                storeProductInfo.IsHot        = TypeHelper.ObjectToInt(reader1["ishot"]);
                storeProductInfo.IsNew        = TypeHelper.ObjectToInt(reader1["isnew"]);
                storeProductInfo.DisplayOrder = TypeHelper.ObjectToInt(reader1["displayorder"]);
                storeProductInfo.Weight       = TypeHelper.ObjectToInt(reader1["weight"]);
                storeProductInfo.ShowImg      = reader1["showimg"].ToString();
                storeProductInfo.SaleCount    = TypeHelper.ObjectToInt(reader1["salecount"]);
                storeProductInfo.VisitCount   = TypeHelper.ObjectToInt(reader1["visitcount"]);
                storeProductInfo.ReviewCount  = TypeHelper.ObjectToInt(reader1["reviewcount"]);
                storeProductInfo.Star1        = TypeHelper.ObjectToInt(reader1["star1"]);
                storeProductInfo.Star2        = TypeHelper.ObjectToInt(reader1["star2"]);
                storeProductInfo.Star3        = TypeHelper.ObjectToInt(reader1["star3"]);
                storeProductInfo.Star4        = TypeHelper.ObjectToInt(reader1["star4"]);
                storeProductInfo.Star5        = TypeHelper.ObjectToInt(reader1["star5"]);
                storeProductInfo.AddTime      = TypeHelper.ObjectToDateTime(reader1["addtime"]);
                storeProductInfo.StoreName    = reader1["storename"].ToString();

                productList.Add(storeProductInfo);
            }
            reader1.Close();

            #endregion

            #region 设置商品总数量

            StringBuilder commandText2 = new StringBuilder();

            commandText2.AppendFormat("SELECT COUNT([p].[pid]) FROM [{0}products] AS [p]", RDBSHelper.RDBSTablePre);

            if (onlyStock == 1)
            {
                commandText2.AppendFormat(" LEFT JOIN [{0}productstocks] AS [ps] ON [p].[pid]=[ps].[pid]", RDBSHelper.RDBSTablePre);
            }

            commandText2.AppendFormat(" LEFT JOIN [{0}productkeywords] AS [pk] ON [p].[pid]=[pk].[pid]", RDBSHelper.RDBSTablePre);

            commandText2.AppendFormat(" LEFT JOIN [{0}stores] AS [s] ON [p].[storeid]=[s].[storeid]", RDBSHelper.RDBSTablePre);

            commandText2.Append(" WHERE [p].[state]=0");

            if (categoryInfo != null)
            {
                commandText2.AppendFormat(" AND [p].[cateid]={0}", categoryInfo.CateId);
            }

            if (brandId > 0)
            {
                commandText2.AppendFormat(" AND [p].[brandid]={0}", brandId);
            }

            if (categoryInfo != null && filterPrice > 0 && filterPrice <= catePriceRangeList.Length)
            {
                string[] priceRange = StringHelper.SplitString(catePriceRangeList[filterPrice - 1], "-");
                if (priceRange.Length == 1)
                {
                    commandText2.AppendFormat(" AND [p].[shopprice]>='{0}'", priceRange[0]);
                }
                else if (priceRange.Length == 2)
                {
                    commandText2.AppendFormat(" AND [p].[shopprice]>='{0}' AND [p].[shopprice]<'{1}'", priceRange[0], priceRange[1]);
                }
            }

            if (categoryInfo != null && attrValueIdList.Count > 0 && attrValueIdList.Count <= cateAAndVList.Count)
            {
                commandText2.Append(" AND [p].[pid] IN (SELECT [pa1].[pid] FROM");
                for (int i = 0; i < attrValueIdList.Count; i++)
                {
                    if (i == 0)
                    {
                        commandText2.AppendFormat(" (SELECT [pid] FROM [{0}productattributes] WHERE [attrvalueid]={1}) AS [pa1]", RDBSHelper.RDBSTablePre, attrValueIdList[i]);
                    }
                    else
                    {
                        commandText2.AppendFormat(" INNER JOIN (SELECT [pid] FROM [{0}productattributes] WHERE [attrvalueid]={1}) AS [pa{2}] ON [pa{2}].[pid]=[pa{3}].[pid]", RDBSHelper.RDBSTablePre, attrValueIdList[i], i + 1, i);
                    }
                }
                commandText2.Append(")");
            }

            if (onlyStock == 1)
            {
                commandText2.Append(" AND [ps].[number]>0");
            }

            commandText2.AppendFormat(" AND [pk].[keyword] IN ({0}) ", keywordSql);

            commandText2.Append(" AND [s].[state]=0");

            totalCount = TypeHelper.ObjectToInt(RDBSHelper.ExecuteScalar(CommandType.Text, commandText2.ToString()));

            #endregion
        }
Пример #4
0
 public bool AddStoreProduct(DataTable dtStoreStock, DataTable dtlog, List <int> lstProductId, int StoreId)
 {
     using (SqlConnection sqlConnection = new SqlConnection(base.database.ConnectionString))
     {
         sqlConnection.Open();
         SqlTransaction sqlTransaction = sqlConnection.BeginTransaction();
         try
         {
             foreach (int item in lstProductId)
             {
                 StoreProductInfo storeProductModel = this.GetStoreProductModel(item, StoreId);
                 if (storeProductModel != null)
                 {
                     storeProductModel.SaleStatus = 1;
                     storeProductModel.UpdateTime = DateTime.Now;
                     if (!this.Update(storeProductModel, sqlTransaction))
                     {
                         sqlTransaction.Rollback();
                         return(false);
                     }
                 }
                 else
                 {
                     storeProductModel            = new StoreProductInfo();
                     storeProductModel.ProductId  = item;
                     storeProductModel.StoreId    = StoreId;
                     storeProductModel.SaleCounts = 0;
                     storeProductModel.SaleStatus = 1;
                     storeProductModel.UpdateTime = DateTime.Now;
                     if (this.Add(storeProductModel, sqlTransaction) <= 0)
                     {
                         sqlTransaction.Rollback();
                         return(false);
                     }
                 }
             }
             SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sqlConnection, SqlBulkCopyOptions.CheckConstraints, sqlTransaction);
             sqlBulkCopy.DestinationTableName = dtStoreStock.TableName;
             for (int i = 0; i < dtStoreStock.Columns.Count; i++)
             {
                 sqlBulkCopy.ColumnMappings.Add(dtStoreStock.Columns[i].ColumnName, dtStoreStock.Columns[i].ColumnName);
             }
             sqlBulkCopy.WriteToServer(dtStoreStock);
             SqlBulkCopy sqlBulkCopy2 = new SqlBulkCopy(sqlConnection, SqlBulkCopyOptions.CheckConstraints, sqlTransaction);
             sqlBulkCopy2.DestinationTableName = dtlog.TableName;
             for (int j = 0; j < dtlog.Columns.Count; j++)
             {
                 sqlBulkCopy2.ColumnMappings.Add(dtlog.Columns[j].ColumnName, dtlog.Columns[j].ColumnName);
             }
             sqlBulkCopy2.WriteToServer(dtlog);
             sqlTransaction.Commit();
             return(true);
         }
         catch (Exception)
         {
             sqlTransaction.Rollback();
             return(false);
         }
         finally
         {
             sqlConnection.Close();
         }
     }
 }