CrazyIter_Bin 1 yıl önce
ebeveyn
işleme
2828e6b15e

+ 14 - 1
TEAMModelOS.SDK/DI/AzureRedis/AzureRedisFactory.cs

@@ -43,12 +43,25 @@ namespace TEAMModelOS.SDK.DI
                 return null;
             }
         }
+        public ConnectionMultiplexer GetConnectionMultiplexer( string name = "Default")
+        {
+            try
+            {
+                var cm = ConnectionMultiplexers.GetOrAdd(name, x => ConnectionMultiplexer.Connect(_optionsMonitor.Get(name).RedisConnectionString));
+                return cm;
+            }
+            catch (OptionsValidationException e)
+            {
+                _logger?.LogWarning(e, e.Message);
+                return null;
+            }
+        }
         //public (IDatabase db , IServer server ) GetRedisDbCmClient(int dbnum = -1, string name = "Default")
         //{
         //    try
         //    {
         //        var cm = ConnectionMultiplexers.GetOrAdd(name, x => ConnectionMultiplexer.Connect(_optionsMonitor.Get(name).RedisConnectionString));
-                
+
         //        return (cm.GetDatabase(dbnum),cm.GetServer(cm.GetEndPoints()[0]));
         //    }
         //    catch (OptionsValidationException e)

+ 3 - 0
TEAMModelOS.SDK/Models/Service/Common/BlobService.cs

