update:智慧操场api
This commit is contained in:
parent
9b6d2d747b
commit
d643daa3b9
@ -41,6 +41,13 @@ namespace VOL.Business.IServices.SportsHall
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<PageDataDto<SportsHallStudentsTestModel>> GetSportsHallStudentsTestPageList(SportsHallStudentsTestParam paramDto);
|
Task<PageDataDto<SportsHallStudentsTestModel>> GetSportsHallStudentsTestPageList(SportsHallStudentsTestParam paramDto);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 体测成绩管理分页列表(全部体测项目)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="paramDto"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<PageDataDto<SummaryOfGradesStudentsTestModel>> GetSummaryOfGradesStudentsTestPageList(SportsHallStudentsTestParam paramDto);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 成绩推送
|
/// 成绩推送
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -571,6 +571,142 @@ namespace VOL.Business.Services.SportsHall
|
|||||||
return result;
|
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>
|
||||||
/// 成绩推送
|
/// 成绩推送
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -26,6 +26,11 @@ namespace VOL.Model.School.Request
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string? ResultLevel { get; set; }
|
public string? ResultLevel { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 体测项目类型
|
||||||
|
/// </summary>
|
||||||
|
public int? ItemType { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 开始时间
|
/// 开始时间
|
||||||
/// </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);
|
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>
|
||||||
/// 成绩推送
|
/// 成绩推送
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user