This commit is contained in:
tanglong 2026-01-06 18:47:19 +08:00
parent a425fcc1a4
commit c057e35770
8 changed files with 75 additions and 29 deletions

View File

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("YD_XinWei.Commons")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+782af8743bef71ca7e5f90325feac2f11e237ba5")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a425fcc1a41944f64a69d9b5ababdd07169c6a0d")]
[assembly: System.Reflection.AssemblyProductAttribute("YD_XinWei.Commons")]
[assembly: System.Reflection.AssemblyTitleAttribute("YD_XinWei.Commons")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
447043ac812b4df2d70deda46e4a67dbde0640288a02436e158cbdcbef673673
ccb578c866c97170d1abbe168fb35ec821458a73a52b86c4e9d961def395e327

View File

@ -353,6 +353,11 @@ namespace YD_XinWei.Api.Services.Impl
stu.Achievement2 = stu.Achievement2 / 10;
}
if (dto.ProjectId == 3)
{
stu.Achievement = (stu.Achievement ?? 0) / 1000;
}
if (dto.ProjectId == 21)
{
var value = stu.Achievement2;
@ -478,7 +483,7 @@ namespace YD_XinWei.Api.Services.Impl
sportsTestValueEntity.Value = value;
sportsTestValueEntity.Creator = dto.OrgId ?? 0;
sportsTestValueEntity.CreateDate = nowTime;
sportsTestValueEntity.ScoreTime = Convert.ToDateTime(dto.StartTime);
sportsTestValueEntity.ScoreTime = Convert.ToDateTime(dto.EndTime);
sportsTestValueEntity.AdditionalScore = (float)(data.PlusesScore ?? 0);
SemesterDto semesterDto = new SemesterDto();
@ -639,7 +644,7 @@ namespace YD_XinWei.Api.Services.Impl
x.Achievement
}).ToListAsync();
var student = studentResults.Where(x => x.Id == dto.TrainStudentId).OrderByDescending(x => x.Achievement).FirstOrDefault();
var student = studentResults.Where(x => x.Id == dto.TrainStudentId).OrderByDescending(x => x.Score).FirstOrDefault();
if (student == null)
{
@ -691,6 +696,7 @@ namespace YD_XinWei.Api.Services.Impl
/// <returns></returns>
public async Task<TrainHistoryPersonVo> HistoryPersonGet(HistoryPersonGetDto dto)
{
// 1️⃣ 获取该机构、项目、模型类型的训练数据
var trainList = await _sportsContext.XW_SportsTestData
.Where(x =>
x.OrgId == dto.OrgId &&
@ -698,9 +704,14 @@ namespace YD_XinWei.Api.Services.Impl
x.ModelType == dto.ModelType)
.ToListAsync();
if (!trainList.Any())
return new TrainHistoryPersonVo();
var trainIds = trainList.Select(t => t.Id).ToList();
var studentResults = await _sportsContext.XW_TrainStudents.Where(x => trainIds.Contains(x.XW_SportsTestDataId))
// 2️⃣ 获取学生成绩数据
var studentResults = await _sportsContext.XW_TrainStudents
.Where(x => trainIds.Contains(x.XW_SportsTestDataId))
.Select(x => new
{
x.Id,
@ -712,38 +723,73 @@ namespace YD_XinWei.Api.Services.Impl
x.Score,
x.Achievement,
x.CreateTime
}).ToListAsync();
})
.ToListAsync();
var student = studentResults.Where(x => x.StudentId == dto.StudentId).OrderByDescending(x => x.Achievement).FirstOrDefault();
// 3️⃣ 获取指定学生
var student = studentResults
.Where(x => x.StudentId == dto.StudentId)
.OrderByDescending(x => x.Achievement)
.FirstOrDefault();
if (student == null)
{
return new TrainHistoryPersonVo();
}
var rankedResults = studentResults.Where(x => x.GradeId == student.GradeId)
.OrderByDescending(x => x.Achievement)
.Select((x, index) => new { x, Rank = index + 1 })
.ToList();
var monthList = studentResults.Where(x => DateTime.TryParse(x.CreateTime, out var date) && date.Year == DateTime.Now.Year && date.Month == DateTime.Now.Month).ToList();
var monthRankedResults = studentResults.Where(x => x.GradeId == student.GradeId)
.OrderByDescending(x => x.Achievement)
// 4️⃣ 历史排名(按 Score 排序)
var rankedResults = studentResults
.Where(x => x.GradeId == student.GradeId)
.OrderByDescending(x => x.Score)
.Select((x, index) => new { x, Rank = index + 1 })
.ToList();
var stuHeadUrl = await _sportsContext.Student.Where(x => x.Id == student.StudentId).Select(x => x.Photo).FirstOrDefaultAsync();
// 5️⃣ 当月数据及当月排名(按 Score 排序)
var monthList = studentResults
.Where(x => DateTime.TryParse(x.CreateTime, out var date)
&& date.Year == DateTime.Now.Year
&& date.Month == DateTime.Now.Month)
.ToList();
var monthRankedResults = monthList
.Where(x => x.GradeId == student.GradeId)
.OrderByDescending(x => x.Score) // 按 Score 排名
.Select((x, index) => new { x, Rank = index + 1 })
.ToList();
// 6️⃣ 获取学生头像
var stuHeadUrl = await _sportsContext.Student
.Where(x => x.Id == student.StudentId)
.Select(x => x.Photo)
.FirstOrDefaultAsync();
// 7️⃣ 找总历史最高分对应的 Achievement(Score 最大)
var bestStudentOverall = studentResults
.OrderByDescending(x => x.Score)
.FirstOrDefault();
// 8️⃣ 找本月最高分对应的 Achievement(Score 最大)
var bestStudentMonth = monthList
.OrderByDescending(x => x.Score)
.FirstOrDefault();
// 9️⃣ 构建返回对象
var res = new TrainHistoryPersonVo()
{
ClassName = student.ClassName,
HeadImgUrl = stuHeadUrl,
Sex = student.Sex == 1 ? "男" : "女",
StudentName = student.StudentName,
HistoryBestScore = studentResults.Max(x => x.Achievement).ToString() ?? "无数据",
HistoryRanking = rankedResults.FirstOrDefault(x => x.x.Achievement == student.Achievement)?.Rank.ToString() ?? "-1",
MonthBestScore = monthList.Max(x => x.Achievement).ToString() ?? "无数据",
MonthRanking = monthRankedResults.FirstOrDefault(x => x.x.Achievement == student.Achievement)?.Rank.ToString() ?? "-1"
// 总历史最高成绩对应 Achievement
HistoryBestScore = bestStudentOverall?.Achievement?.ToString("0.###") ?? "无数据",
// 历史排名(按 Score)
HistoryRanking = rankedResults.FirstOrDefault(x => x.x.Id == student.Id)?.Rank.ToString() ?? "-1",
// 本月最高成绩对应 Achievement
MonthBestScore = bestStudentMonth?.Achievement?.ToString("0.###") ?? "无数据",
// 当月排名(按 Score)
MonthRanking = monthRankedResults.FirstOrDefault(x => x.x.Id == student.Id)?.Rank.ToString() ?? "-1"
};
return res;
@ -797,7 +843,8 @@ namespace YD_XinWei.Api.Services.Impl
TrainStudentId = x.Id,
ClassName = x.ClassName,
CreateTime = x.CreateTime ?? "无数据",
Achievement = dto.ModelType == 7 ? (x.Achievement.HasValue ? $"{x.Achievement.Value / 1000}.{x.Achievement.Value % 1000}" : "无数据") : (x.Achievement.HasValue ? x.Achievement.Value.ToString() : "无数据"),
//Achievement = dto.ModelType == 7 ? (x.Achievement.HasValue ? $"{x.Achievement.Value / 1000}.{x.Achievement.Value % 1000}" : "无数据") : (x.Achievement.HasValue ? x.Achievement.Value.ToString() : "无数据"),
Achievement = x.Achievement.HasValue ? x.Achievement.Value.ToString("0.###") : "无数据",
Rating = x.Score.GetRankStr(),
Score = x.Score.ToString() ?? "无数据",
Sex = x.Sex == 1 ? "男" : "女",
@ -910,7 +957,6 @@ namespace YD_XinWei.Api.Services.Impl
return res;
}
/// <summary>
/// 获取成绩榜中显示的体育项目
/// </summary>

