CrazyIter_Bin 11 月之前
父節點
當前提交
110cc5647a

+ 7 - 1
TEAMModelOS.Function/IESServiceBusTrigger.cs

@@ -640,7 +640,13 @@ namespace TEAMModelOS.Function
                     {
                         ItemCond itemCond = null;
                         List<ItemInfo> items = new List<ItemInfo>();
-                        var queryslt = $"SELECT c.gradeIds,c.subjectId,c.periodId,c.type,c.level,c.field ,c.scope FROM c where   c.periodId='{itemCondDto.filed}' and c.pid= null  ";
+                        School school = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>($"{itemCondDto.key}", new PartitionKey("Base"));
+                        var period = school.period.Find(z => z.id.Equals(itemCondDto.filed));
+                        string subjectIn =string.Empty;
+                        if (period!=null  && period.subjects.IsNotEmpty()) {
+                              subjectIn =$" and c.subjectId in({string.Join(",", period.subjects.Select(x=>$"'{x.id}'"))})";
+                        }
+                        var queryslt = $"SELECT c.gradeIds,c.subjectId,c.periodId,c.type,c.level,c.field ,c.scope FROM c where   c.periodId='{itemCondDto.filed}' and c.pid= null {subjectIn} ";
                         await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<ItemInfo>(queryText: queryslt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Item-{itemCondDto.key}") }))
                         {
                             items.Add(item);

+ 11 - 1
TEAMModelOS.SDK/DI/AzureCosmos/Inner/SQLHelper.cs

@@ -122,7 +122,8 @@ namespace TEAMModelOS.SDK.DI
             {
                 dict[emobj.Current.Name] = emobj.Current.Value;
             }
-            return GetSQL(dict, sql, pk);
+            var query = GetSQL(dict, sql, pk);
+            return query;
         }
         public static AzureCosmosQuery GetSQL(Dictionary<string, object> dict, StringBuilder sql, string pk = null)
         {
@@ -329,12 +330,21 @@ namespace TEAMModelOS.SDK.DI
                     QueryText = sql.ToString(),
                     Parameters = parmeters
                 };
+                if (cosmosDbQuery.QueryText.Contains("order", StringComparison.OrdinalIgnoreCase)  && cosmosDbQuery.QueryText.Contains("by", StringComparison.OrdinalIgnoreCase)  &&  cosmosDbQuery.QueryText.Contains("distinct", StringComparison.OrdinalIgnoreCase))
+                {
+                    cosmosDbQuery.QueryText = cosmosDbQuery.QueryText.Replace("distinct", " ");
+                }
                 return cosmosDbQuery;
             }
             cosmosDbQuery = new AzureCosmosQuery
             {
                 QueryText = sql.ToString()
             };
+           
+            if (cosmosDbQuery.QueryText.Contains("order", StringComparison.OrdinalIgnoreCase)  && cosmosDbQuery.QueryText.Contains("by", StringComparison.OrdinalIgnoreCase)  &&  cosmosDbQuery.QueryText.Contains("distinct", StringComparison.OrdinalIgnoreCase))
+            {
+                cosmosDbQuery.QueryText = cosmosDbQuery.QueryText.Replace("distinct", " ");
+            }
             return cosmosDbQuery;
         }
 

+ 37 - 6
TEAMModelOS.SDK/Helper/Common/CollectionHelper/CollectionHelper.cs

@@ -1,8 +1,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
-using System.Text;
-
+using System.Linq;
 namespace TEAMModelOS.SDK
 {
     public static class CollectionHelper
@@ -12,9 +11,9 @@ namespace TEAMModelOS.SDK
         /// </summary>
         /// <param name="collection"></param>
         /// <returns></returns>
-        public static bool IsEmpty(this ICollection collection)
+        public static bool IsEmpty<T>(this IEnumerable<T> collection)
         {
-            if (collection != null && collection.Count > 0)
+            if (collection != null && collection.Any())
             {
                 return false;
             }
@@ -28,9 +27,9 @@ namespace TEAMModelOS.SDK
         /// </summary>
         /// <param name="collection"></param>
         /// <returns></returns>
-        public static bool IsNotEmpty(this ICollection collection)
+        public static bool IsNotEmpty<T>(this IEnumerable<T> collection)
         {
-            if (collection != null && collection.Count > 0)
+            if (collection != null && collection.Any())
             {
                 return true;
             }
@@ -39,5 +38,37 @@ namespace TEAMModelOS.SDK
                 return false;
             }
         }
+        ///// <summary>
+        ///// 判断集合是否为空
+        ///// </summary>
+        ///// <param name="collection"></param>
+        ///// <returns></returns>
+        //public static bool IsEmpty(this ICollection collection)
+        //{
+        //    if (collection != null && collection.Count > 0)
+        //    {
+        //        return false;
+        //    }
+        //    else
+        //    {
+        //        return true;
+        //    }
+        //}
+        ///// <summary>
+        ///// 判断集合是否不为空
+        ///// </summary>
+        ///// <param name="collection"></param>
+        ///// <returns></returns>
+        //public static bool IsNotEmpty(this ICollection collection)
+        //{
+        //    if (collection != null && collection.Count > 0)
+        //    {
+        //        return true;
+        //    }
+        //    else
+        //    {
+        //        return false;
+        //    }
+        //}
     }
 }

