/***********************************************************************
* Project: baifenBinfa
* ProjectName: 百分兵法管理系统
* Web: http://chuanyin.com
* Author:
* Email:
* CreateTime: 202403/02
* Description: 暂无
***********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Utility.Extensions;
using SqlSugar;
namespace CoreCms.Net.Repository
{
///
/// 促销表 接口实现
///
public class CoreCmsPromotionRepository : BaseRepository, ICoreCmsPromotionRepository
{
public CoreCmsPromotionRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
//判断商品是否参加团购
///
/// 判断商品是否参加团购/秒杀
///
/// 商品序列
/// 关联促销信息
/// 类型
///
public bool IsInGroup(int goodId, out int promotionId,int type)
{
promotionId = 0;
if (goodId == 0)
{
return false;
}
var dt = DateTime.Now;
var goodIds = "\"" + goodId + "\"";
var model = DbClient.Queryable(
(pro, ccpc) => new object[] {
JoinType.Inner, pro.id == ccpc.promotionId
}
)
.Where((pro, ccpc) => pro.isEnable == true && pro.isDel == false)
.Where((pro, ccpc) => ccpc.parameters.Contains(goodIds))
.Where((pro, ccpc) => pro.type == type)
.Select((pro, ccpc) => ccpc)
.First();
if (model != null)
{
promotionId = model.promotionId.ObjectToInt();
}
return model != null;
}
#region 查询查了并获取导航下级数据
///
/// 查询查了并获取导航下级数据
///
/// 判断集合
/// 排序方式
/// 是否分页
/// 当前页面索引
/// 分布大小
///
///
public async Task> QueryPageAndChildsAsync(Expression> predicate,
Expression> orderByExpression, OrderByType orderByType, bool isToPage = false, int pageIndex = 1,
int pageSize = 20)
{
RefAsync totalCount = 0;
List page;
if (isToPage)
{
page = await DbClient.Queryable()
.OrderByIF(orderByExpression != null, orderByExpression, orderByType)
.WhereIF(predicate != null, predicate).Select(p => new CoreCmsPromotion
{
id = p.id,
name = p.name,
type = p.type,
sort = p.sort,
parameters = p.parameters,
maxNums = p.maxNums,
maxGoodsNums = p.maxGoodsNums,
maxRecevieNums = p.maxRecevieNums,
startTime = p.startTime,
endTime = p.endTime,
isExclusive = p.isExclusive,
isAutoReceive = p.isAutoReceive,
isEnable = p.isEnable,
isDel = p.isDel,
getNumber = SqlFunc.Subqueryable().Where(o => o.promotionId == p.id).Count()
})
.Mapper(p => p.promotionCondition, p => p.promotionCondition.First().promotionId)
.Mapper(p => p.promotionResult, p => p.promotionResult.First().promotionId)
.ToPageListAsync(pageIndex, pageSize, totalCount);
}
else
{
page = await DbClient.Queryable()
.OrderByIF(orderByExpression != null, orderByExpression, orderByType)
.WhereIF(predicate != null, predicate)
.Take(pageSize)
.Select(p => new CoreCmsPromotion
{
id = p.id,
name = p.name,
type = p.type,
sort = p.sort,
parameters = p.parameters,
maxNums = p.maxNums,
maxGoodsNums = p.maxGoodsNums,
maxRecevieNums = p.maxRecevieNums,
startTime = p.startTime,
endTime = p.endTime,
isExclusive = p.isExclusive,
isAutoReceive = p.isAutoReceive,
isEnable = p.isEnable,
isDel = p.isDel,
getNumber = SqlFunc.Subqueryable().Where(o => o.promotionId == p.id).Count()
})
.Mapper(p => p.promotionCondition, p => p.promotionCondition.First().promotionId)
.Mapper(p => p.promotionResult, p => p.promotionResult.First().promotionId)
.ToListAsync();
}
var list = new PageList(page, pageIndex, pageSize, totalCount);
return list;
}
#endregion
}
}