|
@@ -12,6 +12,7 @@ using System.Threading.Tasks;
|
|
|
using TEAMModelOS.Models;
|
|
|
using TEAMModelOS.SDK.DI;
|
|
|
using TEAMModelOS.SDK.Extension;
|
|
|
+using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
|
|
|
using TEAMModelOS.SDK.Models;
|
|
|
using TEAMModelOS.SDK.Models.Cosmos.Common;
|
|
|
|
|
@@ -50,8 +51,8 @@ namespace TEAMModelOS.Controllers.Analysis
|
|
|
{
|
|
|
//区级Id
|
|
|
if (!requert.TryGetProperty("time", out JsonElement time)) return BadRequest();
|
|
|
- if (!requert.TryGetProperty("code", out JsonElement code)) return BadRequest();
|
|
|
- //获取当前学期所有的课程记录
|
|
|
+ //if (!requert.TryGetProperty("code", out JsonElement code)) return BadRequest();
|
|
|
+ /*//获取当前学期所有的课程记录
|
|
|
List<LessonRecord> records = new List<LessonRecord>();
|
|
|
var client = _azureCosmos.GetCosmosClient();
|
|
|
var queryClass = $"select value(c) from c ";
|
|
@@ -63,12 +64,13 @@ namespace TEAMModelOS.Controllers.Analysis
|
|
|
List<(string name, int count)> groups = await getGroupCount(records);
|
|
|
List<(string name, int count)> grades = await getGradeCount(records);
|
|
|
List<(string name, int count)> types = await getTypeCount(records);
|
|
|
- var subs = records.GroupBy(x => x.subjectId).Select(y => new { key = y.Key, count = y.ToList().Count }).ToList();
|
|
|
+ var subs = records.GroupBy(x => x.subjectId).Select(y => new { key = y.Key, count = y.ToList().Count }).ToList();*/
|
|
|
|
|
|
|
|
|
// List<string> baseIds = await getId(client, id.GetString());
|
|
|
List<object> studies = new();
|
|
|
int days = DateTimeOffset.MaxValue.DayOfYear;
|
|
|
+ int sday = (int)DateTimeOffset.UtcNow.DayOfWeek;
|
|
|
var tts = DateTimeOffset.FromUnixTimeMilliseconds(time.GetInt64()).DayOfYear;
|
|
|
//double[,] bCount = new double[4,5];
|
|
|
List<List<double>> bc = new List<List<double>>();
|
|
@@ -82,8 +84,10 @@ namespace TEAMModelOS.Controllers.Analysis
|
|
|
List<double> list6 = new(tc2);
|
|
|
list[2] = 12;
|
|
|
list[1] = 3;
|
|
|
+ list[3] = 4;
|
|
|
list2[2] = 7;
|
|
|
list2[1] = 8;
|
|
|
+ list2[3] = 6;
|
|
|
bc.Add(list);
|
|
|
bc.Add(list2);
|
|
|
bc.Add(list3);
|
|
@@ -96,14 +100,22 @@ namespace TEAMModelOS.Controllers.Analysis
|
|
|
var cc = matrix5.ColumnSums().Sum();
|
|
|
var dd = matrix5.RowSums();
|
|
|
double[] ff = matrix5.Values;
|
|
|
+ var total = matrix5.Values.Sum();
|
|
|
+ var tday = DateTimeOffset.UtcNow.DayOfYear;
|
|
|
+ int ds = DateTimeHelper.getDays(2020);
|
|
|
+ var dds = DateTimeOffset.FromUnixTimeMilliseconds(1639990956000).DayOfYear;
|
|
|
+ int ssday = (int)DateTimeOffset.UtcNow.DayOfWeek;
|
|
|
+ var d = (int)DateTimeOffset.FromUnixTimeMilliseconds(1639990956000).DayOfWeek;
|
|
|
+ var asd = tday - d;
|
|
|
var kk = matrix5.ColumnAbsoluteSums();
|
|
|
- var submatrix = matrix5.SubMatrix(2, matrix5.RowCount - 2, 0, matrix5.ColumnCount).ColumnSums().Sum();
|
|
|
+ var row = matrix5.Row(1, 2, 2);
|
|
|
+ var submatrix = matrix5.SubMatrix(1, 2, 0, matrix5.ColumnCount);
|
|
|
var hh = matrix5.EnumerateColumns();
|
|
|
var aa = matrix5.EnumerateRows();
|
|
|
- ClassCount count = new ClassCount();
|
|
|
+ LessonCount count = new LessonCount();
|
|
|
count.id = Guid.NewGuid().ToString();
|
|
|
count.code = "hbcn";
|
|
|
- count.beginCount = bc;
|
|
|
+ //count.beginCount = bc;
|
|
|
//await client.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync(count, new PartitionKey($"{count.code}"));
|
|
|
//Console.WriteLine(bCount);
|
|
|
/* var query = $"select c.id,c.img,c.name,c.type,c.startTime,c.endTime,c.presenter,c.topic,c.address,c.owner,c.school from c ";
|
|
@@ -196,25 +208,261 @@ namespace TEAMModelOS.Controllers.Analysis
|
|
|
}
|
|
|
return tyCount;
|
|
|
}
|
|
|
+ //课列趋势图
|
|
|
+ private async Task<List<(int week, List<double>)>> getTPCount(long stime, long etime, List<LessonCount> tcount, List<LessonCount> scount)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ List<(int week, List<double>)> wks = new();
|
|
|
+ var syear = DateTimeOffset.FromUnixTimeMilliseconds(stime).Year;
|
|
|
+ var eyear = DateTimeOffset.FromUnixTimeMilliseconds(etime).Year;
|
|
|
+ var sday = DateTimeOffset.FromUnixTimeMilliseconds(stime).DayOfYear;
|
|
|
+ var eday = DateTimeOffset.FromUnixTimeMilliseconds(etime).DayOfYear;
|
|
|
+ //求开学年多少天
|
|
|
+ int tdays = DateTimeHelper.getDays(syear);
|
|
|
+ //如果跨年 求今年多少天
|
|
|
+ int pydays = DateTimeHelper.getDays(eyear);
|
|
|
+ List<List<double>> begin = new();
|
|
|
+ List<List<double>> t = new();
|
|
|
+ List<List<double>> p = new();
|
|
|
+ List<List<double>> pt = new();
|
|
|
+ foreach (LessonCount lesson in tcount)
|
|
|
+ {
|
|
|
+ begin.Add(lesson.beginCount);
|
|
|
+ t.Add(lesson.tCount);
|
|
|
+ p.Add(lesson.pCount);
|
|
|
+ pt.Add(lesson.ptCount);
|
|
|
+ }
|
|
|
+ var bmatrix = DenseMatrix.OfColumns(begin);
|
|
|
+ var tmatrix = DenseMatrix.OfColumns(t);
|
|
|
+ var pmatrix = DenseMatrix.OfColumns(p);
|
|
|
+ var ptmatrix = DenseMatrix.OfColumns(pt);
|
|
|
+
|
|
|
+ int startdays = tdays - sday;
|
|
|
+ //有几周
|
|
|
+ int sweeks = startdays / 7;
|
|
|
+ //余几天
|
|
|
+ int rweeks = startdays % 7;
|
|
|
+
|
|
|
+ if (sweeks > 0)
|
|
|
+ {
|
|
|
+ for (int i = 1; i <= sweeks; i++)
|
|
|
+ {
|
|
|
+ sday += 7;
|
|
|
+ var bsum = bmatrix.SubMatrix(sday, 7, 0, bmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ var tsum = tmatrix.SubMatrix(sday, 7, 0, tmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ var psum = pmatrix.SubMatrix(sday, 7, 0, pmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ var ptsum = ptmatrix.SubMatrix(sday, 7, 0, ptmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ wks.Add((i, new List<double>() { bsum, tsum, psum, ptsum }));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (rweeks > 0)
|
|
|
+ {
|
|
|
+ var bsum = bmatrix.SubMatrix(tdays - rweeks, rweeks, 0, bmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ var tsum = tmatrix.SubMatrix(tdays - rweeks, rweeks, 0, tmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ var psum = pmatrix.SubMatrix(tdays - rweeks, rweeks, 0, pmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ var ptsum = ptmatrix.SubMatrix(tdays - rweeks, rweeks, 0, ptmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ if (eyear > syear)
|
|
|
+ {
|
|
|
+ List<List<double>> e_begin = new();
|
|
|
+ List<List<double>> e_t = new();
|
|
|
+ List<List<double>> e_p = new();
|
|
|
+ List<List<double>> e_pt = new();
|
|
|
+ foreach (LessonCount lesson in scount)
|
|
|
+ {
|
|
|
+ e_begin.Add(lesson.beginCount);
|
|
|
+ e_t.Add(lesson.tCount);
|
|
|
+ e_p.Add(lesson.pCount);
|
|
|
+ e_pt.Add(lesson.ptCount);
|
|
|
+ }
|
|
|
+ var tbmatrix = DenseMatrix.OfColumns(e_begin);
|
|
|
+ var ttmatrix = DenseMatrix.OfColumns(e_t);
|
|
|
+ var tpmatrix = DenseMatrix.OfColumns(e_p);
|
|
|
+ var tptmatrix = DenseMatrix.OfColumns(e_pt);
|
|
|
+ int day = 7 - rweeks;
|
|
|
+ int start = eday - day;
|
|
|
+ int eweeks = start / 7;
|
|
|
+ int erweeks = start % 7;
|
|
|
+ var tbsum = tbmatrix.SubMatrix(0, day, 0, tbmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ var ttsum = ttmatrix.SubMatrix(0, day, 0, ttmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ var tpsum = tpmatrix.SubMatrix(0, day, 0, tpmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ var tptsum = tptmatrix.SubMatrix(0, day, 0, tptmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ wks.Add((sweeks + 1, new List<double>() { bsum + tbsum, tsum + ttsum, psum + tpsum, ptsum + tptsum }));
|
|
|
+ if (eweeks > 0)
|
|
|
+ {
|
|
|
+ for (int i = 1; i <= eweeks; i++)
|
|
|
+ {
|
|
|
+ start += 7;
|
|
|
+ var newbsum = tbmatrix.SubMatrix(start, 7, 0, tbmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ var newtsum = ttmatrix.SubMatrix(start, 7, 0, ttmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ var newpsum = tpmatrix.SubMatrix(start, 7, 0, tpmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ var newptsum = tptmatrix.SubMatrix(start, 7, 0, tptmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ wks.Add((sweeks += 1, new List<double>() { newbsum, newtsum, newpsum, newptsum }));
|
|
|
+ }
|
|
|
|
|
|
- private async Task<List<double>> getRecordCount(CosmosClient client, long stime,long etime,string code)
|
|
|
+ }
|
|
|
+ if (erweeks > 0)
|
|
|
+ {
|
|
|
+ var newbsum = tbmatrix.SubMatrix(eday - start, erweeks, 0, tbmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ var newtsum = tbmatrix.SubMatrix(eday - start, erweeks, 0, tbmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ var newpsum = tbmatrix.SubMatrix(eday - start, erweeks, 0, tbmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ var newptsum = tbmatrix.SubMatrix(eday - start, erweeks, 0, tbmatrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ wks.Add((sweeks + 1, new List<double>() { newbsum, newtsum, newpsum, newptsum }));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ wks.Add((sweeks + 1, new List<double>() { bsum, tsum, psum, ptsum }));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return wks;
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private async Task<List<(string time, double count)>> getRecordCount(CosmosClient client, List<LessonRecord> records, long stime, long etime, string code)
|
|
|
{
|
|
|
- List<double> counts = new();
|
|
|
+ List<(string time, double count)> counts = new();
|
|
|
+ counts.Add(("total", records.Count()));
|
|
|
var syear = DateTimeOffset.FromUnixTimeMilliseconds(stime).Year;
|
|
|
var eyear = DateTimeOffset.FromUnixTimeMilliseconds(etime).Year;
|
|
|
- var tyeat = DateTimeOffset.UtcNow.Year;
|
|
|
+ var tyear = DateTimeOffset.UtcNow.Year;
|
|
|
var tday = DateTimeOffset.UtcNow.DayOfYear;
|
|
|
- var sday = DateTimeOffset.UtcNow.DayOfWeek;
|
|
|
- var response = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(syear.ToString(), new PartitionKey($"ClassCount-" + code));
|
|
|
- if (response.Status == 200)
|
|
|
+ //求今年多少天
|
|
|
+ int tdays = DateTimeHelper.getDays(tyear);
|
|
|
+ //如果跨年 求前年多少天
|
|
|
+ int pydays = DateTimeHelper.getDays(syear);
|
|
|
+ List<LessonCount> scount = new();
|
|
|
+ List<LessonCount> tcount = new();
|
|
|
+ DenseMatrix dense = null;
|
|
|
+ await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<LessonCount>(
|
|
|
+ queryText: $"select value(c) from c where c.year = {syear}",
|
|
|
+ requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"LessonCount-{code}") }))
|
|
|
{
|
|
|
- using var json = await JsonDocument.ParseAsync(response.ContentStream);
|
|
|
- ClassCount count = json.ToObject<ClassCount>();
|
|
|
- var matrix = DenseMatrix.OfColumns(count.beginCount);
|
|
|
+ scount.Add(item);
|
|
|
+ }
|
|
|
+ //var response = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(syear.ToString(), new PartitionKey($"ClassCount-" + code));
|
|
|
+ if (tyear > syear)
|
|
|
+ {
|
|
|
+ //跨年
|
|
|
+ await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<LessonCount>(
|
|
|
+ queryText: $"select value(c) from c where c.year = {tyear}",
|
|
|
+ requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"LessonCount-{code}") }))
|
|
|
+ {
|
|
|
+ tcount.Add(item);
|
|
|
+ }
|
|
|
+ if (tcount.Count > 0)
|
|
|
+ {
|
|
|
+ List<List<double>> be = new();
|
|
|
+ foreach (var item in tcount)
|
|
|
+ {
|
|
|
+ be.Add(item.beginCount);
|
|
|
+ }
|
|
|
+ dense = DenseMatrix.OfColumns(be);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (scount.Count > 0)
|
|
|
+ {
|
|
|
+ List<List<double>> begin = new List<List<double>>();
|
|
|
+ foreach (LessonCount lesson in scount)
|
|
|
+ {
|
|
|
+ begin.Add(lesson.beginCount);
|
|
|
+ }
|
|
|
+ var matrix = DenseMatrix.OfColumns(begin);
|
|
|
double tcounts = matrix.Row(tday).Sum();
|
|
|
+ counts.Add(("today", tcounts));
|
|
|
+ //求本周
|
|
|
+ int sday = (int)DateTimeOffset.UtcNow.DayOfWeek;
|
|
|
+ if (sday == 0)
|
|
|
+ {
|
|
|
+ sday = 7;
|
|
|
+ if (tday - sday < 0)
|
|
|
+ {
|
|
|
+ //var tmatrix = DenseMatrix.OfColumns(scount.beginCount);
|
|
|
+ //新的一年不超过7天的值
|
|
|
+ var tsum = dense.SubMatrix(tday, tday, 0, dense.ColumnCount).ColumnSums().Sum();
|
|
|
+ //前一年余下的值
|
|
|
+ var pysum = matrix.SubMatrix(pydays - (sday - tday), sday - tday, 0, matrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ counts.Add(("week", tsum + pysum));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var subDay = matrix.SubMatrix(tday - sday, 7, 0, matrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ counts.Add(("week", subDay));
|
|
|
+ }
|
|
|
+ //求本学期
|
|
|
+ var sdays = DateTimeOffset.FromUnixTimeMilliseconds(stime).DayOfYear;
|
|
|
+ var edays = DateTimeOffset.FromUnixTimeMilliseconds(etime).DayOfYear;
|
|
|
+ if (edays - sdays < 0)
|
|
|
+ {
|
|
|
+ //var tmatrix = DenseMatrix.OfColumns(scount.beginCount);
|
|
|
+ //跨年后开始到本学期结束
|
|
|
+ var endMonth = dense.SubMatrix(0, edays, 0, dense.ColumnCount).ColumnSums().Sum();
|
|
|
+ var startMonth = matrix.SubMatrix(sdays, pydays - sdays, 0, matrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ counts.Add(("semester", endMonth + startMonth));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var allMonth = matrix.SubMatrix(sdays, edays - sdays, 0, matrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ counts.Add(("semester", allMonth));
|
|
|
+ }
|
|
|
+ //本月
|
|
|
+ var tmonth = DateTimeOffset.UtcNow.Day;
|
|
|
+ var subMonth = matrix.SubMatrix(tday - tmonth, tmonth, 0, matrix.ColumnCount).ColumnSums().Sum();
|
|
|
+ counts.Add(("month", subMonth));
|
|
|
+ //求今年
|
|
|
+ var subYear = matrix.SubMatrix(0, tdays, 0, matrix.ColumnCount).ColumnSums().Sum();
|
|
|
+
|
|
|
|
|
|
}
|
|
|
+ return counts;
|
|
|
+ }
|
|
|
+ //取得该学校当前学期所有评测活动进行分类计算
|
|
|
+ private async Task<List<double>> getExamTypeCount(CosmosClient client, long stime, long etime, string code)
|
|
|
+ {
|
|
|
+ List<double> counts = new List<double>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ List<(string id, string source, string scope)> ps = new List<(string id, string source, string scope)>();
|
|
|
+ var queryClass = $"select c.id,c.source,c.scope from c where c.school = '{code}' and c.pk = 'Exam' and c.startTime >= {stime} and c.endTime =< {etime}";
|
|
|
+ await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryStreamIterator(queryText: queryClass))
|
|
|
+ {
|
|
|
+ using var json = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
+ if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
|
|
|
+ {
|
|
|
+ var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
|
|
|
+ while (accounts.MoveNext())
|
|
|
+ {
|
|
|
+ JsonElement account = accounts.Current;
|
|
|
+ ps.Add((account.GetProperty("id").GetString(), account.GetProperty("source").GetString(), account.GetProperty("scope").GetString()));
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ var sc_online = ps.Where(x => x.source.Equals("0") && x.scope.Equals("school")).ToList().Count;
|
|
|
+ var p_online = ps.Where(x => x.source.Equals("0") && x.scope.Equals("private")).ToList().Count;
|
|
|
+ var sc_class = ps.Where(x => x.source.Equals("1") && x.scope.Equals("school")).ToList().Count;
|
|
|
+ var p_class = ps.Where(x => x.source.Equals("1") && x.scope.Equals("private")).ToList().Count;
|
|
|
+ var sc_mark = ps.Where(x => x.source.Equals("2") && x.scope.Equals("school")).ToList().Count;
|
|
|
+ var p_mark = ps.Where(x => x.source.Equals("2") && x.scope.Equals("private")).ToList().Count;
|
|
|
+ counts.Add(sc_online);
|
|
|
+ counts.Add(sc_class);
|
|
|
+ counts.Add(sc_mark);
|
|
|
+ counts.Add(p_online);
|
|
|
+ counts.Add(p_class);
|
|
|
+ counts.Add(p_mark);
|
|
|
return counts;
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ return counts;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|