CrazyIter_Bin há 1 ano atrás
pai
commit
c59f2ea291

+ 3 - 3
TEAMModelOS.SDK/Models/Cosmos/School/Knowledge.cs

@@ -90,7 +90,7 @@ namespace TEAMModelOS.SDK.Models
         /// <summary>
         /// <summary>
         /// 知识点属性结构的子节点
         /// 知识点属性结构的子节点
         /// </summary>
         /// </summary>
-        public List<PointTree> nodes { get; set; }= new List<PointTree>();
+        public List<PointTree> children { get; set; }= new List<PointTree>();
         public List<string> cids { get; set; } = new List<string>();
         public List<string> cids { get; set; } = new List<string>();
         /// <summary>
         /// <summary>
         /// 使用次数
         /// 使用次数
@@ -107,9 +107,9 @@ namespace TEAMModelOS.SDK.Models
         public string _old { get; set; }
         public string _old { get; set; }
 
 
         public string _new { get; set; }
         public string _new { get; set; }
-        public string _oldId { get; set; }
+       
 
 
-        public string _newId { get; set; }
+        public string _id { get; set; }
     }
     }
     public class Block { 
     public class Block { 
         public string name { get; set; }
         public string name { get; set; }

+ 21 - 5
TEAMModelOS.SDK/Models/Service/KnowledgeService.cs

@@ -15,9 +15,9 @@ namespace TEAMModelOS.SDK.Models.Service
             List<PointNode> list = new List<PointNode>();
             List<PointNode> list = new List<PointNode>();
             trees.ForEach(x => {
             trees.ForEach(x => {
                 List<string> cids = new List<string>();
                 List<string> cids = new List<string>();
-                if (x.nodes.IsNotEmpty())
+                if (x.children.IsNotEmpty())
                 {
                 {
-                    x.nodes.ForEach(y => { cids.Add(y.id); /*points.Add(y.name); */y.pid=x.id; });
+                    x.children.ForEach(y => { cids.Add(y.id); /*points.Add(y.name); */y.pid=x.id; });
                 }
                 }
                 var node = new PointNode
                 var node = new PointNode
                 {
                 {
@@ -37,9 +37,9 @@ namespace TEAMModelOS.SDK.Models.Service
 
 
             foreach (PointTree tree in trees)
             foreach (PointTree tree in trees)
             {
             {
-                if (null != tree.nodes && tree.nodes.Count > 0)
+                if (null != tree.children && tree.children.Count > 0)
                 {
                 {
-                    TreeToList(tree.nodes, nodes/*, blocks, points*/);
+                    TreeToList(tree.children, nodes/*, blocks, points*/);
                 }
                 }
             }
             }
             return nodes;
             return nodes;
@@ -64,7 +64,7 @@ namespace TEAMModelOS.SDK.Models.Service
                 bool flag = dict.TryGetValue(node.pid, out PointTree syllabus);
                 bool flag = dict.TryGetValue(node.pid, out PointTree syllabus);
                 if (flag && syllabus != null)
                 if (flag && syllabus != null)
                 {
                 {
-                    syllabus.nodes.Add(node);
+                    syllabus.children.Add(node);
                 }
                 }
                 else
                 else
                 {
                 {
@@ -73,5 +73,21 @@ namespace TEAMModelOS.SDK.Models.Service
             }
             }
             return trees;
             return trees;
         }
         }
+
+        static  public List<string> GetChildIds(PointTree node)
+        {
+            List<string> childIds = new List<string>();
+            if (node.children != null)
+            {
+                foreach (PointTree child in node.children)
+                {
+                    childIds.Add(child.id);
+                    var cids = GetChildIds(child);
+                    childIds.AddRange(cids);
+                    child.cids=cids.Count>100 ? child.children.Select(x => x.id).ToList() : cids;
+                }
+            }
+            return childIds;
+        }
     }
     }
 }
 }

+ 175 - 3
TEAMModelOS/Controllers/Both/KnowledgeController.cs

@@ -17,6 +17,9 @@ using Azure.Cosmos;
 using TEAMModelOS.SDK.Models.Service;
 using TEAMModelOS.SDK.Models.Service;
 using System.Linq;
 using System.Linq;
 using HTEXLib.COMM.Helpers;
 using HTEXLib.COMM.Helpers;
+using static SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.CreateApplyForSubjectApplymentRequest.Types;
+using OpenXmlPowerTools;
+using static Microsoft.Extensions.Logging.EventSource.LoggingEventSource;
 namespace TEAMModelOS.Controllers.Both
 namespace TEAMModelOS.Controllers.Both
 {
 {
     [ProducesResponseType(StatusCodes.Status200OK)]
     [ProducesResponseType(StatusCodes.Status200OK)]
@@ -41,21 +44,190 @@ namespace TEAMModelOS.Controllers.Both
             _azureRedis = azureRedis;
             _azureRedis = azureRedis;
             _httpTrigger = httpTrigger;
             _httpTrigger = httpTrigger;
         }
         }
+
+
         [ProducesDefaultResponseType]
         [ProducesDefaultResponseType]
-        [HttpPost("upsert-knowledge")]
+        [HttpPost("read-knowledge")]
+#if !DEBUG
+
+        [Authorize(Roles = "IES")]
+       [AuthToken(Roles = "teacher,admin,student", Permissions = "knowledge-read,knowledge-upd")]
+#endif 
+        public async Task<IActionResult> ReadKnowledge(JsonElement json)
+        {
+            var client = _azureCosmos.GetCosmosClient();
+            var tokenAuth =  HttpContext.GetAuthTokenInfo();
+            string scope = "school";
+            if (json.TryGetProperty("scope", out JsonElement _scope)) 
+            {
+                scope=$"{scope}";
+            }
+            List<Knowledge> knowledges = new List<Knowledge>();
+            string code = string.Empty;
+            List<string> keywords = new List<string>();
+            if (scope.Equals("school"))
+            {
+                json.TryGetProperty("periodId", out JsonElement periodId);
+                if (!json.TryGetProperty("subjectId", out JsonElement subjectId)) return BadRequest();
+                string school=string.Empty;
+                if (string.IsNullOrWhiteSpace(tokenAuth.school))
+                {
+                    if (json.TryGetProperty("school_code", out JsonElement school_code))
+                    {
+                        school=$"{school_code}";
+                    }
+                }
+                else {
+                    school=tokenAuth.school;   
+                }
+                code = $"Knowledge-{school}-{subjectId}";
+                StringBuilder sql = new StringBuilder($"select value(c) from c");
+                if (periodId.ValueKind.Equals(JsonValueKind.String))
+                {
+                    sql.Append($" where c.periodId = '{periodId}'");
+                }
+               
+                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<Knowledge>(queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{code}") }))
+                {
+                    item.blocks.ForEach(x =>
+                    {
+                        if (x.points == null)
+                        {
+                            x.points = keywords;
+                        }
+                    });
+                    knowledges.Add(item);
+                }
+            }
+            else {
+                code=$"Knowledge-{tokenAuth.id}";
+                StringBuilder sql = new StringBuilder($"select value(c) from c");
+                await foreach (var item in client.GetContainer(Constant.TEAMModelOS,Constant.Teacher).GetItemQueryIterator<Knowledge>(queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{code}") }))
+                {
+                    item.blocks.ForEach(x =>
+                    {
+                        if (x.points == null)
+                        {
+                            x.points = keywords;
+                        }
+                    });
+                    knowledges.Add(item);
+                }
+            }
+
+            return Ok(new {  });
+        }
+
+        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
 #if !DEBUG
 
 
         [Authorize(Roles = "IES")]
         [Authorize(Roles = "IES")]
         [AuthToken(Roles = "admin", Permissions = "knowledge-upd")]
         [AuthToken(Roles = "admin", Permissions = "knowledge-upd")]
 #endif 
 #endif 
-        public async Task<IActionResult> UpsertKnowledge(JsonElement json) 
+        public async Task<IActionResult> ModifyKnowledgeNode(JsonElement json)
         {
         {
-            KnowledgeTreeDto knowledge = json.GetProperty("knowledge").ToObject<KnowledgeTreeDto>();
             List<TagOldNew> old_new = null;
             List<TagOldNew> old_new = null;
             if (json.TryGetProperty("old_new", out JsonElement _old_new))
             if (json.TryGetProperty("old_new", out JsonElement _old_new))
             {
             {
                 old_new = _old_new.ToObject<List<TagOldNew>>();
                 old_new = _old_new.ToObject<List<TagOldNew>>();
             }
             }
+            string id = json.GetProperty("id").GetString();
+            string scope = json.GetProperty("scope").GetString();
+            string owner = json.GetProperty("owner").GetString();
+            string code =string.Empty;
+            string tbname = string.Empty;
+            string subjectId=string.Empty;
+            int updateRel = json.GetProperty("updateRel").GetInt32();
+            List<TagOldNew> updateData = new List<TagOldNew>();
+            if ($"{scope}".Equals("school"))
+            {
+                subjectId = json.GetProperty("subjectId").GetString();
+                code = $"Knowledge-{owner}-{subjectId}";
+                tbname= Constant.School;
+            }
+            else {
+                code=$"Knowledge-{owner}";
+                tbname= Constant.Teacher;
+            }
+            Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, tbname).ReadItemStreamAsync(id, new PartitionKey(code));
+            if (response.Status==200) 
+            {
+                bool change = false;
+                Knowledge knowledge = JsonDocument.Parse(response.Content).RootElement.ToObject<Knowledge>();
+                foreach(TagOldNew  tagOldNew in old_new) 
+                {
+                    if(!string.IsNullOrWhiteSpace(tagOldNew._id) && !string.IsNullOrEmpty(tagOldNew._old)  &&! string.IsNullOrWhiteSpace(tagOldNew._new)  && !tagOldNew._old.Equals(tagOldNew._new)) 
+                    {
+                       var node =  knowledge.nodes.Find(x =>!string.IsNullOrWhiteSpace(x.name)  &&  x.id.Equals(tagOldNew._id) && tagOldNew._old.Equals(x.name));
+                        node.name= tagOldNew._new;
+                        updateData.Add(tagOldNew);
+                        change = true;
+                    }
+                    if (  !string.IsNullOrEmpty(tagOldNew._old)  &&!string.IsNullOrWhiteSpace(tagOldNew._new)  && !tagOldNew._old.Equals(tagOldNew._new))
+                    {
+                        var rsp= knowledge.points.Remove(tagOldNew._old);
+                        if (rsp) {
+                            change=true;
+                            knowledge.points.Add(tagOldNew._new);
+                        }
+                        foreach (var block in knowledge.blocks) {
+                            if (block.source!=1) 
+                            {
+                              var rsb= block.points.Remove(tagOldNew._old);
+                                if (rsb) {
+                                    block.points.Add(tagOldNew._new);
+                                    change=true;
+                                }
+                            }
+                        }
+                    }
+                }
+                if (change) {
+                    await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, tbname).UpsertItemAsync(knowledge, new PartitionKey(code));
+                }
+            }
+            if (updateData.IsNotEmpty()) 
+            {
+                try
+                {
+                    _ = _httpTrigger.RequestHttpTrigger(new { old_new = old_new, owner = $"{owner}", scope=$"{scope}", subjectId=$"{subjectId}" }, _option.Location, "knowledge-change");
+                }
+                catch (Exception ex)
+                {
+                    //暂不处理
+                }
+            }
+            return Ok(json);
+        }
+
+
+
+   
+
+
+        [ProducesDefaultResponseType]
+        [HttpPost("upsert-knowledge")]
+#if !DEBUG
+
+        [Authorize(Roles = "IES")]
+        [AuthToken(Roles = "admin", Permissions = "knowledge-upd")]
+#endif 
+        public async Task<IActionResult> UpsertKnowledge(JsonElement json) 
+        {
+            KnowledgeTreeDto knowledge = json.GetProperty("knowledge").ToObject<KnowledgeTreeDto>();
+            
             ValidResult validResult = knowledge.Valid();
             ValidResult validResult = knowledge.Valid();
             if (!validResult.isVaild)
             if (!validResult.isVaild)
             {
             {

+ 12 - 8
TEAMModelOS/Controllers/Third/IRS/ThirdIRSController.cs

@@ -198,6 +198,7 @@ namespace TEAMModelOS.Controllers
                     if (local_sign.Equals(sign))
                     if (local_sign.Equals(sign))
                     {
                     {
                         var result = json.ToObject<ZHXY139IRSResult>();
                         var result = json.ToObject<ZHXY139IRSResult>();
+                        await _dingDing.SendBotMsg($"接收到 139zhxy反馈器推送信息!{json.ToJsonString()}\n", GroupNames.成都开发測試群組);
                         var data = await _azureRedis.GetRedisClient(8).StringGetAsync($"LessonTask:{result.workId}");
                         var data = await _azureRedis.GetRedisClient(8).StringGetAsync($"LessonTask:{result.workId}");
                         if (!data.IsNullOrEmpty)
                         if (!data.IsNullOrEmpty)
                         {
                         {
@@ -256,15 +257,18 @@ namespace TEAMModelOS.Controllers
                                     waitReturn = false,
                                     waitReturn = false,
                                     payload = new { irsno = "", answer = ans }
                                     payload = new { irsno = "", answer = ans }
                                 });
                                 });
-                                await hub.Clients.User(stu.userid).SendCoreAsync("onMessage", new[]{new {
-                                connectionId = (string)null,
-                                to = (string)null,
-                                groupname = (string)null,
-                                sender = stu.stuid,
-                                text = common
-                            }});
+                                await hub.Clients.User(stu.userid).SendCoreAsync("onMessage", new[]{
+                                    new 
+                                    {
+                                        connectionId = (string)null,
+                                        to = (string)null,
+                                        groupname = (string)null,
+                                        sender = stu.stuid,
+                                        text = common
+                                    }
+                                });
                                 message= "推送成功!";
                                 message= "推送成功!";
-                                await _dingDing.SendBotMsg($"139zhxy反馈器推送成功!{json.ToJsonString()}\n{ans.ToJsonString()}", GroupNames.成都开发測試群組);
+                                await _dingDing.SendBotMsg($"接收到 139zhxy反馈器推送信息并转发成功!{json.ToJsonString()}\n{ans.ToJsonString()}", GroupNames.成都开发測試群組);
                                 return Ok(new { code = 0, message, timestamp = now });
                                 return Ok(new { code = 0, message, timestamp = now });
 
 
                             }
                             }

+ 8 - 8
TEAMModelOS/Controllers/Third/Moofen/MoofenController.cs

@@ -127,28 +127,28 @@ namespace TEAMModelOS.Controllers.Third.Moofen
                     MoofenKnowledgePointDto knowledgePointDto = new MoofenKnowledgePointDto {  kp1 = data[0] , kp2= data[1], kp3 = data[2], kp4=  data[3], id= data[4]  };
                     MoofenKnowledgePointDto knowledgePointDto = new MoofenKnowledgePointDto {  kp1 = data[0] , kp2= data[1], kp3 = data[2], kp4=  data[3], id= data[4]  };
                     if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp1)) {
                     if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp1)) {
                         knowledgePointDto.level=1;
                         knowledgePointDto.level=1;
-                        knowledgePointDto.kp=knowledgePointDto.kp1;
+                        knowledgePointDto.name=knowledgePointDto.kp1;
                     }
                     }
                     if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp2))
                     if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp2))
                     {
                     {
                         knowledgePointDto.level=2;
                         knowledgePointDto.level=2;
-                        knowledgePointDto.kp=knowledgePointDto.kp2;
+                        knowledgePointDto.name=knowledgePointDto.kp2;
                     }
                     }
                     if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp3))
                     if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp3))
                     {
                     {
                         knowledgePointDto.level=3;
                         knowledgePointDto.level=3;
-                        knowledgePointDto.kp=knowledgePointDto.kp3;
+                        knowledgePointDto.name=knowledgePointDto.kp3;
                     }
                     }
                     if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp4))
                     if (!string.IsNullOrWhiteSpace(knowledgePointDto.kp4))
                     {
                     {
                         knowledgePointDto.level=4;
                         knowledgePointDto.level=4;
-                        knowledgePointDto.kp=knowledgePointDto.kp4;
+                        knowledgePointDto.name=knowledgePointDto.kp4;
                     }
                     }
                     pointDtos.Add( knowledgePointDto );
                     pointDtos.Add( knowledgePointDto );
                 }
                 }
                 // 构建树形结构
                 // 构建树形结构
                 var tree = BuildTree(pointDtos);
                 var tree = BuildTree(pointDtos);
