zhouj1203@hotmail.com 1 year ago
parent
commit
aff04b9a4c
1 changed files with 33 additions and 57 deletions
  1. 33 57
      TEAMModelOS.SDK/Models/Service/StudentService.cs

+ 33 - 57
TEAMModelOS.SDK/Models/Service/StudentService.cs

@@ -6,9 +6,11 @@ using DocumentFormat.OpenXml.Office2010.Excel;
 using DocumentFormat.OpenXml.Spreadsheet;
 using DocumentFormat.OpenXml.VariantTypes;
 using HTEXLib.COMM.Helpers;
+using HTEXLib.Helpers.ShapeHelpers;
 using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Configuration;
 using NUnit.Framework;
+using NUnit.Framework.Interfaces;
 using OpenXmlPowerTools;
 using System;
 using System.Collections.Generic;
@@ -143,22 +145,27 @@ namespace TEAMModelOS.SDK
                 if (subjects.IsNotEmpty())
                 {
                     subjectJoin = "join s in c.subjects";
-                    subjectSQL = $" and  c.id in ({string.Join(",", subjects.Select(z => $"'{z}'"))}) ";
+                    subjectSQL = $" and  s.id in ({string.Join(",", subjects.Select(z => $"'{z}'"))}) ";
                 }
                 StringBuilder SQL = new StringBuilder($"select {filed} from c {subjectJoin} where c.pk='Exam' {subjectSQL} {groupListSQL} and c.startTime>={stime} and c.startTime <= {etime} ");
                 //获取学校发布的活动
                 if (userScope.Equals(Constant.ScopeStudent) && !string.IsNullOrWhiteSpace(school))
                 {
                     var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<StudentActivity>($"{SQL}  and c.owner='school' ", $"Exam-{school}");
-                    List<StudentActivity> activity = await getStuActivity(_azureCosmos, resultSchool.list, school, userId, userScope);
-                    activities.AddRange(activity);
+                    if (resultSchool.list.Count > 0) {
+                        List<StudentActivity> activity = await getStuActivity(_azureCosmos, resultSchool.list, school, userId, userScope);
+                        activities.AddRange(activity);
+                    }                  
                 }
                 //获取教师发布的活动(个人名单,学校名单)
                 {
                     var resultTeacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<StudentActivity>($"{SQL}  and c.owner='teacher' ");
-                    List<StudentActivity> activity = await getStuActivity(_azureCosmos, resultTeacher.list, school, userId, userScope);
-                    activities.AddRange(resultTeacher.list);
+                    if(resultTeacher.list.Count > 0) {
+                        List<StudentActivity> activity = await getStuActivity(_azureCosmos, resultTeacher.list, school, userId, userScope);
+                        activities.AddRange(resultTeacher.list);
+                    }
                 }
+                   
             }
 
             if (types.IsEmpty() || types.Contains("Vote"))
@@ -216,14 +223,14 @@ namespace TEAMModelOS.SDK
                 if (subjects.IsNotEmpty())
                 {
                     subjectJoin = "join s in c.subjects";
-                    subjectSQL = $" and  c.id in ({string.Join(",", subjects.Select(z => $"'{z}'"))}) ";
+                    subjectSQL = $" and  s.id in ({string.Join(",", subjects.Select(z => $"'{z}'"))}) ";
                 }
 
                 StringBuilder SQL = new($"select {filed} from c  {subjectJoin} where c.pk='Art' {subjectSQL} {groupListSQL} and c.startTime>={stime} and c.startTime <= {etime} ");
                 //获取学校发布的活动
                 if (userScope.Equals(Constant.ScopeStudent) && !string.IsNullOrWhiteSpace(school))
                 {
-                    var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<StudentActivity>($"{SQL}  and c.school='school' ", $"Art-{school}");
+                    var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<StudentActivity>($"{SQL}  and c.school='{school}' ", $"Art-{school}");
                     activities.AddRange(resultSchool.list);
                 }
             }
