zhouj1203@hotmail.com 1 vuosi sitten
vanhempi
commit
c87ed0cdc3

+ 43 - 14
TEAMModelOS.FunctionV4/CosmosDB/TriggerArt.cs

@@ -411,13 +411,13 @@ namespace TEAMModelOS.FunctionV4.CosmosDB
                                 };
                                 };
                                 //var period = scInfo.period.Where(x => x.id.Equals(art.period.id)).FirstOrDefault();
                                 //var period = scInfo.period.Where(x => x.id.Equals(art.period.id)).FirstOrDefault();
                                 List<(string ptype, string subId, List<(string name, List<string> kno)> knos)> knoledge = new();
                                 List<(string ptype, string subId, List<(string name, List<string> kno)> knos)> knoledge = new();
-                                List<string> subs = new List<string> { "subject_painting", "subject_music" };
-                                foreach (var ss in subs)
+                                //List<string> subs = new List<string> { "subject_painting", "subject_music" };
+                                foreach (var ss in art.subjects)
                                 {
                                 {
-                                    knoledge.Add(await getKnowledge(art.periodType, examResults.Where(c => c.subjectId.Equals(ss)).FirstOrDefault().paper.code, client, ss, examResults.Where(c => c.subjectId.Equals(ss)).FirstOrDefault().paper.periodId));
+                                    knoledge.Add(await getKnowledge(art.periodType, examResults.Where(c => c.subjectId.Equals(ss.id))?.FirstOrDefault().paper.code, client, ss.id, examResults.Where(c => c.subjectId.Equals(ss.id))?.FirstOrDefault().paper.periodId));
                                 }
                                 }
 
 
-                                List<(string name, double score, string subject)> blockScore = new();
+                                List<(string name, double score, double aver,string subject)> blockScore = new();
                                 List<(List<(string name, double score, double point, string subject)> studentScore, string stuId)> studentScores = new();
                                 List<(List<(string name, double score, double point, string subject)> studentScore, string stuId)> studentScores = new();
                                 foreach (var exam in examResults)
                                 foreach (var exam in examResults)
                                 {
                                 {
@@ -484,16 +484,26 @@ namespace TEAMModelOS.FunctionV4.CosmosDB
                                     {
                                     {
                                         double OnePoint = 0;
                                         double OnePoint = 0;
                                         int n = 0;
                                         int n = 0;
+                                        double scores = 0;
                                         exam.paper.knowledge.ForEach(kno =>
                                         exam.paper.knowledge.ForEach(kno =>
                                         {
                                         {
                                             if (kno.Contains(knowledgeName[k]))
                                             if (kno.Contains(knowledgeName[k]))
                                             {
                                             {
                                                 var itemPersent = kno.Count > 0 ? 1 / Convert.ToDouble(kno.Count) : 0;
                                                 var itemPersent = kno.Count > 0 ? 1 / Convert.ToDouble(kno.Count) : 0;
-                                                OnePoint += point[n] * itemPersent;                                              
+                                                OnePoint += point[n] * itemPersent;
+                                                foreach (string id in exam.studentIds)
+                                                {
+                                                    int index = exam.studentIds.IndexOf(id);
+                                                    if (exam.studentScores[index][n] > 0)
+                                                    {
+                                                        scores += exam.studentScores[index][n] * itemPersent;
+                                                    }
+                                                }
                                             }
                                             }
                                             n++;
                                             n++;
                                         });
                                         });
-                                        blockScore.Add((knowledgeName[k], OnePoint, exam.subjectId));
+                                        double sc = exam.studentIds.Count > 0 ? Math.Round(scores * 1.0 / exam.studentIds.Count, 2) : 0;
+                                        blockScore.Add((knowledgeName[k], OnePoint,sc, exam.subjectId));
                                         //blockScore.AddRange(pointScore);
                                         //blockScore.AddRange(pointScore);
                                     }
                                     }
                                 }
                                 }
@@ -503,38 +513,43 @@ namespace TEAMModelOS.FunctionV4.CosmosDB
                                     knoScore = v.ToList().GroupBy(k => k.name).Select(z => new
                                     knoScore = v.ToList().GroupBy(k => k.name).Select(z => new
                                     {
                                     {
                                         knoName = z.Key,
                                         knoName = z.Key,
-                                        score = z.ToList().Sum(j => j.score)
+                                        score = z.ToList().Sum(j => j.score),
+                                        aver = z.ToList().Sum(j => j.aver)
                                     })
                                     })
                                 });
                                 });
                                 var subjectKnow = knoledge.Where(c => c.ptype.Equals(art.periodType)).Select(x => new { x.subId, x.knos }).ToList();
                                 var subjectKnow = knoledge.Where(c => c.ptype.Equals(art.periodType)).Select(x => new { x.subId, x.knos }).ToList();
