using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.FriendlyException; using Mapster; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.UserServer.Application { /// /// 查询个人用户收支明细 /// public class GetPersonalUserTransactionsQueryHandler( IRepository rep ) : IRequestHandler, IRequestHandler { private readonly IRepository rep = rep; /// /// 查询个人用户收支明细分页列表数据 /// /// /// /// public async Task Handle(GetPersonalUserTransactionsQuery request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var q = rep.AsQueryable().AsNoTracking() .OrderByDescending(it => it.CreatedTime) .Where(it => it.Wallet.UserId == logier.Id && it.TransactionStatus == EnumWalletTransactionStatus.Success); if (request.CreatedTimeStart.HasValue && request.CreatedTimeEnd.HasValue) { q = q.Where(it => request.CreatedTimeStart <= it.CreatedTime && it.CreatedTime <= request.CreatedTimeEnd); } var data = new GetPersonalUserTransactionsQueryResultObjectData(); data.SumIncome = await q.Where(it => it.Type == EnumUserWalletTransactionType.Income).SumAsync(it => it.Amount); data.SumWithdraw = await q.Where(it => it.Type == EnumUserWalletTransactionType.Withdraw).SumAsync(it => it.Amount); if (request.Type.HasValue) { q = q.Where(it => it.Type == request.Type); } var s = q .Select(it => new GetPersonalUserTransactionsQueryResultItem { Id = it.Id, Title = it.Title, CreatedTime = it.CreatedTime, Balance = it.Balance + (it.Type == EnumUserWalletTransactionType.Income ? it.Amount : (0 - it.Amount)), Amount = it.Type == EnumUserWalletTransactionType.Income ? it.Amount : (0 - it.Amount), }); var list = await request.PageModel.GetPagedListAsync(s, cancellationToken); list.ObjectData = data; return list; } /// /// 查询个人用户收支明细详情 /// /// /// /// public async Task Handle(GetPersonalUserTransactionQuery request, CancellationToken cancellationToken) { return await rep.AsQueryable().AsNoTracking() .Where(it => it.Id == request.Id) .GetDetail(); } } }