|
@@ -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
|
|
|
{
|