Przeglądaj źródła

TMID 取得IOT資料API修正(途中)

jeff 1 rok temu
rodzic
commit
8f3411e2b7

+ 1 - 1
TEAMModelBI/Controllers/BIProductAnalysis/ProductAnalysisController.cs

@@ -64,7 +64,7 @@ namespace TEAMModelBI.Controllers.ProductAnalysis
                 var cosmosClient = _azureCosmos.GetCosmosClient();
                 var redisClinet8 = _azureRedis.GetRedisClient(8);
                 if (!jsonElement.TryGetProperty("dateFrom", out JsonElement dateFromJobj)) return BadRequest();//查詢日期:起始(string)[例]2023-03-05
-                if(!jsonElement.TryGetProperty("dateTo", out JsonElement dateToJobj)) return BadRequest();//查詢日期:結束(string)[例]2023-03-27
+                if (!jsonElement.TryGetProperty("dateTo", out JsonElement dateToJobj)) return BadRequest();//查詢日期:結束(string)[例]2023-03-27
                 if (!jsonElement.TryGetProperty("prod", out JsonElement prodJobj)) return BadRequest();//產品 HiTeach, HiTeachCC, HiTA
                 string prod = (prodJobj.ToString().Equals("HiTeach") || prodJobj.ToString().Equals("HiTeachCC") || prodJobj.ToString().Equals("HiTA")) ? prodJobj.ToString() : string.Empty;
                 if(string.IsNullOrWhiteSpace(prod)) return BadRequest();

+ 278 - 181
TEAMModelBI/Controllers/BITmid/TmidController.cs

@@ -1,4 +1,5 @@
 using Azure.Cosmos;
+using DocumentFormat.OpenXml.Office2010.Excel;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.Azure.Cosmos.Table;
 using Microsoft.Extensions.Configuration;
@@ -57,9 +58,51 @@ namespace TEAMModelBI.Controllers.BITmid
                 var tmids = tmidsJobj.Deserialize<List<string>>();
                 if (tmids.Count is 0) return BadRequest();
                 var datetime = DateTimeOffset.UtcNow.AddDays(-1);
-                var y = datetime.Year;
-                var m = datetime.Month;
-                var d = datetime.Day;
+                int y = datetime.Year;
+                int m = datetime.Month;
+                int d = datetime.Day;
+                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() : string.Empty;
+                string mode = (jsonElement.TryGetProperty("mode", out JsonElement modeJobj)) ? modeJobj.GetString() : "default";
+                if(mode.Equals("simple"))
+                {
+                    if(string.IsNullOrWhiteSpace(dateFromStr) || string.IsNullOrWhiteSpace(dateToStr) || string.IsNullOrWhiteSpace(dateUnit))
+                    {
+                        return Ok(new { error = "1", message = "Simple mode needs dateFrom, dateTo, dateUnit to be params." });
+                    }
+                }
+
+                //起始終止日期換算
+                long dateTimeFromSec = 0;
+                long dateTimeToSec = 0;
+                if(!string.IsNullOrWhiteSpace(dateFromStr) && !string.IsNullOrWhiteSpace(dateToStr))
+                {
+                    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;
+                    DateTimeOffset dateTimeFrom = new DateTimeOffset(dateFromYear, dateFromMonth, dateFromDay, 0, 0, 0, TimeSpan.Zero);
+                    dateTimeFromSec = dateTimeFrom.ToUnixTimeSeconds();
+                    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;
+                    DateTimeOffset dateTimeTo = new DateTimeOffset(dateToYear, dateToMonth, dateToDay, 23, 59, 59, TimeSpan.Zero);
+                    dateTimeToSec = dateTimeTo.ToUnixTimeSeconds();
+                    y = 0;
+                    m = 0;
+                    d = 0;
+                }
+                //取得項目列表
+                List<string> eventList = new List<string>();
+                if(mode.Equals("simple"))
+                {
+                    eventList = new List<string>() { "iot" };
+                } else
+                {
+                    eventList = new List<string>() { "coupons", "login", "prod", "points", "iot", "ies5", "benefits", "sokrates" };
+                }
 
                 //服務Client端
                 var cosmosClientIes5 = _azureCosmos.GetCosmosClient(); //CosmosDB IES5
