CrazyIter_Bin 3 月之前
父節點
當前提交
4768f76834

+ 11 - 2
TEAMModelOS.Extension/IES.Exam/IES.ExamLibrary/Models/EvaluationCommon.cs

@@ -62,6 +62,9 @@ namespace IES.ExamServer.Models
         /// 活动数据包生成最新时间戳
         /// </summary>
         public long dataTime { get; set; }
+        /// <summary>
+        /// 活动数据包大小
+        /// </summary>
         public long dataSize { get; set; }
         /// <summary>
         /// 活动文件包生成最新时间戳
@@ -96,6 +99,9 @@ namespace IES.ExamServer.Models
         /// 活动页面代码文件大小
         /// </summary>
         public long webviewSize { get; set; }
+        /// <summary>
+        /// 活动页面代码文件路径
+        /// </summary>
         public string? webviewPath { get; set; }
         /// <summary>
         /// 学生数量
@@ -118,10 +124,13 @@ namespace IES.ExamServer.Models
         /// </summary>
         public string? dataHash { get; set; }
         /// <summary>
-        /// 开卷
+        ///提取
         /// </summary>
         public string? shortCode { get; set; }
-      
+        /// <summary>
+        /// 开卷码
+        /// </summary>
+        public string? openCode { get; set; }
     }
   
     public class EvaluationClient : EvaluationMain

+ 11 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamLibrary/Models/ExamConstant.cs

@@ -10,5 +10,16 @@ namespace IES.ExamLibrary.Models
         public static readonly string ScopeStudent = "student";
         public static readonly string ScopeVisitor = "visitor";
         public static readonly string JwtSecretKey = "fXO6ko/qyXeYrkecPeKdgXnuLXf9vMEtnBC9OB3s+aA=";
+        public static readonly string[] AZ_19NI1O0 = {
+            "A", "B", "C", "D", "E", "F", "G", "H",
+            "J", "K", "L", "M", "N", "P", "Q", "R", 
+            "S", "T", "U", "V", "W", "X", "Y", "Z", 
+            "2", "3", "4", "5", "6", "7", "8", "9" 
+        };
+        public static readonly string[] AZ09 = {
+            "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
+            "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
+            "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
+        };
     }
 }

+ 13 - 0
TEAMModelOS.SDK/Models/Service/EvaluationSyncInfoService.cs

@@ -1,4 +1,5 @@
 using Azure.Storage.Blobs.Models;
+using IES.ExamLibrary.Models;
 using IES.ExamServer.Models;
 using Microsoft.Azure.Cosmos;
 using System;
@@ -343,6 +344,16 @@ namespace TEAMModelOS.SDK.Models.Service
                 {
                     evaluationSyncInfo.shortCode = $"{MurmurHash3.Hash32(evaluationSyncInfo.id)}";
                 }
+                if (string.IsNullOrWhiteSpace(evaluationSyncInfo.openCode))
+                {
+                    StringBuilder builder = new StringBuilder();
+                    for (var i = 0; i < 6; i++) 
+                    {
+                        var chars = ExamConstant.AZ_19NI1O0[Random.Shared.Next(0, ExamConstant.AZ_19NI1O0.Length)];
+                        builder.Append(chars);
+                    }
+                    evaluationSyncInfo.openCode = builder.ToString();
+                }
                 var listInfo = await GroupListService.GetMemberByListids(_coreAPIHttpService, azureCosmos.GetCosmosClient(), _dingDing, evaluationSyncInfo.grouplist, schoolCode);
                 evaluationSyncInfo.studentCount =  listInfo.rmembers.Count();
                 evaluationSyncInfo.paperCount =evaluationSyncInfo.subjects.SelectMany(x => x.papers).Count();
@@ -433,6 +444,7 @@ namespace TEAMModelOS.SDK.Models.Service
                     dataStr.Append(evaluationSyncInfo.grouplistHash);
                     dataStr.Append(evaluationSyncInfo.blobHash);
                     dataStr.Append(evaluationSyncInfo.shortCode);
+                    dataStr.Append(evaluationSyncInfo.openCode);
                     dataStr.Append($"{stime}{etime}");
                     dataStr.Append(string.Join("", order.Select(x=>x.subjectId)));
                     if (evaluationSyncInfo.music!=null)
@@ -467,6 +479,7 @@ namespace TEAMModelOS.SDK.Models.Service
                     paperCount = evaluationSyncInfo.paperCount,
                     grouplist = evaluationSyncInfo.grouplist,
                     shortCode = evaluationSyncInfo.shortCode,
+                    openCode = evaluationSyncInfo.openCode,
                     stime=stime,
                     etime=etime,
                     dataHash = evaluationSyncInfo.dataHash,

+ 6 - 6
TEAMModelOS/Controllers/Both/EvaluationSyncInfoController.cs

