|
@@ -9,11 +9,13 @@ using System.Threading.Tasks;
|
|
using Azure.Cosmos;
|
|
using Azure.Cosmos;
|
|
using Azure.Storage.Blobs;
|
|
using Azure.Storage.Blobs;
|
|
using DocumentFormat.OpenXml.Bibliography;
|
|
using DocumentFormat.OpenXml.Bibliography;
|
|
|
|
+using MathNet.Numerics.LinearAlgebra.Double;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.Azure.Functions.Worker;
|
|
using Microsoft.Azure.Functions.Worker;
|
|
using Microsoft.Azure.Functions.Worker.Http;
|
|
using Microsoft.Azure.Functions.Worker.Http;
|
|
using NUnit.Framework.Constraints;
|
|
using NUnit.Framework.Constraints;
|
|
using StackExchange.Redis;
|
|
using StackExchange.Redis;
|
|
|
|
+using TEAMModelOS.SDK.Context.Constant;
|
|
using TEAMModelOS.SDK.DI;
|
|
using TEAMModelOS.SDK.DI;
|
|
using TEAMModelOS.SDK.Extension;
|
|
using TEAMModelOS.SDK.Extension;
|
|
using TEAMModelOS.SDK.Models;
|
|
using TEAMModelOS.SDK.Models;
|
|
@@ -193,56 +195,54 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
dynamic jsondata = new ExpandoObject();
|
|
dynamic jsondata = new ExpandoObject();
|
|
try
|
|
try
|
|
{
|
|
{
|
|
- string scId = null,type = null;
|
|
|
|
- var cosmosClient = _azureCosmos.GetCosmosClient();
|
|
|
|
- var tableClient = _azureStorage.GetCloudTableClient();
|
|
|
|
- var blobClient = _azureStorage.GetBlobContainerClient(containerName: "0-public");
|
|
|
|
string data = await new StreamReader(req.Body).ReadToEndAsync();
|
|
string data = await new StreamReader(req.Body).ReadToEndAsync();
|
|
var json = JsonDocument.Parse(data).RootElement;
|
|
var json = JsonDocument.Parse(data).RootElement;
|
|
jsondata = json;
|
|
jsondata = json;
|
|
|
|
+
|
|
|
|
+ string scId = null, type = null;
|
|
|
|
+ var cosmosClient = _azureCosmos.GetCosmosClient();
|
|
|
|
+ var tableClient = _azureStorage.GetCloudTableClient();
|
|
|
|
+ var blobClient = _azureStorage.GetBlobContainerClient(containerName: "0-public");
|
|
long careDate = 0;
|
|
long careDate = 0;
|
|
- int cnt = 0;
|
|
|
|
-
|
|
|
|
|
|
+ int all = 0;
|
|
|
|
+
|
|
DateTimeOffset dateOff = DateTimeOffset.UtcNow;
|
|
DateTimeOffset dateOff = DateTimeOffset.UtcNow;
|
|
- if (!json.TryGetProperty("scId", out JsonElement _schoolId))
|
|
|
|
- {
|
|
|
|
|
|
+ if (json.TryGetProperty("scId", out JsonElement _schoolId))
|
|
scId = $"{_schoolId}";
|
|
scId = $"{_schoolId}";
|
|
- }
|
|
|
|
- if (!json.TryGetProperty("type", out JsonElement _type))
|
|
|
|
- {
|
|
|
|
|
|
+ if (json.TryGetProperty("type", out JsonElement _type))
|
|
type = $"{_type}";
|
|
type = $"{_type}";
|
|
- }
|
|
|
|
- if (string.IsNullOrEmpty(scId) && string.IsNullOrEmpty(type))
|
|
|
|
|
|
+ if (string.IsNullOrEmpty($"{_schoolId}") && string.IsNullOrEmpty($"{_type}"))
|
|
{
|
|
{
|
|
- await _dingDing.SendBotMsg($"set-scstats-type, {req.Body};转换后:{json}", GroupNames.成都开发測試群組);
|
|
|
|
|
|
+ await _dingDing.SendBotMsg($"set-scstats-type, {json}", GroupNames.成都开发測試群組);
|
|
return response;
|
|
return response;
|
|
}
|
|
}
|
|
- if (!json.TryGetProperty("cnt", out JsonElement _cnt))
|
|
|
|
- {
|
|
|
|
- cnt = int.Parse($"{_cnt}");
|
|
|
|
- }
|
|
|
|
|
|
+ if (json.TryGetProperty("cnt", out JsonElement _cnt))
|
|
|
|
+ all = _cnt.GetInt32();
|
|
|
|
|
|
- if (!json.TryGetProperty("date", out JsonElement _date))
|
|
|
|
- {
|
|
|
|
- careDate = long.Parse($"{_date}");
|
|
|
|
- }
|
|
|
|
|
|
+ json.TryGetProperty("interaction", out JsonElement interaction);
|
|
|
|
+
|
|
|
|
+ if (json.TryGetProperty("date", out JsonElement _date))
|
|
|
|
+ careDate = _date.GetInt64();
|
|
else
|
|
else
|
|
- {
|
|
|
|
careDate = dateOff.ToUnixTimeMilliseconds();
|
|
careDate = dateOff.ToUnixTimeMilliseconds();
|
|
- }
|
|
|
|
-
|
|
|
|
- long currDay = dateOff.ToUnixTimeMilliseconds();
|
|
|
|
- var (lastDays, lastDaye) = TimeHelper.GetStartOrEnd(dateOff.AddDays(-1));//昨天开始/结束时间
|
|
|
|
|
|
+ var (lastDayS, lastDayE) = TimeHelper.GetStartOrEnd(dateOff.AddDays(-1));//昨天开始/结束时间
|
|
var (DayS, DayE) = TimeHelper.GetStartOrEnd(dateOff); //今天开始时间结束时间
|
|
var (DayS, DayE) = TimeHelper.GetStartOrEnd(dateOff); //今天开始时间结束时间
|
|
var (lastWeekS, lastWeekE) = TimeHelper.GetStartOrEnd(dateOff, "lastweek"); //计算上周开始/结束时间
|
|
var (lastWeekS, lastWeekE) = TimeHelper.GetStartOrEnd(dateOff, "lastweek"); //计算上周开始/结束时间
|
|
var (weekS, weekE) = TimeHelper.GetStartOrEnd(dateOff, "week"); //计算本周开始/结束时间
|
|
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 (lastTermS, lastTermE) = TimeHelper.GetStartOrEnd(dateOff, "lastterm"); //计算上学期开始/结束时间
|
|
var (termS, termE) = TimeHelper.GetStartOrEnd(dateOff, "term"); //计算本学期开始/结束时间
|
|
var (termS, termE) = TimeHelper.GetStartOrEnd(dateOff, "term"); //计算本学期开始/结束时间
|
|
var (lastYearS, lastYearE) = TimeHelper.GetStartOrEnd(dateOff, "lastYear"); //计算去年开始/结束时间
|
|
var (lastYearS, lastYearE) = TimeHelper.GetStartOrEnd(dateOff, "lastYear"); //计算去年开始/结束时间
|
|
var (yearS, yearE) = TimeHelper.GetStartOrEnd(dateOff, "year"); //计算今年开始/结束时间
|
|
var (yearS, yearE) = TimeHelper.GetStartOrEnd(dateOff, "year"); //计算今年开始/结束时间
|
|
- StatsInfo statsInfo = new();
|
|
|
|
|
|
|
|
- var resStsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(scId, new PartitionKey("BIRel"));
|
|
|
|
|
|
+ var (weekDayS, weekDayE) = TimeHelper.GetLongToTime(lastWeekS, lastWeekE);
|
|
|
|
+ var (lTermDayS, lTermDayE) = TimeHelper.GetLongToTime(lastTermS, lastTermE);
|
|
|
|
+ var (termDayS, termDayE) = TimeHelper.GetLongToTime(lastTermS, lastTermE);
|
|
|
|
+ var lastDay = dateOff.AddDays(-1);
|
|
|
|
+
|
|
|
|
+ StatsInfo statsInfo = new();
|
|
|
|
+ var resStsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{dateOff.Year}-{scId}", new PartitionKey("Statistics"));
|
|
if (resStsInfo.Status == 200)
|
|
if (resStsInfo.Status == 200)
|
|
{
|
|
{
|
|
using var fileJson = await JsonDocument.ParseAsync(resStsInfo.ContentStream);
|
|
using var fileJson = await JsonDocument.ParseAsync(resStsInfo.ContentStream);
|
|
@@ -251,52 +251,351 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
else
|
|
else
|
|
{
|
|
{
|
|
ScBase scBase = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemAsync<ScBase>(scId, new PartitionKey("Base"));
|
|
ScBase scBase = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemAsync<ScBase>(scId, new PartitionKey("Base"));
|
|
- statsInfo.id = scBase.id;
|
|
|
|
|
|
+
|
|
|
|
+ //var resLastStsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{dateOff.Year - 1}-{scId}", new PartitionKey("Statistics"));
|
|
|
|
+ //if (resLastStsInfo.Status == 200)
|
|
|
|
+ //{
|
|
|
|
+ // using var fileJson = await JsonDocument.ParseAsync(resStsInfo.ContentStream);
|
|
|
|
+ // statsInfo = fileJson.ToObject<StatsInfo>();
|
|
|
|
+ // statsInfo.id = $"{dateOff.Year}-{scBase.id}";
|
|
|
|
+ //}
|
|
|
|
+ //else
|
|
|
|
+ //{
|
|
|
|
+ statsInfo.id = $"{dateOff.Year}-{scBase.id}";
|
|
statsInfo.name = scBase.name;
|
|
statsInfo.name = scBase.name;
|
|
statsInfo.picture = scBase.picture;
|
|
statsInfo.picture = scBase.picture;
|
|
statsInfo.size = scBase.size;
|
|
statsInfo.size = scBase.size;
|
|
statsInfo.scCreateTime = scBase.createTime;
|
|
statsInfo.scCreateTime = scBase.createTime;
|
|
statsInfo.areaId = scBase.areaId;
|
|
statsInfo.areaId = scBase.areaId;
|
|
- statsInfo.upTime = currDay;
|
|
|
|
|
|
+ statsInfo.upTime = careDate;
|
|
|
|
+ //}
|
|
}
|
|
}
|
|
|
|
|
|
switch ($"{type}")
|
|
switch ($"{type}")
|
|
{
|
|
{
|
|
case "Exam":
|
|
case "Exam":
|
|
- if (statsInfo.upTime < DayS && statsInfo.upTime >= lastDays)
|
|
|
|
|
|
+ statsInfo.activity.year[dateOff.DayOfYear] += all;
|
|
|
|
+ statsInfo.activity.exam += all;
|
|
|
|
+ statsInfo.activity.lastDay = ((int)statsInfo.activity.year[lastDay.DayOfYear]);
|
|
|
|
+ statsInfo.activity.dayCnt = ((int)statsInfo.activity.year[dateOff.DayOfYear]);
|
|
|
|
+
|
|
|
|
+ if (lastWeekS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= lastWeekE)
|
|
{
|
|
{
|
|
- statsInfo.activity.lastDay = statsInfo.activity.dayCnt;
|
|
|
|
- statsInfo.activity.year[dateOff.DayOfYear-1] += statsInfo.activity.dayCnt;
|
|
|
|
|
|
+ var artWeek = DenseMatrix.OfColumns(new List<List<double>>() { statsInfo.activity.year });
|
|
|
|
+ statsInfo.activity.lastWeek = ((int)artWeek.SubMatrix(weekDayS.DayOfYear, 7, 0, artWeek.ColumnCount).ColumnSums().Sum());
|
|
|
|
+ //statsInfo.activity.lastWeek = ((int)statsInfo.activity.year.GetRange(weekDayS.DayOfYear, 7).Sum());
|
|
}
|
|
}
|
|
- if (DayS <= statsInfo.upTime && statsInfo.upTime <= DayE)
|
|
|
|
|
|
+
|
|
|
|
+ if (weekS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= weekE)
|
|
|
|
+ statsInfo.activity.week += all;
|
|
|
|
+
|
|
|
|
+ if (lastTermS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= lastTermE)
|
|
{
|
|
{
|
|
- statsInfo.activity.dayCnt += cnt;
|
|
|
|
- statsInfo.activity.exam += cnt;
|
|
|
|
- statsInfo.activity.year[dateOff.DayOfYear] += cnt;
|
|
|
|
|
|
+ if (lTermDayS.Year < dateOff.Year)
|
|
|
|
+ {
|
|
|
|
+ var lastSts = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{lTermDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
|
+ if (lastSts.Status == 200)
|
|
|
|
+ {
|
|
|
|
+ using var fileJson = await JsonDocument.ParseAsync(lastSts.ContentStream);
|
|
|
|
+ var tempSts = fileJson.ToObject<StatsInfo>();
|
|
|
|
+ var actYer = DenseMatrix.OfColumns(new List<List<double>>() { 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, "School").ReadItemStreamAsync($"{termDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
|
+ if (lastSts.Status == 200)
|
|
|
|
+ {
|
|
|
|
+ using var fileJson = await JsonDocument.ParseAsync(lastSts.ContentStream);
|
|
|
|
+ var tempSts = fileJson.ToObject<StatsInfo>();
|
|
|
|
+ var actYer = DenseMatrix.OfColumns(new List<List<double>>() { tempSts.activity.year, statsInfo.activity.year });
|
|
|
|
+ statsInfo.activity.term = ((int)actYer.SubMatrix(termDayS.DayOfYear, termDayE.DayOfYear, 0, 1).ColumnSums().Sum());
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ statsInfo.activity.term += all;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- statsInfo.activity.cnt += cnt;
|
|
|
|
|
|
+ statsInfo.activity.upTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
|
+ statsInfo.activity.all += all;
|
|
break;
|
|
break;
|
|
case "Survey":
|
|
case "Survey":
|
|
|
|
+ statsInfo.activity.year[dateOff.DayOfYear] += all;
|
|
|
|
+ statsInfo.activity.survey += all;
|
|
|
|
+ statsInfo.activity.lastDay = ((int)statsInfo.activity.year[lastDay.DayOfYear]);
|
|
|
|
+ statsInfo.activity.dayCnt = ((int)statsInfo.activity.year[dateOff.DayOfYear]);
|
|
|
|
+
|
|
|
|
+ if (lastWeekS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= lastWeekE)
|
|
|
|
+ {
|
|
|
|
+ var artWeek = DenseMatrix.OfColumns(new List<List<double>>() { statsInfo.activity.year });
|
|
|
|
+ statsInfo.activity.lastWeek = ((int)artWeek.SubMatrix(weekDayS.DayOfYear, 7, 0, artWeek.ColumnCount).ColumnSums().Sum());
|
|
|
|
+ //statsInfo.activity.lastWeek = ((int)statsInfo.activity.year.GetRange(weekDayS.DayOfYear, 7).Sum());
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ if (weekS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= weekE)
|
|
|
|
+ statsInfo.activity.week += all;
|
|
|
|
+
|
|
|
|
+ if (lastTermS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= lastTermE)
|
|
|
|
+ {
|
|
|
|
+ if (lTermDayS.Year < dateOff.Year)
|
|
|
|
+ {
|
|
|
|
+ var lastSts = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{lTermDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
|
+ if (lastSts.Status == 200)
|
|
|
|
+ {
|
|
|
|
+ using var fileJson = await JsonDocument.ParseAsync(lastSts.ContentStream);
|
|
|
|
+ var tempSts = fileJson.ToObject<StatsInfo>();
|
|
|
|
+ var actYer = DenseMatrix.OfColumns(new List<List<double>>() { 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, "School").ReadItemStreamAsync($"{termDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
|
+ if (lastSts.Status == 200)
|
|
|
|
+ {
|
|
|
|
+ using var fileJson = await JsonDocument.ParseAsync(lastSts.ContentStream);
|
|
|
|
+ var tempSts = fileJson.ToObject<StatsInfo>();
|
|
|
|
+ var actYer = DenseMatrix.OfColumns(new List<List<double>>() { tempSts.activity.year, statsInfo.activity.year });
|
|
|
|
+ statsInfo.activity.term = ((int)actYer.SubMatrix(termDayS.DayOfYear, termDayE.DayOfYear, 0, 1).ColumnSums().Sum());
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ statsInfo.activity.term += all;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ statsInfo.activity.upTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
|
+ statsInfo.activity.all += all;
|
|
break;
|
|
break;
|
|
case "Vote":
|
|
case "Vote":
|
|
|
|
+ statsInfo.activity.year[dateOff.DayOfYear] += all;
|
|
|
|
+ statsInfo.activity.vote += all;
|
|
|
|
+ statsInfo.activity.lastDay = ((int)statsInfo.activity.year[lastDay.DayOfYear]);
|
|
|
|
+ statsInfo.activity.dayCnt = ((int)statsInfo.activity.year[dateOff.DayOfYear]);
|
|
|
|
+
|
|
|
|
+ if (lastWeekS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= lastWeekE)
|
|
|
|
+ {
|
|
|
|
+ var artWeek = DenseMatrix.OfColumns(new List<List<double>>() { statsInfo.activity.year });
|
|
|
|
+ statsInfo.activity.lastWeek = ((int)artWeek.SubMatrix(weekDayS.DayOfYear, 7, 0, artWeek.ColumnCount).ColumnSums().Sum());
|
|
|
|
+ //statsInfo.activity.lastWeek = ((int)statsInfo.activity.year.GetRange(weekDayS.DayOfYear, 7).Sum());
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ if (weekS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= weekE)
|
|
|
|
+ statsInfo.activity.week += all;
|
|
|
|
+
|
|
|
|
+ if (lastTermS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= lastTermE)
|
|
|
|
+ {
|
|
|
|
+ if (lTermDayS.Year < dateOff.Year)
|
|
|
|
+ {
|
|
|
|
+ var lastSts = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{lTermDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
|
+ if (lastSts.Status == 200)
|
|
|
|
+ {
|
|
|
|
+ using var fileJson = await JsonDocument.ParseAsync(lastSts.ContentStream);
|
|
|
|
+ var tempSts = fileJson.ToObject<StatsInfo>();
|
|
|
|
+ var actYer = DenseMatrix.OfColumns(new List<List<double>>() { 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, "School").ReadItemStreamAsync($"{termDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
|
+ if (lastSts.Status == 200)
|
|
|
|
+ {
|
|
|
|
+ using var fileJson = await JsonDocument.ParseAsync(lastSts.ContentStream);
|
|
|
|
+ var tempSts = fileJson.ToObject<StatsInfo>();
|
|
|
|
+ var actYer = DenseMatrix.OfColumns(new List<List<double>>() { tempSts.activity.year, statsInfo.activity.year });
|
|
|
|
+ statsInfo.activity.term = ((int)actYer.SubMatrix(termDayS.DayOfYear, termDayE.DayOfYear, 0, 1).ColumnSums().Sum());
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ statsInfo.activity.term += all;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ statsInfo.activity.upTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
|
+ statsInfo.activity.all += all;
|
|
break;
|
|
break;
|
|
case "Homework":
|
|
case "Homework":
|
|
|
|
+ statsInfo.activity.year[dateOff.DayOfYear] += all;
|
|
|
|
+ statsInfo.activity.homework += all;
|
|
|
|
+ statsInfo.activity.lastDay = ((int)statsInfo.activity.year[lastDay.DayOfYear]);
|
|
|
|
+ statsInfo.activity.dayCnt = ((int)statsInfo.activity.year[dateOff.DayOfYear]);
|
|
|
|
+
|
|
|
|
+ if (lastWeekS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= lastWeekE)
|
|
|
|
+ {
|
|
|
|
+ var artWeek = DenseMatrix.OfColumns(new List<List<double>>() { statsInfo.activity.year });
|
|
|
|
+ statsInfo.activity.lastWeek = ((int)artWeek.SubMatrix(weekDayS.DayOfYear, 7, 0, artWeek.ColumnCount).ColumnSums().Sum());
|
|
|
|
+ //statsInfo.activity.lastWeek = ((int)statsInfo.activity.year.GetRange(weekDayS.DayOfYear, 7).Sum());
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ if (weekS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= weekE)
|
|
|
|
+ statsInfo.activity.week += all;
|
|
|
|
+
|
|
|
|
+ if (lastTermS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= lastTermE)
|
|
|
|
+ {
|
|
|
|
+ if (lTermDayS.Year < dateOff.Year)
|
|
|
|
+ {
|
|
|
|
+ var lastSts = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{lTermDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
|
+ if (lastSts.Status == 200)
|
|
|
|
+ {
|
|
|
|
+ using var fileJson = await JsonDocument.ParseAsync(lastSts.ContentStream);
|
|
|
|
+ var tempSts = fileJson.ToObject<StatsInfo>();
|
|
|
|
+ var actYer = DenseMatrix.OfColumns(new List<List<double>>() { 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, "School").ReadItemStreamAsync($"{termDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
|
+ if (lastSts.Status == 200)
|
|
|
|
+ {
|
|
|
|
+ using var fileJson = await JsonDocument.ParseAsync(lastSts.ContentStream);
|
|
|
|
+ var tempSts = fileJson.ToObject<StatsInfo>();
|
|
|
|
+ var actYer = DenseMatrix.OfColumns(new List<List<double>>() { tempSts.activity.year, statsInfo.activity.year });
|
|
|
|
+ statsInfo.activity.term = ((int)actYer.SubMatrix(termDayS.DayOfYear, termDayE.DayOfYear, 0, 1).ColumnSums().Sum());
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ statsInfo.activity.term += all;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ statsInfo.activity.upTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
|
+ statsInfo.activity.all += all;
|
|
break;
|
|
break;
|
|
case "Less":
|
|
case "Less":
|
|
|
|
|
|
|
|
+ statsInfo.lesson.year[dateOff.DayOfYear] += all;
|
|
|
|
+ statsInfo.lesson.lastDay = ((int)statsInfo.lesson.year[lastDay.DayOfYear]);
|
|
|
|
+ statsInfo.lesson.day = ((int)statsInfo.lesson.year[dateOff.DayOfYear]);
|
|
|
|
+
|
|
|
|
+ if (DayS <= statsInfo.lesson.upTime && statsInfo.lesson.upTime <= DayE)
|
|
|
|
+ statsInfo.lesson.dayInter += interaction.GetInt32();
|
|
|
|
+ else
|
|
|
|
+ statsInfo.lesson.dayInter = 0;
|
|
|
|
+
|
|
|
|
+ if (monthS <= statsInfo.lesson.upTime && statsInfo.lesson.upTime <= monthE)
|
|
|
|
+ statsInfo.lesson.monthInter += interaction.GetInt32();
|
|
|
|
+ else
|
|
|
|
+ statsInfo.lesson.monthInter = 0;
|
|
|
|
+
|
|
|
|
+ if (lastWeekS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= lastWeekE)
|
|
|
|
+ {
|
|
|
|
+ var artWeek = DenseMatrix.OfColumns(new List<List<double>>() { statsInfo.lesson.year });
|
|
|
|
+ statsInfo.lesson.lastWeek = ((int)artWeek.SubMatrix(weekDayS.DayOfYear, 7, 0, artWeek.ColumnCount).ColumnSums().Sum());
|
|
|
|
+ //statsInfo.activity.lastWeek = ((int)statsInfo.activity.year.GetRange(weekDayS.DayOfYear, 7).Sum());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (weekS <= statsInfo.lesson.upTime && statsInfo.lesson.upTime <= weekE)
|
|
|
|
+ statsInfo.activity.week += all;
|
|
|
|
+
|
|
|
|
+ if (lastTermS <= statsInfo.lesson.upTime && statsInfo.lesson.upTime <= lastTermE)
|
|
|
|
+ {
|
|
|
|
+ if (lTermDayS.Year < dateOff.Year)
|
|
|
|
+ {
|
|
|
|
+ var lastSts = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{lTermDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
|
+ if (lastSts.Status == 200)
|
|
|
|
+ {
|
|
|
|
+ using var fileJson = await JsonDocument.ParseAsync(lastSts.ContentStream);
|
|
|
|
+ var tempSts = fileJson.ToObject<StatsInfo>();
|
|
|
|
+ var actYer = DenseMatrix.OfColumns(new List<List<double>>() { tempSts.lesson.year, statsInfo.lesson.year });
|
|
|
|
+ statsInfo.lesson.lastTerm = ((int)actYer.SubMatrix(lTermDayS.DayOfYear, lTermDayE.DayOfYear, 0, 1).ColumnSums().Sum());
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ statsInfo.lesson.lastTerm = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (termS <= statsInfo.lesson.upTime && statsInfo.lesson.upTime <= termE)
|
|
|
|
+ {
|
|
|
|
+ if (termDayS.Year < dateOff.Year)
|
|
|
|
+ {
|
|
|
|
+ var lastSts = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{termDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
|
+ if (lastSts.Status == 200)
|
|
|
|
+ {
|
|
|
|
+ using var fileJson = await JsonDocument.ParseAsync(lastSts.ContentStream);
|
|
|
|
+ var tempSts = fileJson.ToObject<StatsInfo>();
|
|
|
|
+ var actYer = DenseMatrix.OfColumns(new List<List<double>>() { tempSts.lesson.year, statsInfo.lesson.year });
|
|
|
|
+ statsInfo.lesson.term = ((int)actYer.SubMatrix(termDayS.DayOfYear, termDayE.DayOfYear, 0, 1).ColumnSums().Sum());
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ statsInfo.lesson.term += all;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ statsInfo.lesson.upTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
|
+ statsInfo.lesson.all += all;
|
|
break;
|
|
break;
|
|
case "stu":
|
|
case "stu":
|
|
|
|
+ if (DayS <= statsInfo.stuUpTime && statsInfo.stuUpTime < DayE)
|
|
|
|
+ statsInfo.dayStu += 1;
|
|
|
|
+ else
|
|
|
|
+ statsInfo.dayStu = 0;
|
|
|
|
|
|
|
|
+
|
|
|
|
+ if (weekS <= statsInfo.stuUpTime && statsInfo.stuUpTime < weekE)
|
|
|
|
+ statsInfo.weekStu += 1;
|
|
|
|
+ else
|
|
|
|
+ statsInfo.weekStu = 0;
|
|
|
|
+
|
|
|
|
+ if (monthS <= statsInfo.stuUpTime && statsInfo.stuUpTime < monthE)
|
|
|
|
+ statsInfo.monthStu += 1;
|
|
|
|
+ else
|
|
|
|
+ statsInfo.monthStu = 0;
|
|
|
|
+
|
|
|
|
+ statsInfo.stuUpTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
|
+ statsInfo.stu += all;
|
|
break;
|
|
break;
|
|
case "tch":
|
|
case "tch":
|
|
|
|
+ if (DayS <= statsInfo.tchUpTime && statsInfo.tchUpTime < DayE)
|
|
|
|
+ statsInfo.dayTch += 1;
|
|
|
|
+ else
|
|
|
|
+ statsInfo.dayTch = 0;
|
|
|
|
+
|
|
|
|
+ if (weekS <= statsInfo.tchUpTime && statsInfo.tchUpTime < weekE)
|
|
|
|
+ statsInfo.weekTch += 1;
|
|
|
|
+ else
|
|
|
|
+ statsInfo.weekTch = 0;
|
|
|
|
+
|
|
|
|
+ if (monthS <= statsInfo.tchUpTime && statsInfo.tchUpTime < monthE)
|
|
|
|
+ statsInfo.monthTch += 1;
|
|
|
|
+ else
|
|
|
|
+ statsInfo.monthTch = 0;
|
|
|
|
|
|
|
|
+ statsInfo.tchUpTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
|
+ statsInfo.stu += all;
|
|
|
|
+
|
|
|
|
+ statsInfo.tch += all;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if (resStsInfo.Status == 200)
|
|
|
|
+ statsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<StatsInfo>(statsInfo, scId, new PartitionKey("Stats"));
|
|
|
|
+ else
|
|
|
|
+ statsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<StatsInfo>(statsInfo, new PartitionKey("Stats"));
|
|
|
|
+
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
catch (Exception ex)
|
|
{
|
|
{
|