@@ -69,9 +112,8 @@ namespace TEAMModelBI.Controllers.BITmid
                 var tablePointsClient = storageClientCsv2.GetTableReference("Points");
                 var redisClient = _azureRedis.GetRedisClient(4);
 
-                //存放user資料
+                //取得TMID基本資料
                 Dictionary<string, TmidStics> tmidDic = new();
-
                 QueryDefinition query =
                        new QueryDefinition(@"SELECT c.id, c.name, c.picture, c.mobile, c.mail, c.lang, c.wechat, c.facebook, c.google, c.ding, c.apple, c.educloudtw, c.ts FROM c WHERE (ARRAY_CONTAINS(@key, c.id) OR ARRAY_CONTAINS(@key, c.mobile))")
                        .WithParameter("@key", tmids);
@@ -100,55 +142,54 @@ namespace TEAMModelBI.Controllers.BITmid
                             tmidStics.apple = (doc.TryGetProperty("apple", out JsonElement apple) && !string.IsNullOrWhiteSpace(apple.GetString())) ? true : false;
                             tmidStics.ts = (doc.TryGetProperty("ts", out JsonElement ts)) ? ts.GetInt64() : 0;
                             //票券
-                            var usersCoupons = tableCouponClient.Get<DynamicTableEntity>(id);
-                            foreach (var coupon in usersCoupons)
-                            {
-                                tmidStics.coupons.Add(
-                                    new TmidCoupon()
-                                    {
-                                        code = coupon.RowKey,
-                                        exchange = coupon.Properties["exchangeTime"].DateTimeOffsetValue.Value.ToUnixTimeSeconds(),
-                                    });
-                            }
+                            //var usersCoupons = tableCouponClient.Get<DynamicTableEntity>(id);
+                            //foreach (var coupon in usersCoupons)
+                            //{
+                            //    tmidStics.coupons.Add(
+                            //        new TmidCoupon()
+                            //        {
+                            //            code = coupon.RowKey,
+                            //            exchange = coupon.Properties["exchangeTime"].DateTimeOffsetValue.Value.ToUnixTimeSeconds(),
+                            //        });
+                            //}
 
                             //登入各服務的時間
-                            var loginTime = await redisClient.HashGetAllAsync(id);
-                            foreach (var t in loginTime)
-                            {
-                                if (!t.Name.StartsWith("HiTeach") && !_dicClientIds.ContainsKey(t.Name)) continue;
-                                tmidStics.login.Add(
-                                    new TmidLoginTime()
-                                    {
-                                        product = t.Name.StartsWith("HiTeach") ? t.Name.ToString().Split("-")[0] : _dicClientIds[t.Name],
-                                        time = (long)t.Value
-                                    });
-                            }
+                            //var loginTime = await redisClient.HashGetAllAsync(id);
+                            //foreach (var t in loginTime)
+                            //{
+                            //    if (!t.Name.StartsWith("HiTeach") && !_dicClientIds.ContainsKey(t.Name)) continue;
+                            //    tmidStics.login.Add(
+                            //        new TmidLoginTime()
+                            //        {
+                            //            product = t.Name.StartsWith("HiTeach") ? t.Name.ToString().Split("-")[0] : _dicClientIds[t.Name],
+                            //            time = (long)t.Value
+                            //        });
+                            //}
 
                             //積分
-                            var usersPoints = tablePointsClient.Get("Points", id);
-                            tmidStics.points.points = (usersPoints != null) ? usersPoints.Properties["Points"].Int32Value.Value : 0;
-                            tmidStics.points.level = (usersPoints != null) ? usersPoints.Properties["Level"].Int32Value.Value : 0;
-                            tmidStics.points.balance = (usersPoints != null) ? usersPoints.Properties["Balance"].Int32Value.Value : 0;
+                            //var usersPoints = tablePointsClient.Get("Points", id);
+                            //tmidStics.points.points = (usersPoints != null) ? usersPoints.Properties["Points"].Int32Value.Value : 0;
+                            //tmidStics.points.level = (usersPoints != null) ? usersPoints.Properties["Level"].Int32Value.Value : 0;
+                            //tmidStics.points.balance = (usersPoints != null) ? usersPoints.Properties["Balance"].Int32Value.Value : 0;
                             
                             //個人服務授權
