using NCC.Common.Core.Manager;
using NCC.Common.Enum;
using NCC.Common.Extension;
using NCC.Common.Filter;
using NCC.Dependency;
using NCC.DynamicApiController;
using NCC.FriendlyException;
using NCC.Extend.Interfaces.UavWalletFlow;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using NCC.Extend.Entitys;
using NCC.Extend.Entitys.Dto.UavWalletFlow;
using Yitter.IdGenerator;
using NCC.Common.Helper;
using NCC.JsonSerialization;
using NCC.Extend.Entitys.Enums;
using Aop.Api.Domain;
namespace NCC.Extend.UavWalletFlow
{
///
/// 流水记录服务
///
[ApiDescriptionSettings(Tag = "流水记录服务", Name = "UavWalletFlow", Order = 200)]
[Route("api/Extend/[controller]")]
public class UavWalletFlowService : IUavWalletFlowService, IDynamicApiController, ITransient
{
private readonly ISqlSugarRepository _uavWalletFlowRepository;
private readonly SqlSugarScope _db;
private readonly IUserManager _userManager;
///
/// 初始化一个类型的新实例
///
public UavWalletFlowService(
ISqlSugarRepository uavWalletFlowRepository,
IUserManager userManager)
{
_uavWalletFlowRepository = uavWalletFlowRepository;
_db = _uavWalletFlowRepository.Context;
_userManager = userManager;
}
#region 获取当前用户的收益数据
///
/// 获取当前用户的收益数据
///
///
[HttpGet("GetFlowByUser")]
public async Task GetFlowByUser()
{
var now = DateTime.Now;
//获取今日收益总金额
var today = now.Date;
var TodayAomunt = await _db.Queryable().Where(x => x.CreateTime >= today && x.UserId == _userManager.UserId && x.FlowDirection == FlowDirectionEnum.收入.GetHashCode()).SumAsync(x => x.Amount);
//获取本月收益总金额
var monthStart = new DateTime(now.Year, now.Month, 1);
var ThisMonthAomunt = await _db.Queryable().Where(x => x.CreateTime >= monthStart && x.UserId == _userManager.UserId && x.FlowDirection == FlowDirectionEnum.收入.GetHashCode()).SumAsync(x => x.Amount);
//获取总收益总金额
var TotalAomunt = await _db.Queryable().Where(x => x.UserId == _userManager.UserId && x.FlowDirection == FlowDirectionEnum.收入.GetHashCode()).SumAsync(x => x.Amount);
//获取余额
var Balance = await _db.Queryable().Where(x => x.UserId == _userManager.UserId).SumAsync(x => x.Amount);
return new
{
TodayAomunt = TodayAomunt,
ThisMonthAomunt = ThisMonthAomunt,
TotalAomunt = TotalAomunt,
Balance = Balance,
};
}
#endregion
#region 获取当前用户按月的收益和提现数据
///
/// 获取当前用户按月的收益和提现数据
///
///
[HttpGet("GetFlowByMonth")]
public async Task GetFlowByMonth()
{
var userId = _userManager.UserId;
// 获取所有该用户的收入和提现记录(建议加时间范围,避免数据过多)
var flows = await _db.Queryable()
.Where(x => x.UserId == userId)
.Select(x => new
{
x.CreateTime,
x.Amount,
x.FlowDirection
})
.ToListAsync();
// 分组统计:按 yyyy-MM 格式分组
var result = flows
.GroupBy(x => x.CreateTime.GetValueOrDefault().ToString("yyyy-MM"))
.Select(g => new
{
Month = g.Key,
Income = g.Where(x => x.FlowDirection == FlowDirectionEnum.收入.GetHashCode()).Sum(x => x.Amount),
Withdraw = g.Where(x => x.FlowDirection == FlowDirectionEnum.提现.GetHashCode()).Sum(x => x.Amount)
})
.OrderBy(x => x.Month)
.ToList();
return result;
}
#endregion
#region 获取流水记录
///
/// 获取流水记录
///
/// 参数
///
[HttpGet("{id}")]
public async Task GetInfo(string id)
{
var entity = await _db.Queryable().FirstAsync(p => p.Id == id);
var output = entity.Adapt();
return output;
}
#endregion
#region 获取流水记录列表
///
/// 获取流水记录列表
///
/// 请求参数
///
[HttpGet("")]
public async Task GetList([FromQuery] UavWalletFlowListQueryInput input)
{
var sidx = input.sidx == null ? "id" : input.sidx;
List