@@ -81,7 +81,7 @@ namespace TEAMModelOS.Controllers.Both
             if (string.IsNullOrWhiteSpace(shortCode))
             {
 
-                return Ok(new { code=1,msg="开卷码为空!"});
+                return Ok(new { code=1,msg="提取码为空!"});
             }
 
             string sql = $"select value  c from c where c.shortCode='{shortCode}'";
@@ -98,8 +98,8 @@ namespace TEAMModelOS.Controllers.Both
             else {
                 if (result.list.Count>1) 
                 {
-                   await _dingDing.SendBotMsg($"根据试卷开卷码搜索评测,查询到多条数据,请检查,开卷码{shortCode},试卷id:{string.Join(",",result.list.Select(x=>x.id))}", GroupNames.成都开发測試群組);
-                    return Ok(new { code = 3, msg = "开卷码匹配到多个评测,需要管理员处理!" });
+                   await _dingDing.SendBotMsg($"根据试卷提取码搜索评测,查询到多条数据,请检查,提取码{shortCode},试卷id:{string.Join(",",result.list.Select(x=>x.id))}", GroupNames.成都开发測試群組);
+                    return Ok(new { code = 3, msg = "提取码匹配到多个评测,需要管理员处理!" });
                 }
                 return Ok(new { code = 2, msg = "未找到评测!" });
             }
@@ -108,7 +108,7 @@ namespace TEAMModelOS.Controllers.Both
                 ResponseMessage  response=  await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemStreamAsync(tokenInfo.id, new PartitionKey($"Teacher-{evaluationSyncInfo.ownerId}"));
                 if (!response.IsSuccessStatusCode) 
                 {
-                    await _dingDing.SendBotMsg($"根据试卷开卷码搜索评测,检测到查询数据的教师未加入学校,数据归属{evaluationSyncInfo.scope},教师id:{tokenInfo.id},ownerId:{evaluationSyncInfo.ownerId}", GroupNames.成都开发測試群組);
+                    await _dingDing.SendBotMsg($"根据试卷提取码搜索评测,检测到查询数据的教师未加入学校,数据归属{evaluationSyncInfo.scope},教师id:{tokenInfo.id},ownerId:{evaluationSyncInfo.ownerId}", GroupNames.成都开发測試群組);
                     return Ok(new { code = 4, msg = "教师未加入当前评测的学校!" });
                 }
             }
@@ -116,7 +116,7 @@ namespace TEAMModelOS.Controllers.Both
             {
                 if (!tokenInfo.id.Equals(evaluationSyncInfo.ownerId))
                 {
-                    await _dingDing.SendBotMsg($"根据试卷开卷码搜索评测,检测到请求的教师与数据的ownerId不一致,数据归属{evaluationSyncInfo.scope},教师id:{tokenInfo.id},ownerId:{evaluationSyncInfo.ownerId}", GroupNames.成都开发測試群組);
+                    await _dingDing.SendBotMsg($"根据试卷提取码搜索评测,检测到请求的教师与数据的ownerId不一致,数据归属{evaluationSyncInfo.scope},教师id:{tokenInfo.id},ownerId:{evaluationSyncInfo.ownerId}", GroupNames.成都开发測試群組);
                     return Ok(new { code = 5, msg = "查询的评测不属于当前教师!" });
                 }
             }
@@ -257,7 +257,7 @@ namespace TEAMModelOS.Controllers.Both
                 }
 
                 EvaluationSyncInfo syncInfo = await EvaluationSyncInfoService.PackageEvaluation(activity.id, activity.scope, activity.owner, activity.type, _azureCosmos, _azureStorage, _coreAPIHttpService, _dingDing, _httpClientFactory);
-                if (syncInfo!=null)
+                if (syncInfo!=null &&!infos.Exists(x=>x.id.Equals(syncInfo.id)))
                 {
                     infos.Add(syncInfo);
                 }

+ 4 - 2
TEAMModelOS/Controllers/Client/AClassONEController.cs

@@ -412,7 +412,9 @@ namespace TEAMModelOS.Controllers
         [ProducesDefaultResponseType]
         [HttpPost("get-teach-info")]
 
-        [Authorize(Roles = "AClassONE,IES")]
+#if !DEBUG
+    [Authorize(Roles = "AClassONE,IES")]
+#endif
         [AuthToken(Roles = "teacher,admin")]
         public async Task<IActionResult> GetTeachInfo(JsonElement json) {
             (string tmdid, _, _, string school) = HttpContext.GetAuthTokenInfo();
@@ -720,7 +722,7 @@ namespace TEAMModelOS.Controllers
                         TeacherRoleGrouplist roleGrouplist = groupLists.Find(f => f.scope.Equals("school") && f.groupList.id.Equals(gp.id));
                         if (roleGrouplist!=null)
                         {
-                            if (roleGrouplist.roles.Contains("charge"))
+                            if (!roleGrouplist.roles.Contains("charge"))
                             {
                                 roleGrouplist.roles.Add("charge");
                             }