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
|
{
|
/// <summary>
|
/// 查询个人用户收支明细
|
/// </summary>
|
public class GetPersonalUserTransactionsQueryHandler(
|
IRepository<UserWalletTransaction> rep
|
) :
|
IRequestHandler<GetPersonalUserTransactionsQuery, GetPersonalUserTransactionsQueryResult>,
|
IRequestHandler<GetPersonalUserTransactionQuery, GetPersonalUserTransactionQueryResult>
|
{
|
private readonly IRepository<UserWalletTransaction> rep = rep;
|
|
/// <summary>
|
/// 查询个人用户收支明细分页列表数据
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<GetPersonalUserTransactionsQueryResult> 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);
|
|
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<GetPersonalUserTransactionsQueryResult, GetPersonalUserTransactionsQueryResultItem>(s, cancellationToken);
|
|
list.ObjectData = data;
|
|
return list;
|
}
|
|
/// <summary>
|
/// 查询个人用户收支明细详情
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<GetPersonalUserTransactionQueryResult> Handle(GetPersonalUserTransactionQuery request, CancellationToken cancellationToken)
|
{
|
return await rep.AsQueryable().AsNoTracking()
|
.Where(it => it.Id == request.Id)
|
.GetDetail<UserWalletTransaction, GetPersonalUserTransactionQueryResult>();
|
}
|
}
|
}
|