@@ -263,21 +270,21 @@ namespace TEAMModelOS.SDK
             List<ExamClassResult> examClassResults = new();
 
             await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<ExamClassResult>(
-            queryText: $"select value(c) from c where c.examId = in ({string.Join(",", examIds.Select(z => $"'{z}'"))})' and c.pk = 'ExamClassResult'" ))
+            queryText: $"select value(c) from c where c.examId in ({string.Join(",", examIds.Select(z => $"'{z}'"))}) and c.pk = 'ExamClassResult'" ))
             {
                 examClassResults.Add(item);
             }
             bool iss = false;
             //标记学生作答状态
             int ts = 0;
-            List<Dictionary<string, int>> et = new();
-            List<Dictionary<string, bool>> es = new();
+            List<(string eId, int status)> et = new();
+            List<(string eId, bool flag)> es = new();
             if (examClassResults.Count > 0)
             {
                 foreach (ExamClassResult exam in examClassResults)
                 {
-                    Dictionary<string, int> examTasks = new Dictionary<string, int>();
-                    Dictionary<string, bool> examStatus = new Dictionary<string, bool>();
+                    //List<(string eId, int status)> examTasks = new();
+                    //List<(string eId, bool flag)> examStatus = new();
                     int index = exam.studentIds.IndexOf(userId);
                     if (index != -1)
                     {
@@ -288,60 +295,27 @@ namespace TEAMModelOS.SDK
                             {
                                 ts = 1;
                                 iss = true;
-                                break;
+                                //break;
                             }
                             else
                             {
+                                iss = false;
                                 ts = 0;
                             }
+                            et.Add((exam.examId, ts));
+                            es.Add((exam.examId,iss));
                         }
                         else
                         {
                             ts = -1;
-                        }
-                        if (examTasks.ContainsKey(exam.examId))
-                        {
-                            if (ts == -1)
-                            {
-                                examTasks[exam.examId] = -1;
-                            }
-                            else if (examTasks[exam.examId] == -1)
-                            {
-                                examTasks[exam.examId] = -1;
-                            }
-                            else
-                            {
-                                examTasks[exam.examId] = ts;
-                            }
-                        }
-                        else
-                        {
-                            examTasks[exam.examId] = ts;
-                        }
-                        if (examStatus.ContainsKey(exam.examId))
-                        {
-                            if (!iss)
-                            {
-                                examStatus[exam.examId] = false;
-                            }
-                            else if (examStatus[exam.examId] == false)
-                            {
-                                examStatus[exam.examId] = false;
-                            }
-                        }
-                        else
-                        {
-                            examStatus[exam.examId] = iss;
-                        }
-                        et.Add(examTasks);
-                        es.Add(examStatus);
+                            iss = false;
+                            et.Add((exam.examId, ts));
+                            es.Add((exam.examId, iss));
+                        }                      
                     }
                 }
             }
-            else
-            {
-                ts = -1;
-            }
+            
             var stuActivity = activities.Select(x => new StudentActivity
             {
                 id = x.id,
@@ -362,10 +336,12 @@ namespace TEAMModelOS.SDK
                 code = x.code,
                 createTime = x.createTime,
                 qamode = x.qamode,
-                ext = new Dictionary<string, JsonElement>() { { "type", x.examType.ToJsonString().ToObject<JsonElement>() },
+                //taskStatus = et.Select(c => c[x.id]).FirstOrDefault(),
+                ext = new Dictionary<string, JsonElement>() { { "type", !string.IsNullOrEmpty(x.examType) ? x.examType.ToJsonString().ToObject<JsonElement>():new JsonElement() },
                             { "subjects", x.subjects.ToJsonString().ToObject<JsonElement>() } },
-                taskStatus = (int)(et.Where(c => c.Keys.Equals(x.id))?.FirstOrDefault()[x.id]),
-                sStatus = (bool)es.Where(c => c.Keys.Equals(x.id))?.FirstOrDefault()[x.id] ? 1 : 0
+                taskStatus = et.Where(c => c.eId.Equals(x.id)).FirstOrDefault().status,
+                sStatus = es.Where(z => z.eId.Equals(x.id)).FirstOrDefault().flag ? 1 : 0
+                //sStatus  = es.Select(c => c[x.id]).FirstOrDefault() ? 1 : 0
             }).ToList();
             return stuActivity;
         }