-                            tmidStics.prod = await getTMIDAuthService(cosmosClientCsv2, id, "", true);
+                            //tmidStics.prod = await getTMIDAuthService(cosmosClientCsv2, id, "", true);
 
                             //IOT
-                            tmidStics.iot.hiteach.year = await getTMIDIotData(cosmosClientIes5, id, "HiTeach", "year", y, 0, 0, 0, 0);
-                            tmidStics.iot.hiteach.month = await getTMIDIotData(cosmosClientIes5, id, "HiTeach", "month", y, m, 0, 0, 0);
-                            tmidStics.iot.hiteach.day = await getTMIDIotData(cosmosClientIes5, id, "HiTeach", "day", y, m, d, 0, 0);
-                            tmidStics.iot.hiteachcc.year = await getTMIDIotData(cosmosClientIes5, id, "HiTeachCC", "year", y, 0, 0, 0, 0);
-                            tmidStics.iot.hiteachcc.month = await getTMIDIotData(cosmosClientIes5, id, "HiTeachCC", "month", y, m, 0, 0, 0);
-                            tmidStics.iot.hiteachcc.day = await getTMIDIotData(cosmosClientIes5, id, "HiTeachCC", "day", y, m, d, 0, 0);
+                            //tmidStics.iot.hiteach.year = await getTMIDIotData(cosmosClientIes5, id, "HiTeach", "year", y, 0, 0, fromDate, toDate);
+                            //tmidStics.iot.hiteach.month = await getTMIDIotData(cosmosClientIes5, id, "HiTeach", "month", y, m, 0, fromDate, toDate);
+                            //tmidStics.iot.hiteach.day = await getTMIDIotData(cosmosClientIes5, id, "HiTeach", "day", y, m, d, fromDate, toDate);
+                            //tmidStics.iot.hiteachcc.year = await getTMIDIotData(cosmosClientIes5, id, "HiTeachCC", "year", y, 0, 0, fromDate, toDate);
+                            //tmidStics.iot.hiteachcc.month = await getTMIDIotData(cosmosClientIes5, id, "HiTeachCC", "month", y, m, 0, fromDate, toDate);
+                            //tmidStics.iot.hiteachcc.day = await getTMIDIotData(cosmosClientIes5, id, "HiTeachCC", "day", y, m, d, fromDate, toDate);
 
                             tmidDic.Add(id, tmidStics);
                         }
                     }
                 }
-
-                //ID進階資料
+                //取得TMID進階資料
                 query = new QueryDefinition(@"SELECT c.id, c.name, c.mobile, c.mail, c.country, c.province, c.city, c.schoolCode, c.schoolCodeW, c.unitType, c.unitName, c.jobTitle FROM c WHERE (ARRAY_CONTAINS(@key, c.id) OR ARRAY_CONTAINS(@key, c.mobile))")
-                       .WithParameter("@key", tmids);
+                    .WithParameter("@key", tmids);
                 await foreach (var item in cosmosClientCsv2
                             .GetContainer("Core", "ID2")
                             .GetItemQueryStreamIterator(query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("base-ex") }))
@@ -174,186 +215,242 @@ namespace TEAMModelBI.Controllers.BITmid
                         }
                     }
                 }
+                if(tmidDic.Count.Equals(0)) return Ok(new List<object>());
 
