Browse Source

取得IOT資訊API修正:SchoolID為空時,所有學校全取得

jeff 2 năm trước cách đây
mục cha
commit
874eecd60b

+ 16 - 6
TEAMModelBI/Controllers/BIProductAnalysis/ProductAnalysisController.cs

@@ -70,8 +70,6 @@ namespace TEAMModelBI.Controllers.ProductAnalysis
                 if(string.IsNullOrWhiteSpace(prod)) return BadRequest();
                 if (!jsonElement.TryGetProperty("schoolIds", out JsonElement schoolIdsJobj)) return BadRequest();//學校ID(array)
                 List<string> schoolIds = schoolIdsJobj.ToObject<List<string>>();
-                schoolIds.Add("noschoolid");
-                schoolIds.Add("allschool");
                 string dateUnit = (jsonElement.TryGetProperty("dateUnit", out JsonElement dateUnitJobj)) ? (!string.IsNullOrWhiteSpace(Convert.ToString(dateUnitJobj))) ? Convert.ToString(dateUnitJobj).ToLower() : "day" : "day";//時間統計單位 ※以每年(Year)、每月(Month)、每日(Day) 為統計單位 預設值:每日
                 //起始終止日期換算
                 List<string> dateFromList = dateFromJobj.ToString().Split('-').ToList();
@@ -90,8 +88,13 @@ namespace TEAMModelBI.Controllers.ProductAnalysis
                 //CosmosDB資料取得
                 ////取得學校基本資訊 => 記入Dictionary
                 Dictionary<string, Dictionary<string, string>> schDic = new();
-                string schIdListStr = JsonSerializer.Serialize(schoolIds);
-                string SqlSch = $"SELECT c.id, c.name, c.code, c.region, c.province, c.city, c.dist FROM c WHERE ARRAY_CONTAINS({schIdListStr}, c.id, true) AND (c.code = 'Base' OR c.code = 'VirtualBase')";
+                string SqlSch = $"SELECT c.id, c.name, c.code, c.region, c.province, c.city, c.dist FROM c WHERE (c.code = 'Base' OR c.code = 'VirtualBase')";
+                //ARRAY_CONTAINS({schIdListStr}, c.id, true) AND
+                if(schoolIds.Count > 0)
+                {
+                    string schIdListStr = JsonSerializer.Serialize(schoolIds);
+                    SqlSch += $" AND ARRAY_CONTAINS({schIdListStr}, c.id, true)";
+                }
                 await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: SqlSch, requestOptions: null))
                 {
                     var json = await JsonDocument.ParseAsync(item.ContentStream);
@@ -102,7 +105,7 @@ namespace TEAMModelBI.Controllers.ProductAnalysis
                         string region = Convert.ToString(obj.GetProperty("region"));
                         string province = Convert.ToString(obj.GetProperty("province"));
                         string city = Convert.ToString(obj.GetProperty("city"));
-                        string dist = Convert.ToString(obj.GetProperty("dist"));
+                        string dist = (obj.TryGetProperty("dist", out JsonElement distJ)) ? Convert.ToString(distJ) : string.Empty;
                         string type = Convert.ToString(obj.GetProperty("code"));
                         if (!schDic.ContainsKey(schId))
                         {
@@ -114,7 +117,14 @@ namespace TEAMModelBI.Controllers.ProductAnalysis
 
                 ////取得產品分析資訊
                 List<ProdAnalysisApiResult> result = new List<ProdAnalysisApiResult>();
-                string Sql = $"SELECT * FROM c WHERE c.toolType = '{prod}' AND c.dateUnit = '{dateUnit}' AND ARRAY_CONTAINS({schIdListStr}, c.schoolId, true) AND c.dateTime >= {dateTimeFromSec} AND c.dateTime <= {dateTimeToSec}";
+                string Sql = $"SELECT * FROM c WHERE c.toolType = '{prod}' AND c.dateUnit = '{dateUnit}' AND c.dateTime >= {dateTimeFromSec} AND c.dateTime <= {dateTimeToSec}";
+                if(schoolIds.Count > 0)
+                {
+                    schoolIds.Add("noschoolid");
+                    schoolIds.Add("allschool");
+                    string schIdListStr = JsonSerializer.Serialize(schoolIds);
+                    Sql += $" AND ARRAY_CONTAINS({schIdListStr}, c.schoolId, true)";
+                }
                 await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: Sql, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"ProdAnalysis") }))
                 {
                     var json = await JsonDocument.ParseAsync(item.ContentStream);