using System;
using System.Collections.Generic;
using System.Dynamic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
using Azure.Cosmos;
using Azure.Storage.Blobs;
using DocumentFormat.OpenXml.Bibliography;
using MathNet.Numerics.LinearAlgebra.Double;
using Microsoft.AspNetCore.Http;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Configuration;
using NUnit.Framework.Constraints;
using StackExchange.Redis;
using TEAMModelOS.SDK.Context.Constant;
using TEAMModelOS.SDK.DI;
using TEAMModelOS.SDK.Extension;
using TEAMModelOS.SDK.Models;
using TEAMModelOS.SDK.Models.Cosmos.BI;
using TEAMModelOS.SDK.Models.Cosmos.BI.BISchool;
using TEAMModelOS.SDK.Models.Service.BI;
using TEAMModelOS.SDK.Models.Service.BIStatsWay;
namespace TEAMModelOS.FunctionV4
{
public class BIHttpTrigger
{
private readonly AzureCosmosFactory _azureCosmos;
private readonly DingDing _dingDing;
private readonly AzureStorageFactory _azureStorage;
private readonly AzureRedisFactory _azureRedis;
private readonly IConfiguration _configuration;
private readonly IHttpClientFactory _httpClient;
public BIHttpTrigger(AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis, IConfiguration configuration, IHttpClientFactory httpClient)
{
_azureCosmos = azureCosmos;
_dingDing = dingDing;
_azureStorage = azureStorage;
_azureRedis = azureRedis;
_configuration = configuration;
_httpClient = httpClient;
}
///
/// 学校信息BI中间件更新
///
///
///
//[Function("set-sc-birelation")]
public async Task upSchoolBIRelation([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestData req)
{
var response = req.CreateResponse(HttpStatusCode.OK);
dynamic jsondata = new ExpandoObject();
try
{
var cosmosClient = _azureCosmos.GetCosmosClient();
var tableClient = _azureStorage.GetCloudTableClient();
var blobClient = _azureStorage.GetBlobContainerClient(containerName: "0-public");
string data = await new StreamReader(req.Body).ReadToEndAsync();
var json = JsonDocument.Parse(data).RootElement;
School school = new();
jsondata = json;
if (json.TryGetProperty("school", out JsonElement _school))
{
school = _school.ToObject();
}
string type = "";
BIRelation bIRelation = new();
var resBiRel = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(school.id, new PartitionKey("BIRel"));
if (resBiRel.Status == 200)
{
using var fileJson = await JsonDocument.ParseAsync(resBiRel.ContentStream);
bIRelation = fileJson.ToObject();
}
else
bIRelation.id = school.id;
string aName = null;
if (!string.IsNullOrEmpty($"{school.areaId}"))
aName = await CosmosQueryHelper.GetStr(cosmosClient, "Normal", $"select value(c.name) from c where c.id='{school.areaId}'", "Base-Area");
bIRelation.name = school.name;
bIRelation.picture = school.picture;
bIRelation.region = school.region;
bIRelation.province = school.province;
bIRelation.city = school.city;
bIRelation.dist = school.dist;
bIRelation.address = school.address;
bIRelation.areaId = school.areaId;
bIRelation.size = school.size;
bIRelation.scale = school.scale;
bIRelation.upDate = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
bIRelation.areaName = aName;
if (resBiRel.Status == 200)
{
await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync(bIRelation, bIRelation.id, new PartitionKey("BIRel"));
type = "update";
}
else
{
await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync(bIRelation, new PartitionKey("BIRel"));
type = "add";
}
//保存操作记录
await AzureStorageBlobExtensions.SaveBILog(blobClient, tableClient, $"birelation-{type}", $"触发更新学校信息表中间件", _dingDing);
}
catch (Exception ex)
{
await _dingDing.SendBotMsg($"BIFunction, {Environment.GetEnvironmentVariable("Option:Location")}, upSchoolBIRelation(),{ex.Message}\n{ex.StackTrace}\n{jsondata.ToJsonString()}", GroupNames.成都开发測試群組);
}
return response;
}
///
/// 统计学校的信息
///
///
///
//[Function("stats-sc-info")]
public async Task StatsSchoolInfo([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestData req)
{
var response = req.CreateResponse(HttpStatusCode.OK);
dynamic jsondata = new ExpandoObject();
try
{
string scId = null;
var cosmosClient = _azureCosmos.GetCosmosClient();
var redisClinet = _azureRedis.GetRedisClient(8);
var tableClient = _azureStorage.GetCloudTableClient();
var blobClient = _azureStorage.GetBlobContainerClient(containerName: "0-public");
string data = await new StreamReader(req.Body).ReadToEndAsync();
var json = JsonDocument.Parse(data).RootElement;
jsondata = json;
if (json.TryGetProperty("schoolId", out JsonElement _schoolId))
{
scId = $"{_schoolId}";
}
if (string.IsNullOrEmpty(scId))
{
return response;
}
bool locKey = await _azureRedis.GetRedisClient(8).KeyExistsAsync($"Train:Statistics:Lock:{scId}");
if (!locKey)
{
await _azureRedis.GetRedisClient(8).SetAddAsync($"Train:Statistics:Lock:{scId}", new RedisValue(scId));
DateTime minutes = DateTime.UtcNow.AddMinutes(15); //15分钟
await _azureRedis.GetRedisClient(8).KeyExpireAsync($"Train:Statistics:Lock:{scId}", minutes);
bool isExist = true;
StatsInfo statsInfo = new();
var scDataStats = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{scId}", new PartitionKey("Stats"));
if (scDataStats.Status == 200)
{
using var fileJson = await JsonDocument.ParseAsync(scDataStats.ContentStream);
statsInfo = fileJson.ToObject();
}
else
isExist = false;
statsInfo = await SchoolStatsWay.GetSingleSc(cosmosClient,redisClinet, scId);
statsInfo.witRoom = ((int)await SchoolStatsWay.GetShoolWisdomRoomCount(_azureCosmos, _azureRedis, _configuration, _httpClient,_dingDing, scId)); //智慧教师
statsInfo.upTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
if (isExist)
statsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync(statsInfo, statsInfo.id, new PartitionKey("Stats"));
else
statsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync(statsInfo, new PartitionKey("Stats"));
}
//保存操作记录
await AzureStorageBlobExtensions.SaveBILog(blobClient, tableClient, "trigger-schoolStats", $"触发更新统计数据库", _dingDing);
}
catch (Exception ex)
{
await _dingDing.SendBotMsg($"BIFunction,{Environment.GetEnvironmentVariable("Option:Location")}, StatsSchoolInfo() \n {ex.Message}\n{ex.StackTrace}\n{jsondata.ToJsonString()}", GroupNames.成都开发測試群組);
}
return response;
}
public async Task SetSchoolStatsInfo([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestData req)
{
var response = req.CreateResponse(HttpStatusCode.OK);
dynamic jsondata = new ExpandoObject();
string data = await new StreamReader(req.Body).ReadToEndAsync();
var json = JsonDocument.Parse(data).RootElement;
jsondata = json;
try
{
School school = null;
if (json.TryGetProperty("school", out JsonElement _school))
school = _school.ToObject();
DateTimeOffset dateOff = DateTimeOffset.UtcNow;
var cosmosClient = _azureCosmos.GetCosmosClient();
if (school != null)
{
StatsInfo statsInfo = new();
var resStats = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{dateOff.Year}-{school.id}", new PartitionKey("Statistics"));
if (resStats.Status == 200)
{
using var fileJson = await JsonDocument.ParseAsync(resStats.ContentStream);
statsInfo = fileJson.ToObject();
}
else
{
double[] tchYear = new double[366];
tchYear[0] = 1;
statsInfo.id = $"{dateOff.Year}-{school.id}";
statsInfo.year = dateOff.Year;
statsInfo.stuYear = new double[366].ToList();
statsInfo.tchYear = tchYear.ToList();
statsInfo.tch = 1;
statsInfo.weekTch = 1;
statsInfo.monthTch = 1;
statsInfo.tchUpTime = dateOff.ToUnixTimeMilliseconds();
statsInfo.lesson.year = new double[366].ToList();
statsInfo.lesson.yearInters = new double[366].ToList();
statsInfo.activity.year = new double[366].ToList();
}
statsInfo.schoolId = school.id;
statsInfo.name = school.name;
statsInfo.picture = school.picture;
statsInfo.size = school.size;
statsInfo.scCreateTime = school.createTime;
statsInfo.areaId = school.areaId;
statsInfo.upTime = dateOff.ToUnixTimeMilliseconds();
if (resStats.Status == 200)
await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(statsInfo, statsInfo.id, new PartitionKey("Statistics"));
else
await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync(statsInfo, new PartitionKey("Statistics"));
}
}
catch (Exception ex)
{
await _dingDing.SendBotMsg($"BIFunction,{Environment.GetEnvironmentVariable("Option:Location")}, SetSchoolStatsInfo() \n{ex.Message}\n{ex.StackTrace}\n{jsondata.ToJsonString()}", GroupNames.成都开发測試群組);
}
return response;
}
///
/// 处理传过来的信息加入到统计信息中
///
///
///
//[Function("set-scstats-type")]
public async Task SetSchoolStatsType([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestData req)
{
var response = req.CreateResponse(HttpStatusCode.OK);
dynamic jsondata = new ExpandoObject();
try
{
string data = await new StreamReader(req.Body).ReadToEndAsync();
var json = JsonDocument.Parse(data).RootElement;
jsondata = json;
var cosmosClient = _azureCosmos.GetCosmosClient();
string scId = null, type = null;
long careDate = 0;
int count = 0;
int interaction = 0;
int lessType = 0;
DateTimeOffset cuurDateOff = DateTimeOffset.UtcNow;
DateTimeOffset dateOff = DateTimeOffset.UtcNow;
if (json.TryGetProperty("scId", out JsonElement _schoolId))
scId = $"{_schoolId}";
if (json.TryGetProperty("type", out JsonElement _type))
type = $"{_type}";
if (string.IsNullOrEmpty($"{_schoolId}") && string.IsNullOrEmpty($"{_type}"))
{
await _dingDing.SendBotMsg($"set-scstats-type, {json}", GroupNames.成都开发測試群組);
return response;
}
if (json.TryGetProperty("cnt", out JsonElement _cnt))
count = _cnt.GetInt32();
if (json.TryGetProperty("interaction", out JsonElement _interaction))
interaction = _interaction.GetInt32();
if (json.TryGetProperty("lessType", out JsonElement _lessType))
lessType = _lessType.GetInt32();
if (json.TryGetProperty("date", out JsonElement _date))
careDate = _date.GetInt64();
else
careDate = dateOff.ToUnixTimeMilliseconds();
var (lastWeekS, lastWeekE) = TimeHelper.GetStartOrEnd(dateOff, "lastweek"); //计算上周开始/结束时间
var (weekS, weekE) = TimeHelper.GetStartOrEnd(dateOff, "week"); //计算本周开始/结束时间
var (lastMonthS, lastMonthE) = TimeHelper.GetStartOrEnd(dateOff, "lastMonth"); //上月开始/结束时间
var (monthS, monthE) = TimeHelper.GetStartOrEnd(dateOff, "month"); //本月开始/结束时间
var (lastTermS, lastTermE) = TimeHelper.GetStartOrEnd(dateOff, "lastterm"); //计算上学期开始/结束时间
var (termS, termE) = TimeHelper.GetStartOrEnd(dateOff, "term"); //计算本学期开始/结束时间
var (yearS, yearE) = TimeHelper.GetStartOrEnd(cuurDateOff, "year"); //计算本学期开始/结束时间
var (weekDayS, weekDayE) = TimeHelper.GetLongToTime(weekS, weekE);
var (lWeekDayS, lWeekDayE) = TimeHelper.GetLongToTime(lastWeekS, lastWeekE);
var (lTermDayS, lTermDayE) = TimeHelper.GetLongToTime(lastTermS, lastTermE);
var (termDayS, termDayE) = TimeHelper.GetLongToTime(lastTermS, lastTermE);
var (lMonthS, lMonthE) = TimeHelper.GetLongToTime(lastMonthS, lastMonthE);
var (monthDayS, monthDayE) = TimeHelper.GetLongToTime(monthS, monthE);
var lastDay = dateOff.AddDays(-1);
int lmthDay = TimeHelper.GetDateDay(lMonthE);
StatsInfo statsInfo = new();
var resStsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{dateOff.Year}-{scId}", new PartitionKey("Statistics"));
if (resStsInfo.Status == 200)
{
using var fileJson = await JsonDocument.ParseAsync(resStsInfo.ContentStream);
statsInfo = fileJson.ToObject();
}
else
{
var resLastStsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{dateOff.Year - 1}-{scId}", new PartitionKey("Statistics"));
if (resLastStsInfo.Status == 200)
{
using var fileJson = await JsonDocument.ParseAsync(resStsInfo.ContentStream);
statsInfo = fileJson.ToObject();
statsInfo.id = $"{dateOff.Year}-{scId}";
statsInfo.year = dateOff.Year;
statsInfo.stuYear = new double[366].ToList();
statsInfo.tchYear = new double[366].ToList();
statsInfo.lesson.year = new double[366].ToList();
statsInfo.lesson.yearInters = new double[366].ToList();
statsInfo.activity.year = new double[366].ToList();
}
else
{
ScBase scBase = await cosmosClient.GetContainer("TEAMModelOS", "Common").ReadItemAsync(scId, new PartitionKey("Base"));
statsInfo.id = $"{dateOff.Year}-{scBase.id}";
statsInfo.schoolId = scBase.id;
statsInfo.name = scBase.name;
statsInfo.picture = scBase.picture;
statsInfo.size = scBase.size;
statsInfo.scCreateTime = scBase.createTime;
statsInfo.areaId = scBase.areaId;
statsInfo.upTime = careDate;
}
}
switch ($"{type}")
{
case "Exam":
statsInfo.activity.exam += count;
break;
case "Survey":
statsInfo.activity.survey += count;
break;
case "Vote":
statsInfo.activity.vote += count;
break;
case "Homework":
statsInfo.activity.homework += count;
break;
case "Less":
//课例
statsInfo.lesson.year[dateOff.DayOfYear] += count;
statsInfo.lesson.all += count;
if (lessType == 0)
statsInfo.lesson.open += count;
else
statsInfo.lesson.less += count;
statsInfo.lesson.lastDay = ((int)statsInfo.lesson.year[lastDay.DayOfYear]);
statsInfo.lesson.day = ((int)statsInfo.lesson.year[dateOff.DayOfYear]);
var lessList = DenseMatrix.OfColumns(new List>() { statsInfo.lesson.year });
statsInfo.lesson.lastWeek = ((int)lessList.SubMatrix(lWeekDayS.DayOfYear, 7, 0, lessList.ColumnCount).ColumnSums().Sum());
statsInfo.lesson.week = ((int)lessList.SubMatrix(weekDayS.DayOfYear, (dateOff.DayOfYear - weekDayS.DayOfYear), 0, lessList.ColumnCount).ColumnSums().Sum());
if (lastTermS <= statsInfo.lesson.upTime && statsInfo.lesson.upTime <= lastTermE)
{
if (lTermDayS.Year < dateOff.Year)
{
var lastLessSts = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{lTermDayS.Year}-{scId}", new PartitionKey("Statistics"));
if (lastLessSts.Status == 200)
{
using var fileJson = await JsonDocument.ParseAsync(lastLessSts.ContentStream);
var tempSts = fileJson.ToObject();
var actYer = DenseMatrix.OfColumns(new List>() { tempSts.lesson.year, statsInfo.lesson.year });
statsInfo.lesson.lastTerm = ((int)actYer.SubMatrix(lTermDayS.DayOfYear, lTermDayE.DayOfYear, 0, 1).ColumnSums().Sum());
}
}
}
if (termS <= statsInfo.lesson.upTime && statsInfo.lesson.upTime <= termE)
{
if (termDayS.Year < dateOff.Year)
{
var lastSts = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{termDayS.Year}-{scId}", new PartitionKey("Statistics"));
if (lastSts.Status == 200)
{
using var fileJson = await JsonDocument.ParseAsync(lastSts.ContentStream);
var tempSts = fileJson.ToObject();
var actYer = DenseMatrix.OfColumns(new List>() { tempSts.lesson.year, statsInfo.lesson.year });
statsInfo.lesson.term = ((int)actYer.SubMatrix(termDayS.DayOfYear, termDayE.DayOfYear, 0, 1).ColumnSums().Sum());
}
else
statsInfo.lesson.term += count;
}
}
statsInfo.lesson.lastMonth = ((int)lessList.SubMatrix(lMonthS.DayOfYear, lmthDay, 0, lessList.ColumnCount).ColumnSums().Sum());
statsInfo.lesson.month += ((int)lessList.SubMatrix(monthDayS.DayOfYear, (dateOff.DayOfYear - monthDayS.DayOfYear), 0, lessList.ColumnCount).ColumnSums().Sum());
//课例互动
statsInfo.lesson.yearInters[dateOff.DayOfYear] += interaction;
statsInfo.lesson.allInter += interaction;
statsInfo.lesson.lastDayInter = ((int)statsInfo.lesson.yearInters[lastDay.DayOfYear]);
statsInfo.lesson.dayInter = ((int)statsInfo.lesson.yearInters[dateOff.DayOfYear]);
var interList = DenseMatrix.OfColumns(new List>() { statsInfo.lesson.yearInters });
statsInfo.lesson.lastMonthInter = ((int)interList.SubMatrix(lMonthS.DayOfYear, lmthDay, 0, interList.ColumnCount).ColumnSums().Sum());
statsInfo.lesson.monthInter += ((int)interList.SubMatrix(monthDayS.DayOfYear, (dateOff.DayOfYear - monthDayS.DayOfYear), 0, interList.ColumnCount).ColumnSums().Sum());
if (lastTermS <= statsInfo.lesson.upTime && statsInfo.lesson.upTime <= lastTermE)
{
if (lTermDayS.Year < dateOff.Year)
{
var lastSts = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{lTermDayS.Year}-{scId}", new PartitionKey("Statistics"));
if (lastSts.Status == 200)
{
using var fileJson = await JsonDocument.ParseAsync(lastSts.ContentStream);
var tempSts = fileJson.ToObject();
statsInfo.lesson.lastYearInter = ((int)tempSts.lesson.yearInters.Sum());
}
else
statsInfo.lesson.lastYearInter = 0;
}
}
statsInfo.lesson.upTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
break;
case "Student":
statsInfo.stuYear[dateOff.DayOfYear] += count;
statsInfo.stu += count;
statsInfo.dayStu = ((int)statsInfo.stuYear[dateOff.DayOfYear]);
var stuList = DenseMatrix.OfColumns(new List>() { statsInfo.stuYear });
statsInfo.weekStu = ((int)stuList.SubMatrix(weekDayS.DayOfYear, (dateOff.DayOfYear - weekDayS.DayOfYear), 0, stuList.ColumnCount).ColumnSums().Sum());
statsInfo.monthStu = ((int)stuList.SubMatrix(monthDayS.DayOfYear, (dateOff.DayOfYear - monthDayS.DayOfYear), 0, stuList.ColumnCount).ColumnSums().Sum());
statsInfo.stuUpTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
break;
case "Teacher":
statsInfo.tchYear[dateOff.DayOfYear] += count;
statsInfo.tch += count;
statsInfo.dayTch = ((int)statsInfo.tchYear[dateOff.DayOfYear]);
var tchList = DenseMatrix.OfColumns(new List>() { statsInfo.tchYear });
statsInfo.weekTch = ((int)tchList.SubMatrix(weekDayS.DayOfYear, (dateOff.DayOfYear - weekDayS.DayOfYear), 0, tchList.ColumnCount).ColumnSums().Sum());
statsInfo.monthTch = ((int)tchList.SubMatrix(monthDayS.DayOfYear, (dateOff.DayOfYear - monthDayS.DayOfYear), 0, tchList.ColumnCount).ColumnSums().Sum());
statsInfo.tchUpTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
break;
}
if ($"{type}".Equals("Exam") || $"{type}".Equals("Survey") || $"{type}".Equals("Vote") || $"{type}".Equals("Homework"))
{
statsInfo.activity.all += count;
if (careDate >= yearS && careDate <= yearE)
{
if (count > 0)
{
statsInfo.activity.year[dateOff.DayOfYear] += count;
DenseMatrix matris = DenseMatrix.OfColumns(new List>() { statsInfo.activity.year });
statsInfo.activity.lastDay = ((int)statsInfo.activity.year[lastDay.DayOfYear]);
statsInfo.activity.dayCnt = ((int)statsInfo.activity.year[dateOff.DayOfYear]);
statsInfo.activity.lastWeek = ((int)matris.SubMatrix(lWeekDayS.DayOfYear, 7, 0, matris.ColumnCount).ColumnSums().Sum());
statsInfo.activity.week = ((int)matris.SubMatrix(weekDayS.DayOfYear, weekDayE.DayOfYear - weekDayS.DayOfYear, 0, matris.ColumnCount).ColumnSums().Sum());
if (lastTermS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= lastTermE)
{
if (lTermDayS.Year < dateOff.Year)
{
var lastSts = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{lTermDayS.Year}-{scId}", new PartitionKey("Statistics"));
if (lastSts.Status == 200)
{
using var fileJson = await JsonDocument.ParseAsync(lastSts.ContentStream);
var tempSts = fileJson.ToObject();
var actYer = DenseMatrix.OfColumns(new List>() { tempSts.activity.year, statsInfo.activity.year });
statsInfo.activity.lastTerm = ((int)actYer.SubMatrix(lTermDayS.DayOfYear, lTermDayE.DayOfYear, 0, 1).ColumnSums().Sum());
}
else
statsInfo.activity.lastTerm = 0;
}
}
if (termS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= termE)
{
if (termDayS.Year < dateOff.Year)
{
var lastSts = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{termDayS.Year}-{scId}", new PartitionKey("Statistics"));
if (lastSts.Status == 200)
{
using var fileJson = await JsonDocument.ParseAsync(lastSts.ContentStream);
var tempSts = fileJson.ToObject();
var actYer = DenseMatrix.OfColumns(new List>() { tempSts.activity.year, statsInfo.activity.year });
statsInfo.activity.term = ((int)actYer.SubMatrix(termDayS.DayOfYear, termDayE.DayOfYear, 0, 1).ColumnSums().Sum());
}
else
statsInfo.activity.term += count;
}
else
{
var actYer = DenseMatrix.OfColumns(new List>() { statsInfo.activity.year });
statsInfo.activity.term = ((int)actYer.SubMatrix(termDayS.DayOfYear, termDayE.DayOfYear, 0, 1).ColumnSums().Sum());
}
}
statsInfo.activity.lastMonth = ((int)matris.SubMatrix(lMonthS.DayOfYear, lmthDay, 0, matris.ColumnCount).ColumnSums().Sum());
statsInfo.activity.month += ((int)matris.SubMatrix(monthDayS.DayOfYear, (dateOff.DayOfYear - monthDayS.DayOfYear), 0, matris.ColumnCount).ColumnSums().Sum());
statsInfo.activity.upTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
}
}
}
if (resStsInfo.Status == 200)
statsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(statsInfo, scId, new PartitionKey("Statistics"));
else
statsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync(statsInfo, new PartitionKey("Statistics"));
}
catch (Exception ex)
{
await _dingDing.SendBotMsg($"BIFunction,{Environment.GetEnvironmentVariable("Option:Location")}, SetSchoolStatsType() \n{ex.Message}\n{ex.StackTrace}\n{jsondata.ToJsonString()}", GroupNames.成都开发測試群組);
}
return response;
}
}
}