-                tree.kp=$"{period}-{subject}";
+                tree.name=$"{period}-{subject}";
                 var json= tree.children.ToJsonString();
                 var json= tree.children.ToJsonString();
                 string subjectId = string.Empty;
                 string subjectId = string.Empty;
                 string periodId = string.Empty;
                 string periodId = string.Empty;
@@ -205,7 +205,7 @@ namespace TEAMModelOS.Controllers.Third.Moofen
                 {
                 {
                     id = pointDto.id,
                     id = pointDto.id,
                     tid = pointDto.id,
                     tid = pointDto.id,
-                    kp = pointDto.kp,
+                    name = pointDto.name,
                     level = pointDto.level
                     level = pointDto.level
                 };
                 };
                 while (stack.Count > 0 && stack.Peek().level >= node.level)
                 while (stack.Count > 0 && stack.Peek().level >= node.level)
@@ -616,7 +616,7 @@ namespace TEAMModelOS.Controllers.Third.Moofen
     {
     {
        
        
 
 
-        public string kp {  get; set; }
+        public string name {  get; set; }
         public string id { get; set; }
         public string id { get; set; }
         /// <summary>
         /// <summary>
         ///  第三方id
         ///  第三方id
@@ -637,7 +637,7 @@ namespace TEAMModelOS.Controllers.Third.Moofen
     public class MoofenKnowledgePointDto
     public class MoofenKnowledgePointDto
     {
     {
         public string id { get; set; }
         public string id { get; set; }
-        public string kp { get; set; }
+        public string name { get; set; }
         public int level { get; set; }
         public int level { get; set; }
         public string kp1 { get; set; }
         public string kp1 { get; set; }
         public string kp2 { get; set; }
         public string kp2 { get; set; }