Kaynağa Gözat

阅卷相关调整

zhouj1203@hotmail.com 4 yıl önce
ebeveyn
işleme
ee57b2e272

+ 21 - 1
TEAMModelFunction/TriggerCorrect.cs

@@ -10,6 +10,8 @@ using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos;
+using TEAMModelOS.SDK.Models.Cosmos.Common;
+using TEAMModelOS.SDK.Models.Table;
 
 namespace TEAMModelFunction
 {
@@ -129,12 +131,30 @@ namespace TEAMModelFunction
                                     }
                                 }
                                 List<Task<bool>> tasks = new List<Task<bool>>();
+                                //初始化老师阅卷记录
+                                List<tmdInfo> tmds = new List<tmdInfo>();
+                                for (int i = 0; i < correct.num; i++) {
+                                    tmdInfo fo = new tmdInfo();
+                                    tmds.Add(fo);
+                                }
                                 foreach (ExamClassResult examClass in classResults)
                                 {
                                     foreach (string stuId in examClass.studentIds)
                                     {
                                         int index = examClass.studentIds.IndexOf(stuId);
-                                        tasks.Add(redisClient.HashSetAsync($"Exam:Scoring:{eid}-{subjectId}", stuId, new { tmdId = "" , ans = examClass.studentAnswers[index].Count > 0 ? examClass.studentAnswers[index][0] : "", score = examClass.studentScores[index] }.ToJsonString()));
+                                        if (index > -1) {
+                                            Scoring sc = new Scoring
+                                            {
+                                                blob = examClass.studentAnswers[index].Count > 0 ? examClass.studentAnswers[index][0] : "",
+                                                stuId =stuId,
+                                                examId = eid,
+                                                subjectId = subjectId,
+                                                scores = examClass.studentScores[index]
+                                            };
+                                        }
+                                        
+
+                                        tasks.Add(redisClient.HashSetAsync($"Exam:Scoring:{eid}-{subjectId}", stuId, new { tmdId = tmds, ans = examClass.studentAnswers[index].Count > 0 ? examClass.studentAnswers[index][0] : "", score = examClass.studentScores[index] }.ToJsonString()));
                                     }
 
                                 }

+ 61 - 0
TEAMModelOS.SDK/Models/Cosmos/Common/Scoring.cs

@@ -0,0 +1,61 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace TEAMModelOS.SDK.Models.Cosmos.Common
+{
+    public class Scoring : CosmosEntity
+    {
+        public Scoring()
+        {
+            pk = "Scoring";
+        }
+        public string stuId { get; set; }
+        public string examId { get; set; }
+        public string subjectId { get; set; }
+        public List<Item> items { get; set; } = new List<Item>();
+        public string blob { get; set; }
+        public List<string> tIds { get; set; } = new List<string>();
+        public List<string> marks { get; set; } = new List<string>();
+        public List<double> scores { get; set; } = new List<double>();
+    }
+
+    public class Item
+    {
+        public List<Info> scores { get; set; } = new List<Info>();
+        //原题的配分
+        public double ssc { get; set; }
+        //public string tmdId { get; set; }
+        public bool flag
+        {
+            get
+            {
+                if (scores.Count > 2)
+                {
+                    //List<double> sc = scores.Select(s => s.sc).ToList();
+                    double diff = Math.Abs(scores.Select(s => s.sc).ToList().Aggregate((i, j) => (i - j) * 6));
+                    if (diff > ssc)
+                    {
+                        return false;
+                    }
+                    else {
+                        return true;
+                    }
+                    
+                }
+                else
+                {
+                    return true;
+                }
+
+            }
+        }
+
+    }
+    public class Info { 
+        public double sc { get; set; }
+        public string tmdId { get; set; }
+    }
+
+}

+ 1 - 1
TEAMModelOS.SDK/Models/Cosmos/School/Class.cs

@@ -41,7 +41,7 @@ namespace TEAMModelOS.SDK.Models
         /// </summary>
         public string periodId { get; set; }
         /// <summary>
-        /// 年级
+        /// 年级 此字段再入学年的情况下已经无用,现阶段只是用来处理历史数据
         /// </summary>
         public string gradeId { get; set; }
         //入学年

+ 14 - 0
TEAMModelOS.SDK/Models/Table/tmdInfo.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace TEAMModelOS.SDK.Models.Table
+{
+
+    public class tmdInfo
+    {
+        public string tmdId { get; set; }
+        public List<double> tScore { get; set; } = new List<double>();
+        public string mark { get; set; }
+    }
+}

+ 91 - 23
TEAMModelOS/Controllers/Common/ExamController.cs

@@ -1509,19 +1509,24 @@ namespace TEAMModelOS.Controllers
                 ExamInfo info = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<ExamInfo>(id.ToString(), new PartitionKey($"Exam-{code}"));
                 List<ExamClassResult> classResults = new();
                 List<dynamic> attr = new List<dynamic>();
