浏览代码

题目导入知识点接口,公告增加附件

CrazyIter_Bin 3 年之前
父节点
当前提交
f3f14f405d

+ 3 - 0
TEAMModelAPI/Program.cs

@@ -13,6 +13,9 @@ namespace TEAMModelAPI
     {
         public static void Main(string[] args)
         {
+            List<string> a = new List<string>() { "1", "2", "3", "4", "5" };
+            List<string> b = new List<string>() { };
+            var c =  b.Where(x => !a.Any(y => y.Equals(x))).ToList();
             CreateHostBuilder(args).Build().Run();
         }
 

+ 1 - 0
TEAMModelOS.SDK/Models/Cosmos/Common/Notice.cs

@@ -40,5 +40,6 @@ namespace TEAMModelOS.SDK.Models
         /// </summary>
         public string type { get; set; }
         public List<string> classes { get; set; } = new List<string>();
+        public List<Attachment> attachments { get; set; } = new List<Attachment>();
     }
 }

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

@@ -17,7 +17,7 @@ namespace TEAMModelOS.SDK.Models
         }
         [Required(ErrorMessage = "owner 必须设置")]
         public string owner { get; set; }
-        [Required(ErrorMessage = "scope 必须设置")]
+        
         public string scope { get; set; }
         /// <summary>
         /// 学段id
@@ -32,11 +32,11 @@ namespace TEAMModelOS.SDK.Models
         /// <summary>
         /// 知识点
         /// </summary>
-        public List<string> points { get; set; }
+        public List<string> points { get; set; } = new List<string>();
         /// <summary>
         /// 知识块
         /// </summary>
-        public List<Block> blocks { get; set; }
+        public List<Block> blocks { get; set; } = new List<Block>();
 
     }
 

+ 48 - 3
TEAMModelOS/Controllers/Knowledge/KnowledgesController.cs

@@ -16,6 +16,7 @@ using System.Text;
 using TEAMModelOS.SDK.DI.AzureCosmos.Inner;
 using Microsoft.Extensions.Options;
 using TEAMModelOS.Filter;
+using HTEXLib.COMM.Helpers;
 
 namespace TEAMModelOS.Controllers
 {
@@ -24,7 +25,7 @@ namespace TEAMModelOS.Controllers
     //[Authorize(Roles = "IES5")]
     [Route("knowledges")]
     [ApiController]
-    public class KnowledgesController: ControllerBase
+    public class KnowledgesController : ControllerBase
     {
         private readonly SnowflakeId _snowflakeId;
         private readonly AzureCosmosFactory _azureCosmos;
@@ -42,7 +43,7 @@ namespace TEAMModelOS.Controllers
         /**
          * 
          {
-           "periodId": "ca484aa8-e7b5-4a7c-8ef3-bd9e7b7d4fp2",
+            "periodId": "ca484aa8-e7b5-4a7c-8ef3-bd9e7b7d4fp2",
             "subjectId":"ac73f07d-2cc8-4174-85ae-b39cc5b6beef",
             "scope":"school",
             "owner":"hbcn",
@@ -97,11 +98,55 @@ namespace TEAMModelOS.Controllers
                 knowledge.id = Guid.NewGuid().ToString();
                 knowledge = await client.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync(knowledge, new PartitionKey($"{knowledge.code}"));
             }
-            var count= new { pcount = knowledge.points!=null ? knowledge.points.Count:0,bcount= knowledge.blocks!=null? knowledge.blocks.Count:0 };
+            var count = new { pcount = knowledge.points != null ? knowledge.points.Count : 0, bcount = knowledge.blocks != null ? knowledge.blocks.Count : 0 };
             //处理知识点,知识块计数问题
             await _azureRedis.GetRedisClient(8).HashSetAsync($"Knowledge:Count:{knowledge.owner}-{knowledge.subjectId}", knowledge.periodId, count.ToJsonString());
             return Ok(knowledge);
         }
+
+        /// <summary>
+        /// 
+        ///     "periodId": "ca484aa8-e7b5-4a7c-8ef3-bd9e7b7d4fp2",
+        ///     "subjectId":"ac73f07d-2cc8-4174-85ae-b39cc5b6beef",
+        ///     "owner":"hbcn",
+        ///     "points":["11111"]
+        /// </summary>
+        /// <param name="knowledge"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("item-import")]
+        [AuthToken(Roles = "admin", Permissions = "knowledge-upd")]
+        public async Task<IActionResult> ItemImport(Knowledge dto)
+        {
+            var client = _azureCosmos.GetCosmosClient();
+            dto.code = $"Knowledge-{dto.owner}-{dto.subjectId}";
+            StringBuilder sql = new StringBuilder($"select value(c) from c where c.periodId = '{dto.periodId}'");
+            Knowledge knowledge = null;
+            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<Knowledge>(
+                queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{ dto.code}") }))
+            {
+                knowledge = item;
+                break;
+            }
+            if (knowledge != null)
+            {
+                var notin = dto.points.Where(x => !knowledge.points.Any(y => y.Equals(x))).ToList() ;
+                if (notin.IsNotEmpty()) {
+                    knowledge.points.AddRange(notin);
+                    knowledge = await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync(knowledge, knowledge.id, new PartitionKey($"{knowledge.code}"));
+                }
+            }
+            else
+            {
+                knowledge.id = Guid.NewGuid().ToString();
+                knowledge.points = dto.points;
+                knowledge = await client.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync(knowledge, new PartitionKey($"{knowledge.code}"));
+            }
+            var count = new { pcount = knowledge.points != null ? knowledge.points.Count : 0, bcount = knowledge.blocks != null ? knowledge.blocks.Count : 0 };
+            //处理知识点,知识块计数问题
+            await _azureRedis.GetRedisClient(8).HashSetAsync($"Knowledge:Count:{knowledge.owner}-{knowledge.subjectId}", knowledge.periodId, count.ToJsonString());
+            return Ok(new { knowledge });
+        }
         /// <summary>
         /**