using MiAssessment.Admin.Business.Data;
using MiAssessment.Admin.Business.Entities;
using MiAssessment.Admin.Business.Models;
using MiAssessment.Admin.Business.Models.Common;
using MiAssessment.Admin.Business.Models.Distribution;
using MiAssessment.Admin.Business.Services.Interfaces;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
namespace MiAssessment.Admin.Business.Services;
///
/// 分销服务实现
///
public class DistributionService : IDistributionService
{
private readonly AdminBusinessDbContext _dbContext;
private readonly ILogger _logger;
///
/// 邀请码状态名称映射
///
private static readonly Dictionary InviteCodeStatusNames = new()
{
{ 1, "未分配" },
{ 2, "已分配" },
{ 3, "已使用" }
};
///
/// 佣金状态名称映射
///
private static readonly Dictionary CommissionStatusNames = new()
{
{ 1, "待结算" },
{ 2, "已结算" }
};
///
/// 佣金层级名称映射
///
private static readonly Dictionary CommissionLevelNames = new()
{
{ 1, "一级佣金" },
{ 2, "二级佣金" }
};
///
/// 订单类型名称映射
///
private static readonly Dictionary OrderTypeNames = new()
{
{ 1, "测评订单" },
{ 2, "学业规划订单" }
};
///
/// 提现状态名称映射
///
private static readonly Dictionary WithdrawalStatusNames = new()
{
{ 1, "待审核" },
{ 2, "处理中" },
{ 3, "已完成" },
{ 4, "已拒绝" }
};
///
/// 用户等级名称映射
///
private static readonly Dictionary UserLevelNames = new()
{
{ 1, "普通用户" },
{ 2, "合伙人" },
{ 3, "渠道合伙人" }
};
///
/// 邀请码字符集(大写字母)
///
private const string InviteCodeCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
///
/// 邀请码长度
///
private const int InviteCodeLength = 5;
///
/// 构造函数
///
/// 数据库上下文
/// 日志记录器
public DistributionService(
AdminBusinessDbContext dbContext,
ILogger logger)
{
_dbContext = dbContext;
_logger = logger;
}
#region 邀请码管理
///
public async Task> GetInviteCodeListAsync(InviteCodeQueryRequest request)
{
// 构建查询,过滤软删除记录
var query = _dbContext.InviteCodes
.AsNoTracking()
.Include(c => c.AssignUser)
.Include(c => c.UseUser)
.Where(c => !c.IsDeleted);
// 应用过滤条件
query = ApplyInviteCodeQueryFilters(query, request);
// 获取总数
var total = await query.CountAsync();
// 分页查询,按创建时间降序排列
var items = await query
.OrderByDescending(c => c.CreateTime)
.Skip(request.Skip)
.Take(request.PageSize)
.Select(c => new InviteCodeDto
{
Id = c.Id,
Code = c.Code,
BatchNo = c.BatchNo,
AssignUserId = c.AssignUserId,
AssignUserNickname = c.AssignUser != null ? c.AssignUser.Nickname : null,
AssignTime = c.AssignTime,
UseUserId = c.UseUserId,
UseUserNickname = c.UseUser != null ? c.UseUser.Nickname : null,
UseOrderId = c.UseOrderId,
UseTime = c.UseTime,
Status = c.Status,
StatusName = GetInviteCodeStatusName(c.Status),
CreateTime = c.CreateTime
})
.ToListAsync();
return PagedResult.Create(items, total, request.Page, request.PageSize);
}
///
public async Task GenerateInviteCodesAsync(int count)
{
if (count <= 0 || count > 1000)
{
throw new BusinessException(ErrorCodes.ParamError, "生成数量必须在1-1000之间");
}
// 生成批次号:年月日时分秒 + 4位随机数
var batchNo = $"{DateTime.Now:yyyyMMddHHmmss}{new Random().Next(1000, 9999)}";
// 获取已存在的邀请码,用于去重
var existingCodesList = await _dbContext.InviteCodes
.AsNoTracking()
.Select(c => c.Code)
.ToListAsync();
var existingCodes = existingCodesList.ToHashSet();
// 生成唯一邀请码
var generatedCodes = GenerateUniqueCodes(count, existingCodes);
// 创建邀请码实体
var inviteCodes = generatedCodes.Select(code => new InviteCode
{
Code = code,
BatchNo = batchNo,
Status = 1, // 未分配
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now,
IsDeleted = false
}).ToList();
// 批量插入
_dbContext.InviteCodes.AddRange(inviteCodes);
await _dbContext.SaveChangesAsync();
_logger.LogInformation("生成邀请码成功,批次号: {BatchNo}, 数量: {Count}", batchNo, count);
return new GenerateResult
{
BatchNo = batchNo,
Count = generatedCodes.Count,
Codes = generatedCodes
};
}
///
public async Task AssignInviteCodesAsync(List inviteCodeIds, long userId)
{
if (inviteCodeIds == null || inviteCodeIds.Count == 0)
{
throw new BusinessException(ErrorCodes.ParamError, "请选择要分配的邀请码");
}
// 验证用户是否存在
var userExists = await _dbContext.Users
.AsNoTracking()
.AnyAsync(u => u.Id == userId && !u.IsDeleted);
if (!userExists)
{
throw new BusinessException(ErrorCodes.UserNotFound, "用户不存在");
}
// 获取要分配的邀请码
var inviteCodes = await _dbContext.InviteCodes
.Where(c => inviteCodeIds.Contains(c.Id) && !c.IsDeleted)
.ToListAsync();
if (inviteCodes.Count == 0)
{
throw new BusinessException(ErrorCodes.InviteCodeNotFound, "邀请码不存在");
}
// 检查是否有已分配或已使用的邀请码
var alreadyAssigned = inviteCodes.Where(c => c.Status != 1).ToList();
if (alreadyAssigned.Count > 0)
{
var codes = string.Join(", ", alreadyAssigned.Select(c => c.Code));
throw new BusinessException(ErrorCodes.InviteCodeAlreadyAssigned, $"以下邀请码已分配或已使用: {codes}");
}
// 分配邀请码
var now = DateTime.Now;
foreach (var inviteCode in inviteCodes)
{
inviteCode.AssignUserId = userId;
inviteCode.AssignTime = now;
inviteCode.Status = 2; // 已分配
inviteCode.UpdateTime = now;
}
await _dbContext.SaveChangesAsync();
_logger.LogInformation("分配邀请码成功,用户ID: {UserId}, 数量: {Count}", userId, inviteCodes.Count);
return true;
}
///
public async Task> ExportInviteCodesAsync(InviteCodeQueryRequest request)
{
// 构建查询,过滤软删除记录
var query = _dbContext.InviteCodes
.AsNoTracking()
.Include(c => c.AssignUser)
.Include(c => c.UseUser)
.Where(c => !c.IsDeleted);
// 应用过滤条件
query = ApplyInviteCodeQueryFilters(query, request);
// 查询所有匹配的记录(不分页)
var items = await query
.OrderByDescending(c => c.CreateTime)
.Select(c => new InviteCodeDto
{
Id = c.Id,
Code = c.Code,
BatchNo = c.BatchNo,
AssignUserId = c.AssignUserId,
AssignUserNickname = c.AssignUser != null ? c.AssignUser.Nickname : null,
AssignTime = c.AssignTime,
UseUserId = c.UseUserId,
UseUserNickname = c.UseUser != null ? c.UseUser.Nickname : null,
UseOrderId = c.UseOrderId,
UseTime = c.UseTime,
Status = c.Status,
StatusName = GetInviteCodeStatusName(c.Status),
CreateTime = c.CreateTime
})
.ToListAsync();
_logger.LogInformation("导出邀请码成功,数量: {Count}", items.Count);
return items;
}
#endregion
#region 佣金记录管理
///
public async Task> GetCommissionListAsync(CommissionQueryRequest request)
{
// 构建查询,过滤软删除记录
var query = _dbContext.Commissions
.AsNoTracking()
.Include(c => c.User)
.Include(c => c.FromUser)
.Include(c => c.Order)
.Where(c => !c.IsDeleted);
// 应用过滤条件
query = ApplyCommissionQueryFilters(query, request);
// 获取总数
var total = await query.CountAsync();
// 分页查询,按创建时间降序排列
var items = await query
.OrderByDescending(c => c.CreateTime)
.Skip(request.Skip)
.Take(request.PageSize)
.Select(c => new CommissionDto
{
Id = c.Id,
UserId = c.UserId,
UserNickname = c.User != null ? c.User.Nickname : null,
FromUserId = c.FromUserId,
FromUserNickname = c.FromUser != null ? c.FromUser.Nickname : null,
OrderId = c.OrderId,
OrderNo = c.Order != null ? c.Order.OrderNo : null,
OrderAmount = c.OrderAmount,
CommissionRate = c.CommissionRate,
CommissionAmount = c.CommissionAmount,
Level = c.Level,
LevelName = GetCommissionLevelName(c.Level),
Status = c.Status,
StatusName = GetCommissionStatusName(c.Status),
SettleTime = c.SettleTime,
CreateTime = c.CreateTime
})
.ToListAsync();
return PagedResult.Create(items, total, request.Page, request.PageSize);
}
///
public async Task GetCommissionDetailAsync(long id)
{
var commission = await _dbContext.Commissions
.AsNoTracking()
.Include(c => c.User)
.Include(c => c.FromUser)
.Include(c => c.Order)
.Where(c => c.Id == id && !c.IsDeleted)
.Select(c => new CommissionDetailDto
{
Id = c.Id,
UserId = c.UserId,
UserNickname = c.User != null ? c.User.Nickname : null,
UserUid = c.User != null ? c.User.Uid : null,
UserPhone = c.User != null ? c.User.Phone : null,
FromUserId = c.FromUserId,
FromUserNickname = c.FromUser != null ? c.FromUser.Nickname : null,
FromUserUid = c.FromUser != null ? c.FromUser.Uid : null,
FromUserPhone = c.FromUser != null ? c.FromUser.Phone : null,
OrderId = c.OrderId,
OrderNo = c.Order != null ? c.Order.OrderNo : null,
OrderAmount = c.OrderAmount,
OrderType = c.Order != null ? c.Order.OrderType : null,
OrderTypeName = c.Order != null ? GetOrderTypeName(c.Order.OrderType) : null,
ProductName = c.Order != null ? c.Order.ProductName : null,
OrderPayTime = c.Order != null ? c.Order.PayTime : null,
CommissionRate = c.CommissionRate,
CommissionAmount = c.CommissionAmount,
Level = c.Level,
LevelName = GetCommissionLevelName(c.Level),
Status = c.Status,
StatusName = GetCommissionStatusName(c.Status),
SettleTime = c.SettleTime,
CreateTime = c.CreateTime
})
.FirstOrDefaultAsync();
return commission;
}
///
public async Task GetCommissionStatisticsAsync(CommissionStatisticsRequest request)
{
// 构建查询,过滤软删除记录
var query = _dbContext.Commissions
.AsNoTracking()
.Where(c => !c.IsDeleted);
// 按用户ID筛选
if (request.UserId.HasValue)
{
query = query.Where(c => c.UserId == request.UserId.Value);
}
// 按创建时间范围筛选
if (request.CreateTimeStart.HasValue)
{
query = query.Where(c => c.CreateTime >= request.CreateTimeStart.Value);
}
if (request.CreateTimeEnd.HasValue)
{
query = query.Where(c => c.CreateTime <= request.CreateTimeEnd.Value);
}
// 计算统计数据
var commissions = await query.ToListAsync();
var statistics = new CommissionStatisticsDto
{
TotalAmount = commissions.Sum(c => c.CommissionAmount),
PendingAmount = commissions.Where(c => c.Status == 1).Sum(c => c.CommissionAmount),
SettledAmount = commissions.Where(c => c.Status == 2).Sum(c => c.CommissionAmount),
TotalCount = commissions.Count,
PendingCount = commissions.Count(c => c.Status == 1),
SettledCount = commissions.Count(c => c.Status == 2)
};
return statistics;
}
///
public async Task> ExportCommissionsAsync(CommissionQueryRequest request)
{
// 构建查询,过滤软删除记录
var query = _dbContext.Commissions
.AsNoTracking()
.Include(c => c.User)
.Include(c => c.FromUser)
.Include(c => c.Order)
.Where(c => !c.IsDeleted);
// 应用过滤条件
query = ApplyCommissionQueryFilters(query, request);
// 查询所有匹配的记录(不分页)
var items = await query
.OrderByDescending(c => c.CreateTime)
.Select(c => new CommissionDto
{
Id = c.Id,
UserId = c.UserId,
UserNickname = c.User != null ? c.User.Nickname : null,
FromUserId = c.FromUserId,
FromUserNickname = c.FromUser != null ? c.FromUser.Nickname : null,
OrderId = c.OrderId,
OrderNo = c.Order != null ? c.Order.OrderNo : null,
OrderAmount = c.OrderAmount,
CommissionRate = c.CommissionRate,
CommissionAmount = c.CommissionAmount,
Level = c.Level,
LevelName = GetCommissionLevelName(c.Level),
Status = c.Status,
StatusName = GetCommissionStatusName(c.Status),
SettleTime = c.SettleTime,
CreateTime = c.CreateTime
})
.ToListAsync();
_logger.LogInformation("导出佣金记录成功,数量: {Count}", items.Count);
return items;
}
#endregion
#region 提现审核管理
///
public async Task> GetWithdrawalListAsync(WithdrawalQueryRequest request)
{
// 构建查询,过滤软删除记录
var query = _dbContext.Withdrawals
.AsNoTracking()
.Include(w => w.User)
.Where(w => !w.IsDeleted);
// 应用过滤条件
query = ApplyWithdrawalQueryFilters(query, request);
// 获取总数
var total = await query.CountAsync();
// 分页查询,按创建时间降序排列
var items = await query
.OrderByDescending(w => w.CreateTime)
.Skip(request.Skip)
.Take(request.PageSize)
.Select(w => new WithdrawalDto
{
Id = w.Id,
WithdrawalNo = w.WithdrawalNo,
UserId = w.UserId,
UserNickname = w.User != null ? w.User.Nickname : null,
UserPhone = w.User != null ? w.User.Phone : null,
Amount = w.Amount,
BeforeBalance = w.BeforeBalance,
AfterBalance = w.AfterBalance,
Status = w.Status,
StatusName = GetWithdrawalStatusName(w.Status),
AuditUserId = w.AuditUserId,
AuditUserName = null, // 审核人名称需要从管理员表获取,暂时为空
AuditTime = w.AuditTime,
AuditRemark = w.AuditRemark,
PayTime = w.PayTime,
PayTransactionId = w.PayTransactionId,
CreateTime = w.CreateTime
})
.ToListAsync();
return PagedResult.Create(items, total, request.Page, request.PageSize);
}
///
public async Task GetWithdrawalDetailAsync(long id)
{
var withdrawal = await _dbContext.Withdrawals
.AsNoTracking()
.Include(w => w.User)
.Where(w => w.Id == id && !w.IsDeleted)
.Select(w => new WithdrawalDetailDto
{
Id = w.Id,
WithdrawalNo = w.WithdrawalNo,
UserId = w.UserId,
UserNickname = w.User != null ? w.User.Nickname : null,
UserPhone = w.User != null ? w.User.Phone : null,
UserUid = w.User != null ? w.User.Uid : null,
UserCurrentBalance = w.User != null ? w.User.Balance : 0,
UserTotalIncome = w.User != null ? w.User.TotalIncome : 0,
UserWithdrawnAmount = w.User != null ? w.User.WithdrawnAmount : 0,
UserLevel = w.User != null ? w.User.UserLevel : 0,
UserLevelName = w.User != null ? GetUserLevelName(w.User.UserLevel) : null,
Amount = w.Amount,
BeforeBalance = w.BeforeBalance,
AfterBalance = w.AfterBalance,
Status = w.Status,
StatusName = GetWithdrawalStatusName(w.Status),
AuditUserId = w.AuditUserId,
AuditUserName = null,
AuditTime = w.AuditTime,
AuditRemark = w.AuditRemark,
PayTime = w.PayTime,
PayTransactionId = w.PayTransactionId,
CreateTime = w.CreateTime
})
.FirstOrDefaultAsync();
return withdrawal;
}
///
public async Task ApproveWithdrawalAsync(ApproveWithdrawalRequest request)
{
// 获取提现记录
var withdrawal = await _dbContext.Withdrawals
.Where(w => w.Id == request.Id && !w.IsDeleted)
.FirstOrDefaultAsync();
if (withdrawal == null)
{
throw new BusinessException(ErrorCodes.WithdrawalNotFound, "提现记录不存在");
}
// 检查状态是否为待审核(1)
if (withdrawal.Status != 1)
{
throw new BusinessException(ErrorCodes.WithdrawalCannotApprove, "只有待审核状态的提现申请才能审批通过");
}
// 更新状态为处理中(2)
var now = DateTime.Now;
withdrawal.Status = 2;
withdrawal.AuditUserId = request.AuditUserId;
withdrawal.AuditTime = now;
withdrawal.AuditRemark = request.AuditRemark;
withdrawal.UpdateTime = now;
await _dbContext.SaveChangesAsync();
_logger.LogInformation("提现审批通过,提现单号: {WithdrawalNo}, 审核人ID: {AuditUserId}",
withdrawal.WithdrawalNo, request.AuditUserId);
return true;
}
///
public async Task RejectWithdrawalAsync(RejectWithdrawalRequest request)
{
if (string.IsNullOrWhiteSpace(request.AuditRemark))
{
throw new BusinessException(ErrorCodes.ParamError, "拒绝原因不能为空");
}
// 获取提现记录
var withdrawal = await _dbContext.Withdrawals
.Where(w => w.Id == request.Id && !w.IsDeleted)
.FirstOrDefaultAsync();
if (withdrawal == null)
{
throw new BusinessException(ErrorCodes.WithdrawalNotFound, "提现记录不存在");
}
// 检查状态是否为待审核(1)
if (withdrawal.Status != 1)
{
throw new BusinessException(ErrorCodes.WithdrawalCannotReject, "只有待审核状态的提现申请才能拒绝");
}
// 获取用户,回滚余额
var user = await _dbContext.Users
.Where(u => u.Id == withdrawal.UserId && !u.IsDeleted)
.FirstOrDefaultAsync();
if (user == null)
{
throw new BusinessException(ErrorCodes.UserNotFound, "用户不存在");
}
// 使用事务确保数据一致性
using var transaction = await _dbContext.Database.BeginTransactionAsync();
try
{
var now = DateTime.Now;
// 回滚用户余额
user.Balance += withdrawal.Amount;
user.WithdrawnAmount -= withdrawal.Amount;
user.UpdateTime = now;
// 更新提现状态为已拒绝(4)
withdrawal.Status = 4;
withdrawal.AuditUserId = request.AuditUserId;
withdrawal.AuditTime = now;
withdrawal.AuditRemark = request.AuditRemark;
withdrawal.UpdateTime = now;
await _dbContext.SaveChangesAsync();
await transaction.CommitAsync();
_logger.LogInformation("提现已拒绝,提现单号: {WithdrawalNo}, 审核人ID: {AuditUserId}, 原因: {AuditRemark}, 已回滚余额: {Amount}",
withdrawal.WithdrawalNo, request.AuditUserId, request.AuditRemark, withdrawal.Amount);
return true;
}
catch (Exception ex)
{
await transaction.RollbackAsync();
_logger.LogError(ex, "拒绝提现失败,提现单号: {WithdrawalNo}", withdrawal.WithdrawalNo);
throw;
}
}
///
public async Task CompleteWithdrawalAsync(CompleteWithdrawalRequest request)
{
if (string.IsNullOrWhiteSpace(request.PayTransactionId))
{
throw new BusinessException(ErrorCodes.ParamError, "打款交易号不能为空");
}
// 获取提现记录
var withdrawal = await _dbContext.Withdrawals
.Where(w => w.Id == request.Id && !w.IsDeleted)
.FirstOrDefaultAsync();
if (withdrawal == null)
{
throw new BusinessException(ErrorCodes.WithdrawalNotFound, "提现记录不存在");
}
// 检查状态是否为处理中(2)
if (withdrawal.Status != 2)
{
throw new BusinessException(ErrorCodes.WithdrawalCannotComplete, "只有处理中状态的提现申请才能完成");
}
// 更新状态为已完成(3)
var now = DateTime.Now;
withdrawal.Status = 3;
withdrawal.PayTime = now;
withdrawal.PayTransactionId = request.PayTransactionId;
withdrawal.UpdateTime = now;
await _dbContext.SaveChangesAsync();
_logger.LogInformation("提现已完成,提现单号: {WithdrawalNo}, 打款交易号: {PayTransactionId}",
withdrawal.WithdrawalNo, request.PayTransactionId);
return true;
}
///
public async Task> ExportWithdrawalsAsync(WithdrawalQueryRequest request)
{
// 构建查询,过滤软删除记录
var query = _dbContext.Withdrawals
.AsNoTracking()
.Include(w => w.User)
.Where(w => !w.IsDeleted);
// 应用过滤条件
query = ApplyWithdrawalQueryFilters(query, request);
// 查询所有匹配的记录(不分页)
var items = await query
.OrderByDescending(w => w.CreateTime)
.Select(w => new WithdrawalDto
{
Id = w.Id,
WithdrawalNo = w.WithdrawalNo,
UserId = w.UserId,
UserNickname = w.User != null ? w.User.Nickname : null,
UserPhone = w.User != null ? w.User.Phone : null,
Amount = w.Amount,
BeforeBalance = w.BeforeBalance,
AfterBalance = w.AfterBalance,
Status = w.Status,
StatusName = GetWithdrawalStatusName(w.Status),
AuditUserId = w.AuditUserId,
AuditUserName = null,
AuditTime = w.AuditTime,
AuditRemark = w.AuditRemark,
PayTime = w.PayTime,
PayTransactionId = w.PayTransactionId,
CreateTime = w.CreateTime
})
.ToListAsync();
_logger.LogInformation("导出提现记录成功,数量: {Count}", items.Count);
return items;
}
#endregion
#region 私有方法
///
/// 应用邀请码查询过滤条件
///
/// 查询
/// 请求
/// 过滤后的查询
private IQueryable ApplyInviteCodeQueryFilters(IQueryable query, InviteCodeQueryRequest request)
{
// 按邀请码模糊搜索
if (!string.IsNullOrWhiteSpace(request.Code))
{
query = query.Where(c => c.Code.Contains(request.Code));
}
// 按批次号模糊搜索
if (!string.IsNullOrWhiteSpace(request.BatchNo))
{
query = query.Where(c => c.BatchNo != null && c.BatchNo.Contains(request.BatchNo));
}
// 按分配用户ID筛选
if (request.AssignUserId.HasValue)
{
query = query.Where(c => c.AssignUserId == request.AssignUserId.Value);
}
// 按状态筛选
if (request.Status.HasValue)
{
query = query.Where(c => c.Status == request.Status.Value);
}
return query;
}
///
/// 生成唯一邀请码
///
/// 生成数量
/// 已存在的邀请码集合
/// 生成的邀请码列表
internal List GenerateUniqueCodes(int count, HashSet existingCodes)
{
var result = new List(count);
var generatedSet = new HashSet();
var random = new Random();
var maxAttempts = count * 10; // 最大尝试次数
var attempts = 0;
while (result.Count < count && attempts < maxAttempts)
{
var code = GenerateRandomCode(random);
attempts++;
// 检查是否唯一(不在已存在的集合中,也不在本次生成的集合中)
if (!existingCodes.Contains(code) && generatedSet.Add(code))
{
result.Add(code);
}
}
if (result.Count < count)
{
throw new BusinessException(ErrorCodes.SystemError, "无法生成足够的唯一邀请码,请稍后重试");
}
return result;
}
///
/// 生成随机邀请码(5位大写字母)
///
/// 随机数生成器
/// 邀请码
private static string GenerateRandomCode(Random random)
{
var chars = new char[InviteCodeLength];
for (int i = 0; i < InviteCodeLength; i++)
{
chars[i] = InviteCodeCharset[random.Next(InviteCodeCharset.Length)];
}
return new string(chars);
}
///
/// 获取邀请码状态名称
///
/// 状态值
/// 状态名称
private static string GetInviteCodeStatusName(int status)
{
return InviteCodeStatusNames.TryGetValue(status, out var name) ? name : "未知";
}
///
/// 应用佣金记录查询过滤条件
///
/// 查询
/// 请求
/// 过滤后的查询
private IQueryable ApplyCommissionQueryFilters(IQueryable query, CommissionQueryRequest request)
{
// 按获得佣金的用户ID筛选
if (request.UserId.HasValue)
{
query = query.Where(c => c.UserId == request.UserId.Value);
}
// 按来源用户ID筛选
if (request.FromUserId.HasValue)
{
query = query.Where(c => c.FromUserId == request.FromUserId.Value);
}
// 按订单ID筛选
if (request.OrderId.HasValue)
{
query = query.Where(c => c.OrderId == request.OrderId.Value);
}
// 按层级筛选
if (request.Level.HasValue)
{
query = query.Where(c => c.Level == request.Level.Value);
}
// 按状态筛选
if (request.Status.HasValue)
{
query = query.Where(c => c.Status == request.Status.Value);
}
// 按创建时间范围筛选
if (request.CreateTimeStart.HasValue)
{
query = query.Where(c => c.CreateTime >= request.CreateTimeStart.Value);
}
if (request.CreateTimeEnd.HasValue)
{
query = query.Where(c => c.CreateTime <= request.CreateTimeEnd.Value);
}
return query;
}
///
/// 获取佣金状态名称
///
/// 状态值
/// 状态名称
private static string GetCommissionStatusName(int status)
{
return CommissionStatusNames.TryGetValue(status, out var name) ? name : "未知";
}
///
/// 获取佣金层级名称
///
/// 层级值
/// 层级名称
private static string GetCommissionLevelName(int level)
{
return CommissionLevelNames.TryGetValue(level, out var name) ? name : "未知";
}
///
/// 获取订单类型名称
///
/// 订单类型
/// 订单类型名称
private static string GetOrderTypeName(int orderType)
{
return OrderTypeNames.TryGetValue(orderType, out var name) ? name : "未知";
}
///
/// 应用提现记录查询过滤条件
///
/// 查询
/// 请求
/// 过滤后的查询
private IQueryable ApplyWithdrawalQueryFilters(IQueryable query, WithdrawalQueryRequest request)
{
// 按提现单号模糊搜索
if (!string.IsNullOrWhiteSpace(request.WithdrawalNo))
{
query = query.Where(w => w.WithdrawalNo.Contains(request.WithdrawalNo));
}
// 按用户ID筛选
if (request.UserId.HasValue)
{
query = query.Where(w => w.UserId == request.UserId.Value);
}
// 按状态筛选
if (request.Status.HasValue)
{
query = query.Where(w => w.Status == request.Status.Value);
}
// 按创建时间范围筛选
if (request.CreateTimeStart.HasValue)
{
query = query.Where(w => w.CreateTime >= request.CreateTimeStart.Value);
}
if (request.CreateTimeEnd.HasValue)
{
query = query.Where(w => w.CreateTime <= request.CreateTimeEnd.Value);
}
return query;
}
///
/// 获取提现状态名称
///
/// 状态值
/// 状态名称
private static string GetWithdrawalStatusName(int status)
{
return WithdrawalStatusNames.TryGetValue(status, out var name) ? name : "未知";
}
///
/// 获取用户等级名称
///
/// 等级值
/// 等级名称
private static string GetUserLevelName(int level)
{
return UserLevelNames.TryGetValue(level, out var name) ? name : "未知";
}
#endregion
}