Li 2 anni fa
parent
commit
07af298773

+ 72 - 10
TEAMModelBI/Controllers/BITest/TestController.cs

@@ -722,7 +722,6 @@ namespace TEAMModelBI.Controllers.BITest
             var datetime7 = DateTimeOffset.UtcNow.AddDays(-7); //前七天的时间
 
             List<string> strList = monthsOfYear("2021-1");
-
             var ere = DateTimeOffset.Parse("2022-04-25");
 
             DateTimeOffset ste = new();
@@ -749,7 +748,6 @@ namespace TEAMModelBI.Controllers.BITest
             List<StartEndTime> endList1 = TimeHelper.GetYearMonthlyStartEnd(DateTimeOffset.UtcNow.Year);
             //return Ok(new { strList, dateTime, year, start, end, endList, endList1, endList2 });
 
-
             return Ok(new { day7, day30, datetime7, start1, end1, start2, end2, start3, end3, start4, end4, start5, end5, start6, end6, start7, end7 });
         }
 
@@ -1753,7 +1751,7 @@ namespace TEAMModelBI.Controllers.BITest
                 careDate = _date.GetInt64();
             else
                 careDate = dateOff.ToUnixTimeMilliseconds();
-            var (lastDays, lastDaye) = TimeHelper.GetStartOrEnd(dateOff.AddDays(-1));//昨天开始/结束时间
+            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");             //计算本周开始/结束时间
@@ -1763,7 +1761,7 @@ namespace TEAMModelBI.Controllers.BITest
             var (yearS, yearE) = TimeHelper.GetStartOrEnd(dateOff, "year");         //计算今年开始/结束时间
             StatsInfo statsInfo = new();
 
