浏览代码

继续编写使用量结构的相关接口。

Li 2 年之前
父节点
当前提交
048a195ada

+ 106 - 0
TEAMModelBI/Controllers/BICommon/BIProductUseRecordController.cs

@@ -0,0 +1,106 @@
+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 TEAMModelOS.SDK.Context.Constant;
+using System.Threading.Tasks;
+using System;
+using TEAMModelOS.SDK.Models.Cosmos.BI.BICommon;
+using Azure.Cosmos;
+using TEAMModelOS.SDK.Extension;
+using System.Collections.Generic;
+using TEAMModelOS.SDK.Models.Cosmos.BI;
+using TEAMModelOS.SDK.Models.Service.BI;
+using System.Linq;
+
+namespace TEAMModelBI.Controllers.BICommon
+{
+    [Route("poduct")]
+    [ApiController]
+    public class BIProductUseRecordController : 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 BIProductUseRecordController(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-userecord")]
+        public async Task<IActionResult> GetUseRecord(JsonElement jsonElement) 
+        {
+            jsonElement.TryGetProperty("year", out JsonElement _year);
+            int year = DateTimeOffset.UtcNow.Year;
+            if (!string.IsNullOrEmpty($"{_year}")) 
+            {
+                year = _year.GetInt32();
+            }
+
+            var cosmosClient = _azureCosmos.GetCosmosClient(); 
+            ProductUseRecord productUseRecord = null;
+            UseRecord useRecord = new();
+            var resUseRecord = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{year}", new PartitionKey("ProductUseRecord"));
+            if (resUseRecord.Status == 200)
+            {
+                using var fileJson = await JsonDocument.ParseAsync(resUseRecord.ContentStream);
+                productUseRecord = fileJson.ToObject<ProductUseRecord>();
+            }
+
+            if (productUseRecord != null) 
+            {
+                useRecord.hiTaHour = productUseRecord.hiTaHour;
+                useRecord.hiTeachHour = productUseRecord.hiTeachHour;
+                useRecord.hiTeachccHour = productUseRecord.hiTeachccHour;
+                useRecord.hiTaDay = BICommonWay.ManyDoubleMerge(new List<List<double>>() { productUseRecord.hiTaDay });
+                useRecord.hiTeachDay = BICommonWay.ManyDoubleMerge(new List<List<double>>() { productUseRecord.hiTeachccHour });
+                useRecord.hiTeachccDay = BICommonWay.ManyDoubleMerge(new List<List<double>>() { productUseRecord.hiTeachccDay });
+            }
+
+            return Ok(new { state = RespondCode.Ok, useRecord });
+        }
+
+        /// <summary>
+        /// 使用信息
+        /// </summary>
+        public record UseRecord 
+        {
+            public List<double> hiTaHour { get; set; }
+            public List<double> hiTeachHour { get; set; }
+            public List<double> hiTeachccHour { get; set; }
+            public List<double> hiTaDay { get; set; }
+            public List<double> hiTeachDay { get; set; }
+            public List<double> hiTeachccDay { get; set; }
+        }
+
+    }
+}

+ 6 - 4
TEAMModelOS.SDK/Models/Cosmos/BI/BICommon/ProductUseRecord.cs

@@ -17,10 +17,12 @@ namespace TEAMModelOS.SDK.Models.Cosmos.BI.BICommon
         /// 更新时间
         /// </summary>
         public long time { get; set; }
-        public List<double> hitaHour { get; set; } = new double[24].ToList();
-        public List<double> hiteachHour { get; set; } = new double[24].ToList();
-        public List<double> hitaDay { get; set; }
-        public List<double> hiteachDay { get; set; }
+        public List<double> hiTaHour { get; set; }
+        public List<double> hiTeachHour { get; set; } 
+        public List<double> hiTeachccHour { get; set; }
+        public List<double> hiTaDay { get; set; }
+        public List<double> hiTeachDay { get; set; }
+        public List<double> hiTeachccDay { get; set; }
 
     }
 }

