CrazyIter_Bin 1 year ago
parent
commit
686d769ac5

+ 31 - 25
TEAMModelOS.SDK/Models/Service/KnowledgeService.cs

@@ -10,36 +10,42 @@ namespace TEAMModelOS.SDK.Models.Service
 {
 {
     public  sealed class KnowledgeService
     public  sealed class KnowledgeService
     {
     {
+        public static KnowledgeTreeDto KnowledgeTranslate(Knowledge knowledge)
+        {
+
+            HashSet<string> points = new HashSet<string>();
+            List<Block> blocks = new List<Block>();
+            List<PointTree> tree = KnowledgeService.ListToTree(knowledge.nodes);
+            foreach (var node in tree)
+            {
+                points.Add(node.name);
+                blocks.Add(new Block { name=node.name, source=2, points=  node.children!=null ? node.children.Select(x => x.name).ToList() : new List<string>() });
+                node.allcids= KnowledgeService.GetChildIds(node, points, blocks);
+            }
+            blocks.AddRange(knowledge.blocks);
+            knowledge.points.AddRange(points);
+            KnowledgeTreeDto knowledgeTrees = new KnowledgeTreeDto
+            {
+                id= knowledge.id,
+                owner=knowledge.owner,
+                scope=knowledge.scope,
+                periodId=knowledge.periodId,
+                subjectId=knowledge.subjectId,
+                name=knowledge.name,
+                tree=tree,
+                points=knowledge.points,
+                pointsFromTree=points.ToList(),
+                blocks=blocks,
+            };
+            return knowledgeTrees;
+        }
+
         public static List<KnowledgeTreeDto> KnowledgeTranslate(List<Knowledge> knowledges)
         public static List<KnowledgeTreeDto> KnowledgeTranslate(List<Knowledge> knowledges)
         {
         {
             List<KnowledgeTreeDto> knowledgeTrees = new List<KnowledgeTreeDto>();
             List<KnowledgeTreeDto> knowledgeTrees = new List<KnowledgeTreeDto>();
             foreach (var knowledge in knowledges)
             foreach (var knowledge in knowledges)
             {
             {
-                HashSet<string> points = new HashSet<string>();
-                List<Block> blocks = new List<Block>();
-                List<PointTree> tree = KnowledgeService.ListToTree(knowledge.nodes);
-                foreach (var node in tree)
-                {
-                    points.Add(node.name);
-                    blocks.Add(new Block { name=node.name, source=2, points=  node.children!=null ? node.children.Select(x => x.name).ToList() : new List<string>() });
-                    node.allcids= KnowledgeService.GetChildIds(node, points, blocks);
-                }
-                blocks.AddRange(knowledge.blocks);
-
-                knowledge.points.AddRange(points);
-                knowledgeTrees.Add(new KnowledgeTreeDto
-                {
-                    id= knowledge.id,
-                    owner=knowledge.owner,
-                    scope=knowledge.scope,
-                    periodId=knowledge.periodId,
-                    subjectId=knowledge.subjectId,
-                    name=knowledge.name,
-                    tree=tree,
-                    points=knowledge.points,
-                    pointsFromTree=points.ToList(),
-                    blocks=blocks,
-                });
+                knowledgeTrees.Add(KnowledgeTranslate(knowledge));
             }
             }
             return knowledgeTrees;
             return knowledgeTrees;
         }
         }

+ 102 - 7
TEAMModelOS/Controllers/Both/KnowledgeController.cs

@@ -292,8 +292,8 @@ namespace TEAMModelOS.Controllers.Both
                         //暂不处理
                         //暂不处理
                     }
                     }
                 }
                 }
-                var dtos =  KnowledgeService.KnowledgeTranslate(new List<Knowledge> { knowledge });
-                return Ok(new { knowledgeTree = dtos[0] });
+                var dto =  KnowledgeService.KnowledgeTranslate(knowledge);
+                return Ok(new { knowledgeTree = dto});
             }
             }
             return Ok(new {code =404});
             return Ok(new {code =404});
         }
         }