-            var resStsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(scId, new PartitionKey("BIRel"));
+            var resStsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(scId, new PartitionKey("Stats"));
             if (resStsInfo.Status == 200)
             {
                 using var fileJson = await JsonDocument.ParseAsync(resStsInfo.ContentStream);
@@ -1784,27 +1782,87 @@ namespace TEAMModelBI.Controllers.BITest
             switch ($"{type}")
             {
                 case "Exam":
-                    if ((statsInfo.upTime < DayS && statsInfo.upTime >= lastDays) || (careDate < DayS && careDate >= lastDays))
-                    {
+                    if ((statsInfo.upTime < lastDayE && statsInfo.upTime >= lastDayS) || (careDate <= DayE && careDate >= DayS))
                         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;
+                        if (statsInfo.activity.year.Count > 0)
+                            statsInfo.activity.year[dateOff.DayOfYear] += cnt;
                     }
 
+                    if ((weekS <= statsInfo.upTime && statsInfo.upTime <= weekS) || (weekS <= careDate && careDate <= weekE)) 
+                        statsInfo.activity.week += cnt;
+
+                    //有误
+                    if ((careDate <= weekS  && careDate <= lastWeekS)) 
+                    {
+                    }
+
+
                     statsInfo.activity.cnt += cnt;
                     break;
                 case "Survey":
+                    if ((statsInfo.upTime < lastDayE && statsInfo.upTime >= lastDayS) || (careDate <= DayE && careDate >= DayS))
+                        statsInfo.activity.survey = statsInfo.activity.survey;
+                    if ((DayS <= statsInfo.upTime && statsInfo.upTime <= DayE) || (DayS <= careDate && careDate <= DayE))
+                    {
+                        statsInfo.activity.dayCnt += cnt;
+                        statsInfo.activity.survey += cnt;
+                        if (statsInfo.activity.year.Count > 0)
+                            statsInfo.activity.year[dateOff.DayOfYear] += cnt;
+                    }
+
+                    if ((weekS <= statsInfo.upTime && statsInfo.upTime <= weekS) || (weekS <= careDate && careDate <= weekE))
+                        statsInfo.activity.week += cnt;
 
+                    //有误
+                    if ((careDate <= weekS && careDate <= lastWeekS))
+                    {
+                    }
                     break;
                 case "Vote":
+                    if ((statsInfo.upTime < lastDayE && statsInfo.upTime >= lastDayS) || (careDate <= DayE && careDate >= DayS))
+                        statsInfo.activity.vote = statsInfo.activity.vote; if ((DayS <= statsInfo.upTime && statsInfo.upTime <= DayE) || (DayS <= careDate && careDate <= DayE))
+                    {
+                        statsInfo.activity.dayCnt += cnt;
+                        statsInfo.activity.vote += cnt;
+                        if (statsInfo.activity.year.Count > 0)
+                            statsInfo.activity.year[dateOff.DayOfYear] += cnt;
+                    }
+
+                    if ((weekS <= statsInfo.upTime && statsInfo.upTime <= weekS) || (weekS <= careDate && careDate <= weekE))
+                        statsInfo.activity.week += cnt;
+
+                    //有误
+                    if ((careDate <= weekS && careDate <= lastWeekS))
+                    {
+
+                    }
 
                     break;
                 case "Homework":
+                    if ((statsInfo.upTime < lastDayE && statsInfo.upTime >= lastDayS) || (careDate <= DayE && careDate >= DayS))
+                        statsInfo.activity.homework = statsInfo.activity.homework;
+
+                    if ((DayS <= statsInfo.upTime && statsInfo.upTime <= DayE) || (DayS <= careDate && careDate <= DayE))
+                    {
+                        statsInfo.activity.dayCnt += cnt;
+                        statsInfo.activity.vote += cnt;
+                        if (statsInfo.activity.year.Count > 0)
+                            statsInfo.activity.year[dateOff.DayOfYear] += cnt;
+                    }
+
+                    if ((weekS <= statsInfo.upTime && statsInfo.upTime <= weekS) || (weekS <= careDate && careDate <= weekE))
+                        statsInfo.activity.week += cnt;
+
+                    //有误
+                    if ((careDate <= weekS && careDate <= lastWeekS))
+                    {
+
+                    }
 
                     break;
                 case "Less":
@@ -1818,8 +1876,12 @@ namespace TEAMModelBI.Controllers.BITest
                     break;
             }
 
-            return Ok(new { state = 200, statsInfo });
+            if (resStsInfo.Status == 200)
+                statsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<StatsInfo>(statsInfo, scId, new PartitionKey("Stats"));
+            else
+                statsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<StatsInfo>(statsInfo, new PartitionKey("Stats"));
 
+            return Ok(new { state = 200, statsInfo });
         }
 
         public static async Task SetStats ()

+ 27 - 20
TEAMModelBI/Controllers/Census/SchoolController.cs

@@ -25,6 +25,7 @@ using TEAMModelOS.SDK.Models.Cosmos.BI;
 using TEAMModelOS.SDK.Models.Cosmos.BI.BISchool;
 using TEAMModelOS.SDK.Models.Service.BI;
 using TEAMModelOS.SDK.Models.Service.BIStatsWay;
