فهرست منبع

update 版本号

CrazyIter_Bin 1 سال پیش
والد
کامیت
17eb22091f

+ 3 - 3
TEAMModelBI/TEAMModelBI.csproj

@@ -65,9 +65,9 @@
 		<SpaRoot>ClientApp\</SpaRoot>
 		<DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
 		<UserSecretsId>078b5d89-7d90-4f6a-88fc-7d96025990a8</UserSecretsId>
-		<Version>5.2405.8</Version>
-		<AssemblyVersion>5.2405.8.1</AssemblyVersion>
-		<FileVersion>5.2405.8.1</FileVersion>
+		<Version>5.2405.15</Version>
+		<AssemblyVersion>5.2405.15.1</AssemblyVersion>
+		<FileVersion>5.2405.15.1</FileVersion>
 		<Description>TEAMModelBI(BI)</Description>
 		<PackageReleaseNotes>BI版本说明版本切换标记2022000908</PackageReleaseNotes>
 		<PackageId>TEAMModelBI</PackageId>

+ 3 - 3
TEAMModelOS.FunctionV4/TEAMModelOS.FunctionV4.csproj

@@ -5,9 +5,9 @@
 		<OutputType>Exe</OutputType>
 		<_FunctionsSkipCleanOutput>true</_FunctionsSkipCleanOutput>
 		<SignAssembly>true</SignAssembly>
-		<Version>5.2405.8</Version>
-		<AssemblyVersion>5.2405.8.1</AssemblyVersion>
-		<FileVersion>5.2405.8.1</FileVersion>
+		<Version>5.2405.15</Version>
+		<AssemblyVersion>5.2405.15.1</AssemblyVersion>
+		<FileVersion>5.2405.15.1</FileVersion>
 		<PackageId>TEAMModelOS.FunctionV4</PackageId>
 		<Authors>teammodel</Authors>
 		<Company>醍摩豆(成都)信息技术有限公司</Company>

+ 40 - 2
TEAMModelOS.SDK/Models/Cosmos/School/Knowledge.cs

@@ -74,7 +74,20 @@ namespace TEAMModelOS.SDK.Models
         /// </summary>
         public string subjectId { get; set; }
 
-        public string name { get; set; } 
+        public string name { get; set; }
+
+        /// <summary>
+        /// 知识点
+        /// </summary>
+        public List<string> points { get; set; } = new List<string>();
+        /// <summary>
+        /// 知识点
+        /// </summary>
+        public List<string> pointsFromTree { get; set; } = new List<string>();
+        /// <summary>
+        /// 知识块
+        /// </summary>
+        public List<Block> blocks { get; set; } = new List<Block>();
         /// <summary>
         /// 知识点属性结构的节点
         /// </summary>
@@ -88,10 +101,22 @@ namespace TEAMModelOS.SDK.Models
         public string name { get; set; }
         public string pid { get; set; }
         /// <summary>
+        ///  第三方id
+        /// </summary>
+        public string tid { get; set; }
+        public int level { get; set; }
+        /// <summary>
         /// 知识点属性结构的子节点
         /// </summary>
         public List<PointTree> children { get; set; }= new List<PointTree>();
-        public List<string> cids { get; set; } = new List<string>();
+        /// <summary>
+        /// 直接子节点
+        /// </summary>
+        public List<string> subcids { get; set; } = new List<string>();
+        /// <summary>
+        /// 所有子节点
+        /// </summary>
+        public List<string> allcids { get; set; } = new List<string>();
         /// <summary>
         /// 使用次数
         /// </summary>
@@ -154,4 +179,17 @@ namespace TEAMModelOS.SDK.Models
         ]
     }
     */
+
+    public class KnowledgeCount
+    {
+        public string owner { get; set; }
+        public string name { get; set; }
+        public string scope {  get; set; }
+        public int pcount { get; set; }
+        public int bcount { get; set; }
+        public string id { get; set; }
+        public string periodId { get; set; }
+        public string subjectId { get; set; }
+
+    }
 }

+ 192 - 6
TEAMModelOS.SDK/Models/Service/KnowledgeService.cs

