Files
StoreWeb/Modules/Store.Users/Services/UserManagementService.TopUp.cs
T
2026-10-23 19:01:28 +08:00

83 lines
4.2 KiB
C#

using Store.Users.Contracts.Enums;
using MAX.Framework.Validation;
using MAX.Framework.Commons;
using Store.Users.Contracts.Dtos;
using Store.Users.Entities;
namespace Store.Users.Services;
public sealed partial class UserManagementService
{
/// <summary>为本人或授权账户提交充值备注,昵称从目标账户读取。</summary>
public async Task<long> AddTopUpMessage(UserTopUpMessageRequest request, CancellationToken ct)
{
RequestValidator.Validate(request);
var actor = await Actor(orm, ct);
var name = string.IsNullOrWhiteSpace(request.UserName) ? actor.UserName : request.UserName.Trim();
var target = await orm.Select<UserEntity>().Where(u => u.UserName == name).FirstAsync(ct)
?? throw new AppException("用户不存在");
if (!UserAccessPolicy.CanUseSelfService(actor, target))
throw new AppException("无权为该账户提交充值备注", 403);
return await orm.Insert(new UserTopUpMessageEntity
{
UserName = target.UserName, NickName = target.NickName, Message = request.Message.Trim()
}).ExecuteIdentityAsync(ct);
}
/// <summary>管理范围内记录人工处理结果。备注处理不会自动增加积分或余额。</summary>
public async Task UpdateTopUpMessage(UserTopUpResultRequest request, CancellationToken ct)
{
RequestValidator.Validate(request);
var actor = await Actor(orm, ct);
var message = await orm.Select<UserTopUpMessageEntity>().Where(m => m.Id == request.Id).FirstAsync(ct)
?? throw new AppException("充值备注不存在");
if (!IsAdmin(actor))
{
var target = await orm.Select<UserEntity>().Where(u => u.UserName == message.UserName).FirstAsync(ct);
if (target == null || !UserAccessPolicy.CanManage(actor, target))
throw new AppException("无权处理该账户的充值备注", 403);
}
await orm.Update<UserTopUpMessageEntity>().Set(m => m.Result, request.Result.Trim())
.Where(m => m.Id == request.Id).ExecuteAffrowsAsync(ct);
}
/// <summary>管理员查看全部,主账号查看本人和直属子账号,子账号仅查看本人备注。</summary>
public async Task<UserPage<UserTopUpMessageEntity>> TopUpMessages(UserSearchRequest request, CancellationToken ct)
{
RequestValidator.Validate(request);
var actor = await Actor(orm, ct);
var select = orm.Select<UserTopUpMessageEntity>();
if (!IsAdmin(actor))
{
if (actor.IsMainUser)
select = select.Where(m => m.UserName == actor.UserName || orm.Select<UserEntity>()
.Where(u => u.UserName == m.UserName && u.ParentUserName == actor.UserName && (u.SaLevel == null || u.SaLevel != UserAdminLevel.SuperAdmin)).Any());
else select = select.Where(m => m.UserName == actor.UserName);
}
var total = await select.CountAsync(ct);
var rows = await select.OrderByDescending(m => m.Id).Page(request.Page, request.PageSize).ToListAsync(ct);
return new(total, rows);
}
/// <summary>管理员维护代理充值二维码,使用旧表唯一代理编码原子更新或插入。</summary>
public async Task UpdateTopUpQrcode(UserTopUpQrcodeRequest request, CancellationToken ct)
{
RequestValidator.Validate(request);
var actor = await Actor(orm, ct);
if (!IsAdmin(actor)) throw new AppException("仅管理员可以维护充值二维码", 403);
await orm.InsertOrUpdate<UserTopUpQrcodeEntity>().SetSource(new UserTopUpQrcodeEntity
{
AgentCode = request.AgentCode.Trim(), QrcodeBase64 = request.QrcodeBase64
}).ExecuteAffrowsAsync(ct);
}
/// <summary>已认证用户按代理编码读取收款二维码。</summary>
public async Task<string?> GetTopUpQrcode(string agentCode, CancellationToken ct)
{
RequestValidator.Validate(new UserTopUpQrcodeQuery { AgentCode = agentCode?.Trim()! });
await Actor(orm, ct);
var code = agentCode.Trim();
var item = await orm.Select<UserTopUpQrcodeEntity>().Where(q => q.AgentCode == code).FirstAsync(ct);
return item?.QrcodeBase64;
}
}