-                                List<(string subjectId, List<(string name, double score, List<string> dim)> bks)> bs = new();
+                                List<(string subjectId, List<(string name, double score,double persent,double aver, List<string> dim)> bks)> bs = new();
                                 foreach (var bb in subjectKnow)
                                 foreach (var bb in subjectKnow)
                                 {
                                 {
                                     var kno1 = bls.Where(c => c.subjectId.Equals(bb.subId)).SelectMany(x => x.knoScore).ToList();
                                     var kno1 = bls.Where(c => c.subjectId.Equals(bb.subId)).SelectMany(x => x.knoScore).ToList();
                                     //var kno2 = dimensions.Where(c => c.subjectBind.Equals(bb.subId)).Select(x => new { x.dimension,x.blocks}).ToList();
                                     //var kno2 = dimensions.Where(c => c.subjectBind.Equals(bb.subId)).Select(x => new { x.dimension,x.blocks}).ToList();
-                                    List<(string name, double score)> blockScores = new();
+                                    List<(string name, double score,double aver)> blockScores = new();
                                     foreach (var k2 in bb.knos)
                                     foreach (var k2 in bb.knos)
                                     {
                                     {
                                         double bsc = 0;
                                         double bsc = 0;
+                                        double avs = 0;
                                         foreach (var k3 in kno1)
                                         foreach (var k3 in kno1)
                                         {
                                         {
                                             if (null != k2.kno && k2.kno.Contains(k3.knoName))
                                             if (null != k2.kno && k2.kno.Contains(k3.knoName))
                                             {
                                             {
                                                 bsc += k3.score;
                                                 bsc += k3.score;
+                                                avs += k3.aver;
                                             }
                                             }
                                         }
                                         }
-                                        blockScores.Add((k2.name, bsc));
+                                        blockScores.Add((k2.name, bsc,avs));
                                     }
                                     }
                                     var blk = blockScores.Select(x => new
                                     var blk = blockScores.Select(x => new
                                     {
                                     {
                                         x.name,
                                         x.name,
                                         x.score,
                                         x.score,
+                                        persent = Math.Round( x.aver > 0 ? x.aver / x.score : 0,2),
+                                        x.aver,
                                         dimension = setting.dimensions.Where(s => s.blocks.Contains(x.name)).Select(x => x.dimension)
                                         dimension = setting.dimensions.Where(s => s.blocks.Contains(x.name)).Select(x => x.dimension)
                                     });
                                     });
-                                    List<(string name, double score, List<string> dim)> bks = new();
+                                    List<(string name, double score, double persent,double aver,List<string> dim)> bks = new();
                                     foreach (var bk in blk)
                                     foreach (var bk in blk)
                                     {
                                     {
-                                        bks.Add((bk.name, bk.score, bk.dimension.ToList()));
+                                        bks.Add((bk.name, bk.score,bk.persent, bk.aver,bk.dimension.ToList()));
                                     }
                                     }
                                     bs.Add((bb.subId, bks));
                                     bs.Add((bb.subId, bks));
                                 }
                                 }
@@ -546,10 +561,23 @@ namespace TEAMModelOS.FunctionV4.CosmosDB
                                     {
                                     {
                                         z.name,
                                         z.name,
                                         z.score,
                                         z.score,
+                                        z.persent,
+                                        z.aver,
                                         z.dim
                                         z.dim
                                     })
                                     })
                                 });
                                 });
-
+                                //获取维度得分率
+                                var dim = setting.dimensions.GroupBy(a => a.subjectBind).Select(x => new {
+                                    x.Key,
+                                    dim =  x.ToList().Select(c => new { 
+                                        c.dimension,
+                                        block = Math.Round( c.blocks.Select(z => new {
+                                            persent = Math.Round( bs.Where(z => z.subjectId.Equals(x.Key)).SelectMany(k => k.bks).Where(q => q.name.Equals(z)).Sum(h => h.score) > 0 ?
+                                            bs.Where(z => z.subjectId.Equals(x.Key)).SelectMany(k => k.bks).Where(q => q.name.Equals(z)).Sum(h => h.aver )  /
+                                            bs.Where(z => z.subjectId.Equals(x.Key)).SelectMany(k => k.bks).Where(q => q.name.Equals(z)).Sum(h => h.score) : 0 ,2)
+                                        }).Sum(o => o.persent) / c.blocks.Count,2)
+                                    })
+                                });
 
 
                                 //获取学期信息
                                 //获取学期信息
 
 
