using Microsoft.Azure.Cosmos; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json; using System.Threading.Tasks; using TEAMModelOS.SDK.Extension; using TEAMModelOS.SDK.Models.Cosmos.BI; using TEAMModelOS.SDK.DI; namespace TEAMModelOS.SDK.Models.Service.BIStatsWay { public static class StudyStatsWay { /// /// 学校研修统计 /// /// /// /// public static async Task GetSchoolAll(CosmosClient cosmosClient, string scId) { StudyStats studyStats = new(); List trains = new(); School school = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemAsync($"{scId}", new PartitionKey("Base")); //cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryIteratorSql(queryText:$"select value(c.areaId) from c where c.id='{scId}'", requestOptions:new QueryRequestOptions() { PartitionKey = new PartitionKey("Base")}); AreaSetting setting = null; var responSett = await cosmosClient.GetContainer("TEAMModelOS", "Normal").ReadItemStreamAsync($"{school.areaId}", new PartitionKey("AreaSetting")); if (responSett.StatusCode == System.Net.HttpStatusCode.OK) { using var fileJson = await JsonDocument.ParseAsync(responSett.Content); setting = fileJson.ToObject(); } if (setting == null) { setting = new AreaSetting { allTime = 50, classTime = 5, submitTime = 15, onlineTime = 20, offlineTime = 10, lessonMinutes = 45, }; } await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "Teacher").GetItemQueryIteratorSql(queryText: $"select c.id,c.code,c.totalTime,c.onlineTime,c.offlineTime,c.classTime,c.currency from c where c.pk='TeacherTrain' and c.school='{scId}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"TeacherTrain-{scId}") })) { trains.Add(item); } studyStats.learnTime = trains.Select(s=>s.totalTime).Sum(); trains.ForEach(x => { //线上研修 if (x.onlineTime == 0) studyStats.online++; else if (x.onlineTime >= setting.onlineTime) studyStats.online++; else studyStats.online++; //线下研修 if (x.offlineTime == 0) studyStats.offline++; else if (x.onlineTime >= setting.offlineTime) studyStats.offline++; else studyStats.offline++; //课堂实录 if (x.classTime == 0) studyStats.classRoom++; else if (x.classTime >= setting.classTime) studyStats.classRoom++; else studyStats.classRoom++; //认证材料 if (x.currency.submitTime == 0) studyStats.submit++; else if (x.currency.submitTime >= setting.submitTime) studyStats.submit++; else studyStats.submit++; if (x.currency.submitTime == 0 && x.classTime == 0 && x.offlineTime == 0 && x.onlineTime == 0) studyStats.notStarted++; else if (x.currency.submitTime >= setting.submitTime && x.classTime >= setting.classTime && x.onlineTime >= setting.offlineTime && x.onlineTime >= setting.onlineTime) studyStats.finish++; else studyStats.ongoing++; }); studyStats.upTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); return studyStats; } } }