using 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;
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").GetItemQueryIterator(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.Status == 200)
{
using var fileJson = await JsonDocument.ParseAsync(responSett.ContentStream);
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").GetItemQueryIterator(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;
}
}
}