@@ -30,6 +30,9 @@ namespace TEAMModelOS.SDK.Services
 
         public static async Task RefreshBlobRoot(BlobRefreshMessage message, AzureServiceBusFactory _serviceBus,IConfiguration _configuration,AzureRedisFactory _azureRedis) {
             if (!string.IsNullOrWhiteSpace(message.root) && !string.IsNullOrWhiteSpace(message.name)) {
+                string changeKey = $"Blob:Change:{message.name}";
+
+
                 string lockKey = $"Blob:Lock:{message.name}:{message.root}";
                 bool exist = await _azureRedis.GetRedisClient(8).KeyExistsAsync(lockKey);
                 //不存在Blob:Lock:hbcn:video 文件夹在队列中 则加入队列

+ 0 - 1
TEAMModelOS/Controllers/Common/VoteController.cs

@@ -110,7 +110,6 @@ namespace TEAMModelOS.Controllers
                     request.recordUrl = url;
                     await _azureStorage.GetBlobContainerClient(blobcntr).UploadFileByContainer(new { options = new List<string>(), records = new List<VoteRecord>() }.ToJsonString(), "vote", $"{request.id}/record.json");
                     request = await client.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync(request, new PartitionKey($"{request.code}"));
-
                     await BIStats.SetTypeAddStats(client,_dingDing, request.school, "Vote", 1);//BI统计增/减量
                 }
                 else

+ 35 - 35
TEAMModelOS/Controllers/School/SchoolController.cs

@@ -1587,41 +1587,41 @@ namespace TEAMModelOS.Controllers
                 else
                 {
                     //[學校空間]
-                    var blobClient = _azureStorage.GetBlobContainerClient(school_code.ToString());
-                    long? docSize = await blobClient.GetBlobsSize("doc");
-                    long? videoSize = await blobClient.GetBlobsSize("video");
-                    long? imageSize = await blobClient.GetBlobsSize("image");
-                    long? paperSize = await blobClient.GetBlobsSize("paper");
-                    long? itemSize = await blobClient.GetBlobsSize("item");
-                    long? otherSize = await blobClient.GetBlobsSize("other");
-                    long? voteSize = await blobClient.GetBlobsSize("vote");
-                    long? surveySize = await blobClient.GetBlobsSize("survey");
-                    long? audioSize = await blobClient.GetBlobsSize("audio");
-                    long? resSize = await blobClient.GetBlobsSize("res");
-                    long? tempSize = await blobClient.GetBlobsSize("temp");
-                    long? thumSize = await blobClient.GetBlobsSize("thum");
-                    long? syllabusSize = await blobClient.GetBlobsSize("syllabus");
-                    long? examSize = await blobClient.GetBlobsSize("exam");
-                    long? recordsSize = await blobClient.GetBlobsSize("records");
-                    long? yxptSize = await blobClient.GetBlobsSize("yxpt");
-                    long? trainSize = await blobClient.GetBlobsSize("train");
-                    long? homeworkSize = await blobClient.GetBlobsSize("homework");
-                    long? avatarSize = await blobClient.GetBlobsSize("avatar");
-                    docSize = docSize != null ? docSize : 0;
-                    videoSize = videoSize != null ? videoSize : 0;
-                    imageSize = imageSize != null ? imageSize : 0;
-                    paperSize = paperSize != null ? paperSize : 0;
-                    itemSize = itemSize != null ? itemSize : 0;
-                    otherSize = otherSize != null ? otherSize : 0;
-                    voteSize = voteSize != null ? voteSize : 0;
-                    surveySize = surveySize != null ? surveySize : 0;
-                    audioSize = audioSize != null ? audioSize : 0;
-                    resSize = resSize != null ? resSize : 0;
-                    tempSize = tempSize != null ? tempSize : 0;
-                    thumSize = thumSize != null ? thumSize : 0;
-                    syllabusSize = syllabusSize != null ? syllabusSize : 0;
-                    examSize = examSize != null ? examSize : 0;
-                    usedSpace = Convert.ToInt64(Math.Ceiling((double)((avatarSize + homeworkSize + trainSize + yxptSize + recordsSize + docSize + videoSize + imageSize + paperSize + itemSize + otherSize + voteSize + audioSize + resSize + tempSize + thumSize + syllabusSize + examSize) / bytes)));
+                    //var blobClient = _azureStorage.GetBlobContainerClient(school_code.ToString());
+                    //long? docSize = await blobClient.GetBlobsSize("doc");
+                    //long? videoSize = await blobClient.GetBlobsSize("video");
+                    //long? imageSize = await blobClient.GetBlobsSize("image");
+                    //long? paperSize = await blobClient.GetBlobsSize("paper");
+                    //long? itemSize = await blobClient.GetBlobsSize("item");
+                    //long? otherSize = await blobClient.GetBlobsSize("other");
+                    //long? voteSize = await blobClient.GetBlobsSize("vote");
+                    //long? surveySize = await blobClient.GetBlobsSize("survey");
+                    //long? audioSize = await blobClient.GetBlobsSize("audio");
+                    //long? resSize = await blobClient.GetBlobsSize("res");
+                    //long? tempSize = await blobClient.GetBlobsSize("temp");
+                    //long? thumSize = await blobClient.GetBlobsSize("thum");
+                    //long? syllabusSize = await blobClient.GetBlobsSize("syllabus");
+                    //long? examSize = await blobClient.GetBlobsSize("exam");
+                    //long? recordsSize = await blobClient.GetBlobsSize("records");
+                    //long? yxptSize = await blobClient.GetBlobsSize("yxpt");
+                    //long? trainSize = await blobClient.GetBlobsSize("train");
+                    //long? homeworkSize = await blobClient.GetBlobsSize("homework");
+                    //long? avatarSize = await blobClient.GetBlobsSize("avatar");
+                    //docSize = docSize != null ? docSize : 0;
+                    //videoSize = videoSize != null ? videoSize : 0;
+                    //imageSize = imageSize != null ? imageSize : 0;
+                    //paperSize = paperSize != null ? paperSize : 0;
+                    //itemSize = itemSize != null ? itemSize : 0;
+                    //otherSize = otherSize != null ? otherSize : 0;
+                    //voteSize = voteSize != null ? voteSize : 0;
+                    //surveySize = surveySize != null ? surveySize : 0;
+                    //audioSize = audioSize != null ? audioSize : 0;
+                    //resSize = resSize != null ? resSize : 0;
+                    //tempSize = tempSize != null ? tempSize : 0;
+                    //thumSize = thumSize != null ? thumSize : 0;
+                    //syllabusSize = syllabusSize != null ? syllabusSize : 0;
+                    //examSize = examSize != null ? examSize : 0;
+                    //usedSpace = Convert.ToInt64(Math.Ceiling((double)((avatarSize + homeworkSize + trainSize + yxptSize + recordsSize + docSize + videoSize + imageSize + paperSize + itemSize + otherSize + voteSize + audioSize + resSize + tempSize + thumSize + syllabusSize + examSize) / bytes)));
                 }
                 long avaliable = this.baseSpaceSize; // (G) 目前學校申請空間總數
                 long teacherSpace = 0; // 教師可設定的空間量(G)

+ 13 - 93
TEAMModelOS/Controllers/XTest/TestController.cs

@@ -99,12 +99,20 @@ namespace TEAMModelOS.Controllers
         [HttpPost("test-ru")]
         public async Task<IActionResult> FixSemester(JsonElement json)
         {
+            //var cm = _azureRedis.GetConnectionMultiplexer();
+            //var keys = cm.GetServer(cm.GetEndPoints()[0]).Keys(cm.GetDatabase(8).Database,"Blob:Catalog*");
+            //List<string> ks = new List<string>();
+            //foreach (var key in keys)
+            //{
+            //    ks.Add(key.ToString());
+            //}
+         
             var result4 = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ExamInfo>($"select value c from c where c.pk='Exam'and c.owner='teacher'", null, pageSize: 200);
             var result0 = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ExamInfo>($"select value c from c where c.pk='Exam'and c.owner='teacher' and STARTSWITH(c.code,'Exam-')", null, pageSize: 200);
             var result1 = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ExamInfo>($"select value c from c where c.pk='Exam' and c.owner='teacher' and contains(c.code,'Exam-')", null, pageSize: 200);
-            var result2 =  await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ExamInfo>($"select value c from c where c.pk='Exam' and  c.owner='school' and contains(c.code,'Exam-hbc')",null, pageSize:200);
-            var result3 = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ExamInfo>($"select value c from c where c.pk='Exam' and  c.owner='school' ", "Exam-hbcn",pageSize:200);
-            return Ok(new {ru4=result4.ru ,count4= result4.list.Count, ru0 = result0.ru,count0= result0.list.Count(),ru1 = result1.ru,count1=result1.list.Count(), ru2 = result2.ru, count2 = result2.list.Count() ,ru3=result3.ru,count3= result3.list.Count()});
+            var result2 = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ExamInfo>($"select value c from c where c.pk='Exam' and  c.owner='school' and contains(c.code,'Exam-hbc')", null, pageSize: 200);
+            var result3 = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ExamInfo>($"select value c from c where c.pk='Exam' and  c.owner='school' ", "Exam-hbcn", pageSize: 200);
+            return Ok(new { ru4 = result4.ru, count4 = result4.list.Count, ru0 = result0.ru, count0 = result0.list.Count(), ru1 = result1.ru, count1 = result1.list.Count(), ru2 = result2.ru, count2 = result2.list.Count(), ru3 = result3.ru, count3 = result3.list.Count() });
         }
         /// <summary>
         /// 测试五育画像数据推送
@@ -1246,44 +1254,7 @@ namespace TEAMModelOS.Controllers
         }
 
 
