|
@@ -47,7 +47,7 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
/// </summary>
|
|
|
/// <param name="req"></param>
|
|
|
/// <returns></returns>
|
|
|
- [Function("set-sc-birelation")]
|
|
|
+ //[Function("set-sc-birelation")]
|
|
|
public async Task<HttpResponseData> upSchoolBIRelation([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestData req)
|
|
|
{
|
|
|
var response = req.CreateResponse(HttpStatusCode.OK);
|
|
@@ -203,7 +203,7 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
if (school != null)
|
|
|
{
|
|
|
StatsInfo statsInfo = new();
|
|
|
- var resStats = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{dateOff.Year}-{school.id}", new PartitionKey("Statistics"));
|
|
|
+ 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);
|
|
@@ -235,9 +235,9 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
statsInfo.upTime = dateOff.ToUnixTimeMilliseconds();
|
|
|
|
|
|
if (resStats.Status == 200)
|
|
|
- await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<StatsInfo>(statsInfo, statsInfo.id, new PartitionKey("Statistics"));
|
|
|
+ await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<StatsInfo>(statsInfo, statsInfo.id, new PartitionKey("Statistics"));
|
|
|
else
|
|
|
- await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<StatsInfo>(statsInfo, new PartitionKey("Statistics"));
|
|
|
+ await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync<StatsInfo>(statsInfo, new PartitionKey("Statistics"));
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -254,7 +254,7 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
/// </summary>
|
|
|
/// <param name="req"></param>
|
|
|
/// <returns></returns>
|
|
|
- [Function("set-scstats-type")]
|
|
|
+ //[Function("set-scstats-type")]
|
|
|
public async Task<HttpResponseData> SetSchoolStatsType([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequestData req)
|
|
|
{
|
|
|
var response = req.CreateResponse(HttpStatusCode.OK);
|
|
@@ -268,10 +268,11 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
var cosmosClient = _azureCosmos.GetCosmosClient();
|
|
|
string scId = null, type = null;
|
|
|
long careDate = 0;
|
|
|
- int all = 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}";
|
|
@@ -283,7 +284,7 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
return response;
|
|
|
}
|
|
|
if (json.TryGetProperty("cnt", out JsonElement _cnt))
|
|
|
- all = _cnt.GetInt32();
|
|
|
+ count = _cnt.GetInt32();
|
|
|
|
|
|
if (json.TryGetProperty("interaction", out JsonElement _interaction))
|
|
|
interaction = _interaction.GetInt32();
|
|
@@ -301,6 +302,8 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
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);
|
|
@@ -311,7 +314,7 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
int lmthDay = TimeHelper.GetDateDay(lMonthE);
|
|
|
StatsInfo statsInfo = new();
|
|
|
|
|
|
- var resStsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{dateOff.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
+ 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);
|
|
@@ -319,7 +322,7 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- var resLastStsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{dateOff.Year - 1}-{scId}", new PartitionKey("Statistics"));
|
|
|
+ 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);
|
|
@@ -334,7 +337,7 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- ScBase scBase = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemAsync<ScBase>(scId, new PartitionKey("Base"));
|
|
|
+ ScBase scBase = await cosmosClient.GetContainer("TEAMModelOS", "Common").ReadItemAsync<ScBase>(scId, new PartitionKey("Base"));
|
|
|
statsInfo.id = $"{dateOff.Year}-{scBase.id}";
|
|
|
statsInfo.schoolId = scBase.id;
|
|
|
statsInfo.name = scBase.name;
|
|
@@ -349,26 +352,26 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
switch ($"{type}")
|
|
|
{
|
|
|
case "Exam":
|
|
|
- statsInfo.activity.exam += all;
|
|
|
+ statsInfo.activity.exam += count;
|
|
|
break;
|
|
|
case "Survey":
|
|
|
- statsInfo.activity.survey += all;
|
|
|
+ statsInfo.activity.survey += count;
|
|
|
break;
|
|
|
case "Vote":
|
|
|
- statsInfo.activity.vote += all;
|
|
|
+ statsInfo.activity.vote += count;
|
|
|
break;
|
|
|
case "Homework":
|
|
|
- statsInfo.activity.homework += all;
|
|
|
+ statsInfo.activity.homework += count;
|
|
|
break;
|
|
|
case "Less":
|
|
|
//课例
|
|
|
- statsInfo.lesson.year[dateOff.DayOfYear] += all;
|
|
|
- statsInfo.lesson.all += all;
|
|
|
+ statsInfo.lesson.year[dateOff.DayOfYear] += count;
|
|
|
+ statsInfo.lesson.all += count;
|
|
|
|
|
|
if (lessType == 0)
|
|
|
- statsInfo.lesson.open += all;
|
|
|
+ statsInfo.lesson.open += count;
|
|
|
else
|
|
|
- statsInfo.lesson.less += all;
|
|
|
+ statsInfo.lesson.less += count;
|
|
|
|
|
|
statsInfo.lesson.lastDay = ((int)statsInfo.lesson.year[lastDay.DayOfYear]);
|
|
|
statsInfo.lesson.day = ((int)statsInfo.lesson.year[dateOff.DayOfYear]);
|
|
@@ -381,7 +384,7 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
{
|
|
|
if (lTermDayS.Year < dateOff.Year)
|
|
|
{
|
|
|
- var lastLessSts = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{lTermDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
+ 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);
|
|
@@ -396,7 +399,7 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
{
|
|
|
if (termDayS.Year < dateOff.Year)
|
|
|
{
|
|
|
- var lastSts = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{termDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
+ 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);
|
|
@@ -405,7 +408,7 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
statsInfo.lesson.term = ((int)actYer.SubMatrix(termDayS.DayOfYear, termDayE.DayOfYear, 0, 1).ColumnSums().Sum());
|
|
|
}
|
|
|
else
|
|
|
- statsInfo.lesson.term += all;
|
|
|
+ statsInfo.lesson.term += count;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -426,7 +429,7 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
{
|
|
|
if (lTermDayS.Year < dateOff.Year)
|
|
|
{
|
|
|
- var lastSts = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{lTermDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
+ 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);
|
|
@@ -440,9 +443,9 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
|
|
|
statsInfo.lesson.upTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
break;
|
|
|
- case "stu":
|
|
|
- statsInfo.stuYear[dateOff.DayOfYear] += all;
|
|
|
- statsInfo.stu += all;
|
|
|
+ case "Student":
|
|
|
+ statsInfo.stuYear[dateOff.DayOfYear] += count;
|
|
|
+ statsInfo.stu += count;
|
|
|
|
|
|
statsInfo.dayStu = ((int)statsInfo.stuYear[dateOff.DayOfYear]);
|
|
|
var stuList = DenseMatrix.OfColumns(new List<List<double>>() { statsInfo.stuYear });
|
|
@@ -451,10 +454,10 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
|
|
|
statsInfo.stuUpTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
break;
|
|
|
- case "tch":
|
|
|
+ case "Teacher":
|
|
|
|
|
|
- statsInfo.tchYear[dateOff.DayOfYear] += all;
|
|
|
- statsInfo.tch += all;
|
|
|
+ statsInfo.tchYear[dateOff.DayOfYear] += count;
|
|
|
+ statsInfo.tch += count;
|
|
|
|
|
|
statsInfo.dayTch = ((int)statsInfo.tchYear[dateOff.DayOfYear]);
|
|
|
var tchList = DenseMatrix.OfColumns(new List<List<double>>() { statsInfo.tchYear });
|
|
@@ -467,61 +470,68 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
|
|
|
if ($"{type}".Equals("Exam") || $"{type}".Equals("Survey") || $"{type}".Equals("Vote") || $"{type}".Equals("Homework"))
|
|
|
{
|
|
|
- statsInfo.activity.all += all;
|
|
|
- statsInfo.activity.year[dateOff.DayOfYear] += all;
|
|
|
- DenseMatrix matris = DenseMatrix.OfColumns(new List<List<double>>() { 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)
|
|
|
+ statsInfo.activity.all += count;
|
|
|
+ if (careDate >= yearS && careDate <= yearE)
|
|
|
{
|
|
|
- if (lTermDayS.Year < dateOff.Year)
|
|
|
+ if (count > 0)
|
|
|
{
|
|
|
- var lastSts = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{lTermDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
- if (lastSts.Status == 200)
|
|
|
+ statsInfo.activity.year[dateOff.DayOfYear] += count;
|
|
|
+ DenseMatrix matris = DenseMatrix.OfColumns(new List<List<double>>() { 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)
|
|
|
{
|
|
|
- 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());
|
|
|
+ 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>();
|
|
|
+ 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;
|
|
|
+ }
|
|
|
}
|
|
|
- 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)
|
|
|
+ if (termS <= statsInfo.activity.upTime && statsInfo.activity.upTime <= termE)
|
|
|
{
|
|
|
- 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());
|
|
|
+ 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<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 += count;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var actYer = DenseMatrix.OfColumns(new List<List<double>>() { statsInfo.activity.year });
|
|
|
+ statsInfo.activity.term = ((int)actYer.SubMatrix(termDayS.DayOfYear, termDayE.DayOfYear, 0, 1).ColumnSums().Sum());
|
|
|
+ }
|
|
|
}
|
|
|
- else
|
|
|
- statsInfo.activity.term += all;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- var actYer = DenseMatrix.OfColumns(new List<List<double>>() { 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();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- 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, "School").ReplaceItemAsync<StatsInfo>(statsInfo, scId, new PartitionKey("Statistics"));
|
|
|
+ statsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<StatsInfo>(statsInfo, scId, new PartitionKey("Statistics"));
|
|
|
else
|
|
|
- statsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<StatsInfo>(statsInfo, new PartitionKey("Statistics"));
|
|
|
+ statsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync<StatsInfo>(statsInfo, new PartitionKey("Statistics"));
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|