@@ -10,7 +10,41 @@ namespace TEAMModelOS.SDK.Models.Service
 {
     public  sealed class KnowledgeService
     {
-        public static List<PointNode> TreeToList(List<PointTree> trees, List<PointNode> nodes/*, List<Block> blocks,HashSet<string> points*/)
+        public static List<KnowledgeTreeDto> KnowledgeTranslate(List<Knowledge> knowledges)
+        {
+            List<KnowledgeTreeDto> knowledgeTrees = new List<KnowledgeTreeDto>();
+            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,
+                });
+            }
+            return knowledgeTrees;
+        }
+
+        public static List<PointNode> TreeToList(List<PointTree> trees, List<PointNode> nodes, List<Block> blocks,HashSet<string> points)
         {
             List<PointNode> list = new List<PointNode>();
             trees.ForEach(x => {
@@ -29,8 +63,8 @@ namespace TEAMModelOS.SDK.Models.Service
                     link = x.link,
                 };
                 list.Add(node);
-                //blocks.Add(new Block { name= x.name,points=x.nodes.Select(x=>x.name).ToList() });
-                //points.Add(x.name);
+                blocks.Add(new Block { name= x.name, points=x.children.Select(x => x.name).ToList() });
+                points.Add(x.name);
             });
            
             nodes.AddRange(list);
@@ -39,7 +73,7 @@ namespace TEAMModelOS.SDK.Models.Service
             {
                 if (null != tree.children && tree.children.Count > 0)
                 {
-                    TreeToList(tree.children, nodes/*, blocks, points*/);
+                    TreeToList(tree.children, nodes, blocks, points);
                 }
             }
             return nodes;
@@ -74,7 +108,7 @@ namespace TEAMModelOS.SDK.Models.Service
             return trees;
         }
 
-        static  public List<string> GetChildIds(PointTree node)
+        static  public List<string> GetChildIds(PointTree node,HashSet<string> points, List<Block> blocks)
         {
             List<string> childIds = new List<string>();
             if (node.children != null)
@@ -82,12 +116,164 @@ namespace TEAMModelOS.SDK.Models.Service
                 foreach (PointTree child in node.children)
                 {
                     childIds.Add(child.id);
+                    var allcids = GetChildIds(child, points, blocks);
+                    childIds.AddRange(allcids);
+                    child.allcids=allcids.Count>100 ? child.children.Select(x => x.id).ToList() : allcids;
+                    points.Add(child.name);
+                    blocks.Add(new Block { name=child.name, source=2, points=  child.children!=null ? child.children.Select(x => x.name).ToList() : new List<string>() });
+                }
+            }
+            return childIds;
+        }
+
+
+        public static PointTree BuildTree(List<MoofenKnowledgePointDto> pointDtos)
+        {
+            var root = new PointTree();
+            var stack = new Stack<PointTree>();
+            stack.Push(root);
+            foreach (var pointDto in pointDtos)
+            {
+                var node = new PointTree
+                {
+                    id = pointDto.id,
+                    tid = pointDto.id,
+                    name = pointDto.name,
+                    level = pointDto.level
+                };
+                while (stack.Count > 0 && stack.Peek().level >= node.level)
+                {
+                    stack.Pop();
+                }
+                if (stack.Count > 0)
+                {
+                    stack.Peek().children.Add(node);
+                }
+                stack.Push(node);
+            }
+
+            if (root.level==0  && root.children.IsNotEmpty())
+            {
+
+                foreach (var node in root.children)
+                {
+                    node.subcids=node.children.Select(x => x.tid).ToList();
+                    var cids = GetChildIds(node);
+                    node.allcids=cids.Count>100 ? new List<string>() : cids;
+                }
+            }
+            return root;
+        }
+
+        static List<string> GetChildIds(PointTree node)
+        {
+            List<string> childIds = new List<string>();
+            if (node.children != null)
+            {
+                foreach (PointTree child in node.children)
+                {
+                    childIds.Add(child.tid);
                     var cids = GetChildIds(child);
                     childIds.AddRange(cids);
-                    child.cids=cids.Count>100 ? child.children.Select(x => x.id).ToList() : cids;
+                    child.allcids=cids.Count>100 ? new List<string>() : cids;
+                    child.subcids=child.children.Select(x => x.tid).ToList();
                 }
             }
             return childIds;
         }
     }
