Bladeren bron

更新公告字段和查询逻辑

CrazyIter_Bin 3 jaren geleden
bovenliggende
commit
53ca0ed5a7

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

@@ -30,6 +30,11 @@ namespace TEAMModelOS.SDK.Models
         /// 结束时间
         /// </summary>
         public long endTime { get; set; }
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        public bool autoDelete { get; set; } = false;
+
         /// <summary>
         /// school, course,class
         /// </summary>

+ 23 - 2
TEAMModelOS/Controllers/School/NoticeController.cs

@@ -65,6 +65,9 @@ namespace TEAMModelOS.Controllers
                 request.pk = "Notice";
                 request.ttl = -1;
                 long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+                if (request.autoDelete) {
+                    request.ttl=(int?)(request.endTime - now);
+                }
                 request.createTime = now;
                 request.creatorId = userid;
                 //如果设置的时间是小于当前时间则立即发布
@@ -117,7 +120,7 @@ namespace TEAMModelOS.Controllers
          /// <returns></returns>
         [ProducesDefaultResponseType]
         [HttpPost("find")]
-        [AuthToken(Roles = "teacher,admin")]
+        [AuthToken(Roles = "teacher,admin,student")]
         public async Task<IActionResult> Find(JsonElement requert)
         {
             try
@@ -168,9 +171,27 @@ namespace TEAMModelOS.Controllers
                         typesql = $" and c.type='{type}' ";
                     }
                 }
+                string joinSqlClasses = "";
+                string andSqlClasses = "";
+                if (requert.TryGetProperty("classes", out JsonElement _classes))
+                {
+
+                    if (_classes.ValueKind is JsonValueKind.Array)
+                    {
+                        List<string> subjects = _classes.ToObject<List<string>>();
+                        if (subjects.IsNotEmpty())
+                        {
+                            joinSqlClasses = " join A2 in c.classes ";
+                            List<string> sqlList = new List<string>();
+                            subjects.ForEach(x => { sqlList.Add($" '{x}' "); });
+                            string sql = string.Join(" , ", sqlList);
+                            andSqlClasses = $" and A2 in ({sql}) ";
+                        }
+                    }
+                }
                 List<Notice> notices = new List<Notice>();
                 var client = _azureCosmos.GetCosmosClient();
-                var query = $"select value(c) from c where  c.ttl=-1 {etimestampsql} {stimestampsql} {publishsql }  {typesql} ";
+                var query = $"select distinct value(c) from c {joinSqlClasses} where  c.ttl=-1 {etimestampsql} {stimestampsql} {publishsql }  {typesql} {andSqlClasses} ";
                 await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<Notice>(queryText: query,
                     requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Notice-{code}") }))
                 {