Переглянути джерело

Merge branch 'PL/develop-BI' into develop

Li 2 роки тому
батько
коміт
b6a1fd3404

+ 26 - 24
TEAMModelBI/Controllers/BICommon/BINoticeController.cs

@@ -105,7 +105,7 @@ namespace TEAMModelBI.Controllers.BICommon
             List<IdInfo> idInfos = new();
             var cosmosClient = _azureCosmos.GetCosmosClient();
 
-            await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS,"School").GetItemQueryIterator<IdInfo>(queryText: "select c.id,c.name,c.picture from c",requestOptions:new QueryRequestOptions() { PartitionKey = new PartitionKey($"Teacher-{scId}") }))
+            await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<IdInfo>(queryText: "select c.id,c.name,c.picture from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Teacher-{scId}") }))
             {
                 idInfos.Add(item);
             }
@@ -120,7 +120,7 @@ namespace TEAMModelBI.Controllers.BICommon
         /// <returns></returns>
         [AuthToken(Roles = "admin,rdc,assist,sales")]
         [HttpPost("push-info")]
-        public async Task<IActionResult> PushNotion(JsonElement jsonElement) 
+        public async Task<IActionResult> PushNotion(JsonElement jsonElement)
         {
             try
             {
@@ -135,7 +135,7 @@ namespace TEAMModelBI.Controllers.BICommon
                 jsonElement.TryGetProperty("schoolIds", out JsonElement _schoolIds);
                 jsonElement.TryGetProperty("areaIds", out JsonElement _areaIds);
                 if (!jsonElement.TryGetProperty("crowdType", out JsonElement _crowdType)) return BadRequest();
-                if(!jsonElement.TryGetProperty("sendTime", out JsonElement sendTime)) return BadRequest();
+                if (!jsonElement.TryGetProperty("sendTime", out JsonElement sendTime)) return BadRequest();
                 jsonElement.TryGetProperty("source", out JsonElement source);
 
                 var cosmosClient = _azureCosmos.GetCosmosClient();
@@ -143,38 +143,40 @@ namespace TEAMModelBI.Controllers.BICommon
 
                 List<IdNameCode> idNameCodes = new();
                 BINotice bINotice = new();
-                List<string> tmdIds = new();
-                List<string> schoolIds = new();
-                List<string> areaIds = new();
+                List<CrowdInfo> tmdIds = new();
+                List<CrowdInfo> schoolIds = new();
+                List<CrowdInfo> areaIds = new();
+
+                List<string> tempScIds = new();
 
                 //if (!string.IsNullOrEmpty($"{sendTime}"))
                 //    dateTime = DateTimeOffset.Parse($"{sendTime}");
                 if (string.IsNullOrEmpty($"{_tmdIds}") && string.IsNullOrEmpty($"{_schoolIds}") && string.IsNullOrEmpty($"{_areaIds}"))
                     return Ok(new { state = RespondCode.ParamsError, msg = "发送人群不能为空" });
                 if (!string.IsNullOrEmpty($"{_tmdIds}"))
-                    tmdIds = _tmdIds.ToObject<List<string>>();
+                    tmdIds = _tmdIds.ToObject<List<CrowdInfo>>();
                 if (!string.IsNullOrEmpty($"{_schoolIds}"))
-                    schoolIds = _schoolIds.ToObject<List<string>>();
+                    schoolIds = _schoolIds.ToObject<List<CrowdInfo>>();
                 if (!string.IsNullOrEmpty($"{_areaIds}"))
-                    areaIds = _areaIds.ToObject<List<string>>();
+                    areaIds = _areaIds.ToObject<List<CrowdInfo>>();
 
                 Crowd crowd = new()
                 {
-                    tmdIds = tmdIds.Count > 0 ? tmdIds : new List<string>(),
-                    schoolIds = schoolIds.Count > 0 ? schoolIds : new List<string>(),
-                    areaIds = areaIds.Count > 0 ? areaIds : new List<string>(),
+                    tmdIds = tmdIds.Count > 0 ? tmdIds : new List<CrowdInfo>(),
+                    schoolIds = schoolIds.Count > 0 ? schoolIds : new List<CrowdInfo>(),
+                    areaIds = areaIds.Count > 0 ? areaIds : new List<CrowdInfo>(),
                     types = _crowdType.ToObject<List<string>>()
-            };
+                };
 
                 if (tmdIds.Count > 0)
                 {
                     StringBuilder tchSql = new($"select c.id, c.name,c.code,c.picture,c.nickname from c ");
                     if (tmdIds.Count > 0)
                     {
-                        tchSql.Append(BICommonWay.ManyScSql(" where c.id ", tmdIds));
+                        tchSql.Append(BICommonWay.ManyScSql(" where c.id ", tmdIds.Select(s => s.id).ToList()));
                         await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<IdNameCode>(queryText: tchSql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                         {
-                            var tempId = idNameCodes.FindAll(fa => fa.id.Equals(item)).ToList();
+                            var tempId = idNameCodes.FindAll(fa => fa.id.Equals(item.id)).ToList();
                             if (tempId.Count == 0)
                                 idNameCodes.Add(item);
                         }
@@ -186,12 +188,12 @@ namespace TEAMModelBI.Controllers.BICommon
                     StringBuilder scAreaSql = new($"select value(c.id) from c");
                     if (schoolIds.Count > 0)
                     {
-                        scAreaSql.Append(BICommonWay.ManyScSql(" where c.areaId", areaIds));
+                        scAreaSql.Append(BICommonWay.ManyScSql(" where c.areaId", areaIds.Select(s => s.id).ToList()));
                         await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<string>(queryText: scAreaSql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                         {
                             var tempScId = schoolIds.FindAll(fa => fa.Equals(item)).ToList();
                             if (tempScId.Count == 0)
-                                schoolIds.Add(item);
+                                tempScIds.Add(item);
                         }
                     }
                 }
@@ -201,10 +203,10 @@ namespace TEAMModelBI.Controllers.BICommon
                     StringBuilder scTchSql = new($"select c.id, c.name, c.picture,c.nickname from c where c.pk='Teacher'");
                     if (schoolIds.Count > 0)
                     {
-                        scTchSql.Append(BICommonWay.ManyScSql(" and c.code", schoolIds, $"Teacher-"));
+                        scTchSql.Append(BICommonWay.ManyScSql(" and c.code", schoolIds.Select(s => s.id).ToList(), $"Teacher-"));
                         await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<IdNameCode>(queryText: scTchSql.ToString(), requestOptions: new QueryRequestOptions() { }))
                         {
-                            var tempId = idNameCodes.FindAll(fa => fa.id.Equals(item)).ToList();
+                            var tempId = idNameCodes.FindAll(fa => fa.id.Equals(item.id)).ToList();
                             if (tempId.Count == 0)
                                 idNameCodes.Add(item);
                         }
@@ -221,7 +223,7 @@ namespace TEAMModelBI.Controllers.BICommon
                     theme = $"{theme}",
                     content = $"{content}",
                     crowd = crowd,
-                    crowdIds = tmdIds,
+                    crowdIds = idNameCodes.Select(s => s.id).ToList(),
                     createId = _tmdId,
                     sendTime = sendTime.GetInt64(),//发布时间待解决
                     createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
@@ -236,7 +238,7 @@ namespace TEAMModelBI.Controllers.BICommon
             }
             catch (Exception ex)
             {
-                _ = _dingDing.SendBotMsg($"BI,  notion/PushNotion() \n{ex.Message}\n{ex.StackTrace}\n", GroupNames.成都开发測試群組);
+                //_ = _dingDing.SendBotMsg($"BI,  notion/PushNotion() \n{ex.Message}\n{ex.StackTrace}\n", GroupNames.成都开发測試群組);
                 return BadRequest();
             }
         }
@@ -246,8 +248,8 @@ namespace TEAMModelBI.Controllers.BICommon
         /// </summary>
         /// <param name="jsonElement"></param>
         /// <returns></returns>
-        [AuthToken(Roles = "admin,rdc,assist,sales")]
         [HttpPost("get-infos")]
+        [AuthToken(Roles = "admin,rdc,assist,sales")]
         public async Task<IActionResult> GetInfos(JsonElement jsonElement)
         {
             jsonElement.TryGetProperty("id", out JsonElement id);
@@ -255,9 +257,9 @@ namespace TEAMModelBI.Controllers.BICommon
             var cosmosClient = _azureCosmos.GetCosmosClient();
             List<BINotice> bINotices = new();
             StringBuilder sql = new("select value(c) from c");
-            if (!string.IsNullOrEmpty($"{id}")) 
+            if (!string.IsNullOrEmpty($"{id}"))
                 sql.Append($" where c.id='{id}'");
-            await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS,"Common").GetItemQueryIterator<BINotice>(queryText:sql.ToString(),requestOptions:new QueryRequestOptions() { PartitionKey = new PartitionKey("BINotice") }))
+            await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<BINotice>(queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("BINotice") }))
             {
                 bINotices.Add(item);
             }

