From b2ee87d2d29da38e600582ea3984472c2306befd Mon Sep 17 00:00:00 2001 From: tanglong <842690096@qq.com> Date: Wed, 15 Jul 2026 15:38:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=B4=E7=BA=A7=E7=8F=AD=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YD_YiLu/Services/Impl/DeviceSyncService.cs | 71 ++++++++++++++++++---- 1 file changed, 60 insertions(+), 11 deletions(-) diff --git a/YD_YiLu/Services/Impl/DeviceSyncService.cs b/YD_YiLu/Services/Impl/DeviceSyncService.cs index 4b6c65e..980c28f 100644 --- a/YD_YiLu/Services/Impl/DeviceSyncService.cs +++ b/YD_YiLu/Services/Impl/DeviceSyncService.cs @@ -59,7 +59,7 @@ namespace YD_YiLu.Api.Services.Impl Username = s.StudentNo, Nickname = s.StudentName, GradeName = "", - OrganizationId = (int)orgId, + OrganizationId = s.ClassId ?? 0, OrganizationName = s.ClassName ?? "", FacePictureUrl = s.Photo ?? "", Identity = "学生", @@ -74,7 +74,7 @@ namespace YD_YiLu.Api.Services.Impl var c = await _context.Class.FindAsync(u.OrganizationId); if (c != null) { - u.OrganizationName = c.ClassName ?? ""; + u.OrganizationName = FormatOrganizationName(c, u.OrganizationName); u.GradeName = c.GradeName ?? ""; } } @@ -140,7 +140,7 @@ namespace YD_YiLu.Api.Services.Impl OrganizationId = c.Id, ParentId = g.Id, ParentName = g.GradeName, - OrganizationName = c.ClassName ?? "", + OrganizationName = FormatOrganizationName(c, c.ClassName ?? ""), OrganizationType = "班级", ChildrenIds = new List() }).ToList(), @@ -472,6 +472,7 @@ namespace YD_YiLu.Api.Services.Impl // 5. 课程名称(枚举描述) string courseName = Util.GetEnumDescription(train.CourseId); + var trainClass = await _context.Class.FindAsync(student.ClassId); // 6. 返回 DTO return new DeviceSyncTrainDetailsDto @@ -483,7 +484,7 @@ namespace YD_YiLu.Api.Services.Impl FacePictureUrl = student.Photo ?? "", Identity = "学生", OrganizationId = (int)student.ClassId, - OrganizationName = student.ClassName, + OrganizationName = FormatOrganizationName(trainClass, student.ClassName), Gender = student.Sex == 1 ? "男" : "女", Score = train.Score?.ToString("0") ?? "0", UnStandardCounts = train.UnStandardCounts, @@ -621,6 +622,7 @@ namespace YD_YiLu.Api.Services.Impl .GroupBy(x => new { x.s.ClassId, x.s.ClassName, x.t.CourseId }) .Select(g => new { + g.Key.ClassId, g.Key.ClassName, g.Key.CourseId, SumScore = g.Sum(x => x.t.Score ?? 0), @@ -632,9 +634,21 @@ namespace YD_YiLu.Api.Services.Impl .Take(size) .ToListAsync(); + var organizationClassIds = grouped + .Select(x => x.ClassId ?? 0) + .Where(x => x > 0) + .Distinct() + .ToList(); + + var organizationClassMap = await _context.Class + .Where(x => organizationClassIds.Contains(x.Id)) + .ToDictionaryAsync(x => x.Id); + return grouped.Select(x => new DeviceSyncOrganizationGradeOrderItemDto { - OrganizationName = x.ClassName ?? "", + OrganizationName = organizationClassMap.TryGetValue(x.ClassId ?? 0, out var classInfo) + ? FormatOrganizationName(classInfo, x.ClassName ?? "") + : x.ClassName ?? "", SumScore = Math.Round(x.SumScore).ToString("0"), AvgScore = x.AvgScore.ToString("0.##"), SumCount = x.SumCount, @@ -703,7 +717,7 @@ namespace YD_YiLu.Api.Services.Impl UserSerial = best.s.StudentNo, Nickname = best.s.StudentName, OrganizationId = best.s.ClassId ?? 0, - OrganizationName = bestClass?.ClassName ?? best.s.ClassName ?? "", + OrganizationName = FormatOrganizationName(bestClass, best.s.ClassName ?? ""), Gender = best.s.Sex, Score = best.t.Score?.ToString("0.##") ?? "0", CourseId = best.t.CourseId, @@ -727,6 +741,14 @@ namespace YD_YiLu.Api.Services.Impl .ToListAsync(); var studentSerials = students.Select(s => s.StudentNo).ToList(); + var lastGradeClassIds = students + .Select(x => x.ClassId ?? 0) + .Where(x => x > 0) + .Distinct() + .ToList(); + var lastGradeClassMap = await _context.Class + .Where(x => lastGradeClassIds.Contains(x.Id)) + .ToDictionaryAsync(x => x.Id); var trains = await _context.YL_Train .Where(t => studentSerials.Contains(t.UserSerial)) @@ -759,7 +781,9 @@ namespace YD_YiLu.Api.Services.Impl Username = st?.StudentNo ?? serial, Nickname = st?.StudentName ?? "", OrganizationId = st?.ClassId ?? 0, - OrganizationName = st?.ClassName ?? "", + OrganizationName = st != null && lastGradeClassMap.TryGetValue(st.ClassId ?? 0, out var lastGradeClass) + ? FormatOrganizationName(lastGradeClass, st.ClassName ?? "") + : st?.ClassName ?? "", GradeName = "", // 没有就空 FacePictureUrl = st?.Photo ?? "", Identity = "", // 可选 @@ -866,6 +890,22 @@ namespace YD_YiLu.Api.Services.Impl }) .ToListAsync(); + var recordClassIds = list + .Select(x => x.OrganizationId) + .Where(x => x > 0) + .Distinct() + .ToList(); + + var recordClassMap = await _context.Class + .Where(x => recordClassIds.Contains(x.Id)) + .ToDictionaryAsync(x => x.Id); + + foreach (var item in list) + { + if (recordClassMap.TryGetValue(item.OrganizationId, out var recordClass)) + item.OrganizationName = FormatOrganizationName(recordClass, item.OrganizationName); + } + return list; } @@ -894,7 +934,7 @@ namespace YD_YiLu.Api.Services.Impl UserType = 2, Nickname = student.StudentName, OrganizationId = student.ClassId ?? 0, - OrganizationName = c?.ClassName ?? "", + OrganizationName = FormatOrganizationName(c, ""), FacePictureUrl = student.Photo, Identity = "学生", Gender = student.Sex == 1 ? "男" : "女", @@ -990,7 +1030,7 @@ namespace YD_YiLu.Api.Services.Impl UserType = 2, Nickname = student.StudentName, OrganizationId = student.ClassId ?? 0, - OrganizationName = c?.ClassName ?? "", + OrganizationName = FormatOrganizationName(c, ""), FacePictureUrl = student.Photo, Identity = "学生", Gender = student.Sex == 1 ? "男" : "女", @@ -1041,7 +1081,7 @@ namespace YD_YiLu.Api.Services.Impl UserType = 2, Nickname = student.StudentName, OrganizationId = student.ClassId ?? 0, - OrganizationName = studentClass?.ClassName ?? student.ClassName ?? "", + OrganizationName = FormatOrganizationName(studentClass, student.ClassName ?? ""), FacePictureUrl = student.Photo ?? "", Identity = "学生", Gender = student.Sex == 1 ? "男" : "女", @@ -1328,7 +1368,7 @@ namespace YD_YiLu.Api.Services.Impl var c = await _context.Class.FindAsync(dto.OrganizationId); if (c != null) { - dto.OrganizationName = c.ClassName ?? ""; + dto.OrganizationName = FormatOrganizationName(c, dto.OrganizationName); dto.GradeName = c.GradeName ?? ""; } return dto; @@ -1392,6 +1432,15 @@ namespace YD_YiLu.Api.Services.Impl return result; } + private static string FormatOrganizationName(S_Class classInfo, string fallback = "") + { + if (classInfo == null) + return fallback ?? ""; + + var name = $"{classInfo.GradeName ?? ""}{classInfo.ClassName ?? ""}"; + return string.IsNullOrWhiteSpace(name) ? fallback ?? "" : name; + } + private int CompareVersion(string v1, string v2) { if (string.IsNullOrEmpty(v1) || string.IsNullOrEmpty(v2))