+ 113 - 0
TEAMModelOS.SDK/Models/Service/BI/ProductUseRecordService.cs

@@ -0,0 +1,113 @@
+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 ProductUseRecordService
+    {
+        /// <summary>
+        /// 产品使用量增加
+        /// </summary>
+        /// <param name="cosmosClient"></param>
+        /// <param name="_dingDing"></param>
+        /// <param name="type"></param>
+        /// <returns></returns>
+        public static async Task SetProductUseRecord(CosmosClient cosmosClient, DingDing _dingDing,string type)
+        {
+            DateTimeOffset dateOff = DateTimeOffset.UtcNow;
+            try
+            {
+                ProductUseRecord productUseRecord = new();
+                var resUseRecord = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{dateOff.Year}", new PartitionKey("ProductUseRecord"));
+
+                if (resUseRecord.Status == 200)
+                {
+                    using var fileJson = await JsonDocument.ParseAsync(resUseRecord.ContentStream);
+                    productUseRecord = fileJson.ToObject<ProductUseRecord>();
+                }
+                else
+                {
+                    productUseRecord.time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+                    productUseRecord.hiTaHour = new double[24].ToList();
+                    productUseRecord.hiTeachHour = new double[24].ToList();
+                    productUseRecord.hiTeachccHour = new double[24].ToList();
+                    productUseRecord.hiTaDay = new double[366].ToList();
+                    productUseRecord.hiTeachDay = new double[366].ToList();
+                    productUseRecord.hiTeachccDay = new double[366].ToList();
+                }
+                DateTimeOffset upTime = DateTimeOffset.UtcNow;
+                double[] doub = new double[24];
+
+                if (dateOff.DayOfYear > upTime.DayOfYear)
+                {
+                    doub[dateOff.Hour] = 1;
+                }
+
+                if (productUseRecord.time > 1000000000000)
+                    upTime = DateTimeOffset.FromUnixTimeMilliseconds(productUseRecord.time);
+                else
+                    upTime = DateTimeOffset.FromUnixTimeSeconds(productUseRecord.time);
+                switch ($"{type}")
+                {
+                    case "hita":
+                        if (dateOff.DayOfYear == upTime.DayOfYear)
+                        {
+                            productUseRecord.hiTaHour[dateOff.Hour] += 1;
+                        }
+                        else
+                        {
+                            productUseRecord.hiTaHour = doub.ToList();
+                        }
+                        productUseRecord.hiTaDay[dateOff.DayOfYear - 1] += 1;
+                        break;
+                    case "hiTeach":
+                        if (dateOff.DayOfYear == upTime.DayOfYear)
+                        {
+                            productUseRecord.hiTeachHour[dateOff.Hour] += 1;
+                        }
+                        else
+                        {
+                            productUseRecord.hiTeachHour = doub.ToList();
+                        }
+                        productUseRecord.hiTeachDay[dateOff.DayOfYear - 1] += 1;
+                        break;
+                    case "hiTeachcc":
+                        if (dateOff.DayOfYear == upTime.DayOfYear)
+                        {
+                            productUseRecord.hiTeachccHour[dateOff.Hour] += 1;
+                        }
+                        else
+                        {
+                            productUseRecord.hiTeachccHour = doub.ToList();
+                        }
+                        productUseRecord.hiTeachccDay[dateOff.DayOfYear - 1] += 1;
+                        break;
+                }
+
+                if (resUseRecord.Status == 200)
+                {
+                    productUseRecord = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<ProductUseRecord>(productUseRecord, productUseRecord.id, new PartitionKey("ProductUseRecord"));
+                }
+                else
+                {
+                    productUseRecord = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync<ProductUseRecord>(productUseRecord, new PartitionKey("ProductUseRecord"));
+                }
+            }
+            catch (Exception ex)
+            {
+                await _dingDing.SendBotMsg($"BI,SetProductUseRecord(),参数:统计类型:{type},时间:{dateOff}\n {ex.Message}\n {ex.StackTrace}", GroupNames.成都开发測試群組);
+            }
+        }
+    }
+}