积分记录

This commit is contained in:
马梓彭 2026-05-08 13:36:29 +08:00
parent 5afa939e14
commit 9e8b08f464

View File

@ -82,9 +82,8 @@ public class PointsRecordService : BaseService<PointsRecord>, ITransient
.LeftJoin<EventInfo>((pr, e) => pr.EventId == e.Id)
.LeftJoin<YD_Event.Core.Entities.EventProject>((pr, e, ep) => pr.ProjectId == ep.Id)
.LeftJoin<YD_Event.Core.Entities.Project>((pr, e, ep, p) => ep.ProjectId == p.Id)
.LeftJoin<EventProjectGroup>((pr, e, ep, p, pg) => pr.ProjectGroupId == pg.Id)
.LeftJoin<EventResult>((pr, e, ep, p, pg, er) => pr.ResultId == er.Id)
.LeftJoin<YD_Event.Core.Entities.AppUser>((pr, e, ep, p, pg, er, u) => pr.UserId == u.Id)
.LeftJoin<EventResult>((pr, e, ep, p, er) => pr.ResultId == er.Id && !er.DeleteMark)
.LeftJoin<YD_Event.Core.Entities.AppUser>((pr, e, ep, p, er, u) => pr.UserId == u.Id)
.WhereIF(input.Type.HasValue, pr => pr.Type == input.Type)
.WhereIF(!string.IsNullOrWhiteSpace(input.ActionKeyword), (pr, e) => e.EventName.Contains(input.ActionKeyword) || pr.Remark.Contains(input.ActionKeyword))
.WhereIF(input.StartTime.HasValue, pr => pr.CreatedTime >= input.StartTime)
@ -102,13 +101,13 @@ public class PointsRecordService : BaseService<PointsRecord>, ITransient
query = query.Where(pr => pr.UserId == userId && pr.MerchantCertificationId == null);
}
var result = await query.Select((pr, e, ep, p, pg, er, u) => new UserPointsLogDto
var result = await query.Select((pr, e, ep, p, er, u) => new UserPointsLogDto
{
Id = pr.Id,
Type = pr.Type,
Action = e.EventName ?? pr.Remark ?? "未知动作",
ProjectName = p.Name,
GroupName = pg.GroupName,
GroupName = er.GroupName,
ParticipantName = u.Name, // 显示关联用户的姓名
Rank = er.Rank > 0 ? er.Rank : null, // 使用 EventResult 中的名次
Points = pr.Points,
@ -172,12 +171,12 @@ public class PointsRecordService : BaseService<PointsRecord>, ITransient
Phone = u.Mobile,
IdentityInfo = u.IdCardImageUrl, // 身份证图片
TotalPoints = SqlFunc.Subqueryable<PointsRecord>()
.Where(p => p.UserId == u.Id && !p.DeleteMark)
.Where(p => p.UserId == u.Id && !p.DeleteMark && p.MerchantCertificationId == null)
.WhereIF(input.StartTime.HasValue, p => p.CreatedTime >= input.StartTime)
.WhereIF(input.EndTime.HasValue, p => p.CreatedTime <= input.EndTime)
.Sum(p => p.Points), // 实时计算
LastUpdateTime = SqlFunc.Subqueryable<PointsRecord>()
.Where(p => p.UserId == u.Id && !p.DeleteMark)
.Where(p => p.UserId == u.Id && !p.DeleteMark && p.MerchantCertificationId == null)
.WhereIF(input.StartTime.HasValue, p => p.CreatedTime >= input.StartTime)
.WhereIF(input.EndTime.HasValue, p => p.CreatedTime <= input.EndTime)
.Max(p => p.CreatedTime)
@ -243,20 +242,21 @@ public class PointsRecordService : BaseService<PointsRecord>, ITransient
.LeftJoin<EventInfo>((p, e) => p.EventId == e.Id)
.LeftJoin<EventProject>((p, e, ep) => p.ProjectId == ep.Id)
.LeftJoin<YD_Event.Core.Entities.Project>((p, e, ep, pr) => ep.ProjectId == pr.Id)
.LeftJoin<ProjectGroup>((p, e, ep, pr, pg) => p.ProjectGroupId == pg.Id)
.Where((p, e, ep, pr, pg) => !p.DeleteMark)
.Where((p, e, ep, pr, pg) => p.UserId == input.UserId)
.WhereIF(input.Type.HasValue, (p, e, ep, pr, pg) => p.Type == input.Type)
.OrderByDescending((p, e, ep, pr, pg) => p.CreatedTime);
.LeftJoin<EventResult>((p, e, ep, pr, er) => p.ResultId == er.Id && !er.DeleteMark)
.Where((p, e, ep, pr, er) => !p.DeleteMark)
.Where((p, e, ep, pr, er) => p.UserId == input.UserId)
.Where((p, e, ep, pr, er) => p.MerchantCertificationId == null)
.WhereIF(input.Type.HasValue, (p, e, ep, pr, er) => p.Type == input.Type)
.OrderByDescending((p, e, ep, pr, er) => p.CreatedTime);
return await query
.Select((p, e, ep, pr, pg) => new PointsDetailOutput
.Select((p, e, ep, pr, er) => new PointsDetailOutput
{
CreatedTime = p.CreatedTime,
Type = p.Type,
Action = e.EventName,
Item = pr.Name,
Group = pg.GroupName,
Group = er.GroupName,
Points = p.Points,
Remark = p.Remark
}).ToPagedListAsync(input);
@ -270,17 +270,16 @@ public class PointsRecordService : BaseService<PointsRecord>, ITransient
.LeftJoin<EventInfo>((p, e) => p.EventId == e.Id)
.LeftJoin<EventProject>((p, e, ep) => p.ProjectId == ep.Id)
.LeftJoin<YD_Event.Core.Entities.Project>((p, e, ep, pr) => ep.ProjectId == pr.Id)
.LeftJoin<ProjectGroup>((p, e, ep, pr, pg) => p.ProjectGroupId == pg.Id)
.LeftJoin<YD_Event.Core.Entities.AppUser>((p, e, ep, pr, pg, u) => p.UserId == u.Id && !u.DeleteMark)
.LeftJoin<EventResult>((p, e, ep, pr, pg, u, er) => p.ResultId == er.Id && !er.DeleteMark)
.LeftJoin<EventRegistrationPerson>((p, e, ep, pr, pg, u, er, per) => er.RegistrationPersonId == per.Id && !per.DeleteMark)
.Where((p, e, ep, pr, pg, u, er, per) => !p.DeleteMark)
.Where((p, e, ep, pr, pg, u, er, per) => p.MerchantCertificationId == input.UserId)
.WhereIF(input.Type.HasValue, (p, e, ep, pr, pg, u, er, per) => p.Type == input.Type)
.OrderByDescending((p, e, ep, pr, pg, u, er, per) => p.CreatedTime);
.LeftJoin<YD_Event.Core.Entities.AppUser>((p, e, ep, pr, u) => p.UserId == u.Id && !u.DeleteMark)
.LeftJoin<EventResult>((p, e, ep, pr, u, er) => p.ResultId == er.Id && !er.DeleteMark)
.LeftJoin<EventRegistrationPerson>((p, e, ep, pr, u, er, per) => er.RegistrationPersonId == per.Id && !per.DeleteMark)
.Where((p, e, ep, pr, u, er, per) => !p.DeleteMark)
.Where((p, e, ep, pr, u, er, per) => p.MerchantCertificationId == input.UserId)
.WhereIF(input.Type.HasValue, (p, e, ep, pr, u, er, per) => p.Type == input.Type)
.OrderByDescending((p, e, ep, pr, u, er, per) => p.CreatedTime);
var rawData = await query
.Select((p, e, ep, pr, pg, u, er, per) => new
.Select((p, e, ep, pr, u, er, per) => new
{
PointRecordId = p.Id,
CreatedTime = p.CreatedTime,
@ -289,7 +288,7 @@ public class PointsRecordService : BaseService<PointsRecord>, ITransient
Item = pr.Name,
ProjectId = pr.Id,
ProjectType = pr.ProjectType,
Group = pg.GroupName,
Group = er.GroupName,
Points = p.Points,
Remark = p.Remark,
ParticipantName = u.Name,