+    //public class TreeNode
+    //{
+
+
+    //    public string name { get; set; }
+    //    public string id { get; set; }
+    //    /// <summary>
+    //    ///  第三方id
+    //    /// </summary>
+    //    public string tid { get; set; }
+    //    public int level { get; set; }
+    //    /// <summary>
+    //    /// 直接子节点
+    //    /// </summary>
+    //    public List<string> subcids { get; set; } = new List<string>();
+    //    /// <summary>
+    //    /// 所有子节点
+    //    /// </summary>
+    //    public List<string> allcids { get; set; } = new List<string>();
+    //    public List<PointTree> children { get; set; } = new List<PointTree>();
+    //}
+
+    public class MoofenKnowledgePointDto
+    {
+        public string id { get; set; }
+        public string name { get; set; }
+        public int level { get; set; }
+        public string kp1 { get; set; }
+        public string kp2 { get; set; }
+        public string kp3 { get; set; }
+        public string kp4 { get; set; }
+
+
+
+    }
+    public class MoofenQuestion
+    {
+        public int difficulty { get; set; }
+        public string questionCode { get; set; }
+        public MoofenScope scope { get; set; }
+        public List<MoofenOption> options { get; set; }
+        public MoofenType @type { get; set; }
+        public string trunk { get; set; }
+        public List<MoofenQuestion> questions { get; set; }
+        /// <summary>
+        /// 填空题的答案
+        /// </summary>
+        public List<MoofenFill> items { get; set; }
+        /// <summary>
+        /// 问答题的答案
+        /// </summary>
+        public string content { get; set; }
+        public List<MoofenKnowledgePoint> kps { get; set; }
+    }
+    public class MoofenFill
+    {
+        public string content { get; set; }
+    }
+
+    public class MoofenScope
+    {
+        public MoofenGrade grade { get; set; }
+    }
+
+    public class MoofenGrade
+    {
+        public string code { get; set; }
+        public string name { get; set; }
+    }
+
+    public class MoofenOption
+    {
+        public bool correct { get; set; }
+        public string label { get; set; }
+        public string content { get; set; }
+    }
+
+    public class MoofenType
+    {
+        public string code { get; set; }
+        public string name { get; set; }
+    }
+
+    public class MoofenKnowledgePoint
+    {
+        public string kpCode { get; set; }
+        public string kpId { get; set; }
+        public string kpSetId { get; set; }
+        public string kpName { get; set; }
+        public string subCode { get; set; }
+        public int kpLevel { get; set; }
+        public string id { get; set; }
+        public string parKpId { get; set; }
+    }
 }

+ 3 - 3
TEAMModelOS.SDK/TEAMModelOS.SDK.csproj

@@ -2,9 +2,9 @@
 
 	<PropertyGroup>
 		<TargetFramework>net6.0</TargetFramework>
-		<Version>5.2405.8</Version>
-		<AssemblyVersion>5.2405.8.1</AssemblyVersion>
-		<FileVersion>5.2405.8.1</FileVersion>
+		<Version>5.2405.15</Version>
+		<AssemblyVersion>5.2405.15.1</AssemblyVersion>
+		<FileVersion>5.2405.15.1</FileVersion>
 		<PackageReleaseNotes>发版</PackageReleaseNotes>
 	</PropertyGroup>
 

+ 198 - 55
TEAMModelOS/Controllers/Both/KnowledgeController.cs

@@ -20,6 +20,9 @@ using HTEXLib.COMM.Helpers;
 using static SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.CreateApplyForSubjectApplymentRequest.Types;
 using OpenXmlPowerTools;
 using static Microsoft.Extensions.Logging.EventSource.LoggingEventSource;
+using OfficeOpenXml;
+using TEAMModelOS.Controllers.Third.Moofen;
+using DocumentFormat.OpenXml.Drawing.Charts;
 namespace TEAMModelOS.Controllers.Both
 {
     [ProducesResponseType(StatusCodes.Status200OK)]
@@ -44,7 +47,99 @@ namespace TEAMModelOS.Controllers.Both
             _azureRedis = azureRedis;
             _httpTrigger = httpTrigger;
         }
