83 lines
4.2 KiB
C#
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 (!UserAccessPolicy.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 (!UserAccessPolicy.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 (!UserAccessPolicy.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;
|
|
}
|
|
}
|