+using static TEAMModelBI.Controllers.Census.SchoolController;
 
 namespace TEAMModelBI.Controllers.Census
 {
@@ -254,7 +255,7 @@ namespace TEAMModelBI.Controllers.Census
         public async Task<IActionResult> GetIdStatis(JsonElement jsonElement)
         {
             if (!jsonElement.TryGetProperty("schoolId", out JsonElement schoolId)) return BadRequest();
-            
+
             //jsonElement.TryGetProperty("site", out JsonElement site);//分开部署,就不需要,一站多用时,取消注释
 
             int tecCount = 0;  //学校教师数量
@@ -391,7 +392,7 @@ namespace TEAMModelBI.Controllers.Census
             comSql = BICommonWay.ManyScSql(" and c.school", scIds);
             tActCnt = await ActivityWay.GetCnt(cosmosClient, condSql: comSql);
 
-            return Ok(new { state = 200, scCnt=scIds.Count(), tLessCnt, tActCnt });
+            return Ok(new { state = 200, scCnt = scIds.Count(), tLessCnt, tActCnt });
         }
 
         /// <summary>
@@ -483,11 +484,11 @@ namespace TEAMModelBI.Controllers.Census
                 string lesSql = $"select value(count(c.id)) from c where c.pk='LessonRecord' and {scsSql}";
                 tLessCnt = await CommonFind.GetSqlValueCount(cosmosClient, new List<string>() { "School", "Teacher" }, lesSql);
 
-                string  actComSql = BICommonWay.ManyScSql(" and c.school", scIds);
+                string actComSql = BICommonWay.ManyScSql(" and c.school", scIds);
                 tActCnt = await ActivityWay.GetCnt(cosmosClient, condSql: actComSql);
             }
 
-            return Ok(new { state = RespondCode.Ok, scCnt = scIds.Count, tchCnt, stuCnt, allCnt = tLessCnt + tActCnt, tLessCnt, tActCnt});
+            return Ok(new { state = RespondCode.Ok, scCnt = scIds.Count, tchCnt, stuCnt, allCnt = tLessCnt + tActCnt, tLessCnt, tActCnt });
         }
 
         /// <summary>
@@ -498,7 +499,7 @@ namespace TEAMModelBI.Controllers.Census
         /// <returns></returns>
         [ProducesDefaultResponseType]
         [HttpPost("get-scstats")]
