Li 2 years ago
parent
commit
1f23e7c8cb
1 changed files with 110 additions and 60 deletions
  1. 110 60
      TEAMModelBI/Controllers/BITest/TestController.cs

+ 110 - 60
TEAMModelBI/Controllers/BITest/TestController.cs

@@ -1789,10 +1789,11 @@ namespace TEAMModelBI.Controllers.BITest
 
             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}";
@@ -1804,7 +1805,7 @@ namespace TEAMModelBI.Controllers.BITest
                 return Ok(new { state = RespondCode.ParamsError, msg = "参数错误!" });
             }
             if (json.TryGetProperty("cnt", out JsonElement _cnt))
-                all = _cnt.GetInt32();
+                count = _cnt.GetInt32();
 
             if(json.TryGetProperty("interaction", out JsonElement _interaction))
                 interaction = _interaction.GetInt32();
@@ -1815,7 +1816,22 @@ namespace TEAMModelBI.Controllers.BITest
                 careDate = _date.GetInt64();
             else
                 careDate = dateOff.ToUnixTimeMilliseconds();
-            var (DayS, DayE) = TimeHelper.GetStartOrEnd(dateOff);      //今天开始时间结束时间
+
+            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");   //上月开始/结束时间
@@ -1823,6 +1839,8 @@ namespace TEAMModelBI.Controllers.BITest
             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);
@@ -1856,7 +1874,7 @@ namespace TEAMModelBI.Controllers.BITest
                 }
                 else
                 {
-                    ScBase scBase = await cosmosClient.GetContainer("TEAMModelOS", "Common").ReadItemAsync<ScBase>(scId, new PartitionKey("Base"));
+                    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;
@@ -1865,32 +1883,37 @@ namespace TEAMModelBI.Controllers.BITest
                     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 += 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;
+                    if (lessType == 0)
+                        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]);
@@ -1899,6 +1922,26 @@ namespace TEAMModelBI.Controllers.BITest
                     statsInfo.lesson.lastWeek = ((int)lessList.SubMatrix(lWeekDayS.DayOfYear, 7, 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>();
+                    }
+
+                    if (lTermDayS.Year < dateOff.Year)
+                    {
+                        int lastTerm = 0;
+                        if (lastStats != null) 
+                        {
+                        
+                        }
+                    }
+
+
+
+
                     if (lastTermS <= statsInfo.lesson.upTime && statsInfo.lesson.upTime <= lastTermE)
                     {
                         if (lTermDayS.Year < dateOff.Year)
@@ -1927,7 +1970,7 @@ namespace TEAMModelBI.Controllers.BITest
                                 statsInfo.lesson.term = ((int)actYer.SubMatrix(termDayS.DayOfYear, termDayE.DayOfYear, 0, 1).ColumnSums().Sum());
                             }
                             else
-                                statsInfo.lesson.term += all;
+                                statsInfo.lesson.term += count;
                         }
                     }
 
@@ -1962,9 +2005,9 @@ namespace TEAMModelBI.Controllers.BITest
 
                     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 });
@@ -1973,10 +2016,10 @@ namespace TEAMModelBI.Controllers.BITest
 
                     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 });
@@ -1989,59 +2032,66 @@ namespace TEAMModelBI.Controllers.BITest
 
             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, "Common").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, "Common").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, "Common").ReplaceItemAsync<StatsInfo>(statsInfo, scId, new PartitionKey("Statistics"));
+                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"));