|
@@ -1,10 +1,12 @@
|
|
|
using Azure;
|
|
|
using Azure.Cosmos;
|
|
|
using DinkToPdf.Contracts;
|
|
|
+using DocumentFormat.OpenXml.Office2010.Excel;
|
|
|
using DocumentFormat.OpenXml.Office2013.Excel;
|
|
|
using DocumentFormat.OpenXml.Spreadsheet;
|
|
|
using HTEXLib.COMM.Helpers;
|
|
|
using HTEXLib.Helpers.ShapeHelpers;
|
|
|
+using MathNet.Numerics;
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
using Microsoft.AspNetCore.Http;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
@@ -79,9 +81,88 @@ namespace TEAMModelOS.Controllers
|
|
|
{
|
|
|
return BadRequest();
|
|
|
}
|
|
|
- var (userid, name, _, school) = HttpContext.GetAuthTokenInfo();
|
|
|
+ if (!request.TryGetProperty("schoolId", out JsonElement _schoolId))
|
|
|
+ {
|
|
|
+ return BadRequest();
|
|
|
+ }
|
|
|
+ if (!request.TryGetProperty("reaId", out JsonElement _areaId))
|
|
|
+ {
|
|
|
+ return BadRequest();
|
|
|
+ }
|
|
|
+ var client = _azureCosmos.GetCosmosClient();
|
|
|
+ string query = $" select value c from c where c.school = '{_schoolId}' ";
|
|
|
+ List<StudentArtResult > artResults = new List<StudentArtResult>();
|
|
|
+ ArtEvaluation art = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemAsync<ArtEvaluation>($"{_artId}", new PartitionKey($"Art-{_schoolId}"));
|
|
|
+ ArtSetting artSetting = await client.GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemAsync<ArtSetting>($"{_areaId}", new PartitionKey($"ArtSetting"));
|
|
|
+ await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIterator<StudentArtResult>
|
|
|
+ (queryText: query, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"ArtResult-{_artId}") }))
|
|
|
+ {
|
|
|
+ artResults.Add(item);
|
|
|
+ }
|
|
|
+ var a =art.subjects;
|
|
|
+ artResults.ForEach(x => {
|
|
|
+
|
|
|
+ var allSubject= x.results.GroupBy(g => g.quotaId).Select(s => new { key = s.Key, list = s.ToList() }).ToList();
|
|
|
+ var groupSubject = x.results.GroupBy(g => $"{g.quotaId}-{g.subjectId}").Select(s => new { key = s.Key, list = s.ToList() }).ToList();
|
|
|
+ allSubject.ForEach(a =>
|
|
|
+ {
|
|
|
+ var quota = a.key.Substring(0,7);
|
|
|
+
|
|
|
+ ArtPdf artPdf = new ArtPdf();
|
|
|
+ var noneScore = a.list.FindAll(x => x.score == -1);
|
|
|
+ if (noneScore.IsNotEmpty())
|
|
|
+ {
|
|
|
+ //全部未打分。
|
|
|
+ if (noneScore.Count >= art.subjects.Count)
|
|
|
+ {
|
|
|
+ artPdf.quotaId = a.key;
|
|
|
+ artPdf.score = "-";
|
|
|
+ artPdf.percent = "-";
|
|
|
+ artPdf.level = "-";
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ //有一部分打分的,只算有分的平均分。
|
|
|
+ var hasScore = a.list.FindAll(x => x.score >=0 );
|
|
|
+ if (hasScore.IsNotEmpty()) {
|
|
|
+ var avgScore = hasScore.Sum(x => x.score) * 1.0 / hasScore.Count;
|
|
|
+ var avg=decimal.Round(decimal.Parse($"{avgScore}"), 2);
|
|
|
+ artPdf.quotaId = a.key;
|
|
|
+ artPdf.score = $"{avg}";
|
|
|
+ artPdf.percent = "-";
|
|
|
+ artPdf.level = "-";
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ artPdf.quotaId = a.key;
|
|
|
+ artPdf.score = "-";
|
|
|
+ artPdf.percent = "-";
|
|
|
+ artPdf.level = "-";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ artPdf.quotaId = a.key;
|
|
|
+ artPdf.score = "-";
|
|
|
+ artPdf.percent = "-";
|
|
|
+ artPdf.level = "-";
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
return Ok();
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ public List<ArtQuota> GetArtQuotas(List<ArtQuota> quotas, string rootId ) {
|
|
|
+ var a = quotas.Find(x => x.id.Equals(rootId));
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ public class ArtPdf
|
|
|
+ {
|
|
|
+ public string quotaId { get; set; }
|
|
|
+ public string score { get; set; }
|
|
|
+ public string percent { get; set; }
|
|
|
+ public string level { get; set;}
|
|
|
+
|
|
|
+ }
|
|
|
/// <summary>
|
|
|
///
|
|
|
/// </summary>
|