+ 22 - 0
TEAMModelOS.FunctionV4/TimeTrigger/IESTimerTrigger.cs

@@ -159,6 +159,28 @@ namespace TEAMModelOS.FunctionV4.TimeTrigger
             }
         }
 
+        /// <summary>
+        /// 每天执行 一次清零动作
+        /// </summary>
+        /// <param name="myTimer"></param>
+        /// <param name="log"></param>
+        /// <returns></returns>
+        [Function("BIStatsDayDefault")]
+        //https://docs.azure.cn/zh-cn/azure-functions/functions-bindings-timer?tabs=in-process&pivots=programming-language-csharp
+        //0 1 0 * * * 一天中00的第 1 分钟
+        //0 1 * * * * 一天中每小时的第 1 分钟
+        //0 */10 * * * *  每五分钟一次
+        public async Task BIStatsDayDefault([TimerTrigger("0 1 0 * * *")] TimerInfo myTimer, ILogger log) 
+        {
+            try
+            {
+                _ = BIStats.SetStatsZeroPoint(_azureCosmos, _dingDing);
+            }
+            catch (Exception ex)
+            {
+                 await _dingDing.SendBotMsg($"BIStatsDayDefault 定时清理每天的数据: {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}\n{ex.Message}\n{ex.StackTrace}", GroupNames.成都开发測試群組);
+            }
+        }
 
         /// <summary>
         /// 清理HiTeach教研类型的课例文件上传在Blob空间的文件。 0  */10  22-23 * * *

