diff --git a/CoreCms.Net.Repository/Good/CoreCmsGoodsRepository.cs b/CoreCms.Net.Repository/Good/CoreCmsGoodsRepository.cs
index f00b0f4d..0bc4d13a 100644
--- a/CoreCms.Net.Repository/Good/CoreCmsGoodsRepository.cs
+++ b/CoreCms.Net.Repository/Good/CoreCmsGoodsRepository.cs
@@ -888,133 +888,43 @@ namespace CoreCms.Net.Repository
///
public async Task> GetGoodsRecommendList(int number, bool isRecommend = false)
{
- var list = new List();
-
- if (isRecommend)
- {
- 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()) return list;
+ var 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 == isRecommend && good.isDel == false && good.isMarketable == true)
+ .Select((good, pd) => new GoodListDTO
{
- if (ids.Length < number)
- {
- number = ids.Length;
- }
+ 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((sOrderItem, sOrder) => sOrderItem.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 => SqlFunc.GetRandom()).Take(number).ToListAsync();
- 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())
- {
- 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((sOrderItem, sOrder) => sOrderItem.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;
- {
- if (ids.Length < number)
- {
- number = ids.Length;
- }
-
- 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())
- {
- 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((sOrderItem, sOrder) => sOrderItem.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();
- }
- }
- }
return list;
}