+                //取得 票券、登入各服務的時間、取得積分、個人服務授權、IOT
+                foreach (KeyValuePair<string, TmidStics> dicItem in tmidDic)
+                {
+                    string id = dicItem.Key;
+                    TmidStics tmidStics = dicItem.Value;
+                    //票券
+                    if (eventList.Contains("coupons"))
+                    {
+                        var usersCoupons = tableCouponClient.Get<DynamicTableEntity>(id);
+                        foreach (var coupon in usersCoupons)
+                        {
+                            tmidStics.coupons.Add(
+                                new TmidCoupon()
+                                {
+                                    code = coupon.RowKey,
+                                    exchange = coupon.Properties["exchangeTime"].DateTimeOffsetValue.Value.ToUnixTimeSeconds(),
+                                });
+                        }
+                    }
+                    //取得登入各服務的時間
+                    if (eventList.Contains("login"))
+                    {
+                        var loginTime = await redisClient.HashGetAllAsync(id);
+                        foreach (var t in loginTime)
+                        {
+                            if (!t.Name.StartsWith("HiTeach") && !_dicClientIds.ContainsKey(t.Name)) continue;
+                            tmidStics.login.Add(
+                                new TmidLoginTime()
+                                {
+                                    product = t.Name.StartsWith("HiTeach") ? t.Name.ToString().Split("-")[0] : _dicClientIds[t.Name],
+                                    time = (long)t.Value
+                                });
+                        }
+                    }
+                    //積分
+                    if (eventList.Contains("points"))
+                    {
+                        var usersPoints = tablePointsClient.Get("Points", id);
+                        tmidStics.points.points = (usersPoints != null) ? usersPoints.Properties["Points"].Int32Value.Value : 0;
+                        tmidStics.points.level = (usersPoints != null) ? usersPoints.Properties["Level"].Int32Value.Value : 0;
+                        tmidStics.points.balance = (usersPoints != null) ? usersPoints.Properties["Balance"].Int32Value.Value : 0;
+                    }
+                    //個人服務授權
+                    if (eventList.Contains("prod"))
+                    {
+                        tmidStics.prod = await getTMIDAuthService(cosmosClientCsv2, id, "", true);
+                    }
+                    //IOT
+                    if (eventList.Contains("iot"))
+                    {
+                        tmidStics.iot.hiteach.year = await getTMIDIotData(cosmosClientIes5, id, "HiTeach", "year", y, 0, 0, dateTimeFromSec, dateTimeToSec);
+                        tmidStics.iot.hiteach.month = await getTMIDIotData(cosmosClientIes5, id, "HiTeach", "month", y, m, 0, dateTimeFromSec, dateTimeToSec);
+                        tmidStics.iot.hiteach.day = await getTMIDIotData(cosmosClientIes5, id, "HiTeach", "day", y, m, d, dateTimeFromSec, dateTimeToSec);
+                        tmidStics.iot.hiteachcc.year = await getTMIDIotData(cosmosClientIes5, id, "HiTeachCC", "year", y, 0, 0, dateTimeFromSec, dateTimeToSec);
+                        tmidStics.iot.hiteachcc.month = await getTMIDIotData(cosmosClientIes5, id, "HiTeachCC", "month", y, m, 0, dateTimeFromSec, dateTimeToSec);
+                        tmidStics.iot.hiteachcc.day = await getTMIDIotData(cosmosClientIes5, id, "HiTeachCC", "day", y, m, d, dateTimeFromSec, dateTimeToSec);
+                    }
+                }
                 //IES5
