Przeglądaj źródła

统计通知的相关业务逻辑,和方法。

Li 2 lat temu
rodzic
commit
e920b63ee4

+ 62 - 0
TEAMModelBI/Controllers/BICommon/StatsNoticeController.cs

@@ -0,0 +1,62 @@
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
+using System.Net.Http;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.SDK;
+using TEAMModelOS.Models;
+using Microsoft.Extensions.Options;
+using System.Text.Json;
+using System.Threading.Tasks;
+using TEAMModelOS.SDK.Context.Constant;
+
+namespace TEAMModelBI.Controllers.BICommon
+{
+    [Route("statsnotice")]
+    [ApiController]
+    public class StatsNoticeController : ControllerBase
+    {
+        private readonly AzureCosmosFactory _azureCosmos;
+        private readonly DingDing _dingDing;
+        private readonly Option _option;
+        private readonly AzureStorageFactory _azureStorage;
+        private readonly IConfiguration _configuration;
+        private readonly AzureServiceBusFactory _serviceBus;
+        private readonly IHttpClientFactory _http;
+        private readonly CoreAPIHttpService _coreAPIHttpService;
+        private readonly IWebHostEnvironment _environment; //读取文件
+        private readonly HttpClient _httpClient;
+
+        public StatsNoticeController(AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, IOptionsSnapshot<Option> option, IConfiguration configuration, AzureServiceBusFactory serviceBus, IHttpClientFactory http, CoreAPIHttpService coreAPIHttpService, IWebHostEnvironment hostingEnvironment, HttpClient httpClient)
+        {
+            _azureCosmos = azureCosmos;
+            _dingDing = dingDing;
+            _azureStorage = azureStorage;
+            _option = option?.Value;
+            _configuration = configuration;
+            _serviceBus = serviceBus;
+            _http = http;
+            _coreAPIHttpService = coreAPIHttpService;
+            _environment = hostingEnvironment;
+            _httpClient = httpClient;
+        }
+
+        /// <summary>
+        /// 获取统计通知
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("get-infos")]
+        public async Task<IActionResult> GetInfos(JsonElement jsonElement) 
+        {
+
+
+
+            return Ok(new { state = RespondCode.Ok });
+        }
+
+
+    }
+}

+ 18 - 5
TEAMModelOS.SDK/Models/Cosmos/BI/BICommon/PersonalNotice.cs

@@ -6,17 +6,25 @@ using System.Threading.Tasks;
 
 namespace TEAMModelOS.SDK.Models.Cosmos.BI.BICommon
 {
-    public class PersonalNotice : CosmosEntity
+    public class StatsNotice : CosmosEntity
     {
         /// <summary>
         /// id   2022-tmdid   2022-学校id
         /// </summary>
-        public PersonalNotice()
+        public StatsNotice()
         {
             pk = "Statistics";
-            code = "PersonalNotice";
+            code = "StatsNotice";
         }
 
+        /// <summary>
+        /// 类型    private:个人   school   学校
+        /// </summary>
+        public string type { get; set; }
+
+        /// <summary>
+        /// 学校/个人id
+        /// </summary>
         public string rangeId { get; set; }
 
         /// <summary>
@@ -27,7 +35,7 @@ namespace TEAMModelOS.SDK.Models.Cosmos.BI.BICommon
         /// <summary>
         /// 课堂记录
         /// </summary>
-        public List<double> classroomRecord { get; set; }
+        public List<double> classroomCnt { get; set; }
 
         /// <summary>
         /// 评量活动
@@ -37,6 +45,11 @@ namespace TEAMModelOS.SDK.Models.Cosmos.BI.BICommon
         /// <summary>
         /// 作业活动
         /// </summary>
-        public List<double> taskCnt { get; set; }
+        public List<double> homeworkCnt { get; set; }
+
+        /// <summary>
+        /// 更新时间
+        /// </summary>
+        public long upTime { get; set; }
     }
 }

+ 89 - 0
TEAMModelOS.SDK/Models/Service/BI/BIStatsNotice.cs

@@ -0,0 +1,89 @@
+using Azure.Cosmos;
+using DocumentFormat.OpenXml.Bibliography;
+using Microsoft.VisualBasic;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.Json;
+using System.Threading.Tasks;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.SDK.Extension;
+using TEAMModelOS.SDK.Models.Cosmos.BI;
+using TEAMModelOS.SDK.Models.Cosmos.BI.BICommon;
+
+namespace TEAMModelOS.SDK.Models.Service.BI
+{
+    public static class BIStatsNotice
+    {
+        /// <summary>
+        /// 统计通知
+        /// </summary>
+        /// <param name="cosmosClient">连接</param>
+        /// <param name="_dingDing">错误消息发送</param>
+        /// <param name="type">统计类型</param>
+        /// <param name="idType">账号类型 private:个人   school   学校</param>
+        /// <param name="id">账号id</param>
+        /// <param name="count">数量</param>
+        /// <param name="careDate">创建时间</param>
+        /// <returns></returns>
+        public static async Task SetStatsNotice(CosmosClient cosmosClient, DingDing _dingDing, string type, string idType, string id, int count, long careDate = 0)
+        {
+            try
+            {
+                DateTimeOffset dateOff = DateTimeOffset.UtcNow;
+                if (careDate > 1000000000000)
+                    dateOff = DateTimeOffset.FromUnixTimeMilliseconds(careDate);
+                else
+                    dateOff = DateTimeOffset.FromUnixTimeSeconds(careDate);
+
+                StatsNotice statsNotice = new();
+                var resStsInfo = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{dateOff.Year}-{id}", new PartitionKey("StatsNotice"));
+                if (resStsInfo.Status == 200)
+                {
+                    using var fileJson = await JsonDocument.ParseAsync(resStsInfo.ContentStream);
+                    statsNotice = fileJson.ToObject<StatsNotice>();
+                }
+                else
+                {
+                    statsNotice.id = $"{dateOff.Year}-{id}";
+                    statsNotice.type = idType;
+                    statsNotice.rangeId = id;
+                    statsNotice.stuCnt = new double[366].ToList();
+                    statsNotice.classroomCnt = new double[366].ToList();
+                    statsNotice.weighCnt = new double[366].ToList();
+                    statsNotice.homeworkCnt = new double[366].ToList();
+                }
+
+                switch (type)
+                {
+                    case "Student":
+                        statsNotice.stuCnt[dateOff.DayOfYear - 1] = count;
+                        break;
+                    case "Classroom":
+                        statsNotice.classroomCnt[dateOff.DayOfYear - 1] = count;
+                        break;
+                    case "Weigh":
+                        statsNotice.weighCnt[dateOff.DayOfYear - 1] = count;
+                        break;
+                    case "Homework":
+                        statsNotice.homeworkCnt[dateOff.DayOfYear - 1] = count;
+                        break;
+                }
+                if (resStsInfo.Status == 200)
+                {
+                    statsNotice = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<StatsNotice>(statsNotice, statsNotice.id, new PartitionKey("StatsNotice"));
+                }
+                else
+                {
+                    statsNotice = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync<StatsNotice>(statsNotice, new PartitionKey("StatsNotice"));
+                }
+            }
+            catch (Exception ex)
+            {
+                await _dingDing.SendBotMsg($"BI,{Environment.GetEnvironmentVariable("Option:Location")},SetStatsNotice(),参数: 类型统计:{type},私人/学校类型:{idType},id:{id}, 增/减数:{count},时间戳:{careDate}\n {ex.Message}\n {ex.StackTrace}", GroupNames.成都开发測試群組);
+            }
+        }
+
+    }
+}