/*********************************************************************** * Project: CoreCms * ProjectName: 百分兵法管理系统 * Web: hhtp://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.Caching.Manual; 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.UI; using SqlSugar; namespace CoreCms.Net.Repository { /// /// 经销商订单记录表 接口实现 /// public class CoreCmsDistributionOrderRepository : BaseRepository, ICoreCmsDistributionOrderRepository { public CoreCmsDistributionOrderRepository(IUnitOfWork unitOfWork) : base(unitOfWork) { } #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((dOrder, cOrder, cUser, pUser) => new object[] { JoinType.Inner,dOrder.orderId==cOrder.orderId, JoinType.Inner,dOrder.buyUserId==cUser.id, JoinType.Inner,dOrder.userId==pUser.id }) .Select((dOrder, cOrder, cUser, pUser) => 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 = cUser.nickName, distributorName = pUser.nickName }) .With(SqlWith.NoLock) .MergeTable() .OrderByIF(orderByExpression != null, orderByExpression, orderByType) .WhereIF(predicate != null, predicate) .ToPageListAsync(pageIndex, pageSize, totalCount); } else { page = await DbClient.Queryable((dOrder, cOrder, cUser, pUser) => new object[] { JoinType.Inner,dOrder.orderId==cOrder.orderId, JoinType.Inner,dOrder.buyUserId==cUser.id, JoinType.Inner,dOrder.userId==pUser.id }) .Select((dOrder, cOrder, cUser, pUser) => 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 = cUser.nickName, distributorName = pUser.nickName }) .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 /// /// 获取下级推广订单数量 /// /// 父类序列 /// 1获取1级,其他为2级,0为全部 /// 显示当月 /// public async Task QueryChildOrderCountAsync(int parentId, int type = 1, bool thisMonth = false) { var totalSum = 0; DateTime dt = DateTime.Now; //本月第一天时间 DateTime dtFirst = dt.AddDays(1 - (dt.Day)); dtFirst = new DateTime(dtFirst.Year, dtFirst.Month, dtFirst.Day, 0, 0, 0); //获得某年某月的天数 int dayCount = DateTime.DaysInMonth(dt.Date.Year, dt.Date.Month); //本月最后一天时间 DateTime dtLast = dtFirst.AddDays(dayCount - 1); if (type == 1) { totalSum = await DbClient.Queryable((orders, users) => new JoinQueryInfos(JoinType.Left, orders.buyUserId == users.id)) .WhereIF(thisMonth == true, (orders, users) => orders.createTime > dtFirst && orders.createTime < dtLast) .Where((orders, users) => users.parentId == parentId) .With(SqlWith.NoLock) .CountAsync(); return totalSum; } else if (type == 2) { //获取一级列表 List firstIds = await DbClient.Queryable().Where(p => p.parentId == parentId).Select(p => p.id).ToListAsync(); if (firstIds.Count == 0) { return totalSum; } var allIds = await DbClient.Queryable().Where(p => firstIds.Contains(p.parentId)).Select(p => p.id).ToListAsync(); if (allIds.Count == 0) { return totalSum; } totalSum = await DbClient.Queryable() .Where(p => allIds.Contains(p.buyUserId)) .WhereIF(thisMonth, p => p.createTime > dtFirst && p.createTime < dtLast) .With(SqlWith.NoLock) .CountAsync(); return totalSum; } else { //获取一级列表 List firstIds = await DbClient.Queryable().Where(p => p.parentId == parentId).Select(p => p.id).ToListAsync(); if (firstIds.Count == 0) { return totalSum; } var allIds = await DbClient.Queryable().Where(p => firstIds.Contains(p.id) || firstIds.Contains(p.parentId)).Select(p => p.id).ToListAsync(); if (allIds.Count == 0) { return totalSum; } totalSum = await DbClient.Queryable() .Where(p => allIds.Contains(p.buyUserId)) .WhereIF(thisMonth, p => p.createTime > dtFirst && p.createTime < dtLast) .With(SqlWith.NoLock) .CountAsync(); return totalSum; } } /// /// 获取下级推广订单金额 /// /// 父类序列 /// 1获取1级,其他为2级,0为全部 /// 显示当月 /// public async Task QueryChildOrderMoneySumAsync(int parentId, int type = 1, bool thisMonth = false) { decimal totalSum = 0; DateTime dt = DateTime.Now; //本月第一天时间 DateTime dtFirst = dt.AddDays(1 - (dt.Day)); dtFirst = new DateTime(dtFirst.Year, dtFirst.Month, dtFirst.Day, 0, 0, 0); //获得某年某月的天数 int year = dt.Date.Year; int month = dt.Date.Month; int dayCount = DateTime.DaysInMonth(year, month); //本月最后一天时间 DateTime dtLast = dtFirst.AddDays(dayCount - 1); if (type == 1) { totalSum = await DbClient.Queryable((orders, users) => new JoinQueryInfos(JoinType.Left, orders.buyUserId == users.id)) .Where((orders, users) => users.parentId == parentId) .WhereIF(thisMonth, (orders, users) => orders.createTime > dtFirst && orders.createTime < dtLast) .With(SqlWith.NoLock) .SumAsync((orders, users) => orders.amount); return totalSum; } else if (type == 2) { //获取一级列表 List firstIds = await DbClient.Queryable().Where(p => p.parentId == parentId).Select(p => p.id).ToListAsync(); if (firstIds.Count == 0) { return totalSum; } var allIds = await DbClient.Queryable().Where(p => firstIds.Contains(p.parentId)).Select(p => p.id).ToListAsync(); if (allIds.Count == 0) { return totalSum; } totalSum = await DbClient.Queryable((orders, users) => new JoinQueryInfos(JoinType.Left, orders.buyUserId == users.id)) .Where((orders, users) => allIds.Contains(orders.buyUserId)) .WhereIF(thisMonth, (orders, users) => orders.createTime > dtFirst && orders.createTime < dtLast) .With(SqlWith.NoLock) .SumAsync((orders, users) => orders.amount); return totalSum; } else { //获取全部 List firstIds = await DbClient.Queryable().Where(p => p.parentId == parentId).Select(p => p.id).ToListAsync(); if (firstIds.Count == 0) { return totalSum; } var allIds = await DbClient.Queryable().Where(p => firstIds.Contains(p.id) || firstIds.Contains(p.parentId)).Select(p => p.id).ToListAsync(); if (allIds.Count == 0) { return totalSum; } totalSum = await DbClient.Queryable((orders, users) => new JoinQueryInfos(JoinType.Left, orders.buyUserId == users.id)) .Where((orders, users) => allIds.Contains(orders.buyUserId)) .WhereIF(thisMonth, (orders, users) => orders.createTime > dtFirst && orders.createTime < dtLast) .With(SqlWith.NoLock) .SumAsync((orders, users) => orders.amount); return totalSum; } } } }