-                //List<dynamic> all = new List<dynamic>();
                 var record = await redisClient.HashGetAllAsync($"Exam:Scoring:{id}-{subjectId}");
                 foreach (var rcd in record)
                 {
                     var value = JsonDocument.Parse(rcd.Value.ToString());
-                    value.RootElement.TryGetProperty("tmdId", out JsonElement tmdId);
-                    if (tId.ToString().Equals(tmdId.ToString()))
+                    value.RootElement.TryGetProperty("info", out JsonElement json);
+                    List<tmdInfo> tmds = json.ToObject<List<tmdInfo>>();
+                    foreach (tmdInfo tmd in tmds)
                     {
-                        attr.Add(new { stuId = rcd.Name.ToString(), info = value });
+                        if (!string.IsNullOrEmpty(tmd.tmdId) && tmd.tmdId.Equals(tId.ToString()))
+                        {
+                            attr.Add(new { stuId = rcd.Name.ToString(), info = value });
+                            break;
+                        }
                     }
-
-
-
+                    /*                    if (tId.ToString().Equals(tmdId.ToString()))
+                                        {
+                                            attr.Add(new { stuId = rcd.Name.ToString(), info = value });
+                                        }*/
                 }
                 int index = 0;
                 foreach (ExamSubject subject in info.subjects)
@@ -1568,15 +1573,29 @@ namespace TEAMModelOS.Controllers
                 foreach (var rcd in record)
                 {
                     var value = JsonDocument.Parse(rcd.Value.ToString());
-                    value.RootElement.TryGetProperty("tmdId", out JsonElement tmdId);
-                    if (tId.ToString().Equals(tmdId.ToString()))
+                    value.RootElement.TryGetProperty("info", out JsonElement json);
+                    List<tmdInfo> tmds = json.ToObject<List<tmdInfo>>();
+                    foreach (tmdInfo tmd in tmds)
+                    {
+                        if (!string.IsNullOrEmpty(tmd.tmdId) && tmd.tmdId.Equals(tId.ToString()))
+                        {
+                            recs.Add(new { stuId = rcd.Name.ToString(), info = value });
+                            break;
+                        }
+                        if (string.IsNullOrEmpty(tmd.tmdId))
+                        {
+                            all.Add(new { stuId = rcd.Name.ToString(), ans = value });
+                            break;
+                        }
+                    }
+                    /*if (tId.ToString().Equals(tmdId.ToString()))
                     {
                         recs.Add(new { stuId = rcd.Name.ToString(), ans = value });
                     }
                     if (string.IsNullOrEmpty(tmdId.ToString()))
                     {
                         all.Add(new { stuId = rcd.Name.ToString(), ans = value });
-                    }
+                    }*/
                 }
                 if (requert.TryGetProperty("stuId", out JsonElement stuId))
                 {
@@ -1586,7 +1605,17 @@ namespace TEAMModelOS.Controllers
                     //保证此学生与该老师绑定
                     value.RootElement.TryGetProperty("ans", out JsonElement blob);
                     value.RootElement.TryGetProperty("score", out JsonElement sc);
-                    await redisClient.HashSetAsync($"Exam:Scoring:{id}-{subjectId}", stuId.ToString(), new { ans = blob, score = sc, tmdId = tId }.ToJsonString());
+                    value.RootElement.TryGetProperty("info", out JsonElement json);
+                    List<tmdInfo> tmds = json.ToObject<List<tmdInfo>>();
+                    foreach (tmdInfo tmd in tmds)
+                    {
+                        if (string.IsNullOrEmpty(tmd.tmdId))
+                        {
+                            tmd.tmdId = tId.ToString();
+                            break;
+                        }
+                    }
+                    await redisClient.HashSetAsync($"Exam:Scoring:{id}-{subjectId}", stuId.ToString(), new { info = tmds, ans = blob, score = sc }.ToJsonString());
 
                     return Ok(value);
                 }
@@ -1613,8 +1642,18 @@ namespace TEAMModelOS.Controllers
                         json.RootElement.TryGetProperty("ans", out JsonElement ans);
                         ans.TryGetProperty("score", out JsonElement sc);
                         ans.TryGetProperty("ans", out JsonElement blob);
+                        ans.TryGetProperty("info", out JsonElement element);
+                        List<tmdInfo> tmds = element.ToObject<List<tmdInfo>>();
+                        foreach (tmdInfo tmd in tmds)
+                        {
+                            if (string.IsNullOrEmpty(tmd.tmdId))
+                            {
+                                tmd.tmdId = tId.ToString();
+                                break;
+                            }
+                        }
                         //选取后,缓存池相应的减少,以便于分配给其他的老师
-                        await redisClient.HashSetAsync($"Exam:Scoring:{id}-{subjectId}", sId.ToString(), new { ans = blob, score = sc, tmdId = tId }.ToJsonString());
+                        await redisClient.HashSetAsync($"Exam:Scoring:{id}-{subjectId}", sId.ToString(), new { info = tmds, ans = blob, score = sc }.ToJsonString());
                         return Ok(item);
                     }
 
