/*********************************************************************** * Project: CoreCms * ProjectName: 百分兵法管理系统 * Web: hhtp://chuanyin.com * Author: * Email: * CreateTime: 202403/02 * Description: 暂无 ***********************************************************************/ using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Threading.Tasks; using CoreCms.Net.Configuration; using CoreCms.Net.Model.Entities; using CoreCms.Net.IRepository; using CoreCms.Net.IRepository.UnitOfWork; using CoreCms.Net.Model.ViewModels.Basics; using CoreCms.Net.Model.ViewModels.DTO.Distribution; using SqlSugar; namespace CoreCms.Net.Repository { /// /// 经销商表 接口实现 /// public class CoreCmsDistributionRepository : BaseRepository, ICoreCmsDistributionRepository { public CoreCmsDistributionRepository(IUnitOfWork unitOfWork) : base(unitOfWork) { } #region 根据条件查询分页数据 /// /// 根据条件查询分页数据 /// /// /// 当前页面索引 /// 分布大小 /// 类型 /// public async Task> QueryOrderPageAsync(int userId, int pageIndex = 1, int pageSize = 20, int typeId = 0) { RefAsync totalCount = 0; var page = await DbClient.Queryable((dOrder, cOrder, userInfo) => new object[] { JoinType.Inner,dOrder.orderId==cOrder.orderId,JoinType.Inner,dOrder.buyUserId==userInfo.id }) .Where((dOrder, cOrder, userInfo) => dOrder.userId == userId) .Select((dOrder, cOrder, userInfo) => new CoreCmsDistributionOrder() { id = dOrder.id, userId = dOrder.userId, buyUserId = dOrder.buyUserId, orderId = dOrder.orderId, amount = dOrder.amount, isSettlement = dOrder.isSettlement, level = dOrder.level, createTime = dOrder.createTime, updateTime = dOrder.updateTime, isDelete = dOrder.isDelete, buyUserNickName = userInfo.nickName, buyUserAvatar = userInfo.avatarImage, goodsAmount = cOrder.goodsAmount, payedAmount = cOrder.payedAmount, }) .With(SqlWith.NoLock) .MergeTable() .Mapper(m => { var id = m.id; m.distributionOrderDetails = DbClient.Queryable() .Where(p => p.distributionOrderId == id).ToList(); }) .WhereIF(typeId > 0, p => p.isSettlement == typeId) .OrderBy(dOrder => dOrder.id, OrderByType.Desc) .ToPageListAsync(pageIndex, pageSize, totalCount); var list = new PageList(page, pageIndex, pageSize, totalCount); return list; } #endregion #region 获取代理商排行 /// /// 获取代理商排行 /// /// 当前页面索引 /// 分布大小 /// public async Task> QueryRankingPageAsync(int pageIndex = 1, int pageSize = 20) { RefAsync totalCount = 0; var page = await DbClient.Queryable() .Select(p => new DistributionRankingDTO() { id = p.userId, nickname = p.name, createtime = p.createTime, totalInCome = SqlFunc.Subqueryable().Where(o => o.userId == p.userId && p.isDelete == false && p.verifyStatus == (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementYes).Sum(o => o.amount), orderCount = SqlFunc.Subqueryable().Where(o => o.userId == p.userId && p.isDelete == false && p.verifyStatus == (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementYes).Count() }) .With(SqlWith.NoLock) .MergeTable() .OrderBy(dOrder => dOrder.totalInCome, OrderByType.Desc) .ToPageListAsync(pageIndex, pageSize, totalCount); var list = new PageList(page, pageIndex, pageSize, totalCount); return list; } #endregion #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() .Select(p => new CoreCmsDistribution { id = p.id, userId = p.userId, name = p.name, gradeId = p.gradeId, mobile = p.mobile, weixin = p.weixin, qq = p.qq, storeName = p.storeName, storeLogo = p.storeLogo, storeBanner = p.storeBanner, storeDesc = p.storeDesc, verifyStatus = p.verifyStatus, createTime = p.createTime, updateTime = p.updateTime, verifyTime = p.verifyTime, isDelete = p.isDelete, UserGradeId = SqlFunc.Subqueryable().Where(o => o.id == p.userId).Select(o => o.grade) }) .MergeTable() .OrderByIF(orderByExpression != null, orderByExpression, orderByType) .WhereIF(predicate != null, predicate) .With(SqlWith.NoLock).ToPageListAsync(pageIndex, pageSize, totalCount); } else { page = await DbClient.Queryable() .Select(p => new CoreCmsDistribution { id = p.id, userId = p.userId, name = p.name, gradeId = p.gradeId, mobile = p.mobile, weixin = p.weixin, qq = p.qq, storeName = p.storeName, storeLogo = p.storeLogo, storeBanner = p.storeBanner, storeDesc = p.storeDesc, verifyStatus = p.verifyStatus, createTime = p.createTime, updateTime = p.updateTime, verifyTime = p.verifyTime, isDelete = p.isDelete, UserGradeId = SqlFunc.Subqueryable().Where(o => o.id == p.userId).Select(o => o.grade) }) .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 } }