81 lines
3.1 KiB
C#
81 lines
3.1 KiB
C#
using YD_Event.Application.Points.Dtos;
|
|
using YD_Event.Core.Entities;
|
|
using YD_Event.Core.Enum;
|
|
|
|
namespace YD_Event.Application.Points;
|
|
|
|
/// <summary>
|
|
/// 积分记录管理
|
|
/// </summary>
|
|
public class PointsRecordService : BaseService<PointsRecord>, ITransient
|
|
{
|
|
private readonly ISqlSugarRepository<PointsRecord> _repository;
|
|
|
|
public PointsRecordService(ISqlSugarRepository<PointsRecord> repository) : base(repository)
|
|
{
|
|
_repository = repository;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 积分记录分页查询
|
|
/// </summary>
|
|
[DisplayName("积分记录分页查询")]
|
|
[HttpGet]
|
|
public async Task<PageResult<PointsRecordPageOutput>> Page([FromQuery] PointsRecordQueryInput input)
|
|
{
|
|
return await _repository.AsQueryable()
|
|
.LeftJoin<SysUser>((r, u) => r.UserId == u.Id)
|
|
.WhereIF(input.UserId.HasValue, (r, u) => r.UserId == input.UserId)
|
|
.WhereIF(input.Type.HasValue, (r, u) => r.Type == input.Type)
|
|
.WhereIF(input.StartTime.HasValue, (r, u) => r.CreatedTime >= input.StartTime)
|
|
.WhereIF(input.EndTime.HasValue, (r, u) => r.CreatedTime <= input.EndTime)
|
|
.WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), (r, u) =>
|
|
u.Name.Contains(input.Keyword) ||
|
|
u.Mobile.Contains(input.Keyword) ||
|
|
u.Account.Contains(input.Keyword))
|
|
.OrderByDescending((r, u) => r.CreatedTime)
|
|
.Select((r, u) => new PointsRecordPageOutput
|
|
{
|
|
Id = r.Id,
|
|
UserId = r.UserId,
|
|
UserName = u.Name,
|
|
Phone = u.Mobile,
|
|
IdCard = "",
|
|
Type = r.Type,
|
|
Action = r.Action,
|
|
Item = r.Item,
|
|
Group = r.Group,
|
|
Points = r.Points,
|
|
CreatedTime = r.CreatedTime
|
|
})
|
|
.ToPagedListAsync(input);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 积分统计
|
|
/// </summary>
|
|
[DisplayName("积分统计")]
|
|
[HttpGet("stats")]
|
|
public async Task<PointsStatsOutput> Stats([FromQuery] PointsRecordQueryInput input)
|
|
{
|
|
var query = _repository.AsQueryable()
|
|
.LeftJoin<SysUser>((r, u) => r.UserId == u.Id)
|
|
.WhereIF(input.UserId.HasValue, (r, u) => r.UserId == input.UserId)
|
|
.WhereIF(input.Type.HasValue, (r, u) => r.Type == input.Type)
|
|
.WhereIF(input.StartTime.HasValue, (r, u) => r.CreatedTime >= input.StartTime)
|
|
.WhereIF(input.EndTime.HasValue, (r, u) => r.CreatedTime <= input.EndTime)
|
|
.WhereIF(!string.IsNullOrWhiteSpace(input.Keyword), (r, u) =>
|
|
u.Name.Contains(input.Keyword) ||
|
|
u.Mobile.Contains(input.Keyword));
|
|
|
|
var given = await query.Clone().Where((r, u) => r.Type == PointsOperationType.Acquire).SumAsync((r, u) => r.Points);
|
|
var consumed = await query.Clone().Where((r, u) => r.Type == PointsOperationType.Consume).SumAsync((r, u) => r.Points);
|
|
|
|
return new PointsStatsOutput
|
|
{
|
|
TotalPointsGiven = given,
|
|
TotalPointsConsumed = consumed
|
|
};
|
|
}
|
|
}
|