/*********************************************************************** * 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.Model.ViewModels.UI; using CoreCms.Net.Utility.Extensions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SqlSugar; namespace CoreCms.Net.Repository { /// /// 拼团记录表 接口实现 /// public class CoreCmsPinTuanRecordRepository : BaseRepository, ICoreCmsPinTuanRecordRepository { public CoreCmsPinTuanRecordRepository(IUnitOfWork unitOfWork) : base(unitOfWork) { } /// /// 生成订单的时候,增加信息 /// /// 订单数据 /// 商品列表 /// 团队序列 /// public async Task OrderAdd(CoreCmsOrder order, List items, int teamId = 0) { var res = new WebApiCallBack() { methodDescription = "拼团生成订单的时候,增加信息" }; var orderItem = items.FirstOrDefault(); if (teamId > 0) { //参加别人拼团 var info = await DbClient.Queryable().FirstAsync(p => p.id == teamId && p.closeTime > DateTime.Now && p.status == (int)GlobalEnumVars.PinTuanRecordStatus.InProgress); if (info == null) { res.status = false; res.data = 15607; res.msg = GlobalErrorCodeVars.Code15607; return res; } //判断订单商品是否是要参加的拼团的商品 if (info.goodsId != orderItem.goodsId) { res.status = false; res.data = 15608; res.msg = GlobalErrorCodeVars.Code15608; return res; } var model = new CoreCmsPinTuanRecord(); model.teamId = teamId; model.userId = order.userId; model.ruleId = info.ruleId; model.status = (int)GlobalEnumVars.PinTuanRecordStatus.InProgress; model.orderId = order.orderId; model.goodsId = (int)orderItem.goodsId; await DbClient.Insertable(model).ExecuteReturnIdentityAsync(); //判断团是否满了,如果满了,就更新状态 if (!string.IsNullOrEmpty(info.parameters)) { var parametersObj = (JObject)JsonConvert.DeserializeObject(info.parameters); if (parametersObj != null && parametersObj.ContainsKey("peopleNumber")) { var countPeopleNumber = await DbClient.Queryable().CountAsync(p => p.teamId == teamId); var peopleNumber = parametersObj["peopleNumber"].ObjectToInt(0); if (peopleNumber > 0 && countPeopleNumber >= peopleNumber) { await DbClient.Updateable() .SetColumns(p => p.status == (int)GlobalEnumVars.PinTuanRecordStatus.Succeed) .Where(p => p.teamId == teamId).ExecuteCommandAsync(); } } } } else { // 自己创建拼团 //取得规则id var pinfo = await DbClient.Queryable((role, goods) => new object[] { JoinType.Inner, role.id == goods.ruleId }).Where((role, goods) => role.isStatusOpen == true && goods.goodsId == orderItem.goodsId).FirstAsync(); if (pinfo == null) { res.status = false; res.data = 10000; res.msg = GlobalErrorCodeVars.Code10000; return res; } var model = new CoreCmsPinTuanRecord(); //model.teamId = teamId; model.userId = order.userId; model.ruleId = pinfo.id; model.status = (int)GlobalEnumVars.PinTuanRecordStatus.InProgress; model.orderId = order.orderId; model.goodsId = (int)orderItem.goodsId; //冗余拼团人数,拼团结束时间字段 model.createTime = DateTime.Now; model.closeTime = DateTime.Now.AddMinutes(pinfo.significantInterval); //附加参数 var parameters = new { peopleNumber = pinfo.peopleNumber }; model.parameters = JsonConvert.SerializeObject(parameters); model.teamId = 0; var outId = await DbClient.Insertable(model).ExecuteReturnIdentityAsync(); if (outId > 0) { await DbClient.Updateable().SetColumns(p => p.teamId == outId).Where(p => p.id == outId).ExecuteCommandAsync(); } } res.status = true; return res; } #region 重写根据条件查询分页数据 /// /// 重写根据条件查询分页数据 /// /// 判断集合 /// 排序方式 /// 当前页面索引 /// 分布大小 /// /// 是否使用WITH(NOLOCK) /// public async Task> QueryPageAsync(Expression> predicate, Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, int pageSize = 20, bool blUseNoLock = false) { RefAsync totalCount = 0; List page; if (blUseNoLock) { page = await DbClient.Queryable((p, sc, ptr, good) => new JoinQueryInfos( JoinType.Left, p.userId == sc.id, JoinType.Left, p.ruleId == ptr.id, JoinType.Left, p.goodsId == good.id)) .Select((p, sc, ptr, good) => new CoreCmsPinTuanRecord { id = p.id, teamId = p.teamId, userId = p.userId, ruleId = p.ruleId, goodsId = p.goodsId, status = p.status, orderId = p.orderId, parameters = p.parameters, closeTime = p.closeTime, createTime = p.createTime, updateTime = p.updateTime, userAvatar = sc.avatarImage, nickName = sc.nickName, ruleName = ptr.name, goodName = good.name }) .With(SqlWith.NoLock) .MergeTable() .OrderByIF(orderByExpression != null, orderByExpression, orderByType) .WhereIF(predicate != null, predicate) .ToPageListAsync(pageIndex, pageSize, totalCount); } else { page = await DbClient.Queryable((p, sc, ptr, good) => new JoinQueryInfos( JoinType.Left, p.userId == sc.id, JoinType.Left, p.ruleId == ptr.id, JoinType.Left, p.goodsId == good.id)) .Select((p, sc, ptr, good) => new CoreCmsPinTuanRecord { id = p.id, teamId = p.teamId, userId = p.userId, ruleId = p.ruleId, goodsId = p.goodsId, status = p.status, orderId = p.orderId, parameters = p.parameters, closeTime = p.closeTime, createTime = p.createTime, updateTime = p.updateTime, userAvatar = sc.avatarImage, nickName = sc.nickName, ruleName = ptr.name, goodName = good.name }) .MergeTable() .OrderByIF(orderByExpression != null, orderByExpression, orderByType) .WhereIF(predicate != null, predicate) .ToPageListAsync(pageIndex, pageSize, totalCount); } var list = new PageList(page, pageIndex, pageSize, totalCount); return list; } #endregion } }