@@ -1678,29 +1717,40 @@ namespace TEAMModelOS.Controllers
                 if (!requert.TryGetProperty("stuId", out JsonElement sId)) return BadRequest();
                 if (!requert.TryGetProperty("subjectId", out JsonElement subjectId)) return BadRequest();
                 if (!requert.TryGetProperty("tmdId", out JsonElement tId)) return BadRequest();
-                if (!requert.TryGetProperty("score", out JsonElement score)) return BadRequest(); 
+                if (!requert.TryGetProperty("score", out JsonElement score)) return BadRequest();
                 if (!requert.TryGetProperty("count", out JsonElement count)) return BadRequest();
                 if (!requert.TryGetProperty("code", out JsonElement code)) return BadRequest();
                 //if (!requert.TryGetProperty("mark", out JsonElement mark)) return BadRequest();
                 //requert.TryGetProperty("mark", out JsonElement mark);
                 var client = _azureCosmos.GetCosmosClient();
-				var redisClient = _azureRedis.GetRedisClient(8);
+                var redisClient = _azureRedis.GetRedisClient(8);
                 List<ExamClassResult> classResults = new();
                 List<dynamic> recs = new List<dynamic>();
                 var record = await redisClient.HashGetAllAsync($"Exam:Scoring:{id}-{subjectId}");
                 foreach (var rcd in record)
                 {
                     var values = JsonDocument.Parse(rcd.Value.ToString());
-                    values.RootElement.TryGetProperty("tmdId", out JsonElement tmdId);
-                    if (tId.ToString().Equals(tmdId.ToString()))
+                    values.RootElement.TryGetProperty("info", out JsonElement json);
+                    List<tmdInfo> tmdInfos = json.ToObject<List<tmdInfo>>();
+                    foreach (tmdInfo tmd in tmdInfos)
                     {
-                        recs.Add(new { stuId = rcd.Name.ToString(), ans = values });
+                        if (!string.IsNullOrEmpty(tmd.tmdId) && tmd.tmdId.Equals(tId.ToString()))
+                        {
+                            recs.Add(new { stuId = rcd.Name.ToString(), info = values });
+                            break;
+                        }
                     }
+                    /*if (tId.ToString().Equals(tmdId.ToString()))
+                    {
+                        recs.Add(new { stuId = rcd.Name.ToString(), ans = values });
+                    }*/
                 }
                 var stuAns = await redisClient.HashGetAsync($"Exam:Scoring:{id}-{subjectId}", sId.ToString());
                 var value = JsonDocument.Parse(stuAns.ToString());
                 value.RootElement.TryGetProperty("ans", out JsonElement blob);
-                value.RootElement.TryGetProperty("mark", out JsonElement element);
+                value.RootElement.TryGetProperty("info", out JsonElement element);
+                List<tmdInfo> tmds = element.ToObject<List<tmdInfo>>();
+
                 StringBuilder builder = new StringBuilder();
                 if (requert.TryGetProperty("mark", out JsonElement mark))
                 {
@@ -1710,12 +1760,30 @@ namespace TEAMModelOS.Controllers
                     builder.Append(sId).Append("mark").Append("/");
                     builder.Append("ans.json");
                     await _azureStorage.UploadFileByContainer(code.ToString(), mark.ToJsonString(), "exam", builder.ToString(), false);
-                    await redisClient.HashSetAsync($"Exam:Scoring:{id}-{subjectId}", sId.ToString(), new { ans = blob, score = score, tmdId = tId, mark = builder.ToString() }.ToJsonString());
+                    foreach (tmdInfo tmd in tmds)
+                    {
+                        if (string.IsNullOrEmpty(tmd.tmdId))
+                        {
+                            tmd.tmdId = tId.ToString();
+                            tmd.mark = builder.ToString();
+                            break;
+                        }
+                    }
+                    await redisClient.HashSetAsync($"Exam:Scoring:{id}-{subjectId}", sId.ToString(), new { info = tmds, ans = blob, score = score }.ToJsonString());
+                }
+                else
+                {
+                    foreach (tmdInfo tmd in tmds)
+                    {
+                        if (string.IsNullOrEmpty(tmd.tmdId))
+                        {
+                            tmd.tmdId = tId.ToString();
+                            break;
+                        }
+                    }
+                    await redisClient.HashSetAsync($"Exam:Scoring:{id}-{subjectId}", sId.ToString(), new { info = tmds, ans = blob, score = score }.ToJsonString());
                 }
-                else {
-                    await redisClient.HashSetAsync($"Exam:Scoring:{id}-{subjectId}", sId.ToString(), new { ans = blob, score = score, tmdId = tId, mark = element }.ToJsonString());
-                }                
-                
+
                 if (recs.Count == count.GetInt32())
                 {
                     await foreach (var item in client.GetContainer("TEAMModelOS", "Common").GetItemQueryIterator<ExamClassResult>(