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 { /// 以本人身份提交充值备注,不能伪造提交账户或昵称。 public async Task AddTopUpMessage(UserTopUpMessageRequest request, CancellationToken ct) { RequestValidator.Validate(request); UserInputChecks.Length(request.Message, 1000, "充值备注"); var actor = await Actor(orm, ct); return await orm.Insert(new UserTopUpMessageEntity { UserName = actor.UserName, NickName = actor.NickName, Message = request.Message.Trim() }).ExecuteIdentityAsync(ct); } /// 管理员记录人工处理结果。备注处理与实际充值是不同用例。 public async Task UpdateTopUpMessage(UserTopUpResultRequest request, CancellationToken ct) { RequestValidator.Validate(request); UserInputChecks.PositiveId(request.Id); UserInputChecks.Length(request.Result, 1000, "处理结果"); var actor = await Actor(orm, ct); if (!IsAdmin(actor)) throw new AppException("仅管理员可以处理充值备注", 403); if (!await orm.Select().Where(m => m.Id == request.Id).AnyAsync(ct)) throw new AppException("充值备注不存在"); await orm.Update().Set(m => m.Result, request.Result.Trim()) .Where(m => m.Id == request.Id).ExecuteAffrowsAsync(ct); } /// 普通用户仅查看自己提交的备注,管理员查看全部。 public async Task> TopUpMessages(UserSearchRequest request, CancellationToken ct) { RequestValidator.Validate(request); UserInputChecks.Search(request); var actor = await Actor(orm, ct); var select = orm.Select(); if (!IsAdmin(actor)) 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); } /// 管理员维护代理充值二维码,使用旧表唯一代理编码原子更新或插入。 public async Task UpdateTopUpQrcode(UserTopUpQrcodeRequest request, CancellationToken ct) { RequestValidator.Validate(request); UserInputChecks.Qrcode(request); var actor = await Actor(orm, ct); if (!IsAdmin(actor)) throw new AppException("仅管理员可以维护充值二维码", 403); await orm.InsertOrUpdate().SetSource(new UserTopUpQrcodeEntity { AgentCode = request.AgentCode.Trim(), QrcodeBase64 = request.QrcodeBase64 }).ExecuteAffrowsAsync(ct); } /// 已认证用户按代理编码读取收款二维码。 public async Task GetTopUpQrcode(string agentCode, CancellationToken ct) { RequestValidator.Validate(new UserTopUpQrcodeQuery { AgentCode = agentCode?.Trim()! }); UserInputChecks.Length(agentCode.Trim(), 50, "代理编码"); await Actor(orm, ct); var code = agentCode.Trim(); var item = await orm.Select().Where(q => q.AgentCode == code).FirstAsync(ct); return item?.QrcodeBase64; } }