فهرست منبع

编写统计传参的问题

Li 2 سال پیش
والد
کامیت
b70a5c9cf2

+ 112 - 0
TEAMModelBI/Controllers/BITest/TestController.cs

@@ -58,6 +58,7 @@ using DocumentFormat.OpenXml.Bibliography;
 using TEAMModelOS.SDK.Models.Service.BIStatsWay;
 using MathNet.Numerics.LinearAlgebra.Double;
 using TEAMModelOS.SDK.Models.Cosmos.BI.BISchool;
+using DocumentFormat.OpenXml.Drawing;
 
 namespace TEAMModelBI.Controllers.BITest
 {
@@ -1625,6 +1626,14 @@ namespace TEAMModelBI.Controllers.BITest
             //return Ok(new { state = 200, ld= artStats.LastYear.Count, d = artStats.year.Count, artStats }); 
             //示例矩阵
 
+            DateTimeOffset dt = DateTimeOffset.UtcNow;
+
+            int dayCnt = dt.DayOfYear;
+
+
+
+
+
             List<List<double>> doubles = new() {
                 new List<double>() { 6, 5, 4, 3, 2, 1},
                 new List<double>() { 2, 3, 4, 5, 6, 7 },
@@ -1717,6 +1726,109 @@ namespace TEAMModelBI.Controllers.BITest
         }
 
 
+        [HttpPost("set-stats")]
+        public async Task<IActionResult> SetStats(JsonElement json)
+        {
+            string scId = null, type = null;
+            var cosmosClient = _azureCosmos.GetCosmosClient();
+            var tableClient = _azureStorage.GetCloudTableClient();
+            var blobClient = _azureStorage.GetBlobContainerClient(containerName: "0-public");
+            long careDate = 0;
+            int cnt = 0;
+
+            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});
+            }
+            if (json.TryGetProperty("cnt", out JsonElement _cnt))
+                cnt = _cnt.GetInt32();
+
+            if (json.TryGetProperty("date", out JsonElement _date))
+                careDate = _date.GetInt64();
+            else
+                careDate = dateOff.ToUnixTimeMilliseconds();
+            var (lastDays, lastDaye) = TimeHelper.GetStartOrEnd(dateOff.AddDays(-1));//昨天开始/结束时间
+            var (DayS, DayE) = TimeHelper.GetStartOrEnd(dateOff);      //今天开始时间结束时间
+            var (lastWeekS, lastWeekE) = TimeHelper.GetStartOrEnd(dateOff, "lastweek");   //计算上周开始/结束时间
+            var (weekS, weekE) = TimeHelper.GetStartOrEnd(dateOff, "week");             //计算本周开始/结束时间
+            var (lastTermS, lastTermE) = TimeHelper.GetStartOrEnd(dateOff, "lastterm");   //计算上学期开始/结束时间
+            var (termS, termE) = TimeHelper.GetStartOrEnd(dateOff, "term");   //计算本学期开始/结束时间
+            var (lastYearS, lastYearE) = TimeHelper.GetStartOrEnd(dateOff, "lastYear"); //计算去年开始/结束时间
+            var (yearS, yearE) = TimeHelper.GetStartOrEnd(dateOff, "year");         //计算今年开始/结束时间
+            StatsInfo statsInfo = new();
+
+            var resStsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(scId, new PartitionKey("BIRel"));
+            if (resStsInfo.Status == 200)
+            {
+                using var fileJson = await JsonDocument.ParseAsync(resStsInfo.ContentStream);
+                statsInfo = fileJson.ToObject<StatsInfo>();
+            }
+            else
+            {
+                ScBase scBase = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemAsync<ScBase>(scId, new PartitionKey("Base"));
+                statsInfo.id = 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":
+                    if ((statsInfo.upTime < DayS && statsInfo.upTime >= lastDays) || (careDate < DayS && careDate >= lastDays))
+                    {
+                        statsInfo.activity.lastDay = statsInfo.activity.dayCnt;
+                        statsInfo.activity.year[dateOff.DayOfYear - 1] += statsInfo.activity.dayCnt;
+                    }
+                    if ((DayS <= statsInfo.upTime && statsInfo.upTime <= DayE) || (DayS <= careDate && careDate <= DayE))
+                    {
+                        statsInfo.activity.dayCnt += cnt;
+                        statsInfo.activity.exam += cnt;
+                        statsInfo.activity.year[dateOff.DayOfYear] += cnt;
+                    }
+
+                    statsInfo.activity.cnt += cnt;
+                    break;
+                case "Survey":
+
+                    break;
+                case "Vote":
+
+                    break;
+                case "Homework":
+
+                    break;
+                case "Less":
+
+                    break;
+                case "stu":
+
+                    break;
+                case "tch":
+
+                    break;
+            }
+
+            return Ok(new { state = 200, statsInfo });
+
+        }
+
+        public static async Task SetStats ()
+        {
+        
+        
+        }
+
+
 
         public class linqTest
         {

+ 61 - 7
TEAMModelOS.FunctionV4/HttpTrigger/BIHttpTrigger.cs

@@ -12,6 +12,7 @@ using DocumentFormat.OpenXml.Bibliography;
 using Microsoft.AspNetCore.Http;
 using Microsoft.Azure.Functions.Worker;
 using Microsoft.Azure.Functions.Worker.Http;
+using NUnit.Framework.Constraints;
 using StackExchange.Redis;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
@@ -199,11 +200,15 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
                 string data = await new StreamReader(req.Body).ReadToEndAsync();
                 var json = JsonDocument.Parse(data).RootElement;
                 jsondata = json;
-                if (json.TryGetProperty("schoolId", out JsonElement _schoolId))
+                long careDate = 0;
+                int cnt = 0;
+                                
+                DateTimeOffset dateOff = DateTimeOffset.UtcNow;
+                if (!json.TryGetProperty("scId", out JsonElement _schoolId))
                 {
                     scId = $"{_schoolId}";
                 }
-                if (json.TryGetProperty("type", out JsonElement _type))
+                if (!json.TryGetProperty("type", out JsonElement _type))
                 {
                     type = $"{_type}";
                 }
@@ -212,13 +217,65 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
                     await _dingDing.SendBotMsg($"set-scstats-type, {req.Body};转换后:{json}", GroupNames.成都开发測試群組);
                     return response;
                 }
+                if (!json.TryGetProperty("cnt", out JsonElement _cnt)) 
+                {
+                    cnt = int.Parse($"{_cnt}");
+                }
+
+                if (!json.TryGetProperty("date", out JsonElement _date)) 
+                {
+                    careDate = long.Parse($"{_date}");
+                }
+                else
+                {
+                    careDate = dateOff.ToUnixTimeMilliseconds();
+                }
 
-                BIRelation bIRelation = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<BIRelation>(scId, new PartitionKey("BIRel"));
+                long currDay = dateOff.ToUnixTimeMilliseconds();
+                var (lastDays, lastDaye) = TimeHelper.GetStartOrEnd(dateOff.AddDays(-1));//昨天开始/结束时间
+                var (DayS, DayE) = TimeHelper.GetStartOrEnd(dateOff);      //今天开始时间结束时间
+                var (lastWeekS, lastWeekE) = TimeHelper.GetStartOrEnd(dateOff, "lastweek");   //计算上周开始/结束时间
+                var (weekS, weekE) = TimeHelper.GetStartOrEnd(dateOff, "week");             //计算本周开始/结束时间
+                var (lastTermS, lastTermE) = TimeHelper.GetStartOrEnd(dateOff, "lastterm");   //计算上学期开始/结束时间
+                var (termS, termE) = TimeHelper.GetStartOrEnd(dateOff, "term");   //计算本学期开始/结束时间
+                var (lastYearS, lastYearE) = TimeHelper.GetStartOrEnd(dateOff, "lastYear"); //计算去年开始/结束时间
+                var (yearS, yearE) = TimeHelper.GetStartOrEnd(dateOff, "year");         //计算今年开始/结束时间
+                StatsInfo statsInfo  = new();
+
+                var resStsInfo  = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(scId, new PartitionKey("BIRel"));
+                if (resStsInfo.Status == 200)
+                {
+                    using var fileJson = await JsonDocument.ParseAsync(resStsInfo.ContentStream);
+                    statsInfo = fileJson.ToObject<StatsInfo>();
+                }
+                else
+                {
+                    ScBase scBase = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemAsync<ScBase>(scId, new PartitionKey("Base"));
+                    statsInfo.id = scBase.id;
+                    statsInfo.name = scBase.name;
+                    statsInfo.picture = scBase.picture;
+                    statsInfo.size = scBase.size;
+                    statsInfo.scCreateTime = scBase.createTime;
+                    statsInfo.areaId = scBase.areaId;
+                    statsInfo.upTime = currDay;
+                }
 
                 switch ($"{type}")
                 {
                     case "Exam":
-
+                        if (statsInfo.upTime < DayS && statsInfo.upTime >= lastDays) 
+                        {
+                            statsInfo.activity.lastDay = statsInfo.activity.dayCnt;
+                            statsInfo.activity.year[dateOff.DayOfYear-1] += statsInfo.activity.dayCnt;
+                        }
+                        if (DayS <= statsInfo.upTime && statsInfo.upTime <= DayE)
+                        {
+                            statsInfo.activity.dayCnt += cnt;
+                            statsInfo.activity.exam += cnt;
+                            statsInfo.activity.year[dateOff.DayOfYear] += cnt;
+                        }
+  
+                        statsInfo.activity.cnt += cnt;
                         break;
                     case "Survey":
 
@@ -237,9 +294,6 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
                         break;
                     case "tch":
 
-                        break;
-                    case "base":
-
                         break;
                 }
             }

+ 1 - 0
TEAMModelOS.SDK/Models/Service/BIStatsWay/SchoolStatsWay.cs

@@ -72,6 +72,7 @@ namespace TEAMModelOS.SDK.Models.Service.BIStatsWay
 
             //statsInfo.lesson = 
 
+            statsInfo.upTime = dateTime.ToUnixTimeMilliseconds();
             statsInfo.lesson = await LessonRecordStatsWay.GetSchoolAll(cosmosClient, statsInfo.id);
             statsInfo.activity = await ActivityStatsWay.GetSchoolAll(cosmosClient, statsInfo.id);
             statsInfo.study = await StudyStatsWay.GetSchoolAll(cosmosClient, statsInfo.id);