update:智慧操场api
This commit is contained in:
parent
9b6d2d747b
commit
d643daa3b9
@ -41,6 +41,13 @@ namespace VOL.Business.IServices.SportsHall
|
||||
/// <returns></returns>
|
||||
Task<PageDataDto<SportsHallStudentsTestModel>> GetSportsHallStudentsTestPageList(SportsHallStudentsTestParam paramDto);
|
||||
|
||||
/// <summary>
|
||||
/// 体测成绩管理分页列表(全部体测项目)
|
||||
/// </summary>
|
||||
/// <param name="paramDto"></param>
|
||||
/// <returns></returns>
|
||||
Task<PageDataDto<SummaryOfGradesStudentsTestModel>> GetSummaryOfGradesStudentsTestPageList(SportsHallStudentsTestParam paramDto);
|
||||
|
||||
/// <summary>
|
||||
/// 成绩推送
|
||||
/// </summary>
|
||||
|
||||
@ -571,6 +571,142 @@ namespace VOL.Business.Services.SportsHall
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 体测成绩管理分页列表(全部体测项目)
|
||||
/// </summary>
|
||||
/// <param name="paramDto"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<PageDataDto<SummaryOfGradesStudentsTestModel>> GetSummaryOfGradesStudentsTestPageList(SportsHallStudentsTestParam paramDto)
|
||||
{
|
||||
var result = new PageDataDto<SummaryOfGradesStudentsTestModel>();
|
||||
paramDto.PageIndex = paramDto.PageIndex <= 0 ? 1 : paramDto.PageIndex;
|
||||
paramDto.PageSize = paramDto.PageSize <= 0 ? 10 : paramDto.PageSize;
|
||||
|
||||
var baseQuery = _sportsTestResultRepository.DbContext.Set<N_SportsTestValue>()
|
||||
.Where(s => s.SchoolCode == UserContext.Current.TenantId);
|
||||
|
||||
if (paramDto.StartTime.HasValue)
|
||||
baseQuery = baseQuery.Where(x => x.CreateDate >= paramDto.StartTime.Value);
|
||||
if (paramDto.EndTime.HasValue)
|
||||
baseQuery = baseQuery.Where(x => x.CreateDate <= paramDto.EndTime.Value);
|
||||
if (paramDto.ClassId.HasValue)
|
||||
baseQuery = baseQuery.Where(x => x.ClassId == paramDto.ClassId.Value);
|
||||
if (paramDto.Sex.HasValue)
|
||||
baseQuery = baseQuery.Where(x => (int)x.Sex == paramDto.Sex);
|
||||
if (!string.IsNullOrWhiteSpace(paramDto.ResultLevel))
|
||||
baseQuery = baseQuery.Where(x => x.Rank == paramDto.ResultLevel);
|
||||
|
||||
var filteredQuery = baseQuery;
|
||||
if (paramDto.ItemType.HasValue && paramDto.ItemType.Value > 0)
|
||||
filteredQuery = filteredQuery.Where(x => x.CategoryValue == paramDto.ItemType.Value);
|
||||
|
||||
var latestScoreTimeQuery = filteredQuery
|
||||
.GroupBy(x => x.StudentNo)
|
||||
.Select(g => new { StudentNo = g.Key, MaxScoreTime = g.Max(x => x.ScoreTime) });
|
||||
|
||||
var latestRecordsQuery = from record in filteredQuery
|
||||
join latest in latestScoreTimeQuery
|
||||
on new { record.StudentNo, record.ScoreTime }
|
||||
equals new { latest.StudentNo, ScoreTime = latest.MaxScoreTime }
|
||||
select record;
|
||||
|
||||
result.Total = await latestRecordsQuery
|
||||
.Select(x => x.StudentNo)
|
||||
.Distinct()
|
||||
.CountAsync();
|
||||
|
||||
var pagedStudentKeys = await latestRecordsQuery
|
||||
.OrderByDescending(x => x.ScoreTime)
|
||||
.Select(x => new { x.StudentNo, x.ScoreTime })
|
||||
.Distinct()
|
||||
.Skip((paramDto.PageIndex - 1) * paramDto.PageSize)
|
||||
.Take(paramDto.PageSize)
|
||||
.ToListAsync();
|
||||
|
||||
if (!pagedStudentKeys.Any())
|
||||
{
|
||||
result.Datas = new List<SummaryOfGradesStudentsTestModel>();
|
||||
return result;
|
||||
}
|
||||
|
||||
var pagedStudentNos = pagedStudentKeys.Select(x => x.StudentNo).Distinct().ToList();
|
||||
var pageRecords = await baseQuery
|
||||
.Where(x => pagedStudentNos.Contains(x.StudentNo))
|
||||
.Select(x => new
|
||||
{
|
||||
x.Id,
|
||||
x.StudentNo,
|
||||
x.StudentName,
|
||||
x.Sex,
|
||||
x.ClassName,
|
||||
x.GradeName,
|
||||
x.ScoreTime,
|
||||
x.IsDisplay,
|
||||
x.CategoryValue,
|
||||
x.CategoryEnum,
|
||||
x.Value,
|
||||
x.Score,
|
||||
x.Rank
|
||||
})
|
||||
.ToListAsync();
|
||||
|
||||
pageRecords = pageRecords
|
||||
.Where(x => pagedStudentKeys.Any(k => k.StudentNo == x.StudentNo && k.ScoreTime == x.ScoreTime))
|
||||
.ToList();
|
||||
|
||||
var sportsTestItemTypes = Enum.GetValues(typeof(SportsTestItemType))
|
||||
.Cast<SportsTestItemType>()
|
||||
.OrderBy(x => (int)x)
|
||||
.ToList();
|
||||
|
||||
result.Datas = pageRecords
|
||||
.GroupBy(x => new
|
||||
{
|
||||
x.StudentNo,
|
||||
x.StudentName,
|
||||
x.Sex,
|
||||
x.ClassName,
|
||||
x.GradeName,
|
||||
x.ScoreTime,
|
||||
x.IsDisplay
|
||||
})
|
||||
.Select(g =>
|
||||
{
|
||||
var records = g
|
||||
.GroupBy(x => x.CategoryValue)
|
||||
.ToDictionary(x => x.Key, x => x.OrderByDescending(r => r.Id).First());
|
||||
|
||||
return new SummaryOfGradesStudentsTestModel
|
||||
{
|
||||
Id = g.Max(x => x.Id),
|
||||
StudentNo = g.Key.StudentNo,
|
||||
StudentName = g.Key.StudentName,
|
||||
SexName = g.Key.Sex.GetDescription(),
|
||||
GradeAndClass = $"{g.Key.GradeName} {g.Key.ClassName}",
|
||||
ScoreTime = g.Key.ScoreTime,
|
||||
IsDisplay = g.Key.IsDisplay,
|
||||
Items = sportsTestItemTypes.Select(itemType =>
|
||||
{
|
||||
records.TryGetValue((int)itemType, out var record);
|
||||
return new SummaryOfGradesSportsTestItemModel
|
||||
{
|
||||
ItemType = (int)itemType,
|
||||
ItemCode = itemType.ToString(),
|
||||
ItemName = itemType.GetDisplayName(),
|
||||
Unit = itemType.GetDisplayDescription(),
|
||||
Value = record?.Value,
|
||||
Score = record?.Score,
|
||||
Rank = record?.Rank ?? string.Empty
|
||||
};
|
||||
}).ToList()
|
||||
};
|
||||
})
|
||||
.OrderByDescending(x => x.ScoreTime)
|
||||
.ToList();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 成绩推送
|
||||
/// </summary>
|
||||
|
||||
@ -26,6 +26,11 @@ namespace VOL.Model.School.Request
|
||||
/// </summary>
|
||||
public string? ResultLevel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 体测项目类型
|
||||
/// </summary>
|
||||
public int? ItemType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 开始时间
|
||||
/// </summary>
|
||||
|
||||
@ -0,0 +1,99 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace VOL.Model.School.Response
|
||||
{
|
||||
/// <summary>
|
||||
/// 体测成绩管理汇总查询
|
||||
/// </summary>
|
||||
public class SummaryOfGradesStudentsTestModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Id
|
||||
/// </summary>
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 学号
|
||||
/// </summary>
|
||||
[Display(Name = "学号")]
|
||||
public string StudentNo { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 姓名
|
||||
/// </summary>
|
||||
[Display(Name = "姓名")]
|
||||
public string StudentName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 年级班级
|
||||
/// </summary>
|
||||
[Display(Name = "年级班级")]
|
||||
public string GradeAndClass { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 性别
|
||||
/// </summary>
|
||||
[Display(Name = "性别")]
|
||||
public string SexName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 测试时间
|
||||
/// </summary>
|
||||
[Display(Name = "测试时间")]
|
||||
public DateTime ScoreTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否显示
|
||||
/// </summary>
|
||||
[Display(Name = "是否显示")]
|
||||
public bool IsDisplay { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 全部体测项目成绩
|
||||
/// </summary>
|
||||
public List<SummaryOfGradesSportsTestItemModel> Items { get; set; } = new();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 体测项目成绩
|
||||
/// </summary>
|
||||
public class SummaryOfGradesSportsTestItemModel
|
||||
{
|
||||
/// <summary>
|
||||
/// 项目类型
|
||||
/// </summary>
|
||||
public int ItemType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 项目枚举名称
|
||||
/// </summary>
|
||||
public string ItemCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 项目名称
|
||||
/// </summary>
|
||||
public string ItemName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 单位
|
||||
/// </summary>
|
||||
public string Unit { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 成绩值
|
||||
/// </summary>
|
||||
public float? Value { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 分数
|
||||
/// </summary>
|
||||
public float? Score { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 等级
|
||||
/// </summary>
|
||||
public string Rank { get; set; }
|
||||
}
|
||||
}
|
||||
@ -79,6 +79,17 @@ namespace VOL.WebApi.Controllers.SportsHall
|
||||
return await _sportsHallService.GetSportsHallStudentsTestPageList(paramDto);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 体测成绩管理分页列表(全部体测项目)
|
||||
/// </summary>
|
||||
/// <param name="paramDto"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet(nameof(GetSummaryOfGradesStudentsTestPageList))]
|
||||
public async Task<PageDataDto<SummaryOfGradesStudentsTestModel>> GetSummaryOfGradesStudentsTestPageList(SportsHallStudentsTestParam paramDto)
|
||||
{
|
||||
return await _sportsHallService.GetSummaryOfGradesStudentsTestPageList(paramDto);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 成绩推送
|
||||
/// </summary>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user