+        [ProducesDefaultResponseType]
+        [HttpPost("item-import")]
+        [Authorize(Roles = "IES")]
+        [AuthToken(Roles = "admin", Permissions = "knowledge-upd")]
+        public IActionResult ItemImport([FromForm] IFormFile file)
+        {
+            var tokenAuth = HttpContext.GetAuthTokenInfo();
+            ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;
+            List<dynamic> period_subject = new List<dynamic>();
+            List<MoofenKnowledgePointDto> pointDtos = new List<MoofenKnowledgePointDto>();
+            List<string> titles = new List<string>();
+            List<List<string>> datas = new List<List<string>>();
+            using (ExcelPackage package = new ExcelPackage(file.OpenReadStream()))
+            {
+                ExcelWorksheets sheets = package.Workbook.Worksheets;
+                var sheet = sheets.FirstOrDefault();
+                if (sheet!= null)
+                {
 
+                    var rows = sheet.Dimension.Rows;
+                    var columns = sheet.Dimension.Columns;
+                    for (int r = 1; r <= rows; r++)
+                    {
+                        List<string> data = new List<string>();
+                        for (int c = 1; c <= columns; c++)
+                        {
+                            var value = sheet.GetValue(r, c);
+                            if (r == 1)
+                            {
+                                if (!string.IsNullOrWhiteSpace($"{value}"))
+                                {
+                                    titles.Add($"{value}");
+                                }
+                                else
+                                {
+                                    break;
+                                }
+                            }
+                            else
+                            {
+                                if (c > titles.Count)
+                                {
+                                    break;
+                                }
+                                else
+                                {
+                                    data.Add($"{value}");
+                                }
+                            }
+                        }
+                        if (data.Any())
+                        {
+                            datas.Add(data);
+                        }
+                    }
+                }
+            }
+            int index = 1;
+            foreach (var data in datas)
+            {
+                MoofenKnowledgePointDto knowledgePointDto = new MoofenKnowledgePointDto { kp1 = data[0], kp2= data[1], kp3 = data[2], kp4=  data[3], id=$"{index}" };
+                if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp1))
+                {
+                    knowledgePointDto.level=1;
+                    knowledgePointDto.name=knowledgePointDto.kp1;
+                }
+                if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp2))
+                {
+                    knowledgePointDto.level=2;
+                    knowledgePointDto.name=knowledgePointDto.kp2;
+                }
+                if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp3))
+                {
+                    knowledgePointDto.level=3;
+                    knowledgePointDto.name=knowledgePointDto.kp3;
+                }
+                if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp4))
+                {
+                    knowledgePointDto.level=4;
+                    knowledgePointDto.name=knowledgePointDto.kp4;
+                }
+                pointDtos.Add(knowledgePointDto);
+                index++;
+            } // 构建树形结构
+            var tree = KnowledgeService.BuildTree(pointDtos);
+            tree.name=$"{file.FileName}";
+            KnowledgeTreeDto knowledge = new KnowledgeTreeDto()
+            {
+                name=tree.name,
+                tree= tree.children,
+            };
+            return Ok(new { knowledgeTree =knowledge});
+        }
 
         [ProducesDefaultResponseType]
         [HttpPost("read-knowledge")]
@@ -114,21 +209,10 @@ namespace TEAMModelOS.Controllers.Both
                     knowledges.Add(item);
                 }
             }
-
-            return Ok(new {  });
+            return Ok(new { knowledgeTrees = KnowledgeService. KnowledgeTranslate(knowledges) });
         }
 
-        private void KnowledgeTranslate(List<Knowledge> knowledges) { 
-        
-            foreach (var knowledge in knowledges)
-            {
-                List<PointTree> tree =  KnowledgeService.ListToTree(knowledge.nodes);
-                foreach (var point in tree)
-                {
-                    point.cids= KnowledgeService.GetChildIds(point);
-                }
-            }
-        }
+      
         [ProducesDefaultResponseType]
         [HttpPost("modify-knowledge-node")]
 #if !DEBUG
@@ -197,26 +281,24 @@ namespace TEAMModelOS.Controllers.Both
                 if (change) {
                     await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, tbname).UpsertItemAsync(knowledge, new PartitionKey(code));
                 }
-            }
-            if (updateData.IsNotEmpty()) 
-            {
-                try
+                if (updateData.IsNotEmpty() &&updateRel==1)
                 {
-                    _ = _httpTrigger.RequestHttpTrigger(new { old_new = old_new, owner = $"{owner}", scope=$"{scope}", subjectId=$"{subjectId}" }, _option.Location, "knowledge-change");
-                }
-                catch (Exception ex)
-                {
-                    //暂不处理
+                    try
+                    {
+                        _ = _httpTrigger.RequestHttpTrigger(new { old_new = old_new, owner = $"{owner}", scope = $"{scope}", subjectId = $"{subjectId}" }, _option.Location, "knowledge-change");
+                    }
+                    catch (Exception ex)
+                    {
+                        //暂不处理
+                    }
                 }
+                var dtos =  KnowledgeService.KnowledgeTranslate(new List<Knowledge> { knowledge });
+                return Ok(new { knowledgeTree = dtos[0] });
             }