-        public async Task<IActionResult> GetSchoolStats(JsonElement jsonElement) 
+        public async Task<IActionResult> GetSchoolStats(JsonElement jsonElement)
         {
             if (!jsonElement.TryGetProperty("scId", out JsonElement scId)) return BadRequest();
             var cosmosClient = _azureCosmos.GetCosmosClient();
@@ -534,11 +535,12 @@ namespace TEAMModelBI.Controllers.Census
                 bool isnew = false;
                 DateTimeOffset dateTime = DateTimeOffset.UtcNow;
                 long now = dateTime.ToUnixTimeMilliseconds();
-                if (!string.IsNullOrEmpty(statsInfo.id)) 
+                if (!string.IsNullOrEmpty(statsInfo.id))
                 {
-                    scStats.id= statsInfo.id;
+                    scStats.id = statsInfo.id;
                     scStats.name = statsInfo.name;
                     scStats.picture = statsInfo.picture;
+                    scStats.areaId = statsInfo.areaId;
                     scStats.tch = statsInfo.tch;
                     scStats.dayTch = statsInfo.dayTch;
                     scStats.weekTch = statsInfo.weekTch;
@@ -566,7 +568,7 @@ namespace TEAMModelBI.Controllers.Census
                     scStats.lessStats.lastMonthInter = statsInfo.lesson.lastMonthInter;
                     scStats.lessStats.monthInter = statsInfo.lesson.monthInter;
                     scStats.lessStats.lastYearInter = statsInfo.lesson.lastYearInter;
-                    scStats.lessStats.yearInter=statsInfo.lesson.yearInter;
+                    scStats.lessStats.yearInter = statsInfo.lesson.yearInter;
                     scStats.lessStats.LastYear = TimeHelper.GetYearMonth(statsInfo.lesson.LastYear, dateTime.Year, dateTime.Month);
                     scStats.lessStats.year = TimeHelper.GetYearMonth(statsInfo.lesson.year, dateTime.Year, dateTime.Month);
                     scStats.actStats.cnt = statsInfo.activity.cnt;
@@ -580,7 +582,7 @@ namespace TEAMModelBI.Controllers.Census
                     scStats.actStats.week = statsInfo.activity.week;
                     scStats.actStats.lastTerm = statsInfo.activity.lastTerm;
                     scStats.actStats.term = statsInfo.activity.term;
-                    scStats.actStats.LastYear = TimeHelper.GetYearMonth(statsInfo.activity.LastYear ,dateTime.Year,dateTime.Month);
+                    scStats.actStats.LastYear = TimeHelper.GetYearMonth(statsInfo.activity.LastYear, dateTime.Year, dateTime.Month);
                     scStats.actStats.year = TimeHelper.GetYearMonth(statsInfo.activity.year, dateTime.Year, dateTime.Month);
                     if (statsInfo.study != null)
                     {
@@ -636,7 +638,7 @@ namespace TEAMModelBI.Controllers.Census
         /// <returns></returns>
         [ProducesDefaultResponseType]
         [HttpPost("get-areastats")]
-        public async Task<IActionResult> GetAreaStats(JsonElement jsonElement) 
+        public async Task<IActionResult> GetAreaStats(JsonElement jsonElement)
         {
             if (!jsonElement.TryGetProperty("areaId", out JsonElement areaId)) return BadRequest();
 
@@ -658,7 +660,7 @@ namespace TEAMModelBI.Controllers.Census
             string scSql = $"select value(c.id) from c where c.areaId='{areaId}'";
             scIds = await CommonFind.FindScIds(cosmosClient, scSql, "Base");
             StringBuilder statsSql = new("select value(c) from c");
-            if (scIds.Count > 0) 
+            if (scIds.Count > 0)
             {
                 statsSql.Append($" where {BICommonWay.ManyScSql("c.id", scIds)}");
             }
@@ -666,18 +668,19 @@ namespace TEAMModelBI.Controllers.Census
             DateTimeOffset dateTime = DateTimeOffset.UtcNow;
             List<ScStats> scStatss = new();
             List<StatsInfo> statsInfos = new();
-            await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS,"School").GetItemQueryIterator<StatsInfo>(queryText:statsSql.ToString(),requestOptions:new QueryRequestOptions() { PartitionKey = new PartitionKey("Stats") }))
+            await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<StatsInfo>(queryText: statsSql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Stats") }))
             {
                 statsInfos.Add(item);
             }
 
             StatsInfo statsInfo = new();
-            statsInfo = await SchoolStatsWay.GetAreaStats(cosmosClient, _httpTrigger, _option, statsInfos, scIds, area);
+            statsInfo = SchoolStatsWay.GetAreaStats(cosmosClient, _httpTrigger, _option, statsInfos, scIds, area);
             if (!string.IsNullOrEmpty(statsInfo.id))
             {
                 areaScStats.id = statsInfo.id;
                 areaScStats.name = statsInfo.name;
                 areaScStats.picture = statsInfo.picture;
+                areaScStats.areaId = statsInfo.areaId;
                 areaScStats.tch = statsInfo.tch;
                 areaScStats.dayTch = statsInfo.dayTch;
                 areaScStats.weekTch = statsInfo.weekTch;
@@ -733,8 +736,9 @@ namespace TEAMModelBI.Controllers.Census
                     areaScStats.srStats.finish = statsInfo.study.finish;
                 }
             }
+            var scInfos = statsInfos.Select(s => new { s.id, s.name, s.picture, actLess = (s.lesson.all + s.activity.cnt), actCnt = s.activity.cnt, lessCnt = s.lesson.all, lessOpen = s.lesson.open, lessUp = s.lesson.less }).ToList();
 
-            return Ok(new { state = RespondCode.Ok ,areaScStats });
+            return Ok(new { state = RespondCode.Ok, areaScStats,  });
         }
 
         /// <summary>
@@ -744,7 +748,7 @@ namespace TEAMModelBI.Controllers.Census
         /// <returns></returns>
         [ProducesDefaultResponseType]
         [HttpPost("get-scinfos")]
-        public async Task<IActionResult> GetScInfos(JsonElement jsonElement) 
+        public async Task<IActionResult> GetScInfos(JsonElement jsonElement)
         {
             var cosmosClient = _azureCosmos.GetCosmosClient();
             jsonElement.TryGetProperty("role", out JsonElement role);
@@ -766,7 +770,7 @@ namespace TEAMModelBI.Controllers.Census
                 }
             }
 