@@ -424,8 +424,8 @@ namespace TEAMModelOS.Controllers.Both
             }
             }
             if (knowledgeDb!=null)
             if (knowledgeDb!=null)
             {
             {
-                var dtos = KnowledgeService.KnowledgeTranslate(new List<Knowledge> { knowledgeDb });
-                return Ok(new { knowledgeTree = dtos[0] });
+                var dto = KnowledgeService.KnowledgeTranslate(knowledgeDb);
+                return Ok(new { knowledgeTree = dto });
             }
             }
             else {
             else {
                 return BadRequest();
                 return BadRequest();
@@ -441,6 +441,7 @@ namespace TEAMModelOS.Controllers.Both
             if (!json.TryGetProperty("scope", out var _scope)) {
             if (!json.TryGetProperty("scope", out var _scope)) {
                 return BadRequest();
                 return BadRequest();
             }
             }
+            List<KnowledgeCount> datas = new List<KnowledgeCount>();
             if ($"{_scope}".Equals("school", StringComparison.OrdinalIgnoreCase))
             if ($"{_scope}".Equals("school", StringComparison.OrdinalIgnoreCase))
             {
             {
                 if (!json.TryGetProperty("periodId", out var periodId))
                 if (!json.TryGetProperty("periodId", out var periodId))
@@ -460,13 +461,107 @@ namespace TEAMModelOS.Controllers.Both
                         record.subjectId=value.Name;
                         record.subjectId=value.Name;
                         record.owner=school;
                         record.owner=school;
                         record.scope="school";
                         record.scope="school";
+                        datas.Add(record);
+                    }
+                }
+                foreach (var subject in period.subjects) 
+                {
+                    var record = datas.Find(x => x.subjectId.Equals(subject.id));
+                    if (record!=null)
+                    {
+                        record.name= subject.name;
+                    }
+                    else {
+                        string   sql= $" select value c from c where c.subjectId='{subject.id}' and c.periodId='{period.id}'  ";
+                        var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<Knowledge>(sql, $"Knowledge-{school}-{subject.id}");
+                        if (result.list.IsNotEmpty())
+                        {
+                            foreach (var item in result.list) {
+                                var dto = KnowledgeService.KnowledgeTranslate(item);
+                                var count = new { pcount = dto.points.Count(), bcount = dto.blocks.Count(), name = subject.name };
+                                //处理知识点,知识块计数问题
+                                string key = $"KnowledgeNew:Count:{item.owner}-{item.periodId}";
+                                string filed = item.subjectId;
+                                await _azureRedis.GetRedisClient(8).HashSetAsync(key, filed, count.ToJsonString());
+                                 record = new KnowledgeCount
+                                {
+                                     id= item.id,
+                                     periodId=period.id,
+                                     subjectId=subject.id,
+                                     name=subject.name,
+                                     owner=school,
+                                     scope="school",
+                                     pcount=dto.points.Count(),
+                                     bcount=dto.blocks.Count(),
+                                };
+                                datas.Add(record);
+                                break;
+                            }
+                        }
+                        else {
+                            record = new KnowledgeCount
+                            {
+                                periodId=period.id,
+                                subjectId=subject.id,
+                                name=subject.name,
+                                owner=school,
+                                scope="school",
+                                pcount=0,
+                                bcount=0,
+                            };
+                        }
+                        datas.Add(record);
                     }
                     }
                 }
                 }
             }
             }
-            else { 
-                
+            else {
+                var values = await _azureRedis.GetRedisClient(8).HashGetAllAsync($"KnowledgeNew:Count:{userid}");
+                if (values!=null  && values!=default && values.Length>0)
+                {
+                    foreach (var value in values)
+                    {
+
+                        KnowledgeCount record = value.Value.ToString().ToObject<KnowledgeCount>();
+                        record.id=value.Name;
+                        record.owner=userid;
+                        record.scope="private";
+                        datas.Add(record);
+                    }
+                }
+                string sql = string.Empty;
+                if (datas.IsNotEmpty())
+                {
+                    sql= $" select value c from c where c.id not in ({string.Join(",", datas.Select(x => $"'{x.id}'"))}) ";
+                }
+                else {
+                    sql= $" select value c from c ";
+                }
+                var result =  await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<Knowledge>(sql, $"Knowledge-{userid}");
+                if (result.list.IsNotEmpty()) 
+                {
+                    foreach (var item in result.list) 
+                    {
+                       var dto= KnowledgeService.KnowledgeTranslate(item);
+
+                        //处理知识点,知识块计数问题
+                        string key = $"KnowledgeNew:Count:{item.owner}";
+                        string filed = item.id;
+                        var count = new { pcount = dto. points.Count(), bcount = dto.blocks.Count(), name = item.name };
+                        await _azureRedis.GetRedisClient(8).HashSetAsync(key, filed, count.ToJsonString());
+                        KnowledgeCount record = new KnowledgeCount
+                        {
+                            id=item.id,
+                            name=item.name,
+                            owner=userid,
+                            scope="private",
+                            pcount=dto.points.Count(),
+                            bcount=dto.blocks.Count(),
+                        };
+                        datas.Add(record);
+                    }
+                }
             }
             }
-            return Ok();
+            return Ok(new { datas });
         }
         }
     }
     }
 }
 }