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();
}
}
}