+ 9 - 3
TEAMModelOS.SDK/Models/Cosmos/BI/BICommon/Notice.cs

@@ -71,12 +71,18 @@ namespace TEAMModelOS.SDK.Models.Cosmos.BI
     /// </summary>
     public class Crowd
     {
-        public List<string> tmdIds { get; set; }
-        public List<string> schoolIds { get; set; }
-        public List<string> areaIds { get; set; }
+        public List<CrowdInfo> tmdIds { get; set; }
+        public List<CrowdInfo> schoolIds { get; set; }
+        public List<CrowdInfo> areaIds { get; set; }
         /// <summary>
         /// 接收类型
         /// </summary>
         public List<string> types { get; set; }
     }
+
+    public class CrowdInfo
+    {
+        public string id { get; set; }
+        public string name { get; set; }
+    }
 }

+ 25 - 4
TEAMModelOS.SDK/Models/Service/BI/BIStats.cs

@@ -31,7 +31,6 @@ namespace TEAMModelOS.SDK.Models.Service.BI
         /// <returns></returns>
         public static async Task SetTypeAddStats(CosmosClient cosmosClient, DingDing _dingDing,string scId, string type, int count, int lessType = 0, int interaction = 0, long careDate = 0)
         {
-            return;
             try
             {
                 if(string.IsNullOrEmpty(scId))
@@ -158,7 +157,9 @@ namespace TEAMModelOS.SDK.Models.Service.BI
                             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;
@@ -168,7 +169,9 @@ namespace TEAMModelOS.SDK.Models.Service.BI
                                 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());
@@ -252,7 +255,9 @@ namespace TEAMModelOS.SDK.Models.Service.BI
                                 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;
 
 
@@ -267,7 +272,9 @@ namespace TEAMModelOS.SDK.Models.Service.BI
                                 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());
@@ -278,15 +285,18 @@ namespace TEAMModelOS.SDK.Models.Service.BI
                 }
 
                 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"));
+                }
             }
             catch (Exception ex)
             {
                 await _dingDing.SendBotMsg($"BI,SetTypeAddStats(),参数: 学校:{scId},统计类型:{type}, 增/减数:{count},课例类型(0:开课,1:课例):{lessType},学生互动数:{interaction},时间戳:{careDate}\n {ex.Message}\n {ex.StackTrace}", GroupNames.成都开发測試群組);
             }
-
         }
 
         /// <summary>
@@ -331,9 +341,13 @@ namespace TEAMModelOS.SDK.Models.Service.BI
             statsInfo.upTime = dateOff.ToUnixTimeMilliseconds();
 
             if (resStats.Status == 200)
+            {
                 await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<StatsInfo>(statsInfo, statsInfo.id, new PartitionKey("Statistics"));
+            }
             else
+            {
                 await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync<StatsInfo>(statsInfo, new PartitionKey("Statistics"));
+            }
         }
 
         /// <summary>
@@ -354,14 +368,17 @@ namespace TEAMModelOS.SDK.Models.Service.BI
             {
                 using var fileJson = await JsonDocument.ParseAsync(resBiRel.ContentStream);
                 bIRelation = fileJson.ToObject<BIRelation>();
-
             }
             else
+            {
                 bIRelation.id = school.id;
+            }
 
             string aName = null;
-            if (!string.IsNullOrEmpty($"{school.areaId}"))
+            if (!string.IsNullOrEmpty($"{school.areaId}")) 
+            {
                 aName = await CosmosQueryHelper.GetStr(cosmosClient, "Normal", $"select value(c.name) from c where c.id='{school.areaId}'", "Base-Area");
+            }
             bIRelation.name = school.name;
             bIRelation.picture = school.picture;
             bIRelation.region = school.region;
@@ -499,7 +516,9 @@ namespace TEAMModelOS.SDK.Models.Service.BI
                         item.activity.week = ((int)actList.SubMatrix(weekDayS.DayOfYear, 7, 0, actList.ColumnCount).ColumnSums().Sum());
 
                         if (lMonthS.Year == dateOff.Year)
+                        {
                             item.activity.lastMonth = ((int)actList.SubMatrix(lMonthS.DayOfYear, lMonthE.DayOfYear, 0, actList.ColumnCount).ColumnSums().Sum());
+                        }
                         else
                         {
                             var lastMthYer = DenseMatrix.OfColumns(new List<List<double>>() { lastStatsInfo.activity.year });
@@ -520,7 +539,9 @@ namespace TEAMModelOS.SDK.Models.Service.BI
                     }
 
                     if (statsInfos.Count < 256)
+                    {
                         await Task.WhenAll(statsInfos);
+                    }
                     else
                     {
                         int pages = (statsInfos.Count + 255) / 256;