|
@@ -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);
|