zhouj1203@hotmail.com 9 months ago
parent
commit
473090f4e9
1 changed files with 53 additions and 15 deletions
  1. 53 15
      TEAMModelOS.Function/CosmosDBTriggers/TriggerArt.cs

+ 53 - 15
TEAMModelOS.Function/CosmosDBTriggers/TriggerArt.cs

@@ -14,6 +14,7 @@ using Microsoft.Azure.Cosmos;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
 
 using TEAMModelOS.Function;
+using static TEAMModelOS.SDK.Models.Cosmos.Student.StudentAnalysis;
 
 namespace TEAMModelOS.CosmosDBTriggers
 {
@@ -398,7 +399,7 @@ namespace TEAMModelOS.CosmosDBTriggers
                                     var period = scInfo.period.Where(x => x.id.Equals(art.period.id))?.FirstOrDefault();
 
                                     List<StudentArtResult> studentArtResults = new();
-                                    string sql = $"SELECT value c FROM c   where  c.pk='ArtResult' ";
+                                    string sql = $"SELECT value c FROM c   where  c.pk='ArtResult'";
                                     await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Student)
                                         .GetItemQueryIteratorSql<StudentArtResult>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"ArtResult-{art.id}") }))
                                     {
@@ -697,20 +698,57 @@ namespace TEAMModelOS.CosmosDBTriggers
                                                      c.score
                                                  }),
                                              });*/
-                                            var quotaPercent = setting.quotas.Select(x => new
-                                            {
-                                                x.id,
-                                                x.percent,
-                                                score = x.children.Select(c => new
-                                                {
-                                                    real = rs.results.Where(r => r.quotaId.Equals(c.id) && r.subjectId.Equals(sc.subjectId) && r.score > -1).FirstOrDefault()?.score * c.percent * 0.01,
-                                                    score = c.children.Select(s => new
-                                                    {
-                                                        real = rs.results.Where(r => r.quotaId.Equals(s.id) && r.subjectId.Equals(sc.subjectId) && r.score > -1).FirstOrDefault()?.score * s.percent * 0.01
-                                                    }).Sum(n => n.real) * c.percent * 0.01
-                                                }).Sum(n => n.real + n.score) * x.percent * 0.01
-                                            });
-                                            double realScore = Math.Round((double)quotaPercent.Sum(c => c.score), 2);
+                                            /* var quotaPercent = setting.quotas.Select(x => new
+                                             {
+                                                 x.id,
+                                                 x.percent,
+                                                 score = x.children.Select(c => new
+                                                 {
+                                                     realx = rs.results.Where(r => r.quotaId.Equals(c.id) && r.subjectId.Equals(sc.subjectId) && r.score > -1).FirstOrDefault()?.score * c.percent * 0.01,
+                                                     scorex = c.children.Select(s => new
+                                                     {
+                                                         realy = rs.results.Where(r => r.quotaId.Equals(s.id) && r.subjectId.Equals(sc.subjectId) && r.score > -1).FirstOrDefault()?.score * s.percent * 0.01
+                                                     }).Sum(n => n.realy) * c.percent * 0.01
+                                                 }).Sum(n => n.realx + n.scorex) * x.percent * 0.01
+                                             });*/
+                                            double scoreAll = 0;
+                                            foreach (var quota in setting.quotas) {
+                                                if (quota.children.Count != 0) {
+                                                    double score_2 = 0;
+                                                    foreach (var quota_1 in quota.children) {
+
+                                                        if (quota_1.children.Count != 0)
+                                                        {
+                                                            double score_3 = 0;
+                                                            foreach (var quota_2 in quota_1.children)
+                                                            {
+                                                                foreach (var result in rs.results)
+                                                                {
+                                                                    if (result.quotaId.Equals(quota_2.id) && result.subjectId.Equals(sc.subjectId) && result.score > -1)
+                                                                    {
+
+                                                                        score_3 += result.score * quota_2.percent * 0.01;
+                                                                    }
+                                                                }                                                            
+                                                            }
+                                                            score_2 += score_3 * quota_1.percent * 0.01;
+                                                        }
+                                                        else {
+                                                            foreach (var result in rs.results)
+                                                            {
+                                                                if (result.quotaId.Equals(quota_1.id) && result.subjectId.Equals(sc.subjectId) && result.score > -1)
+                                                                {
+
+                                                                    score_2 += result.score * quota_1.percent * 0.01;
+                                                                }
+                                                            }
+                                                        }                                                                                                       
+                                                       
+                                                    }
+                                                    scoreAll += score_2 * quota.percent * 0.01;
+                                                }
+                                            }
+                                            double realScore = Math.Round(scoreAll, 2);
                                             sc.score = realScore;
                                             //}
                                         }