diff --git a/src/UserPointManagement.Application/Services/UserPointService.cs b/src/UserPointManagement.Application/Services/UserPointService.cs index 21489c5..7e23d9f 100644 --- a/src/UserPointManagement.Application/Services/UserPointService.cs +++ b/src/UserPointManagement.Application/Services/UserPointService.cs @@ -8,7 +8,7 @@ namespace UserPointManagement.Application.Services; public interface IUserPointService { - Task> GetUserPoints(GetUserPointDto req); + Task> GetUserPoints(GetUserPointDto req); Task CreateUserPoint(CreateUserPointDto input); @@ -24,26 +24,39 @@ public class UserPointService : IUserPointService _dbContextFactory = dbContextFactory; } - public async Task> GetUserPoints(GetUserPointDto req) + public async Task> GetUserPoints(GetUserPointDto req) { await using var _userPointManagementDbContext = await _dbContextFactory.CreateDbContextAsync(); - var queryable = from userPoint in _userPointManagementDbContext.UserPoints - join user in _userPointManagementDbContext.Users on userPoint.UserId equals user.Id + + var queryable = _userPointManagementDbContext.Users + .Where(x => x.Id == req.UserId, req.UserId.HasValue); + + // 分页筛选只能针对用户 + var users = await queryable.OrderByDescending(x => x.Id).Paging(req).ToListAsync(); + + // 查出用户底下积分明细 + var userPoints = await (from userPoint in _userPointManagementDbContext.UserPoints + where users.Select(x => x.Id).Contains(userPoint.UserId) select new UserPointDto() { UserPointId = userPoint.Id, - UserId = user.Id, - Name = user.Name, + UserId = userPoint.UserId, Point = userPoint.Point, CreateTime = userPoint.CreateTime - }; + }).ToListAsync(); - queryable = queryable.Where(x => x.UserId == req.UserId, req.UserId.HasValue); + var data = userPoints.GroupBy(x => x.UserId) + .Select(x => new UserPointInfoDto() + { + UserId = x.Key, + Name = users.First(p => p.Id == x.Key).Name, + TotalPoint = x.Sum(p => p.Point), + Items = x.ToList() + }).ToList(); var count = queryable.Count(); - var data = await queryable.OrderByDescending(x => x.CreateTime).Paging(req).ToListAsync().ConfigureAwait(false); - return new PageResultDto() + return new PageResultDto() { Items = data, TotalCount = count diff --git a/src/UserPointManagement.Model/Dtos/UserPoint/UserPointDto.cs b/src/UserPointManagement.Model/Dtos/UserPoint/UserPointDto.cs index b1479b6..282260a 100644 --- a/src/UserPointManagement.Model/Dtos/UserPoint/UserPointDto.cs +++ b/src/UserPointManagement.Model/Dtos/UserPoint/UserPointDto.cs @@ -6,8 +6,6 @@ public class UserPointDto public int UserId { get; set; } - public string Name { get; set; } - public int Point { get; set; } public DateTime CreateTime { get; set; } diff --git a/src/UserPointManagement.Model/Dtos/UserPoint/UserPointInfoDto.cs b/src/UserPointManagement.Model/Dtos/UserPoint/UserPointInfoDto.cs new file mode 100644 index 0000000..d35c4a0 --- /dev/null +++ b/src/UserPointManagement.Model/Dtos/UserPoint/UserPointInfoDto.cs @@ -0,0 +1,12 @@ +namespace UserPointManagement.Model.Dtos.UserPoint; + +public class UserPointInfoDto +{ + public int UserId { get; set; } + + public string Name { get; set; } + + public int TotalPoint { get; set; } + + public List Items { get; set; } +} \ No newline at end of file diff --git a/src/UserPointManagement.Web/Pages/UserPointDetail/UserPointDetail.razor b/src/UserPointManagement.Web/Pages/UserPointDetail/UserPointDetail.razor index 4c5c626..db976cc 100644 --- a/src/UserPointManagement.Web/Pages/UserPointDetail/UserPointDetail.razor +++ b/src/UserPointManagement.Web/Pages/UserPointDetail/UserPointDetail.razor @@ -36,7 +36,7 @@ - - - - - - - - - - +
diff --git a/src/UserPointManagement.Web/Pages/UserPointDetail/UserPointDetail.razor.cs b/src/UserPointManagement.Web/Pages/UserPointDetail/UserPointDetail.razor.cs index 5d5cc79..142e8be 100644 --- a/src/UserPointManagement.Web/Pages/UserPointDetail/UserPointDetail.razor.cs +++ b/src/UserPointManagement.Web/Pages/UserPointDetail/UserPointDetail.razor.cs @@ -15,7 +15,7 @@ public class UserPointDetailBase : ComponentBase [Inject] private IUserService UserService { get; set; } [Inject] private MessageService MessageService { get; set; } - protected List _userPoints; + protected List _userPoints; protected List _users; protected int _pageIndex = 1; protected int _pageSize = 20;