View File

@ -37,7 +37,7 @@ namespace VOL.Entity.DomainModels.XinWei
/// </summary>
[Display(Name = "ProjectKind")]
[Comment("项目类型(1跳绳2跑步)")]
public double? ProjectKind { get; set; }
public int? ProjectKind { get; set; }
/// <summary>
/// 学校ID
@ -121,7 +121,7 @@ namespace VOL.Entity.DomainModels.XinWei
/// </summary>
[Display(Name = "Sex")]
[Comment("性别(1男2女)")]
public double? Sex { get; set; }
public int? Sex { get; set; }
/// <summary>
/// 学号
@ -135,7 +135,7 @@ namespace VOL.Entity.DomainModels.XinWei
/// </summary>
[Display(Name = "Achievement")]
[Comment("标准成绩")]
public int? Achievement { get; set; }
public double? Achievement { get; set; }
/// <summary>
/// 原始标准成绩(被格式化小数点之前的)

View File

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("YD_XinWei.Api")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+782af8743bef71ca7e5f90325feac2f11e237ba5")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+a425fcc1a41944f64a69d9b5ababdd07169c6a0d")]
[assembly: System.Reflection.AssemblyProductAttribute("YD_XinWei.Api")]
[assembly: System.Reflection.AssemblyTitleAttribute("YD_XinWei.Api")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
6717e2e379a38b048ebb8caed4fe5b735e1362513cda51c914771a1e1cf058f6
6e80e67035635d6beb9cea7c8e7e6068f63834e334f37871982a30f1e60e5a4c