using Microsoft.Azure.Cosmos; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using TEAMModelOS.SDK.Models.Cosmos.BI; using TEAMModelOS.SDK.Models.Service.BI; using TEAMModelOS.SDK.DI; namespace TEAMModelOS.SDK.Models.Service.BIStatsWay { public static class LessonRecordStatsWay { /// /// 课例 /// /// /// /// public static async Task GetSchoolAll(CosmosClient cosmosClient, string id,int year = 0) { LessonStats lessStats = new(); DateTimeOffset dateTime = DateTimeOffset.UtcNow; if (year < dateTime.Year) dateTime = new(year, 12, 31, 23, 59, 59, TimeSpan.Zero); var (lastDayS, lastdayE) = TimeHelper.GetStartOrEnd(dateTime.AddDays(-1)); //昨天开始时间 var (dayS, dayE) = TimeHelper.GetStartOrEnd(dateTime); //今天开始时间 var (lastWeekS, lastWeekE) = TimeHelper.GetStartOrEnd(dateTime, "lastweek"); //计算上周开始/结束时间 var (weekS, weekE) = TimeHelper.GetStartOrEnd(dateTime, "week"); //计算本周开始/结束时间 var (lastTermS, lastTermE) = TimeHelper.GetStartOrEnd(dateTime, "lastterm"); //计算上学期开始/结束时间 var (termS, termE) = TimeHelper.GetStartOrEnd(dateTime, "term"); //计算本学期开始/结束时间 var (lastMthS, LastmthE) = TimeHelper.GetStartOrEnd(dateTime, "lastMonth"); //上月开始/结束时间 var (mthS, mthE) = TimeHelper.GetStartOrEnd(dateTime, "month"); //本月开始/结束时间 var (lastYearS, lastYearE) = TimeHelper.GetStartOrEnd(DateTimeOffset.Parse($"{dateTime.Year - 1}-1-1"), "year"); //计算去年开始/结束时间 var (yearS, yearE) = TimeHelper.GetStartOrEnd(dateTime, "year"); //计算今年开始/结束时间 string currSql = "select value(count(c.id)) from c where c.pk='LessonRecord'"; lessStats.all = await JointlySingleQuery.GetValueInt(cosmosClient, "School", $"LessonRecord-{id}", currSql); lessStats.open = await JointlySingleQuery.GetValueInt(cosmosClient, "School", $"LessonRecord-{id}", $"{currSql} and c.upload = 0"); lessStats.less = await JointlySingleQuery.GetValueInt(cosmosClient, "School", $"LessonRecord-{id}", $"{currSql} and c.upload = 1"); List lessRelStats = new(); string sql = $"select c.id,c.code,c.startTime,c.clientInteractionCount from c where c.pk='LessonRecord' and c.startTime >= {yearS} and c.startTime <= {yearE}"; await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryIteratorSql(queryText: sql, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"LessonRecord-{id}") })) { lessRelStats.Add(item); } lessStats.lastDay = lessRelStats.FindAll(f => f.startTime >= lastDayS && f.startTime <= lastdayE).ToList().Count; lessStats.day = lessRelStats.FindAll(f => f.startTime >= dayS && f.startTime <= dayE).ToList().Count; lessStats.lastWeek = lessRelStats.FindAll(f => f.startTime >= lastWeekS && f.startTime <= lastWeekE).ToList().Count; lessStats.week = lessRelStats.FindAll(f => f.startTime >= weekS && f.startTime <= weekE).ToList().Count; lessStats.lastTerm = lessRelStats.FindAll(f => f.startTime >= lastTermS && f.startTime <= lastTermE).ToList().Count; lessStats.term = lessRelStats.FindAll(f => f.startTime >= termS && f.startTime <= termE).ToList().Count; lessStats.month = lessRelStats.FindAll(f => f.startTime >= mthS && f.startTime <= mthE).ToList().Count; lessStats.lastMonth = lessRelStats.FindAll(f => f.startTime >= lastMthS && f.startTime <= LastmthE).ToList().Count; lessStats.lastDayInter = lessRelStats.FindAll(f => f.startTime >= lastDayS && f.startTime <= lastdayE).ToList().Select(s => s.clientInteractionCount).Sum(); lessStats.dayInter = lessRelStats.FindAll(f => f.startTime >= dayS && f.startTime <= dayS).ToList().Select(s => s.clientInteractionCount).Sum(); lessStats.lastMonthInter = lessRelStats.FindAll(f => f.startTime >= lastMthS && f.startTime <= LastmthE).ToList().Select(s => s.clientInteractionCount).Sum(); lessStats.monthInter = lessRelStats.FindAll(f => f.startTime >= mthS && f.startTime <= mthE).ToList().Select(s => s.clientInteractionCount).Sum(); lessStats.allInter = await JointlySingleQuery.GetValueInt(cosmosClient, "School", $"LessonRecord-{id}", $"select value(sum(c.clientInteractionCount)) from c where c.startTime <= {yearE}"); lessStats.lastYearInter = await JointlySingleQuery.GetValueInt(cosmosClient, "School", $"LessonRecord-{id}", $"select value(sum(c.clientInteractionCount)) from c where c.startTime >= {lastYearS} and c.startTime <= {lastYearE}"); //lessStats.yearInter = lessRelStats.FindAll(f => f.startTime >= yearS && f.startTime <= yearE).ToList().Select(s => s.clientInteractionCount).Sum(); DateTimeOffset yearDay = new(year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second, TimeSpan.Zero); List everyDay = TimeHelper.GetYearEveryDay(yearDay); List Inters = new(); for (int i = 0; i < everyDay.Count; i++) { Inters.Add((double)lessRelStats.FindAll(f => (f.startTime >= everyDay[i].start && f.startTime <= everyDay[i].end)).Select(s => s.clientInteractionCount).Sum()); } if (Inters.Count < 366) { Inters.Add(0); } if (Inters.Count > 0) { lessStats.yearInters = Inters; } List lessYear = new(); for (int i = 0; i < everyDay.Count; i++) { lessYear.Add(lessRelStats.FindAll(f => (f.startTime >= everyDay[i].start && f.startTime <= everyDay[i].end)).Count); } if (lessYear.Count < 366) { lessYear.Add(0); } if (Inters.Count > 0) { lessStats.year = lessYear; } lessStats.upTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); return lessStats; } } }