/*********************************************************************** * 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.DTO; using CoreCms.Net.IRepository; using CoreCms.Net.IRepository.UnitOfWork; using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.ViewModels.Basics; using CoreCms.Net.Model.ViewModels.DTO; using CoreCms.Net.Model.ViewModels.UI; using SqlSugar; namespace CoreCms.Net.Repository { /// /// 拼团规则表 接口实现 /// public class CoreCmsPinTuanRuleRepository : BaseRepository, ICoreCmsPinTuanRuleRepository { public CoreCmsPinTuanRuleRepository(IUnitOfWork unitOfWork) : base(unitOfWork) { } #region 取购物车数据的时候,更新价格 /// /// 取购物车数据的时候,更新价格 /// /// /// 规则序列 /// public WebApiCallBack PinTuanInfo(List list, int ruleId) { var res = new WebApiCallBack(); foreach (var item in list) { var ruleModel = DbClient.Queryable( (pinTuanGoods, pinTuanRule) => new object[] { JoinType.Inner, pinTuanGoods.ruleId == pinTuanRule.id }).Where((pinTuanGoods, pinTuanRule) => pinTuanGoods.goodsId == item.products.goodsId && pinTuanRule.isStatusOpen == true && pinTuanRule.id == ruleId) .Select((pinTuanGoods, pinTuanRule) => pinTuanRule).First(); if (ruleModel == null) { res.data = 15603; res.msg = GlobalErrorCodeVars.Code15603; return res; } var dt = DateTime.Now; if (ruleModel.startTime > dt) { res.data = 15601; res.msg = GlobalErrorCodeVars.Code15601; return res; } if (ruleModel.endTime < dt) { res.data = 15602; res.msg = GlobalErrorCodeVars.Code15602; return res; } item.products.price = item.products.price - ruleModel.discountAmount; if (item.products.price < 0) { res.data = 15612; res.msg = GlobalErrorCodeVars.Code15612; return res; } } res.status = true; res.data = list; return res; } #endregion #region 根据条件查询分页数据 /// /// 根据条件查询分页数据 /// /// 判断集合 /// /// 排序方式 /// 当前页面索引 /// 分布大小 /// public async Task> QueryTagPinTuanPageAsync(Expression> predicate, Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, int pageSize = 20) { RefAsync totalCount = 0; var page = await DbClient.Queryable((pgModel, prModel, goodModel) => new object[] { JoinType.Inner,pgModel.ruleId==prModel.id, JoinType.Inner,pgModel.goodsId==goodModel.id }).Select((pgModel, prModel, goodModel) => new TagPinTuanResult { id = prModel.id, name = prModel.name, startTime = prModel.startTime, endTime = prModel.endTime, peopleNumber = prModel.peopleNumber, significantInterval = prModel.significantInterval, discountAmount = prModel.discountAmount, maxNums = prModel.maxNums, maxGoodsNums = prModel.maxGoodsNums, sort = prModel.sort, isStatusOpen = prModel.isStatusOpen, createTime = prModel.createTime, updateTime = prModel.updateTime, goodsId = pgModel.goodsId, goodsName = goodModel.name, goodsImages = goodModel.images, goodsImage = goodModel.image, }).MergeTable() .OrderByIF(orderByExpression != null, orderByExpression, orderByType) .WhereIF(predicate != null, predicate) .With(SqlWith.Null).ToPageListAsync(pageIndex, pageSize, totalCount); var list = new PageList(page, pageIndex, pageSize, totalCount); return list; } #endregion #region 根据规则Id获取拼团相关信息 /// /// 根据规则Id获取拼团相关信息 /// /// 规则序列 /// public async Task GetPinTuanInfo(int ruleId) { var dt = DateTime.Now; var reuslt = await DbClient.Queryable( (prModel, pgModel, goodModel, productsModel) => new object[] { JoinType.Inner, prModel.id ==pgModel.ruleId , JoinType.Inner, pgModel.goodsId == goodModel.id, JoinType.Left, goodModel.id == productsModel.goodsId }) .Where((prModel, pgModel, goodModel, productsModel) => prModel.isStatusOpen == true && prModel.id == ruleId && prModel.endTime > dt && productsModel.isDefalut == true && productsModel.isDel == false) .Select((prModel, pgModel, goodModel, productsModel) => new TagPinTuanResult { id = prModel.id, name = prModel.name, startTime = prModel.startTime, endTime = prModel.endTime, peopleNumber = prModel.peopleNumber, significantInterval = prModel.significantInterval, discountAmount = prModel.discountAmount, maxNums = prModel.maxNums, maxGoodsNums = prModel.maxGoodsNums, sort = prModel.sort, isStatusOpen = prModel.isStatusOpen, createTime = prModel.createTime, updateTime = prModel.updateTime, goodsId = pgModel.goodsId, goodsName = goodModel.name, goodsImages = goodModel.images, goodsPrice = productsModel.price, goodsImage = goodModel.image, }).FirstAsync(); return reuslt; } #endregion #region 根据规则ID数组获取拼团相关信息 /// /// 根据规则ID数组获取拼团相关信息 /// /// 规则序列 /// /// /// /// /// public async Task> GetPinTuanInfos(int[] ruleIds, Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, int pageSize = 20) { var dt = DateTime.Now; RefAsync totalCount = 0; var reuslt = await DbClient.Queryable( (prModel, pgModel, goodModel, productsModel) => new object[] { JoinType.Inner, prModel.id ==pgModel.ruleId , JoinType.Inner, pgModel.goodsId == goodModel.id, JoinType.Left, goodModel.id == productsModel.goodsId }) .Where((prModel, pgModel, goodModel, productsModel) => prModel.isStatusOpen == true && ruleIds.Contains(prModel.id) && prModel.endTime > dt && productsModel.isDefalut == true && productsModel.isDel == false) .Select((prModel, pgModel, goodModel, productsModel) => new PinTuanListDTO { id = prModel.id, goodsId = pgModel.goodsId, sortId = prModel.sort, name = prModel.name, pinTuanRecordNums = SqlFunc.Subqueryable().Where(s => s.objectId == prModel.id).Count(), buyPinTuanCount = SqlFunc.Subqueryable() .LeftJoin((sOrderItem, sOrder) => sOrder.orderId == sOrderItem.orderId) .Where((sOrderItem, sOrder) => sOrderItem.goodsId == pgModel.goodsId && sOrder.orderType == (int)GlobalEnumVars.OrderType.PinTuan && sOrder.objectId == prModel.id) .Sum((sOrderItem, sOrder) => sOrderItem.nums), peopleNumber = prModel.peopleNumber, timestamp = 0, startStatus = 0, goodBrief = goodModel.brief, goodName = goodModel.name, goodThumbnail = goodModel.image, goodImages = goodModel.images, goodStock = productsModel.stock, goodViewCount = goodModel.viewCount, goodUnit = goodModel.unit, mktPrice = productsModel.mktprice, pinTuanPrice = productsModel.price, startTime = prModel.startTime, endTime = prModel.endTime, discountAmount = prModel.discountAmount, maxGoodsNums = prModel.maxGoodsNums, maxNums = prModel.maxNums, }).MergeTable() .OrderByIF(orderByExpression != null, orderByExpression, orderByType) .With(SqlWith.Null).ToPageListAsync(pageIndex, pageSize, totalCount); var list = new PageList(reuslt, pageIndex, pageSize, totalCount); return list; } #endregion } }