-            return Ok(json);
+            return Ok(new {code =404});
         }
 
 
-
-   
-
-
         [ProducesDefaultResponseType]
         [HttpPost("upsert-knowledge")]
 #if !DEBUG
@@ -237,10 +319,11 @@ namespace TEAMModelOS.Controllers.Both
 
             string code = string.Empty;
             Knowledge old =  null;
-            //var blocks = new List<Block>(); 
-            //var points = new HashSet<string>();
+            Knowledge knowledgeDb=null;
+            var blocks = new List<Block>(); 
+            var points = new HashSet<string>();
             var nodes = new List<PointNode>();
-            KnowledgeService.TreeToList(knowledge.tree, nodes);
+            KnowledgeService.TreeToList(knowledge.tree, nodes, blocks, points);
             if (knowledge.scope.Equals("school"))
             {
                 if (!string.IsNullOrWhiteSpace(knowledge.subjectId)  && !string.IsNullOrWhiteSpace(knowledge.periodId))
@@ -256,29 +339,32 @@ namespace TEAMModelOS.Controllers.Both
                     if (old!=null)
                     {
                         knowledge.id = old.id;
-                        //foreach (var p in old.points) { 
-                        //    points.Add(p);
-                        //}
-                        //foreach (var b in old.blocks) {
-                        //    var bks=  blocks.FindAll(x => x.name.Equals(b.name));
-                        //    if (bks.IsNotEmpty())
-                        //    {
-                        //        foreach (var bk in bks)
-                        //        {
-                        //            bk.points.AddRange(b.points);
-                        //            bk.points= bk.points.Distinct().ToList();
-                        //        }
-                        //    }
-                        //    else {
-                        //        blocks.Add(b);
-                        //    }
-                        //}
+                        foreach (var p in old.points)
+                        {
+                            points.Add(p);
+                        }
+                        foreach (var b in old.blocks)
+                        {
+                            var bks = blocks.FindAll(x => x.name.Equals(b.name));
+                            if (bks.IsNotEmpty())
+                            {
+                                foreach (var bk in bks)
+                                {
+                                    bk.points.AddRange(b.points);
+                                    bk.points= bk.points.Distinct().ToList();
+                                }
+                            }
+                            else
+                            {
+                                blocks.Add(b);
+                            }
+                        }
                     }
                     else
                     {
                         knowledge.id = Guid.NewGuid().ToString();
                     }
-                    Knowledge knowledgeDb = new Knowledge
+                    knowledgeDb = new Knowledge
                     {
                         id=knowledge.id,
                         code=code,
@@ -288,15 +374,23 @@ namespace TEAMModelOS.Controllers.Both
                         scope=knowledge.scope,
                         //blocks=blocks,
                         pk="Knowledge",
-                       // points=points.ToList(),
+                        // points=points.ToList(),
                         nodes=nodes,
                         owner=knowledge.owner,
                     };
-                    return Ok(knowledgeDb);
-                    // await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS,Constant.School).UpsertItemAsync(knowledgeDb,new PartitionKey(code));
+                    var count = new { pcount = points.Count, bcount = blocks.Count,name =knowledge.name };
+                    //处理知识点,知识块计数问题
+                    string key = $"KnowledgeNew:Count:{knowledge.owner}-{knowledge.periodId}";
+                    string filed = knowledge.subjectId;
+                    await _azureRedis.GetRedisClient(8).HashSetAsync(key, filed, count.ToJsonString());
+                    await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).UpsertItemAsync(knowledgeDb, new PartitionKey(code));
+                }
+                else {
+                    return BadRequest();
                 }
             }
