CrazyIter_Bin 3 месяцев назад
Родитель
Сommit
dc3eec6a8b

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

@@ -57,7 +57,7 @@ namespace IES.ExamServer.Models
         /// <summary>
         /// <summary>
         /// AI音乐评测
         /// AI音乐评测
         /// </summary>
         /// </summary>
-        public AIMusic? music { get; set; }
+        public MusicAI? music { get; set; }
         /// <summary>
         /// <summary>
         /// 活动数据包生成最新时间戳
         /// 活动数据包生成最新时间戳
         /// </summary>
         /// </summary>
@@ -219,8 +219,12 @@ namespace IES.ExamServer.Models
     /// <summary>
     /// <summary>
     /// AI音乐评测
     /// AI音乐评测
     /// </summary>
     /// </summary>
-    public class AIMusic
+    public class MusicAI
     {
     {
+        /// <summary>
+        /// quota_22 的acId  
+        /// </summary>
+        public string? taskId { get; set; }
         /// <summary>
         /// <summary>
         /// 关联的评测
         /// 关联的评测
         /// </summary>
         /// </summary>

+ 286 - 27
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Controllers/ManageController.cs

@@ -524,26 +524,45 @@ namespace IES.ExamServer.Controllers
         /// </summary>
         /// </summary>
         /// <param name="json"></param>
         /// <param name="json"></param>
         /// <returns></returns>
         /// <returns></returns>
-        [HttpPost("load-evaluation-round-setting")]
+        [HttpPost("load-evaluation-round")]
         [AuthToken("admin", "teacher", "visitor")]
         [AuthToken("admin", "teacher", "visitor")]
-        public IActionResult LoadEvaluationRoundSetting(JsonNode json)
+        public IActionResult LoadEvaluationRound(JsonNode json)
         {
         {
-            EvaluationClient? evaluationClient = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().FindOne(x => x.id!.Equals(json["evaluationId"]));
+            string evaluationId = $"{json["evaluationId"]}";
+            string openCode = $"{json["openCode"]}";
+            string shortCode = $"{json["shortCode"]}";
+            EvaluationClient? evaluationClient = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>()
+                .FindOne(x => x.id!.Equals(evaluationId) && x.shortCode!.Equals(shortCode) && x.openCode!.Equals(openCode));
             EvaluationRoundSetting? setting = null;
             EvaluationRoundSetting? setting = null;
             if (evaluationClient!=null)
             if (evaluationClient!=null)
             {
             {
-                if (string.IsNullOrWhiteSpace(evaluationClient.roundId))
+                if (!string.IsNullOrWhiteSpace(evaluationClient.roundId))
                 {
                 {
                     setting =  _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationRoundSetting>().FindOne(x => x.id!.Equals(evaluationClient.roundId));
                     setting =  _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationRoundSetting>().FindOne(x => x.id!.Equals(evaluationClient.roundId));
                 }
                 }
 
 
                 if (setting!=null)
                 if (setting!=null)
                 {
                 {
-                    return Ok(new
+                    IEnumerable<EvaluationStudentResult>? results = null;
+                    var members = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationMember>().Find(x => x.evaluationId!.Equals(evaluationClient.id)  && x.roundId!.Equals(setting.id));
+                    //并获取学生的作答信息
+                    //顺便返回本轮的学生名单
+                    if (members!=null && members.Count()>0)
+                    {
+                        results = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentResult>()
+                                   .Find(x => members.Select(x => x.id).Contains(x.studentId)&&!string.IsNullOrWhiteSpace(x.evaluationId)  && x.evaluationId.Equals(evaluationClient.id));
+                        if (results.Count()==members.Count())
+                        {
+                            return Ok(new { code = 200, setting, results });
+                        }
+                        else {
+                            return Ok(new { code = 200,msg="学生作答信息数量不匹配", setting, results });
+                        }
+                    }
+                    else 
                     {
                     {
-                        code = 200,
-                        setting = setting
-                    });
+                        return Ok(new { code = 200,msg="未分配学生名单,或名单没有学生!", setting , results });
+                    }
                 }
                 }
                 else
                 else
                 {
                 {
@@ -554,20 +573,9 @@ namespace IES.ExamServer.Controllers
                 return Ok(new { code = 1, msg = "未找到评测信息!" });
                 return Ok(new { code = 1, msg = "未找到评测信息!" });
             }
             }
         }
         }
+       
         /// <summary>
         /// <summary>
-        /// 设置评测开考信息(本轮名单,计时规则等)
-        /// </summary>
-        /// <param name="json"></param>
-        /// <returns></returns>
-        [HttpPost("assign-student-paper")]
-        [AuthToken("admin", "teacher", "visitor")]
-        public IActionResult AssignStudentPaper(JsonNode json) 
-        {
-            return Ok();
-        }
-
-        /// <summary>
-        /// 设置评测开考信息(本轮名单,计时规则等)
+        /// 设置评测开考信息(本轮名单,计时规则,分配试卷等)
         /// </summary>
         /// </summary>
         /// <param name="json"></param>
         /// <param name="json"></param>
         /// <returns></returns>
         /// <returns></returns>
@@ -578,21 +586,29 @@ namespace IES.ExamServer.Controllers
             EvaluationRoundSetting? setting = json.ToObject<EvaluationRoundSetting>();
             EvaluationRoundSetting? setting = json.ToObject<EvaluationRoundSetting>();
             if (setting!=null)
             if (setting!=null)
             {
             {
-                EvaluationClient? evaluationClient = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().FindOne(x => x.id!.Equals(setting.evaluationId) && x.openCode!.Equals(json["openCode"])&& x.shortCode!.Equals(json["shortCode"]));
+                var db = _liteDBFactory.GetLiteDatabase();
+                var collection = db.GetCollection<EvaluationClient>() ;
+                //&& x.openCode!.Equals($"{json["openCode"]}")&& x.shortCode!.Equals($"{json["shortCode"]}")
+                string shortCode = $"{json["shortCode"]}";
+                string openCode = $"{json["openCode"]}";
+                EvaluationClient ? evaluationClient = collection.FindOne(x => x.id!.Equals(setting.evaluationId) 
+                && !string.IsNullOrWhiteSpace(x.shortCode) && x.shortCode.Equals(x.shortCode) 
+                && !string.IsNullOrWhiteSpace(x.openCode) && x.openCode.Equals(openCode) );
                 if (evaluationClient!=null)
                 if (evaluationClient!=null)
                 {
                 {
-                    IEnumerable<EvaluationClient> evaluationClients = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().Find(x => x.activate==1);
+                    IEnumerable<EvaluationClient> evaluationClients = collection.Find(x => x.activate==1);
                     if (evaluationClients != null && evaluationClients.Count() > 0)
                     if (evaluationClients != null && evaluationClients.Count() > 0)
                     {
                     {
-                        foreach (EvaluationClient item in evaluationClients)
+                        var datas = evaluationClients.ToList();
+                        foreach (EvaluationClient item in datas)
                         {
                         {
                             item.activate = 0;
                             item.activate = 0;
-                            _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().Upsert(item);
                         }
                         }
+                        collection.Upsert(datas);
                     }
                     }
                     /// 判断是否包含所有分组
                     /// 判断是否包含所有分组
                     bool isAllContained = setting.groupList.All(x => evaluationClient.grouplist.Any(y => y.id == x.id));
                     bool isAllContained = setting.groupList.All(x => evaluationClient.grouplist.Any(y => y.id == x.id));
-                    if (isAllContained)
+                    if (isAllContained && evaluationClient.grouplist.IsNotEmpty())
                     {
                     {
                         evaluationClient.countdownType = setting.countdownType;
                         evaluationClient.countdownType = setting.countdownType;
                         evaluationClient.countdown = setting.countdown;
                         evaluationClient.countdown = setting.countdown;
@@ -605,7 +621,9 @@ namespace IES.ExamServer.Controllers
                         evaluationClient.roundId = setting.id;
                         evaluationClient.roundId = setting.id;
                         _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationRoundSetting>().Upsert(setting);
                         _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationRoundSetting>().Upsert(setting);
                         _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().Upsert(evaluationClient);
                         _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationClient>().Upsert(evaluationClient);
-                        return Ok(new { code = 200, msg = "操作成功!" });
+                        /// 分配试卷
+                        var (roundStudentPapers, members, results,code,msg) = AssignStudentPaper(evaluationClient, setting);
+                        return Ok(new { code = code, msg =msg , setting, results });
                     }
                     }
                     else
                     else
                     {
                     {
@@ -655,5 +673,246 @@ namespace IES.ExamServer.Controllers
             }
             }
             
             
         }
         }
+        /// <summary>
+        /// 设置评测开考信息(本轮名单,计时规则等)
+        /// </summary>
+        /// <param name="json"></param>
+        /// <returns></returns>
+        //[HttpPost("assign-student-paper")]
+        //[AuthToken("admin", "teacher", "visitor")]
+        private (List<EvaluationStudentPaper> roundStudentPapers, List<EvaluationMember> members, List<EvaluationStudentResult> results, int code, string msg) AssignStudentPaper(EvaluationClient evaluationClient, EvaluationRoundSetting setting)
+        {
+            int code = 200;
+            string msg = string.Empty;
+            List<EvaluationStudentPaper> roundStudentPapers = new List<EvaluationStudentPaper>();
+            List<EvaluationMember> members = new List<EvaluationMember>();
+            List<EvaluationStudentResult> results = new List<EvaluationStudentResult>();
+            string packagePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "package");
+            string evaluationPath = Path.Combine(packagePath, evaluationClient.id!);
+            string evaluationDataPath = Path.Combine(evaluationPath, "data");
+            string path_groupList = Path.Combine(evaluationDataPath, "groupList.json");
+            if (System.IO.File.Exists(path_groupList))
+            {
+                JsonNode? jsonNode = System.IO.File.ReadAllText(path_groupList).ToObject<JsonNode>();
+                if (jsonNode!=null && jsonNode["groupList"]!=null)
+                {
+                    List<EvaluationGroupList>? groupList = jsonNode["groupList"]?.ToObject<List<EvaluationGroupList>>();
+                    if (groupList!=null)
+                    {
+                        bool isAllContained = setting.groupList.All(x => groupList.Any(y => y.id == x.id));
+                        if (isAllContained)
+                        {
+
+                            foreach (var item in setting.groupList)
+                            {
+                                EvaluationGroupList? groupListItem = groupList.Find(x => x.id == item.id);
+                                if (groupListItem!=null)
+                                {
+                                    groupListItem.members.ForEach(x =>
+                                    {
+                                        x.schoolId=_connectionService?.serverDevice?.school?.id;
+                                        x.evaluationId=evaluationClient.id;
+                                        x.classId= groupListItem.id;
+                                        x.periodId= groupListItem.periodId;
+                                        x.roundId=setting.id;
+                                        x.className= groupListItem.name;
+                                    });
+                                    members.AddRange(groupListItem.members);
+                                }
+                            }
+                            //清空数据库,重新插入
+                            _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationMember>().DeleteAll();
+                            //插入
+                            _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationMember>().Upsert(members);
+
+
+                            foreach (var subject in evaluationClient.subjects)
+                            {
+                                var studentPaperIds = members.Select(x => ShaHashHelper.GetSHA1(x.id+evaluationClient.id+subject.examId+subject.subjectId));
+                                IEnumerable<EvaluationStudentPaper> evaluationStudentPapers = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentPaper>()
+                                    .Find(x => studentPaperIds.Contains(x.id) && x.evaluationId!.Equals(evaluationClient.id));
+                                List<EvaluationStudentPaper> studentPapers = new List<EvaluationStudentPaper>();
+                                int paperIndex = 0;
+                                int paperCount = subject.papers.Count();
+                                //先把试卷顺序打乱
+                                subject.papers =subject.papers.OrderBy(x => Guid.NewGuid().ToString()).ToList();
+                                //将学生顺序打乱
+                                members = members.OrderBy(x => Guid.NewGuid().ToString()).ToList();
+
+                                foreach (var member in members)
+                                {
+                                    SubjectExamPaper studentPaper = subject.papers[paperIndex];
+                                    string id = ShaHashHelper.GetSHA1(member.id+evaluationClient.id+subject.examId+subject.subjectId);
+                                    var paper = evaluationStudentPapers.Where(x => x.id!.Equals(id));
+                                    if (paper== null || paper.Count()==0)
+                                    {
+                                        studentPapers.Add(new EvaluationStudentPaper
+                                        {
+                                            studentId=member.id,
+                                            studentName=member.name,
+                                            classId=member.classId,
+                                            className=member.className,
+                                            evaluationId=evaluationClient.id,
+                                            examId=subject.examId,
+                                            examName=subject.examName,
+                                            subjectId=subject.subjectId,
+                                            subjectName=subject.subjectName,
+                                            paperId=studentPaper.paperId,
+                                            paperName=studentPaper.paperName,
+                                            id=id,
+                                        });
+                                        // 移动到下一个试卷
+                                        paperIndex = (paperIndex + 1) % paperCount;
+                                    }
+                                    else
+                                    {
+                                        // Console.WriteLine("已经分配过试卷,跳过");
+                                        //已经分配过试卷,跳过
+                                    }
+                                }
+                                if (studentPapers.Count>0)
+                                {
+                                    _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentPaper>().Upsert(studentPapers);
+                                    roundStudentPapers.AddRange(studentPapers);
+                                }
+                                if (evaluationStudentPapers!=null && evaluationStudentPapers.Count()>0)
+                                {
+                                    roundStudentPapers.AddRange(evaluationStudentPapers);
+                                }
+                            }
+                            IEnumerable<EvaluationStudentResult> studentResults = _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentResult>()
+                                .Find(x => members.Select(x => x.id).Contains(x.studentId)&&!string.IsNullOrWhiteSpace(x.evaluationId)  && x.evaluationId.Equals(evaluationClient.id));
+                            foreach (var member in members)
+                            {
+                                EvaluationStudentResult? studentResult = null;
+                                //sha1(evaluationId-schoolId-studentId)
+                                string resultId = ShaHashHelper.GetSHA1(evaluationClient.id+_connectionService?.serverDevice?.school?.id+member.id);
+                                var result = studentResults.Where(x => x.id!.Equals(resultId)    && !string.IsNullOrWhiteSpace(x.studentId)  && x.studentId.Equals(member.id));
+                                if (result==null || result.Count()==0)
+                                {
+                                    studentResult = new EvaluationStudentResult()
+                                    {
+                                        id = resultId,
+                                        evaluationId = evaluationClient.id,
+                                        schoolId = _connectionService?.serverDevice?.school?.id,
+                                        studentId = member.id,
+                                        studentName = member.name,
+                                        classId = member.classId,
+                                        className = member.className,
+                                        ownerId= evaluationClient.ownerId,
+                                        scope= evaluationClient.scope,
+                                        type= evaluationClient.type,
+                                        pid= evaluationClient.pid,
+                                    };
+                                    var studentPapers = roundStudentPapers.FindAll(x => !string.IsNullOrWhiteSpace(x.studentId) &&  x.studentId.Equals(member.id)
+                                                            &&!string.IsNullOrWhiteSpace(x.evaluationId)  && x.evaluationId.Equals(evaluationClient.id));
+
+                                    if (studentPapers.IsNotEmpty())
+                                    {
+                                        foreach (var studentPaper in studentPapers)
+                                        {
+                                            studentResult.subjectResults.Add(new EvaluationSubjectResult()
+                                            {
+                                                id = ShaHashHelper.GetSHA1(evaluationClient.id+studentPaper.examId+studentPaper.subjectId+member.id),
+                                                evaluationId = studentPaper.evaluationId,
+                                                examId = studentPaper.examId,
+                                                examName = studentPaper.examName,
+                                                subjectId = studentPaper.subjectId,
+                                                subjectName = studentPaper.subjectName,
+                                                paperId = studentPaper.paperId,
+                                                paperName = studentPaper.paperName,
+                                            });
+                                        }
+                                    }
+                                    // _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentResult>().Upsert(studentResult);
+                                }
+                                else
+                                {
+                                    studentResult = result.First();
+                                    studentResult.studentName = member.name;
+                                    studentResult.classId = member.classId;
+                                    studentResult.className = member.className;
+                                    var studentPapers = roundStudentPapers.FindAll(x => !string.IsNullOrWhiteSpace(x.studentId) &&  x.studentId.Equals(member.id)
+                                                          &&!string.IsNullOrWhiteSpace(x.evaluationId)  && x.evaluationId.Equals(evaluationClient.id));
+                                    if (studentPapers.IsNotEmpty())
+                                    {
+                                        foreach (var studentPaper in studentPapers)
+                                        {
+                                            string subjectResultId = ShaHashHelper.GetSHA1(evaluationClient.id+studentPaper.examId+studentPaper.subjectId+member.id);
+                                            var subjectResult = studentResult.subjectResults.Find(x => x.id!.Equals(subjectResultId));
+                                            if (subjectResult==null)
+                                            {
+                                                studentResult.subjectResults.Add(new EvaluationSubjectResult()
+                                                {
+                                                    id = ShaHashHelper.GetSHA1(evaluationClient.id+studentPaper.examId+studentPaper.subjectId+member.id),
+                                                    evaluationId = studentPaper.evaluationId,
+                                                    examId = studentPaper.examId,
+                                                    examName = studentPaper.examName,
+                                                    subjectId = studentPaper.subjectId,
+                                                    subjectName = studentPaper.subjectName,
+                                                    paperId = studentPaper.paperId,
+                                                    paperName = studentPaper.paperName,
+                                                });
+                                            }
+                                            else
+                                            {
+                                                subjectResult.evaluationId = studentPaper.evaluationId;
+                                                subjectResult.examId = studentPaper.examId;
+                                                subjectResult.examName = studentPaper.examName;
+                                                subjectResult.subjectId = studentPaper.subjectId;
+                                                subjectResult.subjectName = studentPaper.subjectName;
+                                                subjectResult.paperId = studentPaper.paperId;
+                                                subjectResult.paperName = studentPaper.paperName;
+                                            }
+                                        }
+                                    }
+                                    //_liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentResult>().Upsert(studentResult);
+                                }
+                                if (studentResult!=null)
+                                {
+                                    results.Add(studentResult);
+                                }
+                            }
+                            if (results.Count>0)
+                            {
+                                _liteDBFactory.GetLiteDatabase().GetCollection<EvaluationStudentResult>().Upsert(results);
+                            }
+                        }
+                        else
+                        {
+                            msg = "开考名单不在当前评测中!";
+                            code = 4;
+                        }
+                    }
+                    else
+                    {
+                        msg = "名单文件字段提取为空!";
+                        code = 3;
+                    }
+                }
+                else
+                {
+                    msg = "名单文件解析错误!";
+                    code = 2;
+                }
+            }
+            else
+            {
+                msg = "名单文件不存在!";
+                code = 1;
+            }
+            if (members.Count()!=results.Count())
+            {
+                code = 5;
+                msg = "名单成员与作答记录数量不匹配!";
+            }
+            if (roundStudentPapers.Count()!= results.SelectMany(x => x.subjectResults).Count())
+            {
+                code = 6;
+                msg = "学生分配的试卷与作答记录数量不匹配!";
+            }
+            return (roundStudentPapers, members, results, code, msg);
+        }
+
     }
     }
 }
 }

+ 2 - 1
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/DI/LiteDBFactory.cs

@@ -30,6 +30,7 @@ namespace IES.ExamServer.DI
 
 
         public LiteDatabase GetLiteDatabase(string name = "Master")
         public LiteDatabase GetLiteDatabase(string name = "Master")
         {
         {
+            //return new LiteDatabase(_optionsMonitor.Get(name).Connectionstring);
             return LiteDatabases.GetOrAdd(name, x => new LiteDatabase(_optionsMonitor.Get(name).Connectionstring));
             return LiteDatabases.GetOrAdd(name, x => new LiteDatabase(_optionsMonitor.Get(name).Connectionstring));
         }
         }
     }
     }