@@ -640,7 +668,8 @@ namespace TEAMModelOS.FunctionV4.CosmosDB
                                                 z.score,
                                                 z.score,
                                                 z.point,
                                                 z.point,
                                                 block = subjectKnow.Where(v => v.subId.Equals(sj.id)).SelectMany(k => k.knos).Where(c => null != c.kno && c.kno.Contains(z.name)).Select(x => x.name)
                                                 block = subjectKnow.Where(v => v.subId.Equals(sj.id)).SelectMany(k => k.knos).Where(c => null != c.kno && c.kno.Contains(z.name)).Select(x => x.name)
-                                            })
+                                            }),
+                                            dim = dim.Where(c => c.Key.Equals(sj.id))?.FirstOrDefault().dim
                                         };
                                         };
                                         index++;
                                         index++;
                                         semesterData.itemScore.Add(item);
                                         semesterData.itemScore.Add(item);

+ 1 - 0
TEAMModelOS.SDK/Models/Cosmos/Student/OverallEducation.cs

@@ -160,6 +160,7 @@ namespace TEAMModelOS.SDK.Models
         public string type { get; set; }
         public string type { get; set; }
         public dynamic block { get; set; }
         public dynamic block { get; set; }
         public dynamic kno { get; set; }
         public dynamic kno { get; set; }
+        public dynamic dim { get; set; }
     }
     }
 
 
 
 

+ 25 - 12
TEAMModelOS/Controllers/Analysis/ArtAnalysisController.cs

@@ -177,32 +177,44 @@ namespace TEAMModelOS.Controllers.Analysis
                 {
                 {
                     examResults.Add(item);
                     examResults.Add(item);
                 }
                 }
-                List<KeyValuePair<string, List<(string name, double score)>>> pointPersent = new();
-                (KeyValuePair<string, List<string>> key1, KeyValuePair<string, List<string>> key2, KeyValuePair<string, List<(string name, double score)>> key3, KeyValuePair<string, List<(string name, double score)>> key4) = DoKnowledgePoint(examResults[0], info);
+                List<KeyValuePair<string, List<(string name, double score,double aver)>>> pointPersent = new();
+                (KeyValuePair<string, List<string>> key1, KeyValuePair<string, List<string>> key2, KeyValuePair<string, List<(string name, double score,double average)>> key3, KeyValuePair<string, List<(string name, double score)>> key4) = DoKnowledgePoint(examResults[0], info);
                 KeyValuePair<string, List<(string id, double sta, double pass, string stu)>> key = DoSubjectScatter(examResults[0]);
                 KeyValuePair<string, List<(string id, double sta, double pass, string stu)>> key = DoSubjectScatter(examResults[0]);
                 pointPersent.Add(key3);
                 pointPersent.Add(key3);
-                List<(string name, double score)> blockScore = new();
+                List<(string name, double score,double av)> blockScore = new();
                 foreach (var block in knos)
                 foreach (var block in knos)
                 {
                 {
                     double sc = 0;
                     double sc = 0;
+                    double av = 0;
                     foreach (var no in pointPersent)
                     foreach (var no in pointPersent)
                     {
                     {
-                        foreach (var (name, score) in no.Value)
+                        foreach (var (name, score, aver) in no.Value)
                         {
                         {
                             if (null != block.kno && block.kno.Contains(name))
                             if (null != block.kno && block.kno.Contains(name))
                             {
                             {
                                 sc += score;
                                 sc += score;
+                                av += aver;
                             }
                             }
                         }
                         }
                     }
                     }
-                    blockScore.Add((block.name, sc));
+                    blockScore.Add((block.name, sc,av));
                 }
                 }
                 var blk = blockScore.Select(x => new
                 var blk = blockScore.Select(x => new
                 {
                 {
                     x.name,
                     x.name,
                     x.score,
                     x.score,
+                    persent = Math.Round(x.score > 0 ? x.av / x.score : 0,2),
                     dimension = setting.dimensions.Where(s => s.blocks.Contains(x.name)).Select(x => x.dimension)
                     dimension = setting.dimensions.Where(s => s.blocks.Contains(x.name)).Select(x => x.dimension)
                 });
                 });
+                //获取维度得分率
+                var dim = setting.dimensions.Where(q => q.subjectBind.Equals(subjectId.GetString())).Select(x => new { 
+                    x.dimension,
+                    block = Math.Round( x.blocks.Select(c => new {
+                        persent =  Math.Round(
+                             blockScore.Where(z => z.name.Equals(c)).Sum(v => v.score) > 0 ?
+                             blockScore.Where(z => z.name.Equals(c)).Sum(v => v.av) / blockScore.Where(z => z.name.Equals(c)).Sum(v => v.score) : 0,2)
+                    }).Sum( o=> o.persent) / x.blocks.Count,2)
+                });
 
 
                 var kno = key4.Value.Select(x => new 
                 var kno = key4.Value.Select(x => new 
                 {
                 {
@@ -298,7 +310,7 @@ namespace TEAMModelOS.Controllers.Analysis
                     x.Key,
                     x.Key,
                     x.Value
                     x.Value
                 });*/
                 });*/