-                query = new QueryDefinition(@"SELECT c.id, c.defaultSchool, c.schools FROM c WHERE ARRAY_CONTAINS(@key, c.id)")
-                      .WithParameter("@key", tmids);
-                await foreach (var item in cosmosClientIes5
-                            .GetContainer(Constant.TEAMModelOS, "Teacher")
-                            .GetItemQueryStreamIterator(query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
+                if (eventList.Contains("ies5"))
                 {
-                    using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                    if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                    query = new QueryDefinition(@"SELECT c.id, c.defaultSchool, c.schools FROM c WHERE ARRAY_CONTAINS(@key, c.id)")
+                          .WithParameter("@key", tmidDic.Keys.ToList());
+                    await foreach (var item in cosmosClientIes5
+                                .GetContainer(Constant.TEAMModelOS, "Teacher")
+                                .GetItemQueryStreamIterator(query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                     {
-                        foreach (var doc in json.RootElement.GetProperty("Documents").EnumerateArray())
+                        using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                        if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
                         {
-                            string id = doc.GetProperty("id").GetString();
-                            //TmidStics tmidStics = (tmidDic.ContainsKey(id)) ? tmidDic[id] : new() { id = id, ies5 = new TmidSticsIes5() { schools = new List<object>() } };
-                            TmidStics tmidStics;
-                            if (tmidDic.ContainsKey(id))
+                            foreach (var doc in json.RootElement.GetProperty("Documents").EnumerateArray())
                             {
-                                tmidStics = tmidDic[id];
-                            } else
-                            {
-                                tmidStics = new TmidStics();
-                                tmidStics.id = id;
-                            }
-
-                            //IES5學校資訊
-                            string defaultschool = (doc.TryGetProperty("defaultSchool", out JsonElement _defaultSchool)) ? _defaultSchool.ToString() : string.Empty; //預設學校
-                            List<string> schoolIds = new List<string>();
-                            if (doc.TryGetProperty("schools", out JsonElement schoolsJobj))
-                            {
-                                foreach (var obj in schoolsJobj.EnumerateArray())
+                                string id = doc.GetProperty("id").GetString();
+                                TmidStics tmidStics = tmidDic[id];
+                                //IES5學校資訊
+                                string defaultschool = (doc.TryGetProperty("defaultSchool", out JsonElement _defaultSchool)) ? _defaultSchool.ToString() : string.Empty; //預設學校
+                                List<string> schoolIds = new List<string>();
+                                if (doc.TryGetProperty("schools", out JsonElement schoolsJobj))
                                 {
-                                    string schoolCodeNow = $"{obj.GetProperty("schoolId")}";
-                                    string status = $"{obj.GetProperty("status")}";
-                                    if(status.Equals("join"))
+                                    foreach (var obj in schoolsJobj.EnumerateArray())
                                     {
-                                        schoolIds.Add(schoolCodeNow); //放入學校ID列,一次取
+                                        string schoolCodeNow = $"{obj.GetProperty("schoolId")}";
+                                        string status = $"{obj.GetProperty("status")}";
+                                        if (status.Equals("join"))
+                                        {
+                                            schoolIds.Add(schoolCodeNow); //放入學校ID列,一次取
+                                        }
                                     }
                                 }
-                            }
-                            if (schoolIds.Count > 0)
-                            {
-                                QueryDefinition querysc = new QueryDefinition(@"SELECT c.id, c.name, c.region, c.province, c.city, c.dist, c.size, c.period FROM c WHERE ARRAY_CONTAINS(@key, c.id)")
-                                    .WithParameter("@key", schoolIds);
-                                await foreach (var itemsc in cosmosClientIes5
-                                    .GetContainer(Constant.TEAMModelOS, "School")
-                                    .GetItemQueryStreamIterator(querysc, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
+                                if (schoolIds.Count > 0)
                                 {
-                                    using var jsonsc = await JsonDocument.ParseAsync(itemsc.ContentStream);
-                                    if (jsonsc.RootElement.TryGetProperty("_count", out JsonElement countsc) && countsc.GetUInt16() > 0)
+                                    QueryDefinition querysc = new QueryDefinition(@"SELECT c.id, c.name, c.region, c.province, c.city, c.dist, c.size, c.period FROM c WHERE ARRAY_CONTAINS(@key, c.id)")
+                                        .WithParameter("@key", schoolIds);
+                                    await foreach (var itemsc in cosmosClientIes5
+                                        .GetContainer(Constant.TEAMModelOS, "School")
+                                        .GetItemQueryStreamIterator(querysc, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                                     {
-                                        foreach (var school in jsonsc.RootElement.GetProperty("Documents").EnumerateArray())
+                                        using var jsonsc = await JsonDocument.ParseAsync(itemsc.ContentStream);
+                                        if (jsonsc.RootElement.TryGetProperty("_count", out JsonElement countsc) && countsc.GetUInt16() > 0)
                                         {
-                                            string schoolCodeNow = school.GetProperty("id").GetString();
-                                            //當前學年 ※若有多學段,取第一個學段來取得學年資訊吧
-                                            Period period = school.GetProperty("period").Deserialize<List<Period>>().First();
-                                            var info = SchoolService.GetSemester(period, 0, DateTime.Now.ToString());
-                                            int studyYear = info.studyYear;
-                                            //學校Blob使用狀況
-                                            (long usedSize, long teach, long total, long surplus, Dictionary<string, double?> catalog) schoolUsedBlob = await BlobService.GetSurplusSpace(schoolCodeNow, "school", _option.Location, _azureCosmos, _azureRedis, _azureStorage, _dingDing, _httpTrigger);
-                                            //老師在此學校的課程數 ※只取當前學年
-                                            int courseCnt = 0;
-                                            var queryCrs = $"SELECT VALUE COUNT(1) FROM ( SELECT DISTINCT VALUE(c.id) FROM c JOIN schedules IN c.schedules WHERE schedules.teacherId = '{id}' AND c.year = {studyYear} )";
-                                            await foreach (int itemCrs in cosmosClientIes5.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<int>(queryText: queryCrs, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"CourseTask-{schoolCodeNow}") }))
+                                            foreach (var school in jsonsc.RootElement.GetProperty("Documents").EnumerateArray())
                                             {
-                                                courseCnt = itemCrs;
+                                                string schoolCodeNow = school.GetProperty("id").GetString();
+                                                //當前學年 ※若有多學段,取第一個學段來取得學年資訊吧
+                                                Period period = school.GetProperty("period").Deserialize<List<Period>>().First();
+                                                var info = SchoolService.GetSemester(period, 0, DateTime.Now.ToString());
+                                                int studyYear = info.studyYear;
+                                                //學校Blob使用狀況
+                                                (long usedSize, long teach, long total, long surplus, Dictionary<string, double?> catalog) schoolUsedBlob = await BlobService.GetSurplusSpace(schoolCodeNow, "school", _option.Location, _azureCosmos, _azureRedis, _azureStorage, _dingDing, _httpTrigger);
+                                                //老師在此學校的課程數 ※只取當前學年
+                                                int courseCnt = 0;
+                                                var queryCrs = $"SELECT VALUE COUNT(1) FROM ( SELECT DISTINCT VALUE(c.id) FROM c JOIN schedules IN c.schedules WHERE schedules.teacherId = '{id}' AND c.year = {studyYear} )";
+                                                await foreach (int itemCrs in cosmosClientIes5.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<int>(queryText: queryCrs, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"CourseTask-{schoolCodeNow}") }))
+                                                {
+                                                    courseCnt = itemCrs;
+                                                }
+                                                //IES5學校資料製作
+                                                TmidSticsIes5School schoolobj = new TmidSticsIes5School();
+                                                long ssize = (school.TryGetProperty("size", out JsonElement ssizeJson)) ? ssizeJson.GetInt32() : 0;
+                                                long sused = schoolUsedBlob.usedSize + schoolUsedBlob.teach * 1073741824;
+                                                long stotal = ssize * 1073741824;
+                                                object schzize = new
+                                                {
+                                                    used = sused,
+                                                    total = stotal,
+                                                    avaliable = stotal - sused,
+                                                };
+                                                schoolobj.schoolId = schoolCodeNow;
+                                                schoolobj.name = school.GetProperty("name").GetString();
+                                                schoolobj.region = school.GetProperty("region").GetString();
+                                                schoolobj.province = school.GetProperty("province").GetString();
+                                                schoolobj.city = school.GetProperty("city").GetString();
+                                                schoolobj.dist = school.GetProperty("dist").GetString();
+                                                schoolobj.size = schzize;
+                                                schoolobj.courseCnt = courseCnt;
+                                                schoolobj.defaultSchool = (!string.IsNullOrWhiteSpace(defaultschool) && defaultschool.Equals(schoolCodeNow)) ? true : false;
+
+                                                tmidStics.ies5.schools.Add(schoolobj);
                                             }
-                                            //IES5學校資料製作
-                                            TmidSticsIes5School schoolobj = new TmidSticsIes5School();
-                                            long ssize = (school.TryGetProperty("size", out JsonElement ssizeJson)) ? ssizeJson.GetInt32() : 0;
-                                            long sused = schoolUsedBlob.usedSize + schoolUsedBlob.teach * 1073741824;
-                                            long stotal = ssize * 1073741824;
-                                            object schzize = new
-                                            {
-                                                used = sused,
-                                                total = stotal,
-                                                avaliable = stotal - sused,
-                                            };
-                                            schoolobj.schoolId = schoolCodeNow;
-                                            schoolobj.name = school.GetProperty("name").GetString();
-                                            schoolobj.region = school.GetProperty("region").GetString();
-                                            schoolobj.province = school.GetProperty("province").GetString();
-                                            schoolobj.city = school.GetProperty("city").GetString();
-                                            schoolobj.dist = school.GetProperty("dist").GetString();
-                                            schoolobj.size = schzize;
-                                            schoolobj.courseCnt = courseCnt;
-                                            schoolobj.defaultSchool = (!string.IsNullOrWhiteSpace(defaultschool) && defaultschool.Equals(schoolCodeNow)) ? true : false;
-
-                                            tmidStics.ies5.schools.Add(schoolobj);
                                         }
                                     }
                                 }
-                            }
 
-                            //IES5個人空間
-                            var (usedSize, teach, total, surplus, catalog) = await BlobService.GetSurplusSpace(id, "private", _option.Location, _azureCosmos, _azureRedis, _azureStorage, _dingDing, _httpTrigger);
-                            tmidStics.ies5.usedSize = usedSize;
-                            tmidStics.ies5.teachSize = teach * 1073741824;
-                            tmidStics.ies5.totalSize = total * 1073741824;
-                            tmidStics.ies5.surplusSize = surplus;
-                            //IES5個人資源數
-                            tmidStics.ies5.resCount = 0; //教材數
-                            tmidStics.ies5.itemCount = 0; //題目數
-                            tmidStics.ies5.paperCount = 0; //試卷數
-                            ///IES5個人題目數
-                            await foreach (int itemC in cosmosClientIes5.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<int>(queryText: $"SELECT VALUE COUNT(1) FROM c WHERE c.pid = null", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Item-{id}") }))
-                            {
-                                tmidStics.ies5.itemCount = itemC;
-                            }
-                            ///IES5個人試卷數
-                            await foreach (int paperC in cosmosClientIes5.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<int>(queryText: $"SELECT VALUE COUNT(1) FROM c WHERE c.scope = 'private'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Paper-{id}") }))
-                            {
-                                tmidStics.ies5.paperCount = paperC;
-                            }
-                            ///IES5個人教材數
-                            List<BlobService.BlobCount> blogCountList = await BlobService.BloblogCount(cosmosClientIes5, "private", id, "", "");
-                            foreach (BlobService.BlobCount blobCountRow in blogCountList)
-                            {
-                                switch (blobCountRow.type)
+                                //IES5個人空間
+                                var (usedSize, teach, total, surplus, catalog) = await BlobService.GetSurplusSpace(id, "private", _option.Location, _azureCosmos, _azureRedis, _azureStorage, _dingDing, _httpTrigger);
+                                tmidStics.ies5.usedSize = usedSize;
+                                tmidStics.ies5.teachSize = teach * 1073741824;
+                                tmidStics.ies5.totalSize = total * 1073741824;
+                                tmidStics.ies5.surplusSize = surplus;
+                                //IES5個人資源數
+                                tmidStics.ies5.resCount = 0; //教材數
+                                tmidStics.ies5.itemCount = 0; //題目數
+                                tmidStics.ies5.paperCount = 0; //試卷數
+                                ///IES5個人題目數
+                                await foreach (int itemC in cosmosClientIes5.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<int>(queryText: $"SELECT VALUE COUNT(1) FROM c WHERE c.pid = null", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Item-{id}") }))
                                 {
-                                    case "doc":
-                                    case "image":
-                                    case "res":
-                                    case "video":
-                                    case "audio":
-                                    case "other":
-                                        tmidStics.ies5.resCount += blobCountRow.count;
-                                        break;
+                                    tmidStics.ies5.itemCount = itemC;
                                 }
+                                ///IES5個人試卷數
+                                await foreach (int paperC in cosmosClientIes5.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<int>(queryText: $"SELECT VALUE COUNT(1) FROM c WHERE c.scope = 'private'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Paper-{id}") }))
+                                {
+                                    tmidStics.ies5.paperCount = paperC;
+                                }
+                                ///IES5個人教材數
+                                List<BlobService.BlobCount> blogCountList = await BlobService.BloblogCount(cosmosClientIes5, "private", id, "", "");
+                                foreach (BlobService.BlobCount blobCountRow in blogCountList)
+                                {
+                                    switch (blobCountRow.type)
+                                    {
+                                        case "doc":
+                                        case "image":
+                                        case "res":
+                                        case "video":
+                                        case "audio":
+                                        case "other":
+                                            tmidStics.ies5.resCount += blobCountRow.count;
+                                            break;
+                                    }
+                                }
+                                if (!tmidDic.ContainsKey(id)) tmidDic.Add(id, tmidStics);
                             }
-                            if(!tmidDic.ContainsKey(id)) tmidDic.Add(id, tmidStics);
                         }
                     }
                 }
-
                 //個人權益
-                query = new QueryDefinition(@"SELECT * FROM c WHERE (ARRAY_CONTAINS(@key, c.id))")
-                      .WithParameter("@key", tmidDic.Keys.ToList());
-                await foreach (var item in cosmosClientCsv2
-                            .GetContainer("Core", "ID2")
-                            .GetItemQueryStreamIterator(query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("benefits") }))
+                if (eventList.Contains("benefits"))
                 {
-                    using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                    if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                    query = new QueryDefinition(@"SELECT * FROM c WHERE (ARRAY_CONTAINS(@key, c.id))")
+                                          .WithParameter("@key", tmidDic.Keys.ToList());
+                    await foreach (var item in cosmosClientCsv2
+                                .GetContainer("Core", "ID2")
+                                .GetItemQueryStreamIterator(query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("benefits") }))
                     {
-                        foreach (var doc in json.RootElement.GetProperty("Documents").EnumerateArray())
+                        using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                        if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
                         {
-                            string id = doc.GetProperty("id").GetString();
-                            if (doc.TryGetProperty("hiteach", out var elementHiteachData))
-                            {
-                                tmidDic[id].benefits.hiteach = elementHiteachData.ToObject<List<object>>();
-                            }
-                            if (doc.TryGetProperty("hiteachcc", out var elementHiteachCCData))
+                            foreach (var doc in json.RootElement.GetProperty("Documents").EnumerateArray())
                             {
-                                tmidDic[id].benefits.hiteachcc = elementHiteachCCData.ToObject<List<object>>();
+                                string id = doc.GetProperty("id").GetString();
+                                if (doc.TryGetProperty("hiteach", out var elementHiteachData))
+                                {
+                                    tmidDic[id].benefits.hiteach = elementHiteachData.ToObject<List<object>>();
+                                }
+                                if (doc.TryGetProperty("hiteachcc", out var elementHiteachCCData))
+                                {
+                                    tmidDic[id].benefits.hiteachcc = elementHiteachCCData.ToObject<List<object>>();
+                                }
                             }
                         }
                     }
                 }
-
                 //蘇格拉底資料
-                query = new QueryDefinition(@"SELECT * FROM c WHERE (ARRAY_CONTAINS(@key, c.id))")
-                      .WithParameter("@key", tmidDic.Keys.ToList());
-                await foreach (var item in cosmosClientCsv2
-                            .GetContainer("Core", "ID2")
-                            .GetItemQueryStreamIterator(query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("sokrates") }))
+                if (eventList.Contains("sokrates"))
                 {
-                    using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                    if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                    query = new QueryDefinition(@"SELECT * FROM c WHERE (ARRAY_CONTAINS(@key, c.id))")
+                      .WithParameter("@key", tmidDic.Keys.ToList());
+                    await foreach (var item in cosmosClientCsv2
+                                .GetContainer("Core", "ID2")
+                                .GetItemQueryStreamIterator(query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("sokrates") }))
                     {
-                        foreach (var doc in json.RootElement.GetProperty("Documents").EnumerateArray())
+                        using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                        if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
                         {
-                            string id = doc.GetProperty("id").GetString();
-                            if (doc.TryGetProperty("hiteach_data", out var elementHiteachData))
+                            foreach (var doc in json.RootElement.GetProperty("Documents").EnumerateArray())
                             {
-                                tmidDic[id].sokrates.hiteach_data = elementHiteachData.ToObject<object>();
-                            }
-                            if (doc.TryGetProperty("user_channels", out var elementUserChannels))
-                            {
-                                tmidDic[id].sokrates.user_channels = elementUserChannels.ToObject<object>();
+                                string id = doc.GetProperty("id").GetString();
+                                if (doc.TryGetProperty("hiteach_data", out var elementHiteachData))
+                                {
+                                    tmidDic[id].sokrates.hiteach_data = elementHiteachData.ToObject<object>();
+                                }
+                                if (doc.TryGetProperty("user_channels", out var elementUserChannels))
+                                {
+                                    tmidDic[id].sokrates.user_channels = elementUserChannels.ToObject<object>();
+                                }
                             }
                         }
                     }