-            else {
+            else 
+            {
                 code=$"Knowledge-{knowledge.owner}";
                 if (!string.IsNullOrWhiteSpace(knowledge.id)) 
                 {
@@ -306,7 +400,7 @@ namespace TEAMModelOS.Controllers.Both
                         knowledge.id = Guid.NewGuid().ToString();
                     }
                 }
-                Knowledge knowledgeDb = new Knowledge
+                  knowledgeDb = new Knowledge
                 {
                     id=knowledge.id,
                     code=code,
@@ -320,8 +414,57 @@ namespace TEAMModelOS.Controllers.Both
                     nodes=nodes,
                     owner=knowledge.owner,
                 };
-                return Ok(knowledgeDb);
-             //   await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(knowledgeDb, new PartitionKey(code));
+                //处理知识点,知识块计数问题
+                string key = $"KnowledgeNew:Count:{knowledge.owner}";
+                string filed = knowledge.id;
+                var count = new { pcount = points.Count, bcount = blocks.Count, name = knowledge.name };
+                await _azureRedis.GetRedisClient(8).HashSetAsync(key, filed, count.ToJsonString());
+                await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(knowledgeDb, new PartitionKey(code));
+               
+            }
+            if (knowledgeDb!=null)
+            {
+                var dtos = KnowledgeService.KnowledgeTranslate(new List<Knowledge> { knowledgeDb });
+                return Ok(new { knowledgeTree = dtos[0] });
+            }
+            else {
+                return BadRequest();
+            }
+        }
+        [ProducesDefaultResponseType]
+        [HttpPost("find-count")]
+        [Authorize(Roles = "IES")]
+        [AuthToken(Roles = "teacher,admin,student", Permissions = "knowledge-read,knowledge-upd")]
+        public async Task<IActionResult> FindCount(JsonElement json)
+        {
+            var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
+            if (!json.TryGetProperty("scope", out var _scope)) {
+                return BadRequest();
+            }
+            if ($"{_scope}".Equals("school", StringComparison.OrdinalIgnoreCase))
+            {
+                if (!json.TryGetProperty("periodId", out var periodId))
+                {
+                    return BadRequest();
+                }
+                School schoolBase = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(school, new PartitionKey("Base"));
+                var period = schoolBase.period.Find(x => x.id.Equals($"{periodId}", StringComparison.OrdinalIgnoreCase));
+                var values = await _azureRedis.GetRedisClient(8).HashGetAllAsync($"KnowledgeNew:Count:{period.id}");
+                if (values!=null  && values!=default && values.Length>0)
+                {
+                    foreach (var value in values)
+                    {
+
+                        KnowledgeCount record = value.Value.ToString().ToObject<KnowledgeCount>();
+                        record.periodId=period.id;
+                        record.subjectId=value.Name;
+                        record.owner=school;
+                        record.scope="school";
+                    }
+                }
+            }
+            else { 
+                
             }
             return Ok();
         }

+ 1 - 1
TEAMModelOS/Controllers/Third/IRS/ThirdIRSController.cs

@@ -255,7 +255,7 @@ namespace TEAMModelOS.Controllers
                                     sender = stu.stuid,
                                     timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
                                     waitReturn = false,
