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