Explorar el Código

取得TMID IOT統計資訊API

jeff hace 1 año
padre
commit
9ebbde3bee
Se han modificado 1 ficheros con 104 adiciones y 1 borrados
  1. 104 1
      TEAMModelBI/Controllers/BITmid/TmidController.cs

+ 104 - 1
TEAMModelBI/Controllers/BITmid/TmidController.cs

@@ -530,6 +530,109 @@ namespace TEAMModelBI.Controllers.BITmid
             }
         }
 
+        /// <summary>
+        /// 取得TMID IOT資料
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        //[AuthToken(Roles = "admin")]
+        [HttpPost("get-tmid-iot")]
+        public async Task<IActionResult> GetTmidIot(JsonElement jsonElement)
+        {
+            try
+            {
+                if (!jsonElement.TryGetProperty("tmids", out JsonElement tmidsJobj)) return BadRequest(); //TMID(array)
+                var tmids = tmidsJobj.Deserialize<List<string>>();
+                string dateFromStr = (jsonElement.TryGetProperty("dateFrom", out JsonElement dateFromJobj)) ? dateFromJobj.GetString() : string.Empty; //查詢日期:起始(string)[例]2023-03-05
+                string dateToStr = (jsonElement.TryGetProperty("dateTo", out JsonElement dateToJobj)) ? dateToJobj.GetString() : string.Empty; //查詢日期:結束(string)[例]2023-03-27
+                string dateUnit = (jsonElement.TryGetProperty("dateUnit", out JsonElement dateUnitJobj)) ? dateUnitJobj.GetString().ToLower() : "month";
+                if(string.IsNullOrWhiteSpace(dateFromStr) || string.IsNullOrWhiteSpace(dateToStr))
+                {
+                    return BadRequest();
+                }
+                //起始終止日期換算
+                long dateTimeFromSec = 0;
+                long dateTimeToSec = 0;
+                DateTimeOffset dateTimeFrom;
+                DateTimeOffset dateTimeTo;
+                List<string> dateFromList = dateFromStr.Split('-').ToList();
+                int dateFromYear = Convert.ToInt32(dateFromList[0], 10);
+                int dateFromMonth = (dateUnit.Equals("day") || dateUnit.Equals("month")) ? Convert.ToInt32(dateFromList[1], 10) : 1;
+                int dateFromDay = (dateUnit.Equals("day")) ? Convert.ToInt32(dateFromList[2], 10) : 1;
+                List<string> dateToList = dateToStr.Split('-').ToList();
+                int dateToYear = Convert.ToInt32(dateToList[0], 10);
+                int dateToMonth = (dateUnit.Equals("day") || dateUnit.Equals("month")) ? Convert.ToInt32(dateToList[1], 10) : 1;
+                int dateToDay = (dateUnit.Equals("day")) ? Convert.ToInt32(dateToList[2], 10) : 1;
+                switch (dateUnit)
+                {
+                    case "year":
+                        dateTimeFrom = new DateTimeOffset(dateFromYear, 1, 1, 0, 0, 0, TimeSpan.Zero);
+                        dateTimeTo = new DateTimeOffset(dateToYear, 12, 31, 23, 59, 59, TimeSpan.Zero);
+                        break;
+                    case "month":
+                        dateTimeFrom = new DateTimeOffset(dateFromYear, dateFromMonth, 1, 0, 0, 0, TimeSpan.Zero);
+                        dateTimeTo = new DateTimeOffset(dateToYear, dateToMonth, DateTime.DaysInMonth(dateToYear, dateToMonth), 23, 59, 59, TimeSpan.Zero);
+                        break;
+                    case "day":
+                        dateTimeFrom = new DateTimeOffset(dateFromYear, dateFromMonth, dateFromDay, 0, 0, 0, TimeSpan.Zero);
+                        dateTimeTo = new DateTimeOffset(dateToYear, dateToMonth, dateToDay, 23, 59, 59, TimeSpan.Zero);
+                        break;
+                    default: //同"month"
+                        dateTimeFrom = new DateTimeOffset(dateFromYear, dateFromMonth, 1, 0, 0, 0, TimeSpan.Zero);
+                        dateTimeTo = new DateTimeOffset(dateToYear, dateToMonth, DateTime.DaysInMonth(dateToYear, dateToMonth), 23, 59, 59, TimeSpan.Zero);
+                        break;
+                }
+                dateTimeFromSec = dateTimeFrom.ToUnixTimeSeconds();
+                dateTimeToSec = dateTimeTo.ToUnixTimeSeconds();
+                //資料取得
+                    //基本資料
+                Dictionary<string, TmidStics> tmidDic = new();
+                foreach (string id in tmids)
+                {
+                    if(!tmidDic.ContainsKey(id))
+                    {
+                        TmidStics tmidStics = new TmidStics() { id = id, iot = new() };
+                        tmidDic.Add(id, tmidStics);
+                    }
+                }
+                    //IOT資料
+                var cosmosClientIes5 = _azureCosmos.GetCosmosClient(); //CosmosDB IES5
+                foreach (KeyValuePair<string, TmidStics> dicItem in tmidDic)
+                {
+                    string id = dicItem.Key;
+                    TmidStics tmidStics = dicItem.Value;
+                    if (dateUnit.ToLower().Equals("year"))
+                    {
+                        tmidStics.iot.hiteach.year = await getTMIDIotData(cosmosClientIes5, id, "HiTeach", "year", 0, 0, 0, dateTimeFromSec, dateTimeToSec);
+                        tmidStics.iot.hiteachcc.year = await getTMIDIotData(cosmosClientIes5, id, "HiTeachCC", "year", 0, 0, 0, dateTimeFromSec, dateTimeToSec);
+                    }
+                    else if (dateUnit.ToLower().Equals("month"))
+                    {
+                        tmidStics.iot.hiteach.month = await getTMIDIotData(cosmosClientIes5, id, "HiTeach", "month", 0, 0, 0, dateTimeFromSec, dateTimeToSec);
+                        tmidStics.iot.hiteachcc.month = await getTMIDIotData(cosmosClientIes5, id, "HiTeachCC", "month", 0, 0, 0, dateTimeFromSec, dateTimeToSec);
+                    }
+                    else if (dateUnit.ToLower().Equals("day"))
+                    {
+                        tmidStics.iot.hiteach.day = await getTMIDIotData(cosmosClientIes5, id, "HiTeach", "day", 0, 0, 0, dateTimeFromSec, dateTimeToSec);
+                        tmidStics.iot.hiteachcc.day = await getTMIDIotData(cosmosClientIes5, id, "HiTeachCC", "day", 0, 0, 0, dateTimeFromSec, dateTimeToSec);
+                    }
+                }
+                //輸出
+                List<object> data = new();
+                foreach (KeyValuePair<string, TmidStics> dicItem in tmidDic)
+                {
+                    data.Add(dicItem.Value);
+                }
+                return Ok(data);
+            }
+            catch (Exception ex)
+            {
+                //await _dingDing.SendBotMsg($"BI,{_option.Location} /tmid/get-tmidstics \n {ex.Message}\n{ex.StackTrace}", GroupNames.台北開發測試群組);
+                return BadRequest();
+            }
+        }
+
         /// <summary>
         /// 取得TMID使用產品資料
         /// </summary>
@@ -1021,7 +1124,7 @@ namespace TEAMModelBI.Controllers.BITmid
             public bool educloudtw { get; set; }
             public long ts { get; set; } //資料最終變更時間
             public string schoolId { get; set; } //歸屬學校資訊
-    }
+        }
         //TMID統計 IES5資訊
         private class TmidSticsIes5
         {