-        /// <summary>
-        /// 测试blob多线程写入同一个文件
-        /// </summary>
-        /// <returns></returns>
-        [ProducesDefaultResponseType]
-        [HttpPost("blobroot")]
-        public async Task<IActionResult> MultipleBlob(JsonElement jsonMsg)
-        {
-            if (jsonMsg.TryGetProperty("name", out JsonElement name) && name.ValueKind == JsonValueKind.String
-                    && jsonMsg.TryGetProperty("root", out JsonElement root) && root.ValueKind == JsonValueKind.String)
-            {
-                List<Dictionary<string, double?>> list = new List<Dictionary<string, double?>>();
-                string u = System.Web.HttpUtility.UrlDecode($"{root}", Encoding.UTF8).Split("/")[0];
-                var client = _azureStorage.GetBlobContainerClient($"{name}");
-                var size = await client.GetBlobsSize(u);
-                await _azureRedis.GetRedisClient(8).SortedSetRemoveAsync($"Blob:Catalog:{name}", u);
-                await _azureRedis.GetRedisClient(8).SortedSetIncrementAsync($"Blob:Catalog:{name}", u, size.HasValue ? size.Value : 0);
-                var scores = await _azureRedis.GetRedisClient(8).SortedSetRangeByRankWithScoresAsync($"Blob:Catalog:{name}");
-                double blobsize = 0;
-                if (scores != default && scores != null)
-                {
-                    foreach (var score in scores)
-                    {
-                        blobsize = blobsize + score.Score;
-                        list.Add(new Dictionary<string, double?>() { { score.Element.ToString(), score.Score } });
-                    }
-                }
-                await _azureRedis.GetRedisClient(8).HashSetAsync($"Blob:Record", new RedisValue($"{name}"), new RedisValue($"{blobsize}"));
-
-                await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-ServiceBus,Blob() 容器:{name}使用:{root},文件分类:{list.ToJsonString()}", GroupNames.成都开发測試群組);
-                return Ok(list);
-            }
-            else
-            {
-                return Ok();
-            }
-
-        }
+    
 
         private async Task<int> SendNotification()
         {
@@ -1419,58 +1390,7 @@ namespace TEAMModelOS.Controllers
 
         }
 
-        /// <summary>
-        /// 删除
-        /// </summary>
-        /// <param name="request"></param>
-        /// <returns></returns>
-        [ProducesDefaultResponseType]
-        //[AuthToken(Roles = "teacher")]
-        [HttpPost("fix-blob-content")]
-        public async Task<IActionResult> FixBlobContent(JsonElement request)
-        {
-            try
-            {
-                if (!request.TryGetProperty("name", out JsonElement name)) return BadRequest();
-                if (!request.TryGetProperty("scope", out JsonElement _scope)) return BadRequest();
-
-
-                var client = _azureCosmos.GetCosmosClient();
-                List<string> prefixs = new List<string>() { "audio", "doc", "image", "other", "res", "video", "thum" };
-                var ContainerClient = _azureStorage.GetBlobContainerClient($"{name}");
-                string scope = "private";
-
-
-                scope = $"{_scope}";
-
-                var tb = "Teacher";
-                if (scope != "private")
-                {
-                    tb = "School";
-                }
-                long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-
-                foreach (var prefix in prefixs)
-                {
-                    List<string> items = await ContainerClient.List(prefix);
-                    foreach (var item in items)
-                    {
-                        var urlsSize = await ContainerClient.GetBlobsSize(item);
-                        Bloblog bloblog = new Bloblog { id = Guid.NewGuid().ToString(), code = $"Bloblog-{name}", pk = "Bloblog", time = now, size = urlsSize != null && urlsSize.HasValue ? urlsSize.Value : 0, type = prefix };
-                        await client.GetContainer(Constant.TEAMModelOS, tb).UpsertItemAsync(bloblog, new Azure.Cosmos.PartitionKey(bloblog.code));
-                    }
-                }
-
-
-                return new OkObjectResult(new { });
-
-            }
-            catch (Exception ex)
-            {
-                await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-blob-content()\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
-                return new BadRequestResult();
-            }
-        }
+      
         /// <summary>
         ///  
         /// </summary>