-                                    payload = new { irsno = "", answer = ans }
+                                    payload = new { irsno = "", answer = ans ,taskId= lessonTask.id}
                                 });
                                 await hub.Clients.User(stu.userid).SendCoreAsync("onMessage", new[]{
                                     new 

+ 4 - 147
TEAMModelOS/Controllers/Third/Moofen/MoofenController.cs

@@ -34,6 +34,7 @@ using System.IO.Packaging;
 using Microsoft.Azure.Amqp.Framing;
 using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing;
 using DocumentFormat.OpenXml.Office2010.Excel;
+using TEAMModelOS.SDK.Models.Service;
 namespace TEAMModelOS.Controllers.Third.Moofen
 {
     [ProducesResponseType(StatusCodes.Status200OK)]
@@ -147,7 +148,7 @@ namespace TEAMModelOS.Controllers.Third.Moofen
                     pointDtos.Add( knowledgePointDto );
                 }
                 // 构建树形结构
-                var tree = BuildTree(pointDtos);
+                var tree =KnowledgeService. BuildTree(pointDtos);
                 tree.name=$"{period}-{subject}";
                 var json= tree.children.ToJsonString();
                 string subjectId = string.Empty;
@@ -194,59 +195,7 @@ namespace TEAMModelOS.Controllers.Third.Moofen
             return Ok(new { period_subject });
         }
 
-        private   TreeNode BuildTree(List<MoofenKnowledgePointDto> pointDtos)
-        {
-            var root = new TreeNode();
-            var stack = new Stack<TreeNode>();
-            stack.Push(root);
-            foreach (var pointDto in pointDtos)
-            {
-                var node = new TreeNode
-                {
-                    id = pointDto.id,
-                    tid = pointDto.id,
-                    name = pointDto.name,
-                    level = pointDto.level
-                };
-                while (stack.Count > 0 && stack.Peek().level >= node.level)
-                {
-                    stack.Pop();
-                }
-                if (stack.Count > 0)
-                {
-                    stack.Peek().children.Add(node);
-                }
-                stack.Push(node);
-            }
-
-            if (root.level==0  && root.children.IsNotEmpty()) {
-               
-                foreach (var node in root.children)
-                {
-                    node.subcids=node.children.Select(x => x.tid).ToList();
-                    var cids = GetChildIds(node);
-                    node.allcids=cids.Count>100 ? new List<string>():cids ;
-                }
-            }
-            return root;
-        }
-
-        static List<string> GetChildIds(TreeNode node)
-        {
-            List<string> childIds = new List<string>();
-            if (node.children != null)
-            {
-                foreach (TreeNode child in node.children)
-                {
-                    childIds.Add(child.tid);
-                    var cids = GetChildIds(child);
-                    childIds.AddRange(cids);
-                    child.allcids=cids.Count>100 ? new List<string>() : cids;
-                    child.subcids=child.children.Select(x => x.tid).ToList();
-                }
-            }
-            return childIds;
-        }
+       
 
         [HttpPost("moofen/question")]
         [AuthToken(Roles = "teacher,admin")]
@@ -612,97 +561,5 @@ namespace TEAMModelOS.Controllers.Third.Moofen
             return Ok(new { code = 400 });
         }
     }
-    public class TreeNode
-    {
-       
-
-        public string name {  get; set; }
-        public string id { get; set; }
-        /// <summary>
-        ///  第三方id
-        /// </summary>
-        public string tid { get; set; }
-        public int level {  get; set; }
-        /// <summary>
-        /// 直接子节点
-        /// </summary>
-        public List<string> subcids { get; set; } = new List<string>();
-        /// <summary>
-        /// 所有子节点
-        /// </summary>
-        public List<string> allcids { get; set; }= new List<string>();
-        public List<TreeNode> children { get; set; } = new List<TreeNode>();
-    }
-
-    public class MoofenKnowledgePointDto
-    {
-        public string id { get; set; }
-        public string name { get; set; }
-        public int level { get; set; }
-        public string kp1 { get; set; }
-        public string kp2 { get; set; }
-        public string kp3 { get; set; }
-        public string kp4 { get; set; }
-      
-     
-      
-    }
-    public class MoofenQuestion
-    {
-        public int difficulty { get; set; }
-        public string questionCode { get; set; }
-        public MoofenScope scope { get; set; }
-        public List<MoofenOption> options { get; set; }
-        public MoofenType @type { get; set; }
-        public string trunk { get; set; }
-        public List<MoofenQuestion> questions { get; set; }
-        /// <summary>
-        /// 填空题的答案
-        /// </summary>
-        public List<MoofenFill> items { get; set; }
-        /// <summary>
-        /// 问答题的答案
-        /// </summary>
-        public string content { get; set; }
-        public List<MoofenKnowledgePoint> kps { get; set; }
-    }
-    public class MoofenFill
-    {
-        public string content { get; set; }
-    }
-
-    public class MoofenScope { 
-        public MoofenGrade grade { get; set; }  
-    }
-
-    public class MoofenGrade 
-    {
-        public string code { get; set; }
-        public string name { get; set; }
-    }
-    
-    public class MoofenOption
-    {
-        public bool correct { get; set; }
-        public string label { get; set; }
-        public string content { get; set; }
-    }
-
-    public class MoofenType
-    {
-        public string code { get; set; }
-        public string name { get; set; }
-    }
-
-    public class MoofenKnowledgePoint
-    {
-        public string kpCode { get; set; }
-        public string kpId { get; set; }
-        public string kpSetId { get; set; }
-        public string kpName { get; set; }
-        public string subCode { get; set; }
-        public int kpLevel { get; set; }
-        public string id { get; set; }
-        public string parKpId { get; set; }
-    }
+   
 }

+ 28 - 5
TEAMModelOS/Controllers/XTest/TestController.cs

