From 21dc65b5efa695a6b236957fe97620a7e2fe389d Mon Sep 17 00:00:00 2001 From: jianweie code Date: Sat, 6 May 2023 22:57:03 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BC=98=E5=8C=96=E3=80=91=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=8E=A8=E8=8D=90=E5=95=86=E5=93=81=E7=9A=84=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E8=A7=84=E5=88=99=EF=BC=8C=E4=BD=BF=E6=AF=8F=E6=AC=A1?= =?UTF-8?q?=E6=8E=A8=E8=8D=90=E5=95=86=E5=93=81=E7=9A=84=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E9=9A=8F=E6=9C=BA=E5=A4=84=E7=90=86=EF=BC=8C?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E4=B8=8D=E5=90=8C=E6=8E=A8=E8=8D=90=E5=95=86?= =?UTF-8?q?=E5=93=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Good/CoreCmsGoodsRepository.cs | 170 ++++++++++-------- 1 file changed, 96 insertions(+), 74 deletions(-) diff --git a/CoreCms.Net.Repository/Good/CoreCmsGoodsRepository.cs b/CoreCms.Net.Repository/Good/CoreCmsGoodsRepository.cs index 3c5c0271..bf875ceb 100644 --- a/CoreCms.Net.Repository/Good/CoreCmsGoodsRepository.cs +++ b/CoreCms.Net.Repository/Good/CoreCmsGoodsRepository.cs @@ -901,54 +901,18 @@ namespace CoreCms.Net.Repository if (isRecommend) { - list = await DbClient.Queryable((good, pd) => new JoinQueryInfos( - JoinType.Left, good.id == pd.goodsId)) - .Where((good, pd) => pd.isDefalut == true && pd.isDel == false && good.isRecommend == true && good.isDel == false && good.isMarketable == true) - .Select((good, pd) => new GoodListDTO() - { - id = good.id, - name = good.name, - brief = good.brief, - image = !SqlFunc.IsNullOrEmpty(good.image) ? good.image : EmptyOrNullImagePath.GoodImage, - video = good.video, - goodsCategoryId = good.goodsCategoryId, - goodsTypeId = good.goodsTypeId, - brandId = good.brandId, - isNomalVirtual = good.isNomalVirtual, - unit = good.unit, - commentsCount = good.commentsCount, - viewCount = good.viewCount, - buyCount = SqlFunc.Subqueryable() - .LeftJoin((sOrderItem, sOrder) => sOrder.orderId == sOrderItem.orderId) - .Where((sOrderItem, sOrder) => sOrderItem.goodsId == good.id && (sOrder.payStatus == (int)GlobalEnumVars.OrderPayStatus.Yes || sOrder.payStatus == (int)GlobalEnumVars.OrderPayStatus.PartialYes)) - .Sum(p => p.nums), - sort = good.sort, - labelIds = good.labelIds, - createTime = good.createTime, - isRecommend = good.isRecommend, - isHot = good.isHot, - price = pd.price, - mktprice = pd.mktprice, - stock = pd.stock, - pointsDeduction = pd.pointsDeduction, - points = pd.points, - weight = pd.weight, - initialSales = good.initialSales, - }) - .MergeTable() - .OrderBy(p => p.createTime, OrderByType.Desc) - .ToListAsync(); - } - else - { - var ids = await DbClient.Queryable().Where(p => p.isDel == false && p.isMarketable == true) + var ids = await DbClient.Queryable().Where(p => p.isDel == false && p.isMarketable == true && p.isRecommend == true) .Select(p => p.id).ToArrayAsync(); var dbIds = new List(); - if (ids.Any()) + if (!ids.Any()) return list; { for (int i = 0; i < number; i++) { var id = GetRandomNumber(ids); + while (dbIds.Contains(id))//判断集合中有没有生成的随机数,如果有,则重新生成一个随机数,直到生成的随机数list集合中没有才退出循环 + { + id = GetRandomNumber(ids); + } dbIds.Add(id); } if (dbIds.Any()) @@ -956,39 +920,97 @@ namespace CoreCms.Net.Repository list = await DbClient.Queryable((good, pd) => new JoinQueryInfos( JoinType.Left, good.id == pd.goodsId)) .Where((good, pd) => pd.isDefalut == true && pd.isDel == false && good.isRecommend == true && good.isDel == false && good.isMarketable == true) - .Select((good, pd) => new GoodListDTO + .Select((good, pd) => new GoodListDTO + { + id = good.id, + name = good.name, + brief = good.brief, + image = !SqlFunc.IsNullOrEmpty(good.image) ? good.image : EmptyOrNullImagePath.GoodImage, + video = good.video, + goodsCategoryId = good.goodsCategoryId, + goodsTypeId = good.goodsTypeId, + brandId = good.brandId, + isNomalVirtual = good.isNomalVirtual, + unit = good.unit, + commentsCount = good.commentsCount, + viewCount = good.viewCount, + buyCount = SqlFunc.Subqueryable() + .LeftJoin((sOrderItem, sOrder) => sOrder.orderId == sOrderItem.orderId) + .Where((sOrderItem, sOrder) => sOrderItem.goodsId == good.id && (sOrder.payStatus == (int)GlobalEnumVars.OrderPayStatus.Yes || sOrder.payStatus == (int)GlobalEnumVars.OrderPayStatus.PartialYes)) + .Sum(p => p.nums), + sort = good.sort, + labelIds = good.labelIds, + createTime = good.createTime, + isRecommend = good.isRecommend, + isHot = good.isHot, + price = pd.price, + mktprice = pd.mktprice, + stock = pd.stock, + pointsDeduction = pd.pointsDeduction, + points = pd.points, + weight = pd.weight, + initialSales = good.initialSales, + }) + .MergeTable() + .Where(p => dbIds.Contains(p.id)).ToListAsync(); + } + } + + } + else + { + var ids = await DbClient.Queryable().Where(p => p.isDel == false && p.isMarketable == true) + .Select(p => p.id).ToArrayAsync(); + var dbIds = new List(); + if (!ids.Any()) return list; + { + for (int i = 0; i < number; i++) + { + var id = GetRandomNumber(ids); + while (dbIds.Contains(id))//判断集合中有没有生成的随机数,如果有,则重新生成一个随机数,直到生成的随机数list集合中没有才退出循环 { - id = good.id, - name = good.name, - brief = good.brief, - image = !SqlFunc.IsNullOrEmpty(good.image) ? good.image : EmptyOrNullImagePath.GoodImage, - video = good.video, - goodsCategoryId = good.goodsCategoryId, - goodsTypeId = good.goodsTypeId, - brandId = good.brandId, - isNomalVirtual = good.isNomalVirtual, - unit = good.unit, - commentsCount = good.commentsCount, - viewCount = good.viewCount, - buyCount = SqlFunc.Subqueryable() - .LeftJoin((sOrderItem, sOrder) => sOrder.orderId == sOrderItem.orderId) - .Where((sOrderItem, sOrder) => sOrderItem.goodsId == good.id && (sOrder.payStatus == (int)GlobalEnumVars.OrderPayStatus.Yes || sOrder.payStatus == (int)GlobalEnumVars.OrderPayStatus.PartialYes)) - .Sum(p => p.nums), - sort = good.sort, - labelIds = good.labelIds, - createTime = good.createTime, - isRecommend = good.isRecommend, - isHot = good.isHot, - price = pd.price, - mktprice = pd.mktprice, - stock = pd.stock, - pointsDeduction = pd.pointsDeduction, - points = pd.points, - weight = pd.weight, - initialSales = good.initialSales, - }) - .MergeTable() - .Where(p => dbIds.Contains(p.id)).ToListAsync(); + id = GetRandomNumber(ids); + } + dbIds.Add(id); + } + if (dbIds.Any()) + { + list = await DbClient.Queryable((good, pd) => new JoinQueryInfos( + JoinType.Left, good.id == pd.goodsId)) + .Where((good, pd) => pd.isDefalut == true && pd.isDel == false && good.isRecommend == true && good.isDel == false && good.isMarketable == true) + .Select((good, pd) => new GoodListDTO + { + id = good.id, + name = good.name, + brief = good.brief, + image = !SqlFunc.IsNullOrEmpty(good.image) ? good.image : EmptyOrNullImagePath.GoodImage, + video = good.video, + goodsCategoryId = good.goodsCategoryId, + goodsTypeId = good.goodsTypeId, + brandId = good.brandId, + isNomalVirtual = good.isNomalVirtual, + unit = good.unit, + commentsCount = good.commentsCount, + viewCount = good.viewCount, + buyCount = SqlFunc.Subqueryable() + .LeftJoin((sOrderItem, sOrder) => sOrder.orderId == sOrderItem.orderId) + .Where((sOrderItem, sOrder) => sOrderItem.goodsId == good.id && (sOrder.payStatus == (int)GlobalEnumVars.OrderPayStatus.Yes || sOrder.payStatus == (int)GlobalEnumVars.OrderPayStatus.PartialYes)) + .Sum(p => p.nums), + sort = good.sort, + labelIds = good.labelIds, + createTime = good.createTime, + isRecommend = good.isRecommend, + isHot = good.isHot, + price = pd.price, + mktprice = pd.mktprice, + stock = pd.stock, + pointsDeduction = pd.pointsDeduction, + points = pd.points, + weight = pd.weight, + initialSales = good.initialSales, + }) + .MergeTable() + .Where(p => dbIds.Contains(p.id)).ToListAsync(); } } }