123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638 |
- using Azure;
- using Microsoft.Azure.Cosmos;
- using Azure.Messaging.ServiceBus;
- using DinkToPdf.Contracts;
-
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Azure.Amqp.Framing;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.Options;
- using StackExchange.Redis;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- 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.Service;
- using Microsoft.AspNetCore.Authorization;
- using static SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.CreateApplyForSubjectApplymentRequest.Types;
- using TEAMModelOS.SDK.Models.Cosmos.Student;
- using TEAMModelOS.Controllers.Analysis;
- using System.Threading;
- namespace TEAMModelOS.Controllers
- {
- /// <summary>
- /// SELECT distinct value c FROM c join b in c.results where c.code='ArtResult-e4864b04-7e3d-47ac-8a00-4395569c5860' and array_contains(c.classIds,'26a8d509-ce01-406e-b962-b53474ea3e58' ) and b.subjectId='subject_music'
- /// </summary>
- [ProducesResponseType(StatusCodes.Status200OK)]
- [ProducesResponseType(StatusCodes.Status400BadRequest)]
- [Route("school/art")]
- [ApiController]
- public class ArtReviewController : ControllerBase
- {
- public IWebHostEnvironment _environment { get; set; }
- private readonly AzureCosmosFactory _azureCosmos;
- private readonly SnowflakeId _snowflakeId;
- private readonly AzureServiceBusFactory _serviceBus;
- private readonly DingDing _dingDing;
- private readonly Option _option;
- private readonly AzureStorageFactory _azureStorage;
- private readonly AzureRedisFactory _azureRedis;
- private readonly IConverter _converter;
- public IConfiguration _configuration { get; set; }
- private readonly CoreAPIHttpService _coreAPIHttpService;
- private readonly HttpTrigger _httpTrigger;
- public ArtReviewController(HttpTrigger httpTrigger, IConverter converter, CoreAPIHttpService coreAPIHttpService, AzureCosmosFactory azureCosmos, AzureServiceBusFactory serviceBus, SnowflakeId snowflakeId, DingDing dingDing,
- IOptionsSnapshot<Option> option, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis, IConfiguration configuration, IWebHostEnvironment env)
- {
- _environment = env;
- _coreAPIHttpService = coreAPIHttpService;
- _azureCosmos = azureCosmos;
- _serviceBus = serviceBus;
- _snowflakeId = snowflakeId;
- _dingDing = dingDing;
- _option = option?.Value;
- _azureStorage = azureStorage;
- _azureRedis = azureRedis;
- _configuration = configuration;
- _converter = converter;
- _httpTrigger = httpTrigger;
- }
- /// <summary>
- /// 轮询获取报告生成进度。
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
-
- [HttpPost("gen-pdf-process")]
- #if !DEBUG
- [AuthToken(Roles = "teacher,admin")]
- [Authorize(Roles = "IES")]
- #endif
- public async Task<IActionResult> GenPDFProcess(JsonElement request) {
- if (!request.TryGetProperty("artId", out JsonElement _artId))
- {
- return BadRequest();
- }
- if (!request.TryGetProperty("schoolId", out JsonElement _schoolId))
- {
- return BadRequest();
- }
- List<RedisValue> studentIds = new List<RedisValue>();
- if (request.TryGetProperty("studentIds", out JsonElement _studentIds) && _studentIds.ValueKind.Equals(JsonValueKind.Array))
- {
- var studentIdS = _studentIds.ToObject<List<string>>();
- studentIdS.ForEach(z => { studentIds.Add(z); }) ;
- }
- string key = $"ArtPDF:{_artId}:{_schoolId}";
- List<StudentArtResult> results= new List<StudentArtResult>();
- if (studentIds.IsNotEmpty())
- {
- var values = _azureRedis.GetRedisClient(8).HashGet(key, studentIds.ToArray());
- if (values != null)
- {
- foreach (var rcd in values)
- {
-
- if (!rcd.IsNullOrEmpty)
- {
- var value = rcd.ToString().ToObject<StudentArtResult>();
- results.Add(value);
- }
-
- }
- }
- }
- else {
- var values = _azureRedis.GetRedisClient(8).HashGetAll(key);
- if (values != null)
- {
- foreach (var rcd in values)
- {
- if (!rcd.Value.IsNullOrEmpty)
- {
- var value = rcd.Value.ToString().ToObject<StudentArtResult>();
- results.Add(value);
- }
- }
- }
- }
- var finish = results.Where(z => z.pdf != null && z.pdf.prime == true);
- var finishData = finish.Select(z => new { z.studentId, z.artId, z.studentName, z.pdf.url, z.pdf.blob, z.pdf.createTime });
- return Ok(new { total= results.Count ,finishCount= finish.Count(), finishData = finishData });
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
-
- [HttpPost("gen-pdf")]
- #if !DEBUG
- //[AuthToken(Roles = "teacher,admin")]
- //[Authorize(Roles = "IES")]
- #endif
- public async Task<IActionResult> GenPDF(JsonElement request)
- {
- string head_lang = "";
- if (HttpContext.Request.Headers.TryGetValue("lang", out var _lang))
- {
- head_lang = $"{_lang}";
- }
- if (string.IsNullOrWhiteSpace(head_lang))
- {
- head_lang = _option.Location.Contains("China") ? "zh-cn" : "en-us";
- }
- if (!request.TryGetProperty("opt", out JsonElement _opt))
- {
- return BadRequest();
- }
- if (!request.TryGetProperty("artId", out JsonElement _artId))
- {
- return BadRequest();
- }
- if (!request.TryGetProperty("schoolId", out JsonElement _schoolId))
- {
- return BadRequest();
- }
- List<string> studentIds = new List<string>();
- if (request.TryGetProperty("studentIds", out JsonElement _studentIds) && _studentIds.ValueKind.Equals(JsonValueKind.Array))
- {
- studentIds = _studentIds.ToObject<List<string>>();
- }
- await ArtService.GenArtPDF(studentIds, $"{_artId}", $"{_schoolId}", head_lang, _serviceBus, _configuration);
- return Ok(new {code=0,msg="加入PDF报告生成队列中。" });
- }
- /**
- {
- "artId": "99a946a7-f475-463f-846f-834a276e1b34",
- "schoolId": "hbcn",
- "schoolCode":"hbcn",
- "opt": "gen-pdf",
- "headLang":"zh-cn",
- "studentIds": [
- "202206001", "202206002"
- ]
- }
-
- */
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher,admin")]
- [HttpPost("update-custom-comment")]
- public async Task<IActionResult> UpdateCustomComment(JsonElement json)
- {
- string head_lang = "";
- if (HttpContext.Request.Headers.TryGetValue("lang", out var _lang))
- {
- head_lang = $"{_lang}";
- }
- if (string.IsNullOrWhiteSpace(head_lang))
- {
- head_lang = _option.Location.Contains("China") ? "zh-cn" : "en-us";
- }
- if (!json.TryGetProperty("artId", out JsonElement _artId))
- {
- return BadRequest();
- }
- if (!json.TryGetProperty("schoolId", out JsonElement _schoolId))
- {
- return BadRequest();
- }
- if (!json.TryGetProperty("studentId", out JsonElement _studentId))
- {
- return BadRequest();
- }
- json.TryGetProperty("comment", out JsonElement _comment);
- json.TryGetProperty("comment_music", out JsonElement _comment_music);
- json.TryGetProperty("comment_painting", out JsonElement _comment_painting);
- string query = $" select value c from c where c.school = '{_schoolId}' and c.studentId ='{_studentId}'";
- List<StudentArtResult> artResults = new List<StudentArtResult>();
- await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIteratorSql<StudentArtResult>
- (queryText: query, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"ArtResult-{_artId}") }))
- {
- item.comment=$"{_comment}";
- item.subjectScores.ForEach(x => {
- if(x.subjectId.Equals("subject_music"))
- {
- x.comment=$"{_comment_music}";
- }
- if (x.subjectId.Equals("subject_painting"))
- {
- x.comment = $"{_comment_painting}";
- }
- });
- await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).UpsertItemAsync(item, new PartitionKey($"ArtResult-{_artId}"));
- artResults.Add(item);
- }
- if (artResults.IsNotEmpty())
- {
- var data = await GenPDFService.GenArtStudentPdf(_azureRedis, _azureCosmos, _coreAPIHttpService, _dingDing, _azureStorage, _configuration, artResults.Select(x=>x.studentId).ToList(), $"{_artId}", $"{_schoolId}", $"{head_lang}");
- return Ok(new { code = 0, dataFile = data.studentPdfs.Select(x => new { x.blob, x.blobFullUrl }) });
- }
- return Ok(new { code = 1, msg = "没有找到学生数据" });
- }
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher,admin")]
- [HttpPost("get-pdf-data")]
- public async Task<IActionResult> GetPdfData(JsonElement json)
- {
- if (!json.TryGetProperty("artId", out JsonElement _artId))
- {
- return BadRequest();
- }
- if (!json.TryGetProperty("schoolId", out JsonElement _schoolId))
- {
- return BadRequest();
- }
- List<string> studentIds = new List<string>();
- if (json.TryGetProperty("studentIds", out JsonElement _studentIds) && _studentIds.ValueKind.Equals(JsonValueKind.Array))
- {
- studentIds = _studentIds.ToObject<List<string>>();
- }
- string head_lang = string.Empty;
- if (HttpContext.Request.Headers.TryGetValue("lang", out var _lang))
- {
- head_lang = $"{_lang}";
- }
- if (string.IsNullOrWhiteSpace(head_lang))
- {
- head_lang = _option.Location.Contains("China") ? "zh-cn" : "en-us";
- }
- var data = await GenPDFService.GenArtStudentPdf(_azureRedis, _azureCosmos, _coreAPIHttpService, _dingDing, _azureStorage, _configuration, studentIds,$"{_artId}",$"{_schoolId}",$"{head_lang}");
- return Ok(new {code=0, dataFiles= data.studentPdfs.Select(x=>new { x.blob,x.blobFullUrl}) });
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [AuthToken(Roles = "teacher,admin")]
- [HttpPost("review")]
- # if !DEBUG
- [Authorize(Roles = "IES")]
- #endif
- public async Task<IActionResult> Review(JsonElement request)
- {
- var client = _azureCosmos.GetCosmosClient();
- string head_lang = "";
- if (HttpContext.Request.Headers.TryGetValue("lang", out var _lang))
- {
- head_lang = $"{_lang}";
- }
- if (string.IsNullOrWhiteSpace(head_lang))
- {
- head_lang = _option.Location.Contains("China") ? "zh-cn" : "en-us";
- }
- if (!request.TryGetProperty("opt", out JsonElement _opt))
- {
- return BadRequest();
- }
- if (!request.TryGetProperty("artId", out JsonElement _artId))
- {
- return BadRequest();
- }
- var (userid, name, _, school) = HttpContext.GetAuthTokenInfo();
- try
- {
- switch (true)
- {
- case bool when $"{_opt}".Equals("find", StringComparison.OrdinalIgnoreCase):
- {
- string results_join = "";
- string results_where = "";
- //string results_filed = "c.results";
- string classIds_join = "";
- string classIds_where = "";
- //string classIds_filed = "c.classIds";
- request.TryGetProperty("studentName", out JsonElement studentName);
- request.TryGetProperty("studentId", out JsonElement studentId);
- request.TryGetProperty("classIds", out JsonElement _classIds);
- request.TryGetProperty("subjects", out JsonElement _subjects);
- request.TryGetProperty("continuationToken", out JsonElement _continuationToken);
- request.TryGetProperty("pageCount", out JsonElement _pageCount);
- string continuationToken = null;
- if (!string.IsNullOrWhiteSpace($"{_continuationToken}"))
- {
- continuationToken = $"{_continuationToken}";
- }
- int pageCount = 100;
- if (_pageCount.ValueKind.Equals(JsonValueKind.Number))
- {
- pageCount = int.Parse($"{_pageCount}");
- }
- if (_classIds.ValueKind.Equals(JsonValueKind.Array))
- {
- var classIds = _classIds.Deserialize<List<string>>();
- if (classIds.IsNotEmpty())
- {
- //classIds_filed = " ARRAY_CONCAT([classIds],[]) as classIds ";
- classIds_join = " join classIds in c.classIds ";
- classIds_where = $" and classIds in({string.Join(",", classIds.Select(x => $"'{x}'"))}) ";
- }
- }
- List<string> subjects = new List<string>();
- if (_subjects.ValueKind.Equals(JsonValueKind.Array))
- {
- subjects = _subjects.Deserialize<List<string>>();
- if (subjects.IsNotEmpty())
- {
- //results_filed = " ARRAY_CONCAT([results],[]) as results ";
- results_join = " join results in c.results ";
- results_where = $" and ( results.subjectId in({string.Join(",", subjects.Select(x => $"'{x}'"))}) or results.subjectId= null )";
- }
- }
- string studentNameWhere = "";
- if (!string.IsNullOrWhiteSpace($"{studentName}"))
- {
- studentNameWhere = $" and contains(c.studentName,'{studentName}') ";
- }
- string studentIdWhere = "";
- if (!string.IsNullOrWhiteSpace($"{studentId}"))
- {
- studentIdWhere = $" and c.id = '{school}-{studentId}' ";
- }
- //string sql = $"SELECT c.id,c.code,c.pk,c.studentId,c.studentName,c.picture,c.userType,c.school,c.artId,c.totalScore ,{results_filed},{classIds_filed}" +
- string sql = $"SELECT distinct value( c.id ) " +
- $" FROM c {classIds_join} {results_join} where c.pk='ArtResult' {classIds_where} {results_where} {studentIdWhere} {studentNameWhere} ";
- List<string> ids = new List<string>();
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryIteratorSql<string>
- (queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"ArtResult-{_artId}") }))
- {
- ids.Add(item);
- }
- List<StudentArtResult> results = new List<StudentArtResult>();
- List<double> scores = new();
- List<ArtSubjectScore> As = new();
- List<ArtAttachment> artAttachments = new();
- string sqlTask = $"select value(c) from c where c.artId = '{_artId}' and c.subjectId = '{subjects[0]}'";
- await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).
- GetItemQueryIteratorSql<ArtAttachment>(queryText: sqlTask, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"ArtAttachment-{school}") }))
- {
- artAttachments.Add(item);
- }
- if (ids.Any())
- {
- string query = $" select value c from c where c.id in({string.Join(",", ids.Select(x => $"'{x}'"))}) ";
- //var result= await client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetList<StudentArtResult>(query, $"ArtResult-{_artId}", continuationToken, pageCount);
- //if (result.list.IsNotEmpty()) {
- // results.AddRange(result.list);
- // continuationToken=result.continuationToken;
- //}
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryStreamIteratorSql
- (queryText: query, continuationToken: continuationToken, requestOptions: new QueryRequestOptions { MaxItemCount = pageCount, PartitionKey = new PartitionKey($"ArtResult-{_artId}") }))
- {
- using var json = await JsonDocument.ParseAsync(item.Content);
- if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
- {
- foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
- {
- StudentArtResult student = obj.ToObject<StudentArtResult>();
- results.Add(student);
- }
- }
- continuationToken = item.ContinuationToken;
- break;
- }
- if (subjects.IsNotEmpty())
- {
- results.ForEach(x => x.results.RemoveAll(z => !string.IsNullOrWhiteSpace(z.subjectId) && !subjects.Contains(z.subjectId)));
- results.ForEach(x => x.subjectScores.RemoveAll(z => !string.IsNullOrWhiteSpace(z.subjectId) && !subjects.Contains(z.subjectId)));
- }
- string queryScore = $" select c.totalScore,c.subjectScores from c where c.id in({string.Join(",", ids.Select(x => $"'{x}'"))}) ";
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student).GetItemQueryStreamIteratorSql
- (queryText: queryScore, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"ArtResult-{_artId}") }))
- {
- using var json = await JsonDocument.ParseAsync(item.Content);
- if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
- {
- foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
- {
- if (obj.TryGetProperty("totalScore", out JsonElement element))
- {
- double sc = element.GetDouble();
- scores.Add(sc);
- }
- else
- {
- scores.Add(0);
- }
- if (obj.TryGetProperty("subjectScores", out JsonElement subScore))
- {
- List<ArtSubjectScore> sc = subScore.ToObject<List<ArtSubjectScore>>();
- As.AddRange(sc);
- }
- else
- {
- As.AddRange(new List<ArtSubjectScore>());
- }
- }
- }
- }
- }
- ;
- if (subjects.IsNotEmpty())
- {
- var subjectScore = subjects.Select(s => new
- {
- id = s,
- name = As.Where(a => a.subjectId.Equals(s)).Select(x => x.score)
- });
- var works = results.Select(x => new
- {
- x.studentId,
- x.studentName,
- x.classIds,
- x.code,
- x.blob,
- x.id,
- x.pdf,
- x.picture,
- x.school,
- x.totalScore,
- x.userType,
- x.zyanswer,
- x.pk,
- x.subjectScores,
- x.artId,
- results = x.results.Select(c => new {
- attachments = artAttachments.Where(z=> z.studentId.Equals(x.studentId) && z.taskId.Equals(c.taskId)).ToList().FirstOrDefault(),
- c.files,
- c.name,
- c.quotaId,
- c.quotaName,
- c.score,
- c.source,
- c.subjectId,
- c.subjectName,
- c.taskId,
- c.taskName
- }),
- //attachments = artAttachments.Where(c => c.studentId.Equals(x.studentId)).ToList().FirstOrDefault(),
- //url = x.results.Where(c => c.taskId.Equals(taskId.GetString())).FirstOrDefault().quotaId.Equals("quota_22") ? zyUrl.Where(c => c.stuId.Equals(x.studentId)).FirstOrDefault().url : ""
- });
- return Ok(new { subjectScore, scores, results = works.OrderBy(z => z.studentId), status = 1, continuationToken });
- }
- else
- {
- return Ok(new { scores, results = results.OrderBy(z => z.studentId), status = 1, continuationToken });
- }
- }
- case bool when $"{_opt}".Equals("saveScore", StringComparison.OrdinalIgnoreCase)
- && request.TryGetProperty("studentScore", out JsonElement _studentScore):
- {
- //_studentScore的结构:
- /*
- [
- {
- "studentId":"学生id",
- "totalScore":12,
- "results":
- [
- {
- "taskId":"",
- "subjectId":"",
- "quotaId":"",
- "score":50.5,
- }
- ]
- }
- ]
- */
- List<StudentArt> results = _studentScore.Deserialize<List<StudentArt>>();
- var valid = results.Valid();
- if (!valid.isVaild)
- {
- return BadRequest(valid);
- }
- var ids = results.Select(x => $"{school}-{x.studentId}").ToHashSet();
- if (ids.Any())
- {
- List<StudentArtResult> studentArtResults = new List<StudentArtResult>();
- string sql = $"SELECT value c FROM c where c.pk='ArtResult' and c.id in ( {string.Join(",", ids.Select(x => $"'{x}'"))} ) ";
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student)
- .GetItemQueryIteratorSql<StudentArtResult>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"ArtResult-{_artId}") }))
- {
- studentArtResults.Add(item);
- }
- studentArtResults.ForEach(x =>
- {
- var res = results.FindAll(y => $"{school}-{y.studentId}".Equals(x.id));
- if (res.Any())
- {
- if (res[0].subjectScores.IsNotEmpty())
- {
- res[0].subjectScores.ForEach(z =>
- {
- var sc = x.subjectScores.Find(s => s.subjectId.Equals(z.subjectId));
- if (sc != null)
- {
- sc.score = z.score;
- }
- else
- {
- x.subjectScores.Add(new ArtSubjectScore { subjectId = z.subjectId, score = z.score });
- }
- });
- }
- //计算所有科目总分
- x.totalScore = Math.Round(x.subjectScores.Where(m => m.score >= 0).Sum(z => z.score), 2);
- res[0].results.ForEach(re =>
- {
- if (string.IsNullOrWhiteSpace(re.taskId))
- {
- var result = x.results.FindAll(z => string.IsNullOrWhiteSpace(z.taskId) && $"{z.subjectId}".Equals(re.subjectId) && $"{z.quotaId}".Equals(re.quotaId));
- if (result.Any())
- {
- result[0].score = re.score;
- }
- else
- {
- }
- }
- else
- {
- var result = x.results.FindAll(z => $"{z.taskId}".Equals(re.taskId) && $"{z.subjectId}".Equals(re.subjectId) && $"{z.quotaId}".Equals(re.quotaId));
- if (result.Any())
- {
- result[0].score = re.score;
- }
- }
- });
- }
- });
- List<StudentArtResult> artResults = new List<StudentArtResult>();
- ArtEvaluation art = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemAsync<ArtEvaluation>($"{_artId}", new PartitionKey($"Art-{school}"));
- //科目数量
- var scount = art.subjects.Count;
- //指标数量
- var qcount = art.settings.Count;
- //需要进行的打分项
- var tcount = scount * qcount;
- foreach (var rs in studentArtResults)
- {
- //已经打分的数量
- var rcount = rs.results.Where(z => z.score > -1).Count();
- if (rcount == tcount)
- {
- artResults.Add(rs);
- //已经打分的数量等于总的打分项,则发起报告生成。
- }
- await client.GetContainer(Constant.TEAMModelOS, Constant.Student).ReplaceItemAsync(rs, rs.id, new PartitionKey(rs.code));
- }
- if (artResults.Any()) {
- //先移除自动化生成
- // await ArtService.GenArtPDF(artResults.Select(z=>z.studentId).ToList(), $"{_artId}", $"{school}", head_lang, _serviceBus, _configuration);
- }
- return Ok(new { results = studentArtResults, status = 1 });
- }
- break;
- }
- }
- }
- catch (Exception ex)
- {
- await _dingDing.SendBotMsg($"{_option.Location},艺术评测审核异常:{ex.Message}\n{ex.StackTrace}\n{request.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
- }
- return Ok();
- }
- }
- }
|