+ 3 - 0
TEAMModelOS.SDK/Models/Dtos/ItemCondDto.cs

@@ -7,8 +7,11 @@ namespace TEAMModelOS.SDK.Models
     public  class ItemCondDto
     {
   
+        //ѧУ£¬ 
         public string key { get; set; }
+        //ѧ¶Î
         public string filed { get; set; }
+        //school
         public string scope { get; set; }
     }
 }

+ 32 - 2
TEAMModelOS/Controllers/Both/ItemController.cs

@@ -67,23 +67,43 @@ namespace TEAMModelOS.Controllers
         {
             try
             {
+
                 var client = _azureCosmos.GetCosmosClient();
                 request.TryGetProperty("periodId", out JsonElement periodId);
                 request.TryGetProperty("schoolCode", out JsonElement schoolCode);
                 request.TryGetProperty("tmdid", out JsonElement tmdid);
                 if (!string.IsNullOrEmpty($"{periodId}") && !string.IsNullOrEmpty($"{schoolCode}"))
                 {
+                    School school = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>($"{schoolCode}", new PartitionKey("Base"));
+                    var period=   school.period.Find(x => x.id.Equals($"{periodId}"));
                     var value = await _azureRedis.GetRedisClient(8).HashGetAsync($"ItemCond:{schoolCode}", $"{periodId}");
                     ItemCond itemCond = null;
                     if (value != default && !value.IsNullOrEmpty)
                     {
-
                         itemCond = value.ToString().ToObject<ItemCond>();
+                        var csid = itemCond.subjects.ExceptBy(period.subjects.Select(x=>x.id),x=>x.id);
+                        if (csid.IsNotEmpty())
+                        {
+                            await _dingDing.SendBotMsg($"{_option.Location},学校科目缺失,重新统计题目", GroupNames.成都开发測試群組);
+                            List<ItemCondDto> itemCondDtos = new List<ItemCondDto>() { new ItemCondDto() { scope="school", filed=period.id, key= school.id } };
+                            var ItemCondQueue = _configuration.GetValue<string>("Azure:ServiceBus:ItemCondQueue");
+                            var str = itemCondDtos.ToJsonString();
+                            var messageBlobItemCond = new ServiceBusMessage(str);
+                            await _serviceBus.GetServiceBusClient().SendMessageAsync(ItemCondQueue, messageBlobItemCond);
+                        }
                     }
                     else
                     {
                         List<ItemInfo> items = new List<ItemInfo>();
-                        var queryslt = $"SELECT c.gradeIds,c.subjectId,c.periodId,c.type,c.level,c.field ,c.scope FROM c where   c.periodId='{periodId}' and c.pid= null  ";
+
+                        
+                        string subjectIn = string.Empty;
+                        if (period!=null  && period.subjects.IsNotEmpty())
+                        {
+                            subjectIn =$" and c.subjectId in({string.Join(",", period.subjects.Select(x => $"'{x.id}'"))})";
+                        }
+                        var queryslt = $"SELECT c.gradeIds,c.subjectId,c.periodId,c.type,c.level,c.field ,c.scope FROM c where   c.periodId='{periodId}' and c.pid= null {subjectIn} ";
+                        //var queryslt = $"SELECT c.gradeIds,c.subjectId,c.periodId,c.type,c.level,c.field ,c.scope FROM c where   c.periodId='{periodId}' and c.pid= null  ";
                         await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<ItemInfo>(queryText: queryslt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Item-{schoolCode}") }))
                         {
                             items.Add(item);
@@ -122,6 +142,16 @@ namespace TEAMModelOS.Controllers
                         {
 
                             itemCond = value.ToString().ToObject<ItemCond>();
+                            var csid = itemCond.subjects.ExceptBy(period.subjects.Select(x => x.id), x => x.id);
+                            if (csid.IsNotEmpty())
+                            {
+                                await _dingDing.SendBotMsg($"{_option.Location},学校科目缺失,重新统计题目", GroupNames.成都开发測試群組);
+                                List<ItemCondDto> itemCondDtos = new List<ItemCondDto>() { new ItemCondDto() { scope="school", filed=period.id, key= school.id } };
+                                var ItemCondQueue = _configuration.GetValue<string>("Azure:ServiceBus:ItemCondQueue");
+                                var str = itemCondDtos.ToJsonString();
+                                var messageBlobItemCond = new ServiceBusMessage(str);
+                                await _serviceBus.GetServiceBusClient().SendMessageAsync(ItemCondQueue, messageBlobItemCond);
+                            }
                             itemConds.Add(itemCond);
                         }
                         else