@@ -107,7 +107,7 @@ namespace TEAMModelOS.Controllers
             _azureService=azureService;
         }
 
-
+        //
 
 
         /// <summary>
@@ -120,11 +120,34 @@ namespace TEAMModelOS.Controllers
         [RequestSizeLimit(102_400_000_00)] //最大10000m左右
         public async Task<IActionResult> RemoveStuCourse(JsonElement json)
         {
-            _coreAPIHttpService.PushNotify(new List<IdNameCode> { new IdNameCode { id="1535418750",name="醍摩豆研发", nickname="醍摩豆研发" } }, $"invite_school", Constant.NotifyType_IES5_Management,
-                                 new Dictionary<string, object> {  { "schoolName", "醍摩豆学校" }, { "schoolId", $"hbcn" } }, _option.Location, _configuration, _dingDing, _environment.ContentRootPath);
+            var values2 = await _azureRedis.GetRedisClient(8).HashGetAllAsync($"Knowledge:Count:hygjqb-b9ec7e9e-da26-46f5-ad94-8d5d0df09f721");
+            var values1 = await _azureRedis.GetRedisClient(8).HashGetAllAsync($"Knowledge:Count:hygjqb-b9ec7e9e-da26-46f5-ad94-8d5d0df09f72");
+            if (values1!=null  && values1!=default && values1.Length>0)
+            {
+               foreach (var value in values1)
+                {
+                    JsonElement record = value.Value.ToString().ToObject<JsonElement>();
+                    if (record.TryGetProperty("pcount", out JsonElement pcout))
+                    {
+                        if (int.TryParse($"{pcout}", out int countP))
+                        {
+                            // countPoint = countPoint + countP;
+                        }
+                    }
+                    if (record.TryGetProperty("bcount", out JsonElement bcout))
+                    {
+                        if (int.TryParse($"{bcout}", out int countB))
+                        {
+                            // countBlock = countBlock + countB;
+                        }
+                    }
+                    var name = value.Name;
+                    var value2 = value.Value;
+                    var json1 = value.Value.ToString();
+                    var json2 = value.ToString();
 
-            //Accumulate accumulate= json.ToObject<Accumulate>();
-            //await SystemService.RecordAccumulateData(_azureRedis,_dingDing, accumulate);
+                }
+            }
             return Ok();
         }
 

+ 4 - 4
TEAMModelOS/TEAMModelOS.csproj

@@ -79,11 +79,11 @@
 		<SpaRoot>ClientApp\</SpaRoot>
 		<DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
 		<UserSecretsId>078b5d89-7d90-4f6a-88fc-7d96025990a8</UserSecretsId>
-		<Version>5.2405.8</Version>
-		<AssemblyVersion>5.2405.8.1</AssemblyVersion>
-		<FileVersion>5.2405.8.1</FileVersion>
+		<Version>5.2405.15</Version>
+		<AssemblyVersion>5.2405.15.1</AssemblyVersion>
+		<FileVersion>5.2405.15.1</FileVersion>
 		<Description>TEAMModelOS(IES5)</Description>
-		<PackageReleaseNotes>IES版本说明版本切换标记5.2405.8.1</PackageReleaseNotes>
+		<PackageReleaseNotes>IES版本说明版本切换标记5.2405.15.1</PackageReleaseNotes>
 		<PackageId>TEAMModelOS</PackageId>
 		<Authors>teammodel</Authors>
 		<Company>醍摩豆(成都)信息技术有限公司</Company>

+ 1 - 1
TEAMModelOS/appsettings.Development.json

@@ -18,7 +18,7 @@
     "IdTokenSalt": "8263692E2213497BB55E74792B7900B4",
     "HttpTrigger": "https://teammodelosfunction-test.chinacloudsites.cn/api/",
     //"HttpTrigger": "http://localhost:7071/api/"
-    "Version": "5.2405.8.1"
+    "Version": "5.2405.15.1"
   },
   "Azure": {
 

+ 1 - 1
TEAMModelOS/appsettings.json

@@ -18,7 +18,7 @@
     "Exp": 86400,
     "IdTokenSalt": "8263692E2213497BB55E74792B7900B4",
     "HttpTrigger": "https://teammodelosfunction.chinacloudsites.cn/api/",
-    "Version": "5.2405.8.1"
+    "Version": "5.2405.15.1"
   },
   "Azure": {
     "Storage": {