1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222 |
- using Microsoft.Azure.Cosmos;
-
- using MathNet.Numerics.Distributions;
- using Microsoft.AspNetCore.Authorization;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Azure.Amqp.Framing;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.Options;
- using Microsoft.OData.Edm;
- using System;
- using System.Collections.Generic;
- using System.Dynamic;
- using System.Linq;
- using System.Reflection;
- using System.Security.Claims;
- using System.Text;
- using System.Text.Json;
- using System.Threading.Tasks;
- using TEAMModelOS.Filter;
- using TEAMModelOS.Models;
- using TEAMModelOS.SDK;
- using TEAMModelOS.SDK.DI;
- using TEAMModelOS.SDK.Extension;
- using TEAMModelOS.SDK.Models;
- using TEAMModelOS.SDK.Models.Cosmos;
- using TEAMModelOS.SDK.Models.Cosmos;
- using TEAMModelOS.SDK.Models.Service;
- using TEAMModelOS.SDK.Services;
- using static TEAMModelOS.Controllers.OverallEducationController;
- using static TEAMModelOS.SDK.Models.Cosmos.Student.StudentAnalysis;
- using static TEAMModelOS.SDK.Services.ActivityStudentService;
- using TEAMModelOS.SDK.Models.Cosmos.OpenEntity;
- using HTEX.Lib.ETL.Lesson;
- namespace TEAMModelOS.Controllers
- {
- /// <summary>
- /// 学生五育画像接口
- /// </summary>
- [Route("overall-education")]
- [ApiController]
- public class OverallEducationController : ControllerBase
- {
- private readonly AzureCosmosFactory _azureCosmos;
- private readonly AzureStorageFactory _azureStorage;
- private readonly AzureRedisFactory _azureRedis;
- private readonly DingDing _dingDing;
- private readonly Option _option;
- private readonly IConfiguration _configuration;
- private readonly CoreAPIHttpService _coreAPIHttpService;
- private readonly AzureServiceBusFactory _serviceBus;
- private readonly SnowflakeId _snowflakeId;
- public OverallEducationController(AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis, AzureServiceBusFactory serviceBus, DingDing dingDing, CoreAPIHttpService coreAPIHttpService, IOptionsSnapshot<Option> option, IConfiguration configuration, SnowflakeId snowflakeId)
- {
- _azureCosmos = azureCosmos;
- _azureStorage = azureStorage;
- _azureRedis = azureRedis;
- _dingDing = dingDing;
- _option = option?.Value;
- _configuration = configuration;
- _coreAPIHttpService = coreAPIHttpService;
- _serviceBus = serviceBus;
- _snowflakeId = snowflakeId;
- }
- /// <summary>
- /// 获取看板的基本条件
- /// </summary>
- /// <param name="json"></param>
- /// <returns></returns>
- [HttpPost("overview-cond")]
- [AuthToken(Roles = "teacher,admin")]
- [Authorize(Roles = "IES")]
- public async Task<IActionResult> OverviewCond(JsonElement json)
- {
- json.TryGetProperty("schoolId", out JsonElement schoolId);
- json.TryGetProperty("periodId", out JsonElement periodId);
- var client = _azureCosmos.GetCosmosClient();
- StringBuilder classsql = new StringBuilder($"SELECT count(1) FROM c where ( c.graduate = 0 or IS_DEFINED(c.graduate) = false )");
- if (!string.IsNullOrEmpty($"{periodId}"))
- {
- classsql.Append($" and c.periodId='{periodId}' ");
- }
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<ClassInfo>(queryText: classsql.ToString(),
- requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Class-{schoolId}") }))
- {
- }
- return Ok();
- }
-
- [HttpPost("overview")]
- #if !DEBUG
- [AuthToken(Roles = "teacher,admin")]
- [Authorize(Roles = "IES")]
- #endif
- public async Task<IActionResult> Overview(JsonElement json)
- {
- try
- {
- json.TryGetProperty("studentYear", out JsonElement _studentYear);
- json.TryGetProperty("grades", out JsonElement _grades);
- json.TryGetProperty("school", out JsonElement _school);
- json.TryGetProperty("periodId", out JsonElement _periodId);
- json.TryGetProperty("semesterId", out JsonElement _semesterId);
- json.TryGetProperty("studyYear", out JsonElement _studyYear);
- json.TryGetProperty("studentId", out JsonElement _studentId);
- List<Class> classes = new List<Class>();
- List<Student> students = new List<Student>();
- List<Class> grade_classes = new List<Class>();
- List<Student> grade_students = new List<Student>();
- List<OverallEducation> grade_overallEducations = new List<OverallEducation>();
- List<OverallEducation> overallEducations = new List<OverallEducation>();
- List<OverallEducation> overallEducationsNoData = new List<OverallEducation>();
- HashSet<string> classIds = new HashSet<string>();
- var client = _azureCosmos.GetCosmosClient();
- School school = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>($"{_school}", new PartitionKey("Base"));
- SchoolSetting schoolSetting = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<SchoolSetting>($"{_school}", new PartitionKey("SchoolSetting"));
- Dictionary<string, object> dict = OverallEducationService.GetQueryCond(json);
- #region 此处代码用于处理 根据年级 学段获取 相关的班级。
- HashSet<int> years = new HashSet<int>();
- if (_grades.ValueKind.Equals(JsonValueKind.Array))
- {
- var yearsdata = SchoolService.GetYears(school, $"{_periodId}", _grades.ToObject<List<int>>());
- years = yearsdata.years;
- }
- if (int.TryParse($"{_studentYear}", out int studentYear))
- {
- if (!string.IsNullOrWhiteSpace($"{_studentId}"))
- {
- Student student= await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).ReadItemAsync<Student>($"{_studentId}", new PartitionKey($"Base-{school.id}"));
- Class classz = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<Class>($"{student.classId}", new PartitionKey($"Class-{school.id}"));
- years.Add(classz.year);
- }
- else {
- years.Add(studentYear);
- }
- }
- Period period = school.period.Find(z => z.id.Equals($"{_periodId}")); ;
- Semester semester = period.semesters.Find(x => x.id.Equals($"{_semesterId}"));
- if (!years.Any())
- {
- if (period != null && period.grades.IsNotEmpty())
- {
-
- List<int> grades = new List<int>();
- period.grades.Select((z, index) => index).ToList().ForEach(t => { grades.Add(t); });
- var yearsdata = SchoolService.GetYears(school, $"{_periodId}", grades);
- years = yearsdata.years;
- }
- }
-
- //标记是否是下钻到班级
- bool isClass = false;
- if (json.TryGetProperty("classIds", out JsonElement _classIds))
- {
- classIds = _classIds.ToObject<HashSet<string>>();
- if (classIds != null && classIds.Count > 0)
- {
- isClass = true;
- }
- }
- if (!string.IsNullOrWhiteSpace($"{_studentId}")) {
-
- ResponseMessage response= await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).ReadItemStreamAsync($"{_studentId}", new PartitionKey($"Base-{school.id}"));
- if (response.StatusCode==System.Net.HttpStatusCode.OK) {
- Student student= JsonDocument.Parse(response.Content).RootElement.Deserialize<Student>();
- if (student != null && !string.IsNullOrWhiteSpace(student.classId)) {
- classIds.Add(student.classId);
- isClass=true;
- }
- }
- }
- if (years.Any() && years.Count > 0)
- {
- var gradeData = await OverallEducationService.GetGradeData(client, years, $"{_periodId}", $"{_school}", classIds, $"{_studyYear}", $"{_semesterId}", _azureRedis);
- classes = gradeData.classes;
- students = gradeData.students;
- grade_classes = gradeData.grade_classes;
- grade_students = gradeData.grade_students;
- grade_overallEducations = gradeData.overallEducations;
- overallEducations = gradeData.overallEducations.FindAll(x => students.Select(k => k.id).Contains(x.studentId));
- //是否处理没有任何数据的学生。
- if (isClass)
- {
- var nodata_students = students.ExceptBy(overallEducations.Select(z => z.studentId), v => v.id);
- if (nodata_students.Any() && nodata_students.Count()>0)
- {
- foreach (var student in nodata_students)
- {
- overallEducationsNoData.Add(new OverallEducation
- {
- classId= student.classId,
- schoolCode=$"{_school}",
- name= student.name,
- studentId= student.id,
- year= int.Parse($"{_studyYear}"),
- semesterId=$"{_semesterId}",
- picture= student.picture,
- periodId= student.periodId,
- stuYear=student.year,
- code=$"OverallEducation-{_school}",
- pk="OverallEducation",
- id=$"{_studyYear}-{_semesterId}-{student.id}"
- });
- }
- }
- }
- }
- #endregion
- List<(double score, OverallEducation student, string className, string picture)> ranking = new List<(double score, OverallEducation student, string className, string picture)>();
- List<(string classId, string className, double last, double best, double sum, double avg, int count)> classDatas = new List<(string classId, string className, double last, double best, double sum, double avg, int count)>();
- //pr计算 100 - (100 * (index + 1) - 50) / stuCount; index 整体排名 stuCount 总人数
- double basic_Score = 60;
- if (schoolSetting?.overallEducationSetting?.overallEducationInit != null && schoolSetting?.overallEducationSetting?.overallEducationInit >= 0)
- {
- basic_Score = schoolSetting.overallEducationSetting.overallEducationInit;
- }
- var hasData_labour = grade_overallEducations.Where(x => x.labour.Count > 0);
- double max_labour = 0;
- double min_labour = 0;
- if (hasData_labour != null && hasData_labour.Any())
- {
- var order_labour = hasData_labour.Select(x => new { score = x.labour.Sum(x => x.sumScore), studentId = x.studentId }).OrderByDescending(x => x.score).ToList();
- max_labour = order_labour.Max(z => z.score);
- min_labour = order_labour.Min(z => z.score);
- }
- var hasData_virtue = grade_overallEducations.Where(x => x.virtue.Count > 0);
- double max_virtue = 0;
- double min_virtue = 0;
- if (hasData_virtue != null && hasData_virtue.Any()) {
- var order_virtue = hasData_virtue.Select(x => new { score = x.virtue.Sum(x => x.sumScore), studentId = x.studentId }).OrderByDescending(x => x.score).ToList();
- max_virtue = order_virtue.Max(z => z.score);
- min_virtue = order_virtue.Min(z => z.score);
- }
-
- var hasData_lesson = grade_overallEducations.Where(x => x.lessonScore.Count > 0);
- double max_lesson_gscore = 0;
- double max_lesson_pscore = 0;
- double max_lesson_tscore = 0;
- double min_lesson_gscore = 0;
- double min_lesson_pscore = 0;
- double min_lesson_tscore = 0;
- if (hasData_lesson != null && hasData_lesson.Any()) {
- var order_gdata = hasData_lesson.Select(x => new { score = x.lessonScore.Sum(x => x.gscore), studentId = x.studentId }).OrderByDescending(x => x.score).ToList();
- max_lesson_gscore = order_gdata.Max(z => z.score);
- min_lesson_gscore = order_gdata.Min(z => z.score);
- var order_pdata = hasData_lesson.Select(x => new { score = x.lessonScore.Sum(x => x.pscore), studentId = x.studentId }).OrderByDescending(x => x.score).ToList();
- max_lesson_pscore = order_pdata.Max(z => z.score);
- min_lesson_pscore = order_pdata.Min(z => z.score);
- var order_tdata = hasData_lesson.Select(x => new { score = x.lessonScore.Sum(x => x.tscore), studentId = x.studentId }).OrderByDescending(x => x.score).ToList();
- max_lesson_tscore = order_tdata.Max(z => z.score);
- min_lesson_tscore = order_tdata.Min(z => z.score);
- }
-
- List<StudentDimensionScore> grade_dimensions = new List<StudentDimensionScore>();
- //全年级的数据
- foreach (var item in grade_overallEducations)
- {
- var student = students.Find(x => x.id.Equals(item.studentId));
- var clazz = classes.Find(x => x.id.Equals(item.classId));
- StudentDimensionScore dimensionScore = new StudentDimensionScore() { studentId = item.studentId,className=clazz?.name, classId = item.classId, studentName = student?.name, picture = student?.picture };
- StudentDimensionScoreDefault dimensionScoreDefault = new StudentDimensionScoreDefault { studentId=item.studentId };
- //排名指数计算=( 当前值分数- 298) / (9992 - 298) * (99 - 60) + 60
- //将每个人的积分转化为60-100
- //排名 = (积分 - 最低积分) / (最高积分 - 最低积分) * (最大排名 - 最小排名) + 最小排名
- //劳动
- var order_labour = hasData_labour.Select(x => new { score = x.labour.Sum(x => x.sumScore), studentId = x.studentId }).OrderByDescending(x => x.score).ToList();
- var labour = order_labour.Find(x => x.studentId.Equals(item.studentId));
- var labour_score = basic_Score;
- if (labour != null && labour.score > 0 && max_labour - min_labour>0)
- {
- dimensionScoreDefault.labour=1;
- labour_score = Math.Round((labour.score - min_labour) / (max_labour - min_labour) * (99 - basic_Score) + basic_Score,2);
- }
- dimensionScore.labour = labour_score;
- //德育
- var order_virtue = hasData_virtue.Select(x => new { score = x.virtue.Sum(x => x.sumScore), studentId = x.studentId }).OrderByDescending(x => x.score).ToList();
- var virtue = order_virtue.Find(x => x.studentId.Equals(item.studentId));
- var virtue_score = basic_Score;
- if (virtue != null && virtue.score > 0 && max_virtue - min_virtue>0)
- {
- dimensionScoreDefault.virtue=1;
- virtue_score = Math.Round((virtue.score - min_virtue) / (max_virtue - min_virtue) * (99 - basic_Score) + basic_Score,2);
- }
- dimensionScore.virtue = virtue_score;
- double intelligence = basic_Score;
- if (item.intelligence.IsNotEmpty())
- {
- //智育
- //if (schoolSetting.overallEducationSetting.intelligence.Equals("avg"))
- //{
- //}
- //else {
- //}
- List<EducationScore> intelligenceScore = new List<EducationScore>();
- if (schoolSetting.overallEducationSetting.examTypes.IsNotEmpty())
- {
- var datas = item.intelligence.FindAll(z => !string.IsNullOrWhiteSpace(z.examType) && schoolSetting.overallEducationSetting.examTypes.Contains(z.examType));
- if (datas.IsNotEmpty()) {
- intelligenceScore.AddRange(datas);
- }
- }
- else {
- intelligenceScore.AddRange(item.intelligence);
- }
- if (intelligenceScore.Count>0) {
- double sumScore = intelligenceScore.Average(x => x.sumScore);
- double totalScore = intelligenceScore.Average(x => x.totalScore);
- if (totalScore > 0)
- {
- intelligence = Math.Round(sumScore * 1.0 / totalScore * 100, 2);
- }
- else
- {
- intelligence = Math.Round(sumScore * 1.0 / intelligenceScore.Count, 2);
- }
- }
- dimensionScoreDefault.intelligence=1;
- dimensionScoreDefault.exam=1;
- }
- dimensionScore.exam = intelligence;
- var order_tdata = hasData_lesson.Select(x => new { score = x.lessonScore.Sum(x => x.tscore), studentId = x.studentId }).OrderByDescending(x => x.score).ToList();
- var order_gdata = hasData_lesson.Select(x => new { score = x.lessonScore.Sum(x => x.gscore), studentId = x.studentId }).OrderByDescending(x => x.score).ToList();
- var order_pdata = hasData_lesson.Select(x => new { score = x.lessonScore.Sum(x => x.pscore), studentId = x.studentId }).OrderByDescending(x => x.score).ToList();
- //合作
- var gdata = order_gdata.Find(x => x.studentId.Equals(item.studentId));
- var gdata_score = basic_Score;
- if (gdata != null && gdata.score > 0 && max_lesson_gscore - min_lesson_gscore>0)
- {
- dimensionScoreDefault.gscore=1;
- dimensionScoreDefault.intelligence=1;
- gdata_score = Math.Round((gdata.score - min_lesson_gscore) / (max_lesson_gscore - min_lesson_gscore) * (99 - basic_Score) + basic_Score,2);
- }
- dimensionScore.gscore = gdata_score;
- //态度
- var tdata = order_tdata.Find(x => x.studentId.Equals(item.studentId));
- var tdata_score = basic_Score;
- if (tdata != null && tdata.score > 0 && max_lesson_tscore - min_lesson_tscore>0)
- {
- dimensionScoreDefault.tscore=1;
- dimensionScoreDefault.intelligence=1;
- tdata_score = Math.Round((tdata.score - min_lesson_tscore) / (max_lesson_tscore - min_lesson_tscore) * (99 - basic_Score) + basic_Score,2);
- }
- dimensionScore.tscore = tdata_score;
- //能力
- var pdata = order_pdata.Find(x => x.studentId.Equals(item.studentId));
- var pdata_score = basic_Score;
- if (pdata != null && pdata.score > 0 && max_lesson_pscore - min_lesson_pscore>0)
- {
- dimensionScoreDefault.pscore=1;
- dimensionScoreDefault.intelligence=1;
- pdata_score = Math.Round((pdata.score - min_lesson_pscore) / (max_lesson_pscore - min_lesson_pscore) * (99 - basic_Score) + basic_Score,2);
- }
- dimensionScore.pscore = pdata_score;
-
- //态度=》学习态度
- double attitude = 0.1;
- //合作=》合作能力
- double cooperate = 0.1;
- //能力=》 //协作能力 //评价能力
- double ability = 0.1;
- //水平=》学习成效
- double standard = 0.7;
- var attitudeWeight = schoolSetting.overallEducationSetting.intelligenceWeight.Find(x => x.code.Equals("attitude"));
- attitude = attitudeWeight != null ? attitudeWeight.value : attitude;
- var cooperateWeight = schoolSetting.overallEducationSetting.intelligenceWeight.Find(x => x.code.Equals("cooperate"));
- cooperate = cooperateWeight != null ? cooperateWeight.value : cooperate;
- var abilityWeight = schoolSetting.overallEducationSetting.intelligenceWeight.Find(x => x.code.Equals("ability"));
- ability = abilityWeight != null ? abilityWeight.value : ability;
- var standardWeight = schoolSetting.overallEducationSetting.intelligenceWeight.Find(x => x.code.Equals("standard"));
- standard = standardWeight != null ? standardWeight.value : standard;
- dimensionScore.intelligence = Math.Round(intelligence * standard + pdata_score * ability + tdata_score * attitude + gdata_score * cooperate, 2);
- //成效权重
- double c_w = 0.1;
- //态度权重
- double t_w = 0.1;
- //合作权重
- double h_w = 0.1;
- //评价权重
- double p_w = 0.1;
- //协作权重
- double x_w = 0.1;
- //水平权重
- double s_w = 0.5;
- double xrate = 0, crate = 0, prate = 0,trate=0,hrate =0 ;
- var crates = item.lessonScore.Where(x => x.crate>0).Select(x=>x.crate);
- if (crates!=null && crates.Count()>0)
- {
- var crates_c= LessonETLService.CleanDataBySDThreshold(crates, 2);
- if (crates_c.Count>0)
- {
- crate = crates_c.Average();
- }
- else
- {
- crate = crates.Average();
- }
- }
- var trates = item.lessonScore.Where(x => x.trate>0).Select(x => x.trate);
- if (trates!=null && trates.Count()>0)
- {
- var trates_c= LessonETLService.CleanDataBySDThreshold(trates, 2);
- if (trates_c.Count>0)
- {
- trate = trates_c.Average();
- }
- else
- {
- trate = trates.Average();
- }
- }
- var prates = item.lessonScore.Where(x => x.prate>0).Select(x => x.prate);
- if (prates!=null && prates.Count()>0)
- {
- var prates_c= LessonETLService.CleanDataBySDThreshold(prates, 2);
- if (prates_c.Count>0)
- {
- prate = prates_c.Average();
- }
- else {
- prate = prates.Average();
- }
- }
- var hrates = item.lessonScore.Where(x => x.hrate>0).Select(x => x.hrate);
- if (hrates!=null && hrates.Count()>0)
- {
- var hrates_c= LessonETLService.CleanDataBySDThreshold(hrates, 2);
- if (hrates_c.Count>0)
- {
- hrate = hrates_c.Average();
- }
- else
- {
- hrate = hrates.Average();
- }
- }
- var xrates = item.lessonScore.Where(x => x.xrate>0).Select(x => x.xrate);
- if (xrates!=null && xrates.Count()>0)
- {
- var xrates_c= LessonETLService.CleanDataBySDThreshold(xrates, 2);
- if (xrates_c.Count>0)
- {
- xrate = xrates_c.Average();
- }
- else
- {
- xrate = hrates.Average();
- }
- }
- dimensionScore.intelligence = Math.Round(intelligence * s_w + crate * c_w + trate * t_w + prate* p_w+ hrate* h_w+xrate* x_w, 2);
- // dimensionScore.intelligence = Math.Round(intelligence * standard + pdata_score * ability + tdata_score * attitude + gdata_score * cooperate, 2);
- if (item.sports.IsNotEmpty())
- { //体育
- //if (schoolSetting.overallEducationSetting.sports.Equals("newest"))
- //{
-
- //}
- //else { dimensionScore.sports = basic_Score; }
- double sumScore = item.sports.OrderByDescending(x => x.examDate).First().sumScore;
- double totalScore = item.sports.OrderByDescending(x => x.examDate).First().totalScore;
- if (totalScore > 0)
- {
- dimensionScore.sports = Math.Round(sumScore * 1.0 / totalScore * 100, 2);
- }
- else
- {
- dimensionScore.sports = Math.Round(sumScore * 1.0 / item.sports.Count, 2);
- }
- dimensionScoreDefault.sports=1;
- }
- else
- {
- dimensionScore.sports = basic_Score;
- }
- if (item.art.IsNotEmpty())
- {
- //艺术
- //if (schoolSetting.overallEducationSetting.art.Equals("newest"))
- //{
-
- //}
- //else
- //{
- // dimensionScore.art = basic_Score;
- //}
- var art = item.art.OrderByDescending(x => x.examDate).First();
- double sumScore = art.sumScore;
- double totalScore = art.totalScore;
- if (totalScore > 0)
- {
- dimensionScore.art = Math.Round(sumScore * 1.0 / totalScore * 100, 2);
- }
- else
- {
- dimensionScore.art = Math.Round(sumScore * 1.0 / item.art.Count, 2);
- }
- dimensionScoreDefault.art=1;
- var subject_music = art.itemScore.Find(x => !string.IsNullOrWhiteSpace(x.id) ? x.id.Equals("subject_music") : x.type.Equals("subject_music"));
- var subject_painting = art.itemScore.Find(x => !string.IsNullOrWhiteSpace(x.id) ? x.id.Equals("subject_painting") : x.type.Equals("subject_painting"));
- if (subject_music != null)
- {
- dimensionScore.subject_music = Math.Round(subject_music.score * 1.0 / subject_music.totalScore *100, 2);
- dimensionScoreDefault.subject_music=1;
- }
- else
- {
- dimensionScore.subject_music = 0;
- }
- if (subject_painting != null)
- {
- dimensionScoreDefault.subject_painting=1;
- dimensionScore.subject_painting = Math.Round(subject_painting.score * 1.0 / subject_painting.totalScore *100, 2);
- }
- else
- {
- dimensionScore.subject_painting = 0;
- }
- }
- else
- {
- dimensionScore.art = basic_Score;
- }
- dimensionScore.score =Math.Round((dimensionScore.virtue + dimensionScore.intelligence + dimensionScore.labour + dimensionScore.art + dimensionScore.sports) / 5,2);
- schoolSetting.overallEducationSetting.reviewLevel.ForEach(z => {
- if (z.value[0] <= dimensionScore.score && z.value[1] > dimensionScore.score)
- {
- dimensionScore.level = z.code;
- }
- });
- //dimensionScore.xrate=60;
- //dimensionScore.trate=60;
- //dimensionScore.zrate=60;
- //dimensionScore.prate=60;
- //dimensionScore.crate=60;
- dimensionScore.xrate=Math.Round(xrate, 2);
- dimensionScore.trate=Math.Round(trate, 2);
- // dimensionScore.zrate=60;
- dimensionScore.hrate=Math.Round(hrate, 2);
- dimensionScore.prate=Math.Round(prate, 2);
- dimensionScore.crate=Math.Round(crate, 2);
- grade_dimensions.Add(dimensionScore);
- }
- //处理年级排名
- // grade_dimensions.OrderByDescending(x => x.score).Select((z, index) => z.gradeRanking = (index + 1));
- grade_dimensions = grade_dimensions.OrderByDescending(x => x.score).ToList();
- int index = 1;
- foreach(var item in grade_dimensions)
- {
- item.gradeRanking = index;
- index++;
- }
- var group_class_dimensions = grade_dimensions.GroupBy(z => z.classId).Select(z => new { key = z.Key, list =z.OrderByDescending(x => x.score) });
- foreach (var classData in group_class_dimensions)
- {
- index = 1;
- // classData.list.OrderByDescending(x => x.score).Select((z, index) => z.classRanking = (index + 1));
- foreach (var item in classData.list)
- {
- item.classRanking = index;
- index++;
- }
- }
- // group_class_dimensions.ForEach(x=>x)
- List<StudentDimensionScore> dimensions = new List<StudentDimensionScore>();
- //当前条件的数据
- foreach (var item in overallEducations)
- {
- var dimension = grade_dimensions.Find(x => x.studentId.Equals(item.studentId));
- if (dimension != null)
- {
- var stud = students.Find(c => c.id.Equals(item.studentId));
- dimension.classId=stud.classId;
- dimensions.Add(dimension);
- }
- }
-
- var class_dimensions = dimensions.GroupBy(z => z.classId).Select(z => new { key = z.Key, list = z }).ToList();
- List<dynamic> classDimensions = new List<dynamic>();
- List<AchievementScore> achievementScores = new List<AchievementScore>();
- classes.ForEach(c => {
- var classData= class_dimensions.Where(x => x.key == c.id).FirstOrDefault();
- ClassDimensionScore classDimensionScore = null;
- double intelligenceScore = 0;
- if (classData!=null)
- {
- classDimensionScore = new ClassDimensionScore() { classId = classData.key };
- var clazz = classes.Find(x => x.id.Equals(classData.key));
- classDimensionScore.className = clazz?.name;
- classDimensionScore.max = Math.Round(classData.list.Max(x => x.score), 2);
- classDimensionScore.min = Math.Round(classData.list.Min(x => x.score), 2);
- classDimensionScore.score = Math.Round(classData.list.Average(x => x.score), 2);
- classDimensionScore.pscore = Math.Round(classData.list.Average(x => x.pscore), 2);
- classDimensionScore.tscore = Math.Round(classData.list.Average(x => x.tscore), 2);
- classDimensionScore.gscore = Math.Round(classData.list.Average(x => x.gscore), 2);
- classDimensionScore.crate = Math.Round(classData.list.Average(x => x.crate), 2);
- classDimensionScore.trate = Math.Round(classData.list.Average(x => x.trate), 2);
- classDimensionScore.hrate = Math.Round(classData.list.Average(x => x.hrate), 2);
- classDimensionScore.xrate = Math.Round(classData.list.Average(x => x.xrate), 2);
- classDimensionScore.prate = Math.Round(classData.list.Average(x => x.prate), 2);
- classDimensionScore.exam = Math.Round(classData.list.Average(x => x.exam), 2);
- intelligenceScore = Math.Round(classData.list.Average(x => x.intelligence), 2);
-
- classDimensionScore.intelligenceLevels= classData.list.GroupBy(x => x.level).Select(x => new CodeLong { code = x.Key, value = x.Count() }).ToList();
- classDimensionScore.avg_intelligence =Math.Round(classData.list.Average(x => x.intelligence), 2);
- classDimensionScore.avg_virtue = Math.Round(classData.list.Average(x => x.virtue), 2);
- classDimensionScore.avg_labour = Math.Round(classData.list.Average(x => x.labour), 2);
- classDimensionScore.avg_sports = Math.Round(classData.list.Average(x => x.sports), 2);
- classDimensionScore.avg_art = Math.Round(classData.list.Average(x => x.art), 2);
- }
- else {
- classDimensionScore = new ClassDimensionScore() { classId = c.id };
- classDimensionScore.className = c?.name;
- classDimensionScore.intelligenceLevel=string.Empty;
- }
- schoolSetting.overallEducationSetting.reviewLevel.ForEach(z =>
- {
- var level = classDimensionScore.intelligenceLevels.Find(x => x.code==z.code);
- if (level==null)
- {
- classDimensionScore.intelligenceLevels.Add(new CodeLong { code = z.code, value = 0 });
- }
- if (z.value[0] <= classDimensionScore.score && z.value[1] > classDimensionScore.score)
- {
- classDimensionScore.level = z.code;
- }
- if (z.value[0] <= intelligenceScore && z.value[1] > intelligenceScore)
- {
- classDimensionScore.intelligenceLevel = z.code;
- }
- });
- if (!isClass)
- {
- achievementScores.Add(new AchievementScore
- {
- gscore = classDimensionScore.gscore,
- pscore = classDimensionScore.pscore,
- tscore = classDimensionScore.tscore,
- xrate = classDimensionScore.xrate,
- crate = classDimensionScore.crate,
- hrate = classDimensionScore.hrate,
- prate = classDimensionScore.prate,
- trate = classDimensionScore.trate,
- id = classDimensionScore.classId,
- name = classDimensionScore?.className,
- type = "class"
- });
- }
-
- classDimensions.Add(classDimensionScore);
- });
- //foreach (var classData in class_dimensions)
- //{
-
- //}
- ///当前条件的
- double pscore_avg = 0;
- double tscore_avg = 0;
- double gscore_avg = 0;
- //年级
- double grade_pscore_avg = 0;
- double grade_tscore_avg = 0;
- double grade_gscore_avg = 0;
- double crate_avg = 0;
- double trate_avg = 0;
- double hrate_avg = 0;
- double xrate_avg = 0;
- double prate_avg = 0;
- //年级
- double grade_crate_avg = 0;
- double grade_trate_avg = 0;
- double grade_hrate_avg = 0;
- double grade_xrate_avg = 0;
- double grade_prate_avg = 0;
- if (isClass)
- {
- if (dimensions != null && dimensions.Any())
- { //能力年级平均分
- pscore_avg = Math.Round(dimensions.Average(x => x.pscore), 2);
- //态度年级平均分
- tscore_avg = Math.Round(dimensions.Average(x => x.tscore), 2);
- //合作年级平均分
- gscore_avg = Math.Round(dimensions.Average(x => x.gscore), 2);
- crate_avg= Math.Round(dimensions.Average(x => x.crate), 2);
- trate_avg= Math.Round(dimensions.Average(x => x.trate), 2);
- hrate_avg= Math.Round(dimensions.Average(x => x.hrate), 2);
- xrate_avg= Math.Round(dimensions.Average(x => x.xrate), 2);
- prate_avg= Math.Round(dimensions.Average(x => x.prate), 2);
- var studentAchievementScores = dimensions.Select(z => new AchievementScore
- {
- id = z.studentId,
- name = z.studentName,
- gscore = z.gscore,
- pscore = z.pscore,
- tscore = z.tscore,
- type = "student",
- xrate=z.xrate,
- hrate=z.hrate,
- prate=z.prate,
- crate=z.crate,
- trate=z.trate
- });
- achievementScores.AddRange(studentAchievementScores);
- }
-
- }
- else
- {
- if (grade_dimensions != null && grade_dimensions.Any())
- { //能力年级平均分
- pscore_avg = Math.Round(grade_dimensions.Average(x => x.pscore), 2);
- //态度年级平均分
- tscore_avg = Math.Round(grade_dimensions.Average(x => x.tscore), 2);
- //合作年级平均分
- gscore_avg = Math.Round(grade_dimensions.Average(x => x.gscore), 2);
- crate_avg= Math.Round(grade_dimensions.Average(x => x.crate), 2);
- trate_avg= Math.Round(grade_dimensions.Average(x => x.trate), 2);
- hrate_avg= Math.Round(grade_dimensions.Average(x => x.hrate), 2);
- xrate_avg= Math.Round(grade_dimensions.Average(x => x.xrate), 2);
- prate_avg= Math.Round(grade_dimensions.Average(x => x.prate), 2);
- }
- }
- if (grade_dimensions != null && grade_dimensions.Any())
- { //能力年级平均分
- grade_pscore_avg = Math.Round(grade_dimensions.Average(x => x.pscore), 2);
- //态度年级平均分
- grade_tscore_avg = Math.Round(grade_dimensions.Average(x => x.tscore), 2);
- //合作年级平均分
- grade_gscore_avg = Math.Round(grade_dimensions.Average(x => x.gscore), 2);
- grade_crate_avg= Math.Round(grade_dimensions.Average(x => x.crate), 2);
- grade_trate_avg= Math.Round(grade_dimensions.Average(x => x.trate), 2);
- grade_hrate_avg= Math.Round(grade_dimensions.Average(x => x.hrate), 2);
- grade_xrate_avg= Math.Round(grade_dimensions.Average(x => x.xrate), 2);
- grade_prate_avg= Math.Round(grade_dimensions.Average(x => x.prate), 2);
- }
- #region
- double data_count = overallEducations.Count;
- int sports_count90 = dimensions.Where(x => x.sports >= 90).Count();
- int sports_count60 = dimensions.Where(x => x.sports >= 60).Count();
- double sports_rate90 = Math.Round(data_count > 0 ? dimensions.Where(x => x.sports >= 90).Count() * 1.0 / data_count *100: 0,2);
- double sports_rate60 =Math.Round(data_count > 0 ? dimensions.Where(x => x.sports >= 60).Count() * 1.0 / data_count * 100 : 0,2);
- int art_count90 = dimensions.Where(x => x.art >= 90).Count();
- int art_count60 = dimensions.Where(x => x.art >= 60).Count();
- double art_rate90 = Math.Round(data_count > 0 ? dimensions.Where(x => x.art >= 90).Count() * 1.0 / data_count * 100 : 0, 2);
- double art_rate60 = Math.Round(data_count > 0 ? dimensions.Where(x => x.art >= 60).Count() * 1.0 / data_count * 100 : 0, 2);
- int subject_music_count90 = dimensions.Where(x => x.subject_music >= 90).Count();
- int subject_music_count60 = dimensions.Where(x => x.subject_music >= 60).Count();
- double subject_music_rate90 = Math.Round(data_count > 0 ? dimensions.Where(x => x.subject_music >= 90).Count() * 1.0 / data_count * 100 : 0, 2);
- double subject_music_rate60 = Math.Round(data_count > 0 ? dimensions.Where(x => x.subject_music >= 60).Count() * 1.0 / data_count * 100 : 0, 2);
- int subject_painting_count90 = dimensions.Where(x => x.subject_painting >= 90).Count();
- int subject_painting_count60 = dimensions.Where(x => x.subject_painting >= 60).Count();
- double subject_painting_rate90 = Math.Round(data_count > 0 ? dimensions.Where(x => x.subject_painting >= 90).Count() * 1.0 / data_count * 100 : 0, 2);
- double subject_painting_rate60 = Math.Round(data_count > 0 ? dimensions.Where(x => x.subject_painting >= 60).Count() * 1.0 / data_count * 100 : 0, 2);
- int labour_count90 = dimensions.Where(x => x.labour >= 90).Count();
- int labour_count60 = dimensions.Where(x => x.labour >= 60).Count();
- double labour_rate90 = Math.Round(data_count > 0 ? dimensions.Where(x => x.labour >= 90).Count() * 1.0 / data_count * 100 : 0, 2);
- double labour_rate60 = Math.Round(data_count > 0 ? dimensions.Where(x => x.labour >= 60).Count() * 1.0 / data_count * 100 : 0, 2);
- int virtue_count90 = dimensions.Where(x => x.virtue >= 90).Count();
- int virtue_count60 = dimensions.Where(x => x.virtue >= 60).Count();
- double virtue_rate90 = Math.Round(data_count > 0 ? dimensions.Where(x => x.virtue >= 90).Count() * 1.0 / data_count * 100 : 0, 2);
- double virtue_rate60 = Math.Round(data_count > 0 ? dimensions.Where(x => x.virtue >= 60).Count() * 1.0 / data_count * 100 : 0, 2);
- double rate90 = Math.Round(data_count > 0 ? dimensions.Where(x => x.score >= 90).Count() * 1.0 / data_count * 100 : 0, 2);
- double rate60 = Math.Round(data_count > 0 ? dimensions.Where(x => x.score >= 60).Count() * 1.0 / data_count * 100 : 0, 2);
- OverallEducation studentOverallEducation = null;
-
- var studyYear = int.Parse($"{_studyYear}");
- var semesterData= SchoolService.GetSemester(period, time: SchoolService.GetOpensByStudyYearAndSemester(period.semesters,studyYear,$"{_semesterId}"));
- var examData = await ExamService.getGradeScore(_coreAPIHttpService, _dingDing,_azureCosmos.GetCosmosClient(), grade_classes.Select(x=>x.id).ToList(), $"{_periodId}", school.id, schoolSetting.overallEducationSetting.examTypes
- , semesterData.date.ToUnixTimeMilliseconds(), semesterData.nextSemester.ToUnixTimeMilliseconds());
-
- var groupExam= examData.GroupBy(x => x.name).Select(y => new { key = y.Key, list = y });
- List<ExamScore> exam3Scores = new List<ExamScore>();
- foreach (var item in examData) {
- if (!string.IsNullOrWhiteSpace($"{_studentId}"))
- {
- var student = students.Find(x => x.id.Equals($"{_studentId}"));
- ExamScore exam3Score = new ExamScore();
- exam3Score.name = item.name;
- exam3Score.gradeRate=item.total;
- exam3Score.xdatas= new List<CodeDouble>
- {
- new CodeDouble
- {
- code = student.id,
- name= student.name,
- value= item.students.Find(x=>x.studentId.Equals(student.id)).scores,
- rank = item.students.OrderByDescending(x => x.scores).Select(z => z.studentId).ToList().IndexOf(student.id) + 1,
- time = item.time
- }
- };
- exam3Score.classRate=item.classMore.Find(x=>x.classId.Equals(student.classId)).average;
- exam3Scores.Add(exam3Score);
- }
- else
- {
- if (isClass)
- {
- Class clazz = classes.First();
- ExamScore exam3Score = new ExamScore();
- exam3Score.name = item.name;
- exam3Score.gradeRate=item.total;
- exam3Score.classRate=item.classMore.Find(x => x.classId.Equals(clazz.id)).average;
- exam3Score.xdatas= item.students.Where(y=>y.classId.Equals(clazz.id)).Select(x=>new CodeDouble {
- code=x.studentId,
- name= students.Find(z=>z.id.Equals(x.studentId))?.name,
- value=x.scores,
- rank = item.students.Where(y => y.classId.Equals(clazz.id)).OrderByDescending(x => x.scores).Select(z => z.studentId).ToList().IndexOf(x.studentId) + 1,
- time = item.time
- }).ToList();
- exam3Scores.Add(exam3Score);
- }
- else
- {
- ExamScore exam3Score = new ExamScore();
- exam3Score.name = item.name;
- exam3Score.gradeRate =item.total;
- exam3Score.classRate =-1;
- exam3Score.xdatas= item.classMore.Select(x => new CodeDouble {
- code=x.classId,
- name= grade_classes.Find(z => z.id.Equals(x.classId))?.name,
- value=x.average,
- time = item.time
- }).ToList();
- exam3Scores.Add(exam3Score);
- }
- }
- }
- var examScores = exam3Scores.Select(x => new {
- x.name,
- x.gradeRate,
- x.classRate,
- data = x.xdatas.Where(c => !string.IsNullOrEmpty(c.name)).Select(z => new {
- z.code,
- z.name,
- z.value,
- z.rank,
- z.time
- })
- });
- //学生统计数据
- dynamic studentStatistics = new ExpandoObject();
- if (!string.IsNullOrWhiteSpace($"{_studentId}"))
- {
- List<ExamDimensionScore> stuExamScores= new List<ExamDimensionScore>();
- exam3Scores.ForEach(z => {
- var stu = z.xdatas.Find(z => z.code.Equals($"{_studentId}"));
- if (stu!=null) {
- stuExamScores.Add(new ExamDimensionScore { examName=z.name, classRate=z.classRate,gradeRate=z.gradeRate,stuScore=stu.value });
- }
- });
- var student = students.Find(z => z.id.Equals($"{_studentId}"));
- var studentDimension = dimensions.Find(z => z.studentId.Equals($"{_studentId}"));
- if (studentDimension==null)
- {
- studentDimension=new StudentDimensionScore
- {
- stuExamScores=stuExamScores,
- art=60,
- classId=student.classId,
- className=student.classId,
- classRanking=0,
- exam=60,
- gradeRanking=0,
- gscore=60,
- intelligence=60,
- labour=60,
- level="",
- picture=student.picture,
- pscore=60,
- score=60,
- sports=60,
- studentId=student.id,
- studentName=student.name,
- subject_music=0,
- subject_painting=0,
- tscore=60,
- virtue=60,
- crate=0,
- xrate=0,
- // zrate=60,
- prate=0,
- trate=0,
- hrate=0
- };
- }
- else {
- studentDimension.stuExamScores= stuExamScores;
- }
- var classDimension = classDimensions.Find(z => z.classId.Equals(student.classId));
- studentStatistics= new {
- studentDimension, inClass = classDimension, inGrade = new
- {
- grade_gscore_avg,
- grade_pscore_avg,
- grade_tscore_avg,
- grade_xrate_avg = grade_xrate_avg,
- grade_crate_avg = grade_crate_avg,
- grade_hrate_avg = grade_hrate_avg,
- grade_prate_avg = grade_prate_avg,
- grade_trate_avg = grade_trate_avg,
- }
- };
- studentOverallEducation = overallEducations.FindAll(x => x.studentId.Equals($"{_studentId}")).FirstOrDefault();
- if (studentOverallEducation==null)
- {
- studentOverallEducation = new OverallEducation() { studentId=student.id, name= student.name, classId=student.classId, picture = student.picture, schoolCode= student.schoolId };
- }
- }
- #endregion
- //补充没有数据的
- foreach (var student in overallEducationsNoData)
- {
- var studentDimension = dimensions.Find(z => z.studentId.Equals(student.id));
- if (studentDimension==null)
- {
- List<ExamDimensionScore> stuExamScores = new List<ExamDimensionScore>();
- exam3Scores.ForEach(z => {
- var stu = z.xdatas.Find(z => z.code.Equals(student.id));
- if (stu!=null)
- {
- stuExamScores.Add(new ExamDimensionScore { examName=z.name, classRate=z.classRate, gradeRate=z.gradeRate, stuScore=stu.value });
- }
- });
- studentDimension=new StudentDimensionScore
- {
- stuExamScores=stuExamScores,
- art=60,
- classId=student.classId,
- className=student.classId,
- classRanking=0,
- exam=60,
- gradeRanking=0,
- gscore=60,
- intelligence=60,
- labour=60,
- level="",
- picture=student.picture,
- pscore=60,
- score=60,
- sports=60,
- studentId=student.studentId,
- studentName=student.name,
- subject_music=0,
- subject_painting=0,
- tscore=60,
- virtue=60,
- crate=0,
- xrate=0,
- //zrate=0,
- prate=0,
- trate=0,
- hrate=0
- };
- dimensions.Add(studentDimension);
- }
- }
- return Ok(new
- {
- avg_intelligence= dimensions.IsNotEmpty()?Math.Round(dimensions.Average(x => x.intelligence),2):0,
- avg_virtue = dimensions.IsNotEmpty() ? Math.Round(dimensions.Average(x => x.virtue),2):0,
- avg_labour = dimensions.IsNotEmpty() ? Math.Round(dimensions.Average(x => x.labour), 2) : 0,
- avg_sports = dimensions.IsNotEmpty() ? Math.Round(dimensions.Average(x => x.sports), 2) : 0,
- avg_art = dimensions.IsNotEmpty() ? Math.Round(dimensions.Average(x => x.art), 2) : 0,
- examScores,
- sports_count60,
- sports_count90,
- labour_count60,
- labour_count90,
- virtue_count60,
- virtue_count90,
- art_count60,
- art_count90,
- subject_music_count60,
- subject_music_count90,
- subject_painting_count60,
- subject_painting_count90,
- achievementScores,
- grade_pscore_avg,
- grade_tscore_avg,
- grade_gscore_avg,
- grade_prate_avg = grade_prate_avg,
- grade_trate_avg = grade_trate_avg,
- //grade_zrate_avg = grade_gscore_avg,
- grade_hrate_avg = grade_hrate_avg,
- grade_xrate_avg = grade_xrate_avg,
- grade_crate_avg = grade_crate_avg,
- pscore_avg,
- tscore_avg,
- gscore_avg,
- prate_avg = pscore_avg,
- trate_avg = tscore_avg,
- zrate_avg = gscore_avg,
- xrate_avg = 60,
- crate_avg = 60,
- classDimensions,
- dimensions = dimensions.OrderByDescending(x => x.score),
- data_count,
- classCount = classes.Count,
- rate90,
- rate60,
- sports_rate60,
- sports_rate90,
- art_rate60,
- art_rate90,
- labour_rate60,
- labour_rate90,
- virtue_rate60,
- virtue_rate90,
- subject_music_rate90,
- subject_music_rate60,
- subject_painting_rate90,
- subject_painting_rate60,
- studentCount = students.Count(),
- studentOverallEducation,
- studentStatistics,
- overallEducationsNoData,
- });
- }
- catch (Exception ex)
- {
- await _dingDing.SendBotMsg($"{_option.Location},{ex.Message}\n{ex.StackTrace},{json.ToJsonString()}",GroupNames.成都开发測試群組);
- }
- return Ok();
- }
- public class ExamScore {
- public double gradeRate { get; set; }
- public double classRate { get; set; }
- public string name { get; set; }
- public List<CodeDouble> xdatas = new List<CodeDouble>();
- }
- /// <summary>
- /// 素养
- /// </summary>
- public class AchievementScore
- {
- //class 班级,student 学生
- public string type { get; set; } = "class";
- /// <summary>
- /// 班级名称 或者学生姓名
- /// </summary>
- public string name { get; set; }
- /// <summary>
- /// 班级id 或者学生id
- /// </summary>
- public string id { get; set; }
- public double gscore { get; set; }
- public double pscore { get; set; }
- public double tscore { get; set; }
- public double xrate { get; set; }
- public double crate { get; set; }
- //public double zrate { get; set; }
- public double prate { get; set; }
- public double trate { get; set; }
- public double hrate { get; set; }
- }
- public class ExamDimensionScore
- {
- public string examName { get; set; }
- public double stuScore { get; set; }
- public double classRate { get;set; }
- public double gradeRate { get; set; }
- }
- public class ClassDimensionScore
- {
- public string classId { get; set; }
- public string className { get; set; }
- public double score { get; set; }
-
- public double gscore { get; set; }
- public double pscore { get; set; }
- public double tscore { get; set; }
- public double hrate { get; set; }
- // public double zrate { get; set; }
- public double prate { get; set; }
- public double trate { get; set; }
- public double crate { get; set; }
- public double xrate { get; set; }
-
- public double exam { get; set; }
- public string intelligenceLevel { get; set; }
- public double max { get; set; }
- public double min { get; set; }
- public string level { get; set; }
- // 等级人数
- public List<CodeLong> intelligenceLevels { get; set; } = new List<CodeLong>();
- public double avg_intelligence { get; set; }
- public double avg_virtue { get; set; }
- public double avg_labour { get; set; }
- public double avg_sports { get; set; }
- public double avg_art { get; set; }
- }
- public class StudentDimensionScore
- {
- public List<ExamDimensionScore> stuExamScores { get; set; } = new List<ExamDimensionScore>();
- public string className { get; set; }
- public string classId { get; set; }
- public string studentId { get; set; }
- public string studentName { get; set; }
- public string picture { get; set; }
- public double score { get; set; }
- public double sports { get; set; }
- public double art { get; set; }
- public double subject_music { get; set; }
- public double subject_painting { get; set; }
- public double labour { get; set; }
- public double intelligence { get; set; }
- public double virtue { get; set; }
- public double exam { get; set; }
- public double gscore { get; set; }
- public double pscore { get; set; }
- public double tscore { get; set; }
- // public double zrate { get; set; }
- public double prate { get; set; }
- public double trate { get; set; }
- public double crate { get; set; }
- public double xrate { get; set; }
- public double hrate { get; set; }
- public int classRanking { get; set; }
- public int gradeRanking { get; set; }
- public string level { get; set; }
- }
- /// <summary>
- /// 学生学生画像是否是默认初始化
- /// </summary>
- public class StudentDimensionScoreDefault
- {
- public string studentId { get; set; }
-
- public int sports { get; set; }
- public int art { get; set; }
- public int subject_music { get; set; }
- public int subject_painting { get; set; }
- public int labour { get; set; }
- public int intelligence { get; set; }
- public int virtue { get; set; }
- public int exam { get; set; }
- public int gscore { get; set; }
- public int pscore { get; set; }
- public int tscore { get; set; }
- }
- /*
-
- {
- "grades": [
- 0,1
- ],
- "periodId": "463db08d-cbe7-48a0-a81a-fc39b3c1fep1",
- "school": "hbcn",
- "classIds": [
- "e1729a0c-0e7c-4968-bec9-21254b70325b",
- "b44694b7-4cb2-46b8-8986-106696c4a282"
- ]
- }
-
- */
- }
- }
|