|
@@ -38,6 +38,7 @@ using TEAMModelOS.SDK.Models.Cosmos.Student;
|
|
|
using DocumentFormat.OpenXml.Drawing.Charts;
|
|
|
using ClouDASLibx;
|
|
|
using HTEXLib.Helpers.ShapeHelpers;
|
|
|
+using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
|
|
|
|
|
|
namespace TEAMModelOS.Controllers
|
|
|
{
|
|
@@ -3701,17 +3702,18 @@ namespace TEAMModelOS.Controllers
|
|
|
if (!request.TryGetProperty("subjectId", out JsonElement subjectId)) return BadRequest();
|
|
|
string code = (request.TryGetProperty("code", out JsonElement codeJobj)) ? codeJobj.GetString() : string.Empty;
|
|
|
string schCode = (!string.IsNullOrWhiteSpace(code)) ? code : "noschoolid";
|
|
|
- //取得Redis該學生該科目的錯題數
|
|
|
+ string teacherid = (request.TryGetProperty("teacherId", out JsonElement teacherId)) ? teacherId.GetString() : string.Empty;
|
|
|
+ //取得Redis該學生該科目的錯題數 [算法變更,昨日錯題總數不再計入redis]
|
|
|
int record = 0; //昨日取得的錯題數
|
|
|
- var redisClient = _azureRedis.GetRedisClient(8);
|
|
|
- string hkey = $"ErrorItems:{schCode}";
|
|
|
- string hval = await redisClient.HashGetAsync(hkey, $"{stuId}");
|
|
|
- List<stuErrorItemCnt> stuErrCntList = (hval != null) ? JsonSerializer.Deserialize<List<stuErrorItemCnt>>(hval) : new List<stuErrorItemCnt>();
|
|
|
- stuErrorItemCnt stuErrCnt = stuErrCntList.Where(s => s.subjectId.Equals($"{subjectId}")).FirstOrDefault();
|
|
|
- if (stuErrCnt != null)
|
|
|
- {
|
|
|
- record = stuErrCnt.number;
|
|
|
- }
|
|
|
+ //var redisClient = _azureRedis.GetRedisClient(8);
|
|
|
+ //string hkey = $"ErrorItems:{schCode}";
|
|
|
+ //string hval = await redisClient.HashGetAsync(hkey, $"{stuId}");
|
|
|
+ //List<stuErrorItemCnt> stuErrCntList = (hval != null) ? JsonSerializer.Deserialize<List<stuErrorItemCnt>>(hval) : new List<stuErrorItemCnt>();
|
|
|
+ //stuErrorItemCnt stuErrCnt = stuErrCntList.Where(s => s.subjectId.Equals($"{subjectId}")).FirstOrDefault();
|
|
|
+ //if (stuErrCnt != null)
|
|
|
+ //{
|
|
|
+ // record = stuErrCnt.number;
|
|
|
+ //}
|
|
|
//取得CosmosDB該學生該科目現在錯題數
|
|
|
int avaliable = 0; //現在取得的錯題數
|
|
|
List<string> itemIdList = new List<string>();
|
|
@@ -3779,14 +3781,97 @@ namespace TEAMModelOS.Controllers
|
|
|
|
|
|
foreach (var obj in dict)
|
|
|
{
|
|
|
- if (_azureStorage.GetBlobContainerClient(schCode).GetBlobClient($"{obj.Value}/{obj.Key}.json").Exists())
|
|
|
- {// 去除blob不存在項目
|
|
|
- avaliable++;
|
|
|
+ if (schCode != null && schCode != "noschoolid")
|
|
|
+ {
|
|
|
+ if (_azureStorage.GetBlobContainerClient(schCode).GetBlobClient($"{obj.Value}/{obj.Key}.json").Exists())
|
|
|
+ {// 去除blob不存在項目
|
|
|
+ avaliable++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (!string.IsNullOrWhiteSpace(teacherid))
|
|
|
+ {
|
|
|
+ if (_azureStorage.GetBlobContainerClient(teacherid).GetBlobClient($"{obj.Value}/{obj.Key}.json").Exists())
|
|
|
+ {
|
|
|
+ avaliable++;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
return Ok(new { record, avaliable });
|
|
|
}
|
|
|
+
|
|
|
+ //取得錯題庫新增數
|
|
|
+ [ProducesDefaultResponseType]
|
|
|
+ [Authorize(Roles = "IES")]
|
|
|
+ [AuthToken(Roles = "teacher,admin,student")]
|
|
|
+ [HttpPost("get-error-item-today-cnt")]
|
|
|
+ public async Task<IActionResult> getErrorItemsTodayCount(JsonElement request)
|
|
|
+ {
|
|
|
+ //輸入值
|
|
|
+ if (!request.TryGetProperty("subjectId", out JsonElement subjectId)) return BadRequest(); //科目ID
|
|
|
+ if (!request.TryGetProperty("stuId", out JsonElement _stuId)) return BadRequest(); //學生ID 或 TMID
|
|
|
+ string stuId = _stuId.GetString();
|
|
|
+ string schoolid = (request.TryGetProperty("code", out JsonElement codeJobj)) ? codeJobj.GetString() : string.Empty; //學校簡碼,TMID時為空
|
|
|
+ string tmdid = string.Empty;
|
|
|
+ if (string.IsNullOrWhiteSpace(schoolid)) tmdid = stuId;
|
|
|
+ string maLearnCode = string.Empty;
|
|
|
+ //檢查參數 必須有 teammodelId 或是同時有學校id及學號
|
|
|
+ if (!string.IsNullOrWhiteSpace(tmdid + ""))
|
|
|
+ {
|
|
|
+ maLearnCode = $"MaLearn-{tmdid}";
|
|
|
+ }
|
|
|
+ else if (!string.IsNullOrWhiteSpace(schoolid + "") && !string.IsNullOrWhiteSpace(stuId + ""))
|
|
|
+ {
|
|
|
+ maLearnCode = $"MaLearn-{schoolid}-{stuId}";
|
|
|
+ }
|
|
|
+ else { return BadRequest(); }
|
|
|
+
|
|
|
+ DateTime nowDate = DateTime.Now;
|
|
|
+ DateTime beforeDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0);
|
|
|
+ string qry_All = $"SELECT COUNT(1) as num FROM c WHERE c.type = 'answer' AND c.unitId = '{subjectId}' AND IS_DEFINED(c.createdTime) AND c.createdTime <= {DateTimeHelper.ToUnixTimestamp(nowDate)}";
|
|
|
+ string qry_before = $"SELECT COUNT(1) as num FROM c WHERE c.type = 'answer' AND c.unitId = '{subjectId}' AND IS_DEFINED(c.createdTime) AND c.createdTime <= {DateTimeHelper.ToUnixTimestamp(beforeDate)} ";
|
|
|
+ var client = _azureCosmos.GetCosmosClient();
|
|
|
+ int avaliable = 0;
|
|
|
+ int allNum = 0;
|
|
|
+ int berforeNum = 0;
|
|
|
+
|
|
|
+ // 取全部錯題數量
|
|
|
+ await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryStreamIterator(queryText: qry_All, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{maLearnCode}") }))
|
|
|
+ {
|
|
|
+ using var json = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
+ if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
|
|
|
+ {
|
|
|
+ foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
|
|
|
+ {
|
|
|
+ if (obj.TryGetProperty("num", out JsonElement num))
|
|
|
+ {
|
|
|
+ allNum = num.GetInt32();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 取今天之前錯題的數量
|
|
|
+ await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryStreamIterator(queryText: qry_before, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{maLearnCode}") }))
|
|
|
+ {
|
|
|
+ using var json = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
+ if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
|
|
|
+ {
|
|
|
+ foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
|
|
|
+ {
|
|
|
+ if (obj.TryGetProperty("num", out JsonElement num))
|
|
|
+ {
|
|
|
+ berforeNum = num.GetInt32();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ avaliable = allNum - berforeNum;
|
|
|
+
|
|
|
+ return Ok(new { avaliable });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
//阅卷信息统计
|
|
|
[ProducesDefaultResponseType]
|
|
|
[Authorize(Roles = "IES")]
|