-                return Ok(new { count = tchList.Count, scount = stus.Count - info.lostStu.Count, max, min, average, excellent, pass, pow, students, cInfo, blk, kno, optCount, gscore });
+                return Ok(new { count = tchList.Count, scount = stus.Count - info.lostStu.Count, max, min, average, excellent, pass, pow, students, cInfo, blk, kno, dim, optCount, gscore });
             }
             }
             catch (Exception e)
             catch (Exception e)
             {
             {
@@ -357,7 +369,7 @@ namespace TEAMModelOS.Controllers.Analysis
             }
             }
         }
         }
         //获取知识点得分率
         //获取知识点得分率
-        private static (KeyValuePair<string, List<string>>, KeyValuePair<string, List<string>>, KeyValuePair<string, List<(string name, double score)>>, KeyValuePair<string, List<(string name, double score)>>) DoKnowledgePoint(ExamResult exam, ExamInfo info)
+        private static (KeyValuePair<string, List<string>>, KeyValuePair<string, List<string>>, KeyValuePair<string, List<(string name, double score,double average)>>, KeyValuePair<string, List<(string name, double score)>>) DoKnowledgePoint(ExamResult exam, ExamInfo info)
         {
         {
 
 
             HashSet<string> knowledge = new HashSet<string>();
             HashSet<string> knowledge = new HashSet<string>();
@@ -422,7 +434,7 @@ namespace TEAMModelOS.Controllers.Analysis
             List<double> knowScore = new List<double>();
             List<double> knowScore = new List<double>();
             //学生得分情况
             //学生得分情况
             List<double> Score = new List<double>();
             List<double> Score = new List<double>();
-            List<(string name, double score)> pointScore = new();
+            List<(string name, double score,double average)> pointScore = new();
             List<(string name, double score)> pointTScore = new();
             List<(string name, double score)> pointTScore = new();
             for (int k = 0; k < knowledgeName.Count; k++)
             for (int k = 0; k < knowledgeName.Count; k++)
             {
             {
@@ -449,12 +461,11 @@ namespace TEAMModelOS.Controllers.Analysis
                     n++;
                     n++;
                 });
                 });
                 Score.Add(scores);
                 Score.Add(scores);
-                //单个知识点的配分
-                pointScore.Add((knowledgeName[k], OnePoint));
+               
 
 
                 //该知识点平均得分
                 //该知识点平均得分
                 double sc = exam.studentIds.Count > 0 ? Math.Round(scores * 1.0 / exam.studentIds.Count, 2) : 0;
                 double sc = exam.studentIds.Count > 0 ? Math.Round(scores * 1.0 / exam.studentIds.Count, 2) : 0;
-                //知识点占比
+                //知识点占比 此处为了让结果更好看 乘以了系数1.5
                 double average = sc * 1.5;
                 double average = sc * 1.5;
                 if (average > OnePoint)
                 if (average > OnePoint)
                 {
                 {
@@ -464,11 +475,13 @@ namespace TEAMModelOS.Controllers.Analysis
                 per.Add(persent.ToString("0.00"));
                 per.Add(persent.ToString("0.00"));
                 //单个知识点所有学生得分率
                 //单个知识点所有学生得分率
                 pointTScore.Add((knowledgeName[k], persent));
                 pointTScore.Add((knowledgeName[k], persent));
+                //单个知识点的配分
+                pointScore.Add((knowledgeName[k], OnePoint,average));
 
 
             }
             }
             KeyValuePair<string, List<string>> key1 = new(exam.subjectId, knowledgeName);
             KeyValuePair<string, List<string>> key1 = new(exam.subjectId, knowledgeName);
             KeyValuePair<string, List<string>> key2 = new(exam.subjectId, per);
             KeyValuePair<string, List<string>> key2 = new(exam.subjectId, per);
-            KeyValuePair<string, List<(string name, double score)>> key3 = new(exam.subjectId, pointScore);
+            KeyValuePair<string, List<(string name, double score,double average)>> key3 = new(exam.subjectId, pointScore);
             KeyValuePair<string, List<(string name, double score)>> key4 = new(exam.subjectId, pointTScore);
             KeyValuePair<string, List<(string name, double score)>> key4 = new(exam.subjectId, pointTScore);
             //KeyValuePair<string, List<double>> key3 = new KeyValuePair<string, List<double>>(exam.subjectId, allPer);          
             //KeyValuePair<string, List<double>> key3 = new KeyValuePair<string, List<double>>(exam.subjectId, allPer);          
             return (key1, key2, key3, key4);
             return (key1, key2, key3, key4);