Browse Source

Merge branch 'develop6.0-tmd' of http://52.130.252.100:10000/TEAMMODEL/TEAMModelOS into develop6.0-tmd

liqk 3 years ago
parent
commit
d01f1c023b
1 changed files with 80 additions and 4 deletions
  1. 80 4
      TEAMModelOS.SDK/Models/Service/ActivityService.cs

+ 80 - 4
TEAMModelOS.SDK/Models/Service/ActivityService.cs

@@ -71,9 +71,36 @@ namespace TEAMModelOS.SDK
                         continue;
                     }
                     List<string> classes = ExamService.getClasses(activity.classes, activity.stuLists);
+                    List<ExamClassResult> classResults = new List<ExamClassResult>();
+                    List<PaperSimple> standerAnswers = new List<PaperSimple>();
+                    if (type.Equals("Exam")) {
+                        if (groupChange.scope.Equals("school"))
+                        {
+                            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<ExamClassResult>(queryText: $"select value(c) from c where c.examId = '{activity.id}'",
+                            requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"ExamClassResult-{groupChange.school}") }))
+                            {
+                                classResults.Add(item);
+                            }
+                        }
+                        else {
+                            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<ExamClassResult>(queryText: $"select value(c) from c where c.examId = '{activity.id}'",
+                               requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"ExamClassResult-{groupChange.creatorId}") }))
+                            {
+                                classResults.Add(item);
+                            }
+                        }
+                        
+                        await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<PaperSimple>(
+                            queryText: $"select A0.answers from c join A0 in c.papers where c.id = '{activity.id}'",
+                            requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{activity.code}") }))
+                        {
+                            standerAnswers.Add(item);
+                        }
+                    }
                     //stujoin新加入名单的
                     foreach (Member member in groupChange.stujoin)
                     {
+                        await updateClassResulte(client, classResults, standerAnswers, member.id);
                         var stucourse = new StuActivity
                         {
                             id = activity.id,
@@ -100,6 +127,7 @@ namespace TEAMModelOS.SDK
                     //tmdjoin新加入的
                     foreach (Member member in groupChange.tmdjoin)
                     {
+                        await updateClassResulte(client, classResults, standerAnswers, member.id);
                         var stucourse = new StuActivity
                         {
                             id = activity.id,
@@ -125,6 +153,7 @@ namespace TEAMModelOS.SDK
                     //tchjoin新加入的
                     foreach (Member member in groupChange.tchjoin)
                     {
+                        //await updateClassResulte(client, classResults, standerAnswers, member.id);
                         var stucourse = new StuActivity
                         {
                             id = activity.id,
@@ -151,7 +180,7 @@ namespace TEAMModelOS.SDK
                     {
                         try
                         {
-
+                            await updateClassResulte(client, classResults, standerAnswers, member.id);
                             await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.code.Replace("Base-", "")}-{member.id}"));
                         }
                         catch (CosmosException)
@@ -164,7 +193,7 @@ namespace TEAMModelOS.SDK
                     {
                         try
                         {
-
+                            await updateClassResulte(client, classResults, standerAnswers, member.id);
                             await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.id}"));
                         }
                         catch (CosmosException)
@@ -378,7 +407,54 @@ namespace TEAMModelOS.SDK
                 await Task.WhenAll(tasks);
             }
         }
-
+        public static async Task updateClassResulte(CosmosClient client,List<ExamClassResult> classResults, List<PaperSimple> standerAnswers, string id)
+        {
+            if (classResults.Count > 0)
+            {
+                foreach (var item in classResults)
+                {
+                    int index = item.studentIds.IndexOf(id);
+                    if (index == -1)
+                    {
+                        List<List<string>> standard = new List<List<string>>();
+                        foreach (PaperSimple simple in standerAnswers)
+                        {
+                            standard = simple.answers;
+                        }
+                        List<double> ansPoint = new List<double>();
+                        List<List<string>> anc = new List<List<string>>();
+                        List<List<Details>> mark = new List<List<Details>>();
+                        foreach (List<string> num in standard)
+                        {
+                            List<string> newAns = new List<string>();
+                            foreach (string san in num)
+                            {
+                                newAns.Add(san);
+                            }
+                            anc.Add(newAns);
+                            ansPoint.Add(-1);
+                            mark.Add(new List<Details>());
+                        }
+                        item.mark.Add(mark);
+                        item.ans.Add(anc);
+                        item.studentIds.Add(id);
+                        item.studentScores.Add(ansPoint);
+                        item.studentAnswers.Add(new List<string>());
+                        item.sum.Add(0);
+                    }
+                    else { 
+                        item.mark.RemoveAt(index);
+                        item.ans.RemoveAt(index);
+                        item.studentIds.RemoveAt(index);
+                        item.studentScores.RemoveAt(index);
+                        item.studentAnswers.RemoveAt(index);
+                        item.sum.RemoveAt(index);
+                    }
+                    
+                    await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(item, item.id, new PartitionKey($"{item.code}"));
+                }
+            }
+        }
         public static async Task DeleteActivity(CoreAPIHttpService _coreAPIHttpService, CosmosClient client, DingDing _dingDing, ActivityList activityList) {
             List<(string pId, List<string> gid)> ps = new List<(string pId, List<string> gid)>();
             if (activityList.groupLists.Count > 0)
@@ -482,7 +558,7 @@ namespace TEAMModelOS.SDK
             }
             return "";
         }
-    }
+    }    
 
     public class ActivityList
     {