@@ -46,7 +47,7 @@ namespace IES.ExamServer.DI
             if (connectionstrings == null) throw new ArgumentNullException(nameof(connectionstrings));
             if (connectionstrings == null) throw new ArgumentNullException(nameof(connectionstrings));
 
 
 
 
-            services.TryAddSingleton<LiteDBFactory>();
+            services.TryAddTransient<LiteDBFactory>();
             //多个连接字符串注入
             //多个连接字符串注入
             connectionstrings.ForEach(connection =>
             connectionstrings.ForEach(connection =>
             {
             {

+ 1 - 122
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Models/EvaluationRound.cs

@@ -39,126 +39,5 @@
         public long createTime { get; set; }
         public long createTime { get; set; }
     }
     }
 
 
-    public class EvaluationStudentResult 
-    {
-        /// 本次考试 的id
-        /// </summary>
-        public string? evaluationId { get; set; }
-        /// <summary>
-        /// 开考轮次的id
-        /// </summary>
-        public string? roundId { get; set; }
-        /// <summary>
-        /// 学生id
-        /// </summary>
-        public string? studentId { get; set; }
-        /// <summary>
-        /// 学生姓名
-        /// </summary>
-        public string? studentName { get; set; }
-        /// <summary>
-        /// 学生头像
-        /// </summary>
-        public string? studentPicture { get; set; }
-        /// <summary>
-        /// 班级id
-        /// </summary>
-        public string? classId { get; set; }
-        /// <summary>
-        /// 班级名称
-        /// </summary>
-        public string? className { get; set; }
-        /// <summary>
-        /// 作答耗时,单位毫秒
-        /// </summary>
-        public long costTime { get; set; }
-        /// <summary>
-        /// 提交时间,单位毫秒
-        /// </summary>
-        public long submitTime { get; set; }
-        /// <summary>
-        /// 是否作答完成0 未完成,1完成
-        /// </summary>
-        public int finished { get; set; }
-        /// <summary>
-        /// 是否推送0 未推送,1推送
-        /// </summary>
-        public int pushed { get; set; }
-        public long createTime { get; set; }
-    }
-    /// <summary>
-    /// AI音乐作答结果
-    /// </summary>
-    public class EvaluationAIMusicResult : EvaluationStudentResult
-    {
-
-        /// <summary>
-        /// 作答结果id= +sha1(evaluationId_AIMusic_学生id)
-        /// </summary>
-        public string? id { get; set; }
-        /// <summary>
-        /// 必唱歌曲
-        /// </summary>
-        public List<AISong> mustSong { get; set; } = new List<AISong>();
-        /// <summary>
-        /// 选唱歌曲
-        /// </summary>
-        public List<AISong> optionSong { get; set; } = new List<AISong>();
-    }
-    /// <summary>
-    /// 投票作答结果
-    /// </summary>
-    public class EvaluationVoteResult : EvaluationStudentResult
-    { 
-        /// <summary>
-        /// 作答结果id= +sha1(evaluationId_Vote_学生id)
-        /// </summary>
-        //待完善
-    }
-    /// <summary>
-    /// 评测问卷作答结果
-    /// </summary>
-    public class EvaluationSurveyResult : EvaluationStudentResult
-    {
-        /// <summary>
-        /// 作答结果id= +sha1(evaluationId_Survey_学生id)
-        /// </summary>
-        //待完善
-    }
-
-
-    /// <summary>
-    /// 评测科目作答结果
-    /// </summary>
-    public class EvaluationSubjectResult: EvaluationStudentResult
-    {
-        /// <summary>
-        /// 作答结果id= +sha1(evaluationId_examId_subjectId_学生id)
-        /// </summary>
-        public string? id { get; set; }
-        /// <summary>
-        /// 科目对应的评测id
-        /// </summary>
-        public string? examId { get; set; }
-        /// <summary>
-        /// 科目id
-        /// </summary>
-        public string? subjectId { get; set; }
-        /// <summary>
-        /// 科目名称
-        /// </summary>
-        public string? subjectName { get; set; }
-        /// <summary>
-        /// 试卷id
-        /// </summary>
-        public  string? paperId { get; set; }
-        /// <summary>
-        /// 试卷名称
-        /// </summary>
-        public string? paperName { get; set; }
-        /// <summary>
-        /// 学生答案
-        /// </summary>
-        public List<List<string?>> answers { get; set; } = new List<List<string?>>();
-    }
+    
 }
 }

