|
@@ -1764,287 +1764,9 @@ namespace TEAMModelBI.Controllers.BITest
|
|
|
public async Task<IActionResult> SetStats(JsonElement json)
|
|
|
{
|
|
|
var cosmosClient = _azureCosmos.GetCosmosClient();
|
|
|
- //await BIStats.SetTypeAddStats(cosmosClient, "hbcn", "Less", 0, 1, 6);//BI统计增/减量
|
|
|
+ await BIStats.SetTypeAddStats(cosmosClient, _dingDing, "gmjh", "Less", 1, careDate: 1672709351527);
|
|
|
|
|
|
- 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 Ok(new { state = RespondCode.ParamsError, msg = "参数错误!" });
|
|
|
- }
|
|
|
- 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();
|
|
|
-
|
|
|
- if (string.IsNullOrEmpty(scId))
|
|
|
- return Ok(new { state = 400});
|
|
|
-
|
|
|
- //DateTimeOffset cuurDateOff = DateTimeOffset.UtcNow;
|
|
|
- //DateTimeOffset dateOff = DateTimeOffset.UtcNow;
|
|
|
- if (careDate > 1000000000000)
|
|
|
- dateOff = DateTimeOffset.FromUnixTimeMilliseconds(careDate);
|
|
|
- else
|
|
|
- dateOff = DateTimeOffset.FromUnixTimeSeconds(careDate);
|
|
|
- if (careDate == 0)
|
|
|
- {
|
|
|
- dateOff = DateTimeOffset.UtcNow;
|
|
|
- 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<StatsInfo>();
|
|
|
- }
|
|
|
- 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>();
|
|
|
- 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", "School").ReadItemAsync<ScBase>(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;
|
|
|
- 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();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- 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<List<double>>() { statsInfo.lesson.year });
|
|
|
- statsInfo.lesson.lastWeek = ((int)lessList.SubMatrix(lWeekDayS.DayOfYear, lWeekDayE.DayOfYear - lWeekDayS.DayOfYear, 0, lessList.ColumnCount).ColumnSums().Sum());
|
|
|
- statsInfo.lesson.week = ((int)lessList.SubMatrix(weekDayS.DayOfYear, (dateOff.DayOfYear - weekDayS.DayOfYear), 0, lessList.ColumnCount).ColumnSums().Sum());
|
|
|
-
|
|
|
- StatsInfo lastStats = null;
|
|
|
- var resLast = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{lTermDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
- if (resLast.Status == 200)
|
|
|
- {
|
|
|
- using var fileJson = await JsonDocument.ParseAsync(resLast.ContentStream);
|
|
|
- lastStats = fileJson.ToObject<StatsInfo>();
|
|
|
- }
|
|
|
-
|
|
|
- int lastTerm = 0;
|
|
|
- if (lTermDayS.Year < dateOff.Year)
|
|
|
- {
|
|
|
- if (lastStats != null)
|
|
|
- {
|
|
|
- var actYer = DenseMatrix.OfColumns(new List<List<double>>() { lastStats.lesson.year });
|
|
|
- lastTerm += ((int)actYer.SubMatrix(lTermDayS.DayOfYear, lastStats.lesson.year.Count - lTermDayS.DayOfYear, 0, 1).ColumnSums().Sum());
|
|
|
- }
|
|
|
- lastTerm += ((int)lessList.SubMatrix(0, lTermDayE.DayOfYear, 0, lessList.ColumnCount).ColumnSums().Sum());
|
|
|
- }
|
|
|
- else
|
|
|
- lastTerm += ((int)lessList.SubMatrix(lTermDayS.DayOfYear, lTermDayE.DayOfYear - lTermDayS.DayOfYear, 0, lessList.ColumnCount).ColumnSums().Sum());
|
|
|
- statsInfo.lesson.lastTerm = lastTerm;
|
|
|
-
|
|
|
- int term = 0;
|
|
|
- if (termDayE.Year > dateOff.Year)
|
|
|
- {
|
|
|
- if (lastStats != null)
|
|
|
- term = ((int)lessList.SubMatrix(termDayS.DayOfYear, (statsInfo.lesson.year.Count - termDayS.DayOfYear), 0, lessList.ColumnCount).ColumnSums().Sum());
|
|
|
- }
|
|
|
- else
|
|
|
- term = ((int)lessList.SubMatrix(termDayS.DayOfYear, termDayE.DayOfYear - termDayS.DayOfYear, 0, lessList.ColumnCount).ColumnSums().Sum());
|
|
|
- statsInfo.lesson.term = term;
|
|
|
-
|
|
|
- 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<List<double>>() { 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());
|
|
|
-
|
|
|
- int lastTermI = 0;
|
|
|
- if (lastStats != null)
|
|
|
- {
|
|
|
- var actYer = DenseMatrix.OfColumns(new List<List<double>>() { lastStats.lesson.year });
|
|
|
- lastTermI += ((int)actYer.SubMatrix(0, lastStats.lesson.year.Count, 0, actYer.ColumnCount).ColumnSums().Sum());
|
|
|
- }
|
|
|
- statsInfo.lesson.lastYearInter = lastTermI;
|
|
|
-
|
|
|
- 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<List<double>>() { 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<List<double>>() { 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<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, lWeekDayE.DayOfYear- lWeekDayS.DayOfYear, 0, matris.ColumnCount).ColumnSums().Sum());
|
|
|
- statsInfo.activity.week = ((int)matris.SubMatrix(weekDayS.DayOfYear, weekDayE.DayOfYear - weekDayS.DayOfYear, 0, matris.ColumnCount).ColumnSums().Sum());
|
|
|
-
|
|
|
- StatsInfo lastStats = null;
|
|
|
- var resLast = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{lTermDayS.Year}-{scId}", new PartitionKey("Statistics"));
|
|
|
- if (resLast.Status == 200)
|
|
|
- {
|
|
|
- using var fileJson = await JsonDocument.ParseAsync(resLast.ContentStream);
|
|
|
- lastStats = fileJson.ToObject<StatsInfo>();
|
|
|
- }
|
|
|
-
|
|
|
- int lastTerm = 0;
|
|
|
- if (lTermDayS.Year < dateOff.Year)
|
|
|
- {
|
|
|
- if (lastStats != null)
|
|
|
- {
|
|
|
- var actYer = DenseMatrix.OfColumns(new List<List<double>>() { lastStats.lesson.year });
|
|
|
- lastTerm += ((int)actYer.SubMatrix(lTermDayS.DayOfYear, lastStats.lesson.year.Count - lTermDayS.DayOfYear, 0, 1).ColumnSums().Sum());
|
|
|
- }
|
|
|
- lastTerm += ((int)matris.SubMatrix(0, lTermDayE.DayOfYear, 0, matris.ColumnCount).ColumnSums().Sum());
|
|
|
- }
|
|
|
- else
|
|
|
- lastTerm += ((int)matris.SubMatrix(lTermDayS.DayOfYear, lTermDayE.DayOfYear- lTermDayS.DayOfYear, 0, matris.ColumnCount).ColumnSums().Sum());
|
|
|
- statsInfo.activity.lastTerm = lastTerm;
|
|
|
-
|
|
|
-
|
|
|
- int term = 0;
|
|
|
- if (termDayS.Year > dateOff.Year)
|
|
|
- {
|
|
|
- if (lastStats != null)
|
|
|
- {
|
|
|
- var actYer = DenseMatrix.OfColumns(new List<List<double>>() { lastStats.lesson.year });
|
|
|
- term += ((int)actYer.SubMatrix(termDayS.DayOfYear, lastStats.lesson.year.Count - termDayS.DayOfYear, 0, 1).ColumnSums().Sum());
|
|
|
- }
|
|
|
- term += ((int)matris.SubMatrix(0, termDayE.DayOfYear, 0, matris.ColumnCount).ColumnSums().Sum());
|
|
|
- }
|
|
|
- else
|
|
|
- term += ((int)matris.SubMatrix(termDayS.DayOfYear, termDayE.DayOfYear - termDayS.DayOfYear, 0, matris.ColumnCount).ColumnSums().Sum());
|
|
|
- statsInfo.activity.term = term;
|
|
|
-
|
|
|
- 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>(statsInfo, statsInfo.id, new PartitionKey("Statistics"));
|
|
|
- else
|
|
|
- statsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync<StatsInfo>(statsInfo, new PartitionKey("Statistics"));
|
|
|
-
|
|
|
- return Ok(new { state = 200, statsInfo });
|
|
|
+ return Ok(new { state = 200 });
|
|
|
}
|
|
|
|
|
|
|