/*********************************************************************** * Project: baifenBinfa * ProjectName: 百分兵法管理系统 * Web: http://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; using CoreCms.Net.Model.Entities.Distribution; 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, storeCoordinate = p.storeCoordinate, UserGradeId = SqlFunc.Subqueryable().Where(o => o.id == p.userId).Select(o => o.grade), DistributionAchievementTotals = SqlFunc.Subqueryable() .Where(da => da.userID == p.userId && da.isdelete == false) .Sum(da => da.achievementTotals), DistributionYingLingTotals = SqlFunc.Subqueryable().Where(x=>x.isSettlement==(int )GlobalEnumVars.DistributionOrderSettlementStatus.SettlementNo&&x.userId==p.userId && SqlFunc.Subqueryable().Where(z => z.orderId == x.orderId).Select(z => z.confirmStatus) == (int)GlobalEnumVars.OrderConfirmStatus.ReceiptNotConfirmed).Sum(x => x.amount), DistributionKeLingTotals = SqlFunc.Subqueryable() .Where(x => x.isSettlement == (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementNo && x.userId == p.userId&&SqlFunc.Subqueryable().Where(z=>z.orderId==x.orderId).Select(z=>z.confirmStatus)==(int )GlobalEnumVars.OrderConfirmStatus.ConfirmReceipt) .Sum(x => x.amount), DistributionYiJieSuanTotals = SqlFunc.Subqueryable() .Where(x => x.isSettlement == (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementYes && x.userId == p.userId) .Sum(x => x.amount), }) .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, address = p.address, areaCode = p.areaCode, profession = p.profession, sales=p.sales, storeCoordinate = p.storeCoordinate, UserGradeId = SqlFunc.Subqueryable().Where(o => o.id == p.userId).Select(o => o.grade), DistributionAchievementTotals= SqlFunc.Subqueryable() .Where(da=>da.userID==p.userId&&da.isdelete==false) .Sum(da=>da.achievementTotals), DistributionYingLingTotals = SqlFunc.Subqueryable().Where(x => x.isSettlement == (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementNo && x.userId == p.userId).Sum(x => x.amount), DistributionKeLingTotals = SqlFunc.Subqueryable() .Where(x => x.isSettlement == (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementNo && x.userId == p.userId && SqlFunc.Subqueryable().Where(z => z.orderId == x.orderId).Select(z => z.confirmStatus) == (int)GlobalEnumVars.OrderConfirmStatus.ConfirmReceipt) .Sum(x => x.amount), DistributionYiJieSuanTotals = SqlFunc.Subqueryable().Where(x => x.isSettlement == (int)GlobalEnumVars.DistributionOrderSettlementStatus.SettlementYes && x.userId == p.userId).Sum(x => x.amount), }) .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 } }