+ 301 - 0
TEAMModelOS.Extension/IES.Exam/IES.ExamServer/Models/Student.cs

@@ -0,0 +1,301 @@
+namespace IES.ExamServer.Models
+{
+    public class EvaluationMember
+    {
+        /// <summary>
+        /// 账号id
+        /// </summary>
+        public string? id { get; set; }
+        /// <summary>
+        /// 学校
+        /// </summary>
+        public string? schoolId { get; set; }
+        /// <summary>
+        /// 名称
+        /// </summary>
+        public string? name { get; set; }
+        /// <summary>
+        ///类型 1 tmdid,2 student 3 simple(簡易課程名單)
+        /// </summary>
+        public int type { get; set; }
+        /// <summary>
+        /// 性别 M( male,男) F (female 女)  N(secret 保密) 
+        /// </summary>
+        public string? gender { get; set; }
+        /// <summary>
+        /// 行政班
+        /// </summary>
+        public string? classId { get; set; }
+        /// <summary>
+        /// 行政班名称
+        /// </summary>
+        public string? className { get; set; }
+        /// <summary>
+        /// 学段
+        /// </summary>
+        public string? periodId { get; set; }
+        /// <summary>
+        /// 评测id
+        /// </summary>
+        public string? evaluationId { get; set; }
+        /// <summary>
+        /// 开考轮次的id
+        /// </summary>
+        public string? roundId { get; set; }
+    }
+    public class EvaluationGroupList
+    {
+        /// <summary>
+        /// 名单id
+        /// </summary>
+        public string? id { get; set; }
+        /// <summary>
+        /// 名称
+        /// </summary>
+        public string? name { get; set; }
+        /// <summary>
+        /// 学段
+        /// </summary>
+        public string? periodId { get; set; }
+        /// <summary>
+        /// 名单所属范围 school,private
+        /// </summary>
+        public string? scope { get; set; }
+        /// <summary>
+        /// 学校
+        /// </summary>
+        public string? school { get; set; }
+        /// <summary>
+        ///教学班teach ,行政班(学生搜寻classId动态返回)class 
+        /// </summary>
+        public string type { get; set; } = "class";
+        /// <summary>
+        /// 成员
+        /// </summary>
+        public List<EvaluationMember> members { get; set; } = new List<EvaluationMember>();
+    }
+    public abstract class EvaluationStudent
+    {
+        /// <summary>
+        /// sha1(evaluationId-schoolId-studentId)
+        /// </summary>
+        public string? id { get; set; }
+        public string? schoolId { get; set; }
+
+        /// 本次考试 的id
+        /// </summary>
+        public string? evaluationId { get; set; }
+        /// <summary>
+        /// 关联的区级评测id
+        /// </summary>
+        public string? pid { get; set; }
+        /// <summary>
+        /// 开考轮次的id
+        /// </summary>
+        //public string? roundId { get; set; }
+        /// <summary>
+        /// 学生id
+        /// </summary>
+        public string? studentId { get; set; }
+        /// <summary>
+        /// 学生姓名
+        /// </summary>
+        public string? studentName { get; set; }
+        /// <summary>
+        /// 学生头像
+        /// </summary>
+        //public string? studentPicture { get; set; }
+        /// <summary>
+        /// 班级id
+        /// </summary>
+        public string? classId { get; set; }
+        /// <summary>
+        /// 班级名称
+        /// </summary>
+        public string? className { get; set; }
+       
+        /// <summary>
+        /// 提交时间,单位毫秒
+        /// </summary>
+        //public long submitTime { get; set; }
+       
+        //public long createTime { get; set; }
+        public string? ownerId { get; set; }
+        /// <summary>
+        /// 数据范围
+        /// </summary>
+        public string? scope { get; set; }
+        /// <summary>
+        /// 类型: Exam 普通评测, Art艺术评测
+        /// </summary>
+        public string? type { get; set; }
+    }
+
+    public class EvaluationStudentResult : EvaluationStudent
+    {
+        /// <summary>
+        /// 是否作答完成0 未完成,1完成,2缺考
+        /// </summary>
+        public int finished { get; set; }
+        /// <summary>
+        /// 是否推送0 未推送,1推送
+        /// </summary>
+        public int pushed { get; set; }
+
+        public List<EvaluationSubjectResult> subjectResults { get; set; } = new List<EvaluationSubjectResult>();
+        public EvaluationMusicAIResult? musicAIResult { get; set; }
+        public EvaluationVoteResult? VoteResult { get; set; }
+        public EvaluationSurveyResult? SurveyResult { get; set; }
+    }
+
+    public class EvaluationStudentPaper 
+    {
+        /// <summary>
+        /// 作答结果id=sha1(学生id+evaluationId+examId+subjectId)
+        /// </summary>
+        public string? id { get; set; }
+        /// <summary>
+        /// 学生id
+        /// </summary>
+        public string? studentId { get; set; }
+        /// <summary>
+        /// 学生姓名
+        /// </summary>
+        public string? studentName { get; set; }
+        public string? classId { get; set; }
+        public string? className { get; set; }
+        /// <summary>
+        /// 评测id
+        /// </summary>
+        public string? evaluationId { get; set; }
+        /// <summary>
+        /// 科目对应的评测id
+        /// </summary>
+        public string? examId { get; set; }
+        /// <summary>
+        /// 科目对应的评测名称
+        /// </summary>
+        public string? examName { get; set; }
+        /// <summary>
+        /// 科目id
+        /// </summary>
+        public string? subjectId { get; set; }
+        /// <summary>
+        /// 科目名称
+        /// </summary>
+        public string? subjectName { get; set; }
+        /// <summary>
+        /// 试卷id
+        /// </summary>
+        public string? paperId { get; set; }
+        /// <summary>
+        /// 试卷名称
+        /// </summary>
+        public string? paperName { get; set; }
+    }
+
+    public abstract class EvaluationResult 
+    {
+
+        /// <summary>
+        /// 作答耗时,单位毫秒
+        /// </summary>
+        public long costTime { get; set; }
+        /// <summary>
+        /// 0 未作答,1 已经作答。2缺考
+        /// </summary>
+        public int finished { get; set; }
+       
+        /// <summary>
+        /// 评测id
+        /// </summary>
+        public string? evaluationId { get; set; }
+        /// <summary>
+        /// 提交时间,单位毫秒
+        /// </summary>
+        public long submitTime { get; set; }
+
+        public long createTime { get; set; }
+    }
+
+    /// <summary>
+    /// AI音乐作答结果
+    /// </summary>
+    public class EvaluationMusicAIResult :  EvaluationResult
+    {
+        /// <summary>
+        /// quota_22 的acId  
+        /// </summary>
+        public string? taskId { get; set; }
+        
+        /// <summary>
+        /// AI 音乐评测题目id
+        /// </summary>
+        public string? questionId { get; set; }
+        /// <summary>
+        /// AI 音乐评测题目名称
+        /// </summary>
+        public string? questionName { get; set; }
+    }
+   
+
+    /// <summary>
+    /// 评测科目作答结果
+    /// </summary>
+    public class EvaluationSubjectResult :EvaluationResult
+    {
+        /// <summary>
+        /// 作答结果id=sha1(学生id+evaluationId+examId+subjectId)
+        /// </summary>
+        public string? id { get; set; }
+        /// <summary>
+        /// 科目对应的评测id
+        /// </summary>
+        public string? examId { get; set; }
+        /// <summary>
+        /// 评测名称
+        /// </summary>
+        public string ? examName { get; set; }
+        /// <summary>
+        /// 科目id
+        /// </summary>
+        public string? subjectId { get; set; }
+        /// <summary>
+        /// 科目名称
+        /// </summary>
+        public string? subjectName { get; set; }
+        /// <summary>
+        /// 试卷id
+        /// </summary>
+        public string? paperId { get; set; }
+        /// <summary>
+        /// 试卷名称
+        /// </summary>
+        public string? paperName { get; set; }
+        /// <summary>
+        /// 学生答案
+        /// </summary>
+        public List<List<string?>> answers { get; set; } = new List<List<string?>>();
+    }
+    /// <summary>
+    /// 投票作答结果
+    /// </summary>
+    public class EvaluationVoteResult : EvaluationResult
+    {
+        /// <summary>
+        /// 作答结果id= +sha1(evaluationId_Vote_学生id)
+        /// </summary>
+        //待完善
+    }
+    /// <summary>
+    /// 评测问卷作答结果
+    /// </summary>
+    public class EvaluationSurveyResult : EvaluationResult
+    {
+        /// <summary>
+        /// 作答结果id= +sha1(evaluationId_Survey_学生id)
+        /// </summary>
+        //待完善
+    }
+
+}

+ 4 - 0
TEAMModelOS.SDK/Models/Cosmos/School/Inner/Period.cs

@@ -47,6 +47,10 @@ namespace TEAMModelOS.SDK.Models
         //{ "elecedu-dept","电教部门"},
         //{ "elecedu-dept","电教部门"},
        // public List<string> type { get; set; }= new List<string>();
        // public List<string> type { get; set; }= new List<string>();
         public string periodType { get; set; }
         public string periodType { get; set; }
+        /// <summary>
+        /// 状态,0:启用,1:未启用
+        /// </summary>
+        public int status { get; set; }
     }
     }
 
 
     /// <summary>
     /// <summary>

+ 8 - 7
TEAMModelOS.SDK/Models/Service/EvaluationSyncInfoService.cs

@@ -314,13 +314,14 @@ namespace TEAMModelOS.SDK.Models.Service
                                             {
                                             {
                                                 evaluationSyncInfo.music= new AIMusic()
                                                 evaluationSyncInfo.music= new AIMusic()
                                                 {
                                                 {
-                                                  examId= art.id,
-                                                  examName= art.name,
-                                                  pid=art.pId,
-                                                  questionId=artMusic.questionId,
-                                                  questionName=artMusic.questionName,
-                                                  mustSong=artMusic.mustSong?.Select(x=>new AISong { songId=x.songId,songName=x.songName}).ToList(),
-                                                  optionSong=artMusic.optionSong?.Select(x => new AISong { songId=x.songId, songName=x.songName }).ToList(),
+                                                    taskId=item.acId,   
+                                                    examId= art.id,
+                                                    examName= art.name,
+                                                    pid=art.pId,
+                                                    questionId=artMusic.questionId,
+                                                    questionName=artMusic.questionName,
+                                                    mustSong=artMusic.mustSong?.Select(x=>new AISong { songId=x.songId,songName=x.songName}).ToList(),
+                                                    optionSong=artMusic.optionSong?.Select(x => new AISong { songId=x.songId, songName=x.songName }).ToList(),
                                                 };
                                                 };
                                             }
                                             }
                                         }
                                         }