/***********************************************************************
* 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.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;
}
}
}
}