Procházet zdrojové kódy

实例化信息,测试完成后期删除,切换能力点的接口雏形.

Li před 3 roky
rodič
revize
e49055077a

+ 115 - 6
TEAMModeBI/Controllers/BISchool/BatchAreaController.cs

@@ -193,10 +193,10 @@ namespace TEAMModeBI.Controllers.BISchool
                 List<Task<ItemResponse<Ability>>> abilities = new List<Task<ItemResponse<Ability>>>();      //存储数据
                 List<Task<ItemResponse<AbilityTask>>> abilityTasks  = new List<Task<ItemResponse<AbilityTask>>>();  //存储章节
 
-                List<Ability> abilities1 = null;      //存储数据  测试使用,后期删除
-                List<AbilityTask> abilityTasks1 = null;  //存储章节 测试使用,后期删除
-                List<StandardFile> standardFiles = null;    // 显示新的政策文件 //测试使用,后期删除
-                List<AreaSetting> areaSettings = null;       // 显示新的区域配置 //测试使用,后期删除
+                List<Ability> abilities1 = new List<Ability>();      //存储数据  测试使用,后期删除
+                List<AbilityTask> abilityTasks1 = new List<AbilityTask>();  //存储章节 测试使用,后期删除
+                List<StandardFile> standardFiles = new List<StandardFile>();    // 显示新的政策文件 //测试使用,后期删除
+                List<AreaSetting> areaSettings = new List<AreaSetting>();       // 显示新的区域配置 //测试使用,后期删除
 
                 //分区键
                 string partitionCode = "copyAbility-mark";
@@ -435,6 +435,72 @@ namespace TEAMModeBI.Controllers.BISchool
             }
         }
 
+        /// <summary>
+        /// 创区后切换能力点, 先删除原来的能力点,后复制新的能力点   待完成
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("cut-standard")]
+        public async Task<IActionResult> CutStandard(JsonElement jsonElement)
+        {
+            try
+            {
+                if (!jsonElement.TryGetProperty("oldstandard", out JsonElement _oldStandard)) return BadRequest();
+                if (!jsonElement.TryGetProperty("newStandard", out JsonElement _newStandard)) return BadRequest();
+
+                var cosmosClient = _azureCosmos.GetCosmosClient();
+
+                List<Ability> abilitys = new List<Ability>();
+                List<string> abilityIds = new List<string>();
+
+                //查询册别信息
+                await foreach (var tempAbility in cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<Ability>(queryText: $"select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Ability-{_oldStandard}") })) 
+                {
+                    abilitys.Add(tempAbility);   //查询出来册别添加至册别集合中
+                    abilityIds.Add(tempAbility.id);  //查询出来册别ID添加册别ID集合
+                }
+                //删除册别
+                if (abilityIds.IsNotEmpty())
+                {
+                    //var sresponse = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").DeleteItemsStreamAsync(abilityIds, $"Ability-{_oldStandard}");
+                }
+
+                List<AbilityTask> abilityTasks = new List<AbilityTask>();
+                List<string> abilityTaskIds = new List<string>();
+                foreach (var abilityId in abilityIds) 
+                {
+                    await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<AbilityTask>(queryText: $"select value(c) from c where c.abilityId='{abilityId}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"AbilityTask-{_oldStandard}") }))
+                    {
+                        abilityTasks.Add(item);   //查询出来章节信息添加至章节集合
+                        abilityTaskIds.Add(item.id);   //查询出来的章节信息ID添加到战绩集合
+                    }
+                }
+                //删除章节
+                if (abilityTaskIds.IsNotEmpty()) 
+                {
+                    //var sresponse = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").DeleteItemsStreamAsync(abilityTaskIds, $"AbilityTask-{_oldStandard}");
+                }
+
+
+
+
+
+
+                return Ok(new { state = 200, abilitys.Count, idscount= abilityIds.Count, taskcount = abilityTasks.Count });
+
+            }
+            catch (Exception ex)
+            {
+                await _dingDing.SendBotMsg($"BI,{_option.Location}   batcharea/cutstandard \r  {ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
+                return BadRequest();
+            }
+            
+        }
+
+
+
+
         /// <summary>
         /// 测试复制Blob中的文件  批量创区接口测试完成后删除
         /// </summary>
@@ -512,10 +578,12 @@ namespace TEAMModeBI.Controllers.BISchool
         }
 
         /// <summary>
-        /// 批量删除在复制文件 待完成
+        /// 批量删除在复制文件接口  正式完成后删除该接口
         /// </summary>
         /// <param name="jsonElement"></param>
         /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("copyafterdel")]
         public async Task<IActionResult> CopyAfterDel(JsonElement jsonElement)
         {
 
@@ -524,12 +592,53 @@ namespace TEAMModeBI.Controllers.BISchool
             if (!jsonElement.TryGetProperty("copystandard", out JsonElement _copystandard)) return BadRequest();
 
             var blobClient = _azureStorage.GetBlobContainerClient($"{_cntr}");  //获取地址
-            await foreach (BlobItem blobItem in blobClient.GetBlobsAsync(BlobTraits.None, BlobStates.None,$"yxpt/{_delstandard}/"))
+
+            //先删除原有的文件
+            List<Task<Response<bool>>> DelList = new List<Task<Response<bool>>>();
+            await foreach (BlobItem blobItem in blobClient.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"{_delstandard}/"))
+            {
+                //await blobClient.GetBlobClient(blobItem.Name).DeleteIfExistsAsync();
+                DelList.Add(blobClient.GetBlobBaseClient(blobItem.Name).DeleteIfExistsAsync());
+            }
+
+            if (DelList.Count <= 256)
+            {
+                await Task.WhenAll(DelList);
+            }
+            else
             {
+                int pages = (DelList.Count + 255) / 256;
+                for (int i = 0; i < pages; i++)
+                {
+                    List<Task<Response<bool>>> delList = DelList.Skip((i) * 256).Take(256).ToList();
+                    await Task.WhenAll(delList);
+                }
+            }
 
+            //在复制新的文件
+            List<Task<Response<BlobCopyInfo>>> CopyList = new List<Task<Response<BlobCopyInfo>>>();
+            await foreach (BlobItem blobItem in blobClient.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"{_copystandard}/")) 
+            {
+                string oldurl = $"{blobItem.Name}".Replace($"{_copystandard}/", $"{_delstandard}/");  //替换旧文件
+                var copyUrlSas = _azureStorage.GetBlobSAS($"{_cntr}", blobItem.Name, BlobSasPermissions.Read | BlobSasPermissions.List);
 
+                //await blobClient.GetBlobClient(oldurl).SyncCopyFromUriAsync(new Uri(copyUrlSas));
+                CopyList.Add(blobClient.GetBlobClient(oldurl).SyncCopyFromUriAsync(new Uri(copyUrlSas)));
             }
 
+            if (CopyList.Count <= 256)
+            {
+                await Task.WhenAll(CopyList);
+            }
+            else
+            {
+                int pages = (CopyList.Count + 255) / 256;
+                for (int i = 0; i < pages; i++) 
+                {
+                    List<Task<Response<BlobCopyInfo>>> copyList = CopyList.Skip((i) * 256).Take(256).ToList();
+                    await Task.WhenAll(copyList);
+                }
+            }
 
             return Ok(new { state = 200 });