-            if (!string.IsNullOrEmpty($"{areaId}") && !string.IsNullOrEmpty($"{role}")) 
+            if (!string.IsNullOrEmpty($"{areaId}") && !string.IsNullOrEmpty($"{role}"))
             {
                 sql.Append($" where c.areaId ='{areaId}'");
             }
@@ -774,7 +778,7 @@ namespace TEAMModelBI.Controllers.Census
             //List<string> scId = await CommonFind.FindScIds(cosmosClient, "select value(c.id) from c ", "Base");
 
             List<BIRelation> scInfos = new();
-            await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<BIRelation>(queryText: sql.ToString(),requestOptions:new QueryRequestOptions() { PartitionKey = new PartitionKey("BIRel") }))
+            await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<BIRelation>(queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("BIRel") }))
             {
                 scInfos.Add(item);
             }
@@ -826,6 +830,7 @@ namespace TEAMModelBI.Controllers.Census
             public string id { get; set; }
             public string name { get; set; }
             public string picture { get; set; }
+            public string areaId { get; set; }
             public int tch { get; set; }
             public int dayTch { get; set; }
             public int weekTch { get; set; }
@@ -845,6 +850,7 @@ namespace TEAMModelBI.Controllers.Census
             public ScSRStats srStats { get; set; } = new ScSRStats();
         }
 
+
         /// <summary>
         /// 课例活动数据
         /// </summary>
@@ -873,7 +879,7 @@ namespace TEAMModelBI.Controllers.Census
         /// <summary>
         /// 学校活动数据
         /// </summary>
-        public record ScActStats 
+        public record ScActStats
         {
             public int cnt { get; set; }
             public int exam { get; set; }
@@ -893,8 +899,8 @@ namespace TEAMModelBI.Controllers.Census
         /// <summary>
         /// 研修统计数据
         /// </summary>
-        public record ScSRStats 
-        { 
+        public record ScSRStats
+        {
             public int learnTime { get; set; }
             public int online { get; set; }
             public int offline { get; set; }
@@ -904,5 +910,6 @@ namespace TEAMModelBI.Controllers.Census
             public int ongoing { get; set; }
             public int finish { get; set; }
         }
+
     }
 }

+ 2 - 1
TEAMModelOS.FunctionV4/HttpTrigger/BIHttpTrigger.cs

@@ -274,7 +274,8 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
                             statsInfo.activity.exam += cnt;
                             statsInfo.activity.year[dateOff.DayOfYear] += cnt;
                         }
-  
+
+
                         statsInfo.activity.cnt += cnt;
                         break;
                     case "Survey":

+ 1 - 0
TEAMModelOS.SDK/Models/Cosmos/BI/StatsInfo.cs

@@ -329,4 +329,5 @@ namespace TEAMModelOS.SDK.Models.Cosmos.BI
         public long createTime { get; set; }
 
     }
+
 }

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

@@ -90,7 +90,7 @@ namespace TEAMModelOS.SDK.Models.Service.BIStatsWay
         /// <param name="_option"></param>
         /// <param name="area"></param>
         /// <returns></returns>
-        public static async Task<StatsInfo> GetAreaStats(CosmosClient cosmosClient, HttpTrigger _httpTrigger, Option _option, List<StatsInfo> statsInfos, List<string> scIds = null, Area area = null) 
+        public static StatsInfo GetAreaStats(CosmosClient cosmosClient, HttpTrigger _httpTrigger, Option _option, List<StatsInfo> statsInfos, List<string> scIds = null, Area area = null) 
         {
             StatsInfo areaInfo = new()
             {