Przeglądaj źródła

优化学区引用记录和

Li 3 lat temu
rodzic
commit
17db3f2685
1 zmienionych plików z 167 dodań i 109 usunięć
  1. 167 109
      TEAMModelBI/Controllers/BISchool/BatchAreaController.cs

+ 167 - 109
TEAMModelBI/Controllers/BISchool/BatchAreaController.cs

@@ -56,24 +56,41 @@ namespace TEAMModelBI.Controllers.BISchool
         {
             try
             {
-                List<Area> tempAreas = new();
                 List<RecArea> areas = new();
-
                 var table = _azureStorage.GetCloudTableClient().GetTableReference("IESLogin");
                 var azureClient = _azureCosmos.GetCosmosClient();
-                await foreach (var item in azureClient.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<Area>(queryText: $"select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base-Area") }))
+                await foreach (var item in azureClient.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<RecArea>(queryText: $"select c.id,c.code,c.pk,c.name,c.provCode,c.provName,c.cityCode,c.cityName,c.standard,c.standardName,c.institution from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base-Area") }))
                 {
-                    tempAreas.Add(item);
+                    areas.Add(item);
                 }
 
-                foreach (var area in tempAreas) 
-                {
-                    RecArea recArea = new() { id = area.id, code = area.code, pk = area.pk, name = area.name, provCode = area.provCode, provName = area.provName, cityCode = area.cityCode, cityName = area.cityName, standard = area.standard, standardName = area.standardName, institution = area.institution };
-                    recArea.schoolCount = await CommonFind.FindTotals(azureClient, $"select count(c.id) as totals from c where c.areaId='{area.id}' and c.standard='{area.standard}'", "School", "Base");
+                areas.ForEach(async recArea => {
+                    recArea.schoolCount = await CommonFind.GetSqlValueCount(azureClient, "School", $"select value(count(c.id)) from c where c.areaId='{recArea.id}' and c.standard='{recArea.standard}'", "Base");
+                    recArea.aquoteRec = await table.QueryWhereString<AreaQuoteRecord>($"PartitionKey eq 'QuoteRecord' and  areaId eq '{recArea.id}'");
+                });
 
-                    recArea.aquoteRec = await table.QueryWhereString<AreaQuoteRecord>($"PartitionKey eq 'QuoteRecord' and  RowKey eq '{area.id}'");
-                    areas.Add(recArea);
-                }
+
+
+
+
+                //List<Area> tempAreas = new();
+                //List<RecArea> areas = new();
+
+                //var table = _azureStorage.GetCloudTableClient().GetTableReference("IESLogin");
+                //var azureClient = _azureCosmos.GetCosmosClient();
+                //await foreach (var item in azureClient.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<Area>(queryText: $"select value(c) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base-Area") }))
+                //{
+                //    tempAreas.Add(item);
+                //}
+
+                //foreach (var area in tempAreas)
+                //{
+                //    RecArea recArea = new() { id = area.id, code = area.code, pk = area.pk, name = area.name, provCode = area.provCode, provName = area.provName, cityCode = area.cityCode, cityName = area.cityName, standard = area.standard, standardName = area.standardName, institution = area.institution };
+                //    recArea.schoolCount = await CommonFind.FindTotals(azureClient, $"select count(c.id) as totals from c where c.areaId='{area.id}' and c.standard='{area.standard}'", "School", "Base");
+
+                //    recArea.aquoteRec = await table.QueryWhereString<AreaQuoteRecord>($"PartitionKey eq 'QuoteRecord' and  areaId eq '{area.id}'");
+                //    areas.Add(recArea);
+                //}
 
                 return Ok(new { state = 200, areas });
             }
@@ -171,7 +188,7 @@ namespace TEAMModelBI.Controllers.BISchool
 
                 //操作记录实体
                 var tempStandard = !string.IsNullOrEmpty($"{oldStandard}") && !string.IsNullOrEmpty($"{_oldId}") ? $"{oldStandard}" : "standard2";
-                
+
                 var cosmosClient = _azureCosmos.GetCosmosClient();//数据库连接
                 //查询新的是否存在
                 await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<Area>(queryText: $"select value(c) from c where c.standard='{standard}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-Area") }))
@@ -202,7 +219,7 @@ namespace TEAMModelBI.Controllers.BISchool
                 await cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync<Area>(addArea, new PartitionKey("Base-Area"));
 
                 //保存引用记录
-                await table.SaveOrUpdate<AreaQuoteRecord>(new AreaQuoteRecord() { PartitionKey = "QuoteRecord", RowKey = $"{areaId}", quoteId = $"{_oldId}", quoteName = $"{oldName}", standard = tempStandard, time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() });
+                await table.SaveOrUpdate<AreaQuoteRecord>(new AreaQuoteRecord() { PartitionKey = "QuoteRecord", RowKey = $"{DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()}", areaId = $"{areaId}", quoteId = $"{_oldId}", quoteName = $"{oldName}", standard = tempStandard });
 
                 //消息分区键
                 string partitionCode = "copyAbility-mark";
@@ -249,51 +266,64 @@ namespace TEAMModelBI.Controllers.BISchool
                         //添加区能力标准点
                         abilities.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync(item, new PartitionKey($"Ability-{standard}")));
                     }
-
-                    if (abilities.Count < 256)
-                    {
-                        await Task.WhenAll(abilities);
-                    }
-                    else
+                    try
                     {
-                        int pages = (abilities.Count + 255) / 256;
-                        for (int i = 0; i < pages; i++)
+                        if (abilities.Count < 256)
                         {
-                            List<Task<ItemResponse<Ability>>> tempAbility = abilities.Skip((i) * 256).Take(256).ToList();
-                            await Task.WhenAll(tempAbility);
+                            await Task.WhenAll(abilities);
+                        }
+                        else
+                        {
+                            int pages = (abilities.Count + 255) / 256;
+                            for (int i = 0; i < pages; i++)
+                            {
+                                List<Task<ItemResponse<Ability>>> tempAbility = abilities.Skip((i) * 256).Take(256).ToList();
+                                await Task.WhenAll(tempAbility);
+                            }
                         }
                     }
+                    catch
+                    {
+                        return Ok(new { state = 200, msg = "创区成功,能力标准点复制失败,遗留数据影响!" });
+                    }
 
-                    //微能力点
-                    await foreach (var atask in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<AbilityTask>(queryText: $"select value(c) from c ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"AbilityTask-{oldStandard}") }))
+                    try
                     {
-                        List<Tnode> tnodes = new List<Tnode>();
-                        foreach (Tnode tnode in atask.children)
+                        //微能力点
+                        await foreach (var atask in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<AbilityTask>(queryText: $"select value(c) from c ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"AbilityTask-{oldStandard}") }))
                         {
-                            if (tnode.rnodes != null)
+                            List<Tnode> tnodes = new List<Tnode>();
+                            foreach (Tnode tnode in atask.children)
                             {
-                                List<Rnode> rnodes = new List<Rnode>();
-                                foreach (Rnode rnode in tnode.rnodes)
+                                if (tnode.rnodes != null)
                                 {
-                                    if (!string.IsNullOrEmpty($"{rnode.link}"))
+                                    List<Rnode> rnodes = new List<Rnode>();
+                                    foreach (Rnode rnode in tnode.rnodes)
                                     {
-                                        rnode.link = rnode.link.Replace($"/{oldStandard}/", $"/{standard}/");
+                                        if (!string.IsNullOrEmpty($"{rnode.link}"))
+                                        {
+                                            rnode.link = rnode.link.Replace($"/{oldStandard}/", $"/{standard}/");
+                                        }
+                                        rnodes.Add(rnode);
                                     }
-                                    rnodes.Add(rnode);
+                                    tnode.rnodes = rnodes;
                                 }
-                                tnode.rnodes = rnodes;
+                                tnodes.Add(tnode);
                             }
-                            tnodes.Add(tnode);
-                        }
 
-                        atask.children = tnodes;
-                        atask.code = $"AbilityTask-{standard}";
-                        atask.standard = $"{standard}";
-                        atask.codeval = $"{standard}";
+                            atask.children = tnodes;
+                            atask.code = $"AbilityTask-{standard}";
+                            atask.standard = $"{standard}";
+                            atask.codeval = $"{standard}";
 
-                        //添加区能力标准点中的节点 
-                        //abilityTasks.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync(atask, new PartitionKey($"AbilityTask-{standard}")));
-                        await cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync(atask, new PartitionKey($"AbilityTask-{standard}"));
+                            //添加区能力标准点中的节点 
+                            //abilityTasks.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync(atask, new PartitionKey($"AbilityTask-{standard}")));
+                            await cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync(atask, new PartitionKey($"AbilityTask-{standard}"));
+                        }
+                    }
+                    catch
+                    {
+                        return Ok(new { state = 200, msg = "创区成功,能力标准创建成功,微能力点复制失败,遗留数据影响!" });
                     }
 
                     //if (abilityTasks.Count > 0) 
@@ -352,52 +382,67 @@ namespace TEAMModelBI.Controllers.BISchool
                             abilities.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync(item, new PartitionKey($"Ability-{standard}")));
                         }
 
-                        if (abilities.Count < 256)
-                        {
-                            await Task.WhenAll(abilities);
-                        }
-                        else
+                        try
                         {
-                            int pages = (abilities.Count + 255) / 256;
-                            for (int i = 0; i < pages; i++)
+                            if (abilities.Count < 256)
                             {
-                                List<Task<ItemResponse<Ability>>> tempAbility = abilities.Skip((i) * 256).Take(256).ToList();
-                                await Task.WhenAll(tempAbility);
+                                await Task.WhenAll(abilities);
+                            }
+                            else
+                            {
+                                int pages = (abilities.Count + 255) / 256;
+                                for (int i = 0; i < pages; i++)
+                                {
+                                    List<Task<ItemResponse<Ability>>> tempAbility = abilities.Skip((i) * 256).Take(256).ToList();
+                                    await Task.WhenAll(tempAbility);
+                                }
                             }
                         }
+                        catch
+                        {
+                            return Ok(new { state = 200, msg = "创区成功,能力标准点复制失败,遗留数据影响!" });
+                        }
 
-                        //微能力点
-                        await foreach (var atask in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<AbilityTask>(queryText: $"select value(c) from c ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"AbilityTask-{area.standard}") }))
+                        try
                         {
-                            List<Tnode> tnodes = new List<Tnode>();
-                            foreach (Tnode tnode in atask.children)
+                            //微能力点
+                            await foreach (var atask in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<AbilityTask>(queryText: $"select value(c) from c ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"AbilityTask-{area.standard}") }))
                             {
-                                if (tnode.rnodes != null)
+                                List<Tnode> tnodes = new List<Tnode>();
+                                foreach (Tnode tnode in atask.children)
                                 {
-                                    List<Rnode> rnodes = new List<Rnode>();
-                                    foreach (Rnode rnode in tnode.rnodes)
+                                    if (tnode.rnodes != null)
                                     {
-                                        if (!string.IsNullOrEmpty($"{rnode.link}"))
+                                        List<Rnode> rnodes = new List<Rnode>();
+                                        foreach (Rnode rnode in tnode.rnodes)
                                         {
-                                            rnode.link = rnode.link.Replace($"/{area.standard}/", $"/{standard}/");
+                                            if (!string.IsNullOrEmpty($"{rnode.link}"))
+                                            {
+                                                rnode.link = rnode.link.Replace($"/{area.standard}/", $"/{standard}/");
+                                            }
+                                            rnodes.Add(rnode);
                                         }
-                                        rnodes.Add(rnode);
+                                        tnode.rnodes = rnodes;
                                     }
-                                    tnode.rnodes = rnodes;
+                                    tnodes.Add(tnode);
                                 }
-                                tnodes.Add(tnode);
-                            }
 
-                            atask.children = tnodes;
-                            atask.code = $"AbilityTask-{standard}";
-                            atask.standard = $"{standard}";
-                            atask.codeval = $"{standard}";
+                                atask.children = tnodes;
+                                atask.code = $"AbilityTask-{standard}";
+                                atask.standard = $"{standard}";
+                                atask.codeval = $"{standard}";
 
-                            //添加区能力标准点中的节点 
-                            //abilityTasks.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync(atask, new PartitionKey($"AbilityTask-{standard}")));
-                            await cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync(atask, new PartitionKey($"AbilityTask-{standard}"));
+                                //添加区能力标准点中的节点 
+                                //abilityTasks.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync(atask, new PartitionKey($"AbilityTask-{standard}")));
+                                await cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync(atask, new PartitionKey($"AbilityTask-{standard}"));
+                            }
+                        }
+                        catch
+                        {
+                            return Ok(new { state = 200, msg = "创区成功,能力标准创建成功,微能力点复制失败,遗留数据影响!" });
                         }
 
+
                         //if (abilityTasks.Count > 0)
                         //{
                         //    for (int i = 0; i < abilityTasks.Count; i++)
@@ -500,10 +545,10 @@ namespace TEAMModelBI.Controllers.BISchool
                 var table = _azureStorage.GetCloudTableClient().GetTableReference("IESLogin");
 
                 //保存引用记录
-                await table.SaveOrUpdate<AreaQuoteRecord>(new AreaQuoteRecord() { PartitionKey = "QuoteRecord", RowKey = $"{_oldId}", quoteId = $"{_newId}", quoteName = $"{newName}", standard = $"{_newStandard}", time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() });
+                await table.SaveOrUpdate<AreaQuoteRecord>(new AreaQuoteRecord() { PartitionKey = "QuoteRecord", RowKey = $"{DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()}", areaId = $"{_oldId}", quoteId = $"{_newId}", quoteName = $"{newName}", standard = $"{_newStandard}" });
 
                 //操作记录实体
-                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();                
+                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
                 var cosmosClient = _azureCosmos.GetCosmosClient();
 
                 List<string> abilityIds = new List<string>();  //册别的ID集合
@@ -549,53 +594,68 @@ namespace TEAMModelBI.Controllers.BISchool
                     abilities.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync(item, new PartitionKey($"Ability-{_oldStandard}")));
                 }
 
-                if (abilities.Count < 256)
-                {
-                    await Task.WhenAll(abilities);
-                }
-                else
+                try
                 {
-                    int pages = (abilities.Count + 255) / 256;
-                    for (int i = 0; i < pages; i++)
+                    if (abilities.Count < 256)
                     {
-                        List<Task<ItemResponse<Ability>>> tempAbility = abilities.Skip((i) * 256).Take(256).ToList();
-                        await Task.WhenAll(tempAbility);
+                        await Task.WhenAll(abilities);
+                    }
+                    else
+                    {
+                        int pages = (abilities.Count + 255) / 256;
+                        for (int i = 0; i < pages; i++)
+                        {
+                            List<Task<ItemResponse<Ability>>> tempAbility = abilities.Skip((i) * 256).Take(256).ToList();
+                            await Task.WhenAll(tempAbility);
+                        }
                     }
                 }
+                catch
+                {
+                    return Ok(new { state = 200, msg = "创区成功,能力标准点复制失败,遗留数据影响!" });
+                }
 
-                //微能力点
-                await foreach (var atask in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<AbilityTask>(queryText: $"select value(c) from c ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"AbilityTask-{_newStandard}") }))
+                try
                 {
-                    List<Tnode> tnodes = new List<Tnode>();
-                    foreach (Tnode tnode in atask.children)
+                    //微能力点
+                    await foreach (var atask in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<AbilityTask>(queryText: $"select value(c) from c ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"AbilityTask-{_newStandard}") }))
                     {
-                        if (tnode.rnodes != null)
+                        List<Tnode> tnodes = new();
+                        foreach (Tnode tnode in atask.children)
                         {
-                            List<Rnode> rnodes = new List<Rnode>();
-                            foreach (Rnode rnode in tnode.rnodes)
+                            if (tnode.rnodes != null)
                             {
-                                if (!string.IsNullOrEmpty($"{rnode.link}"))
+                                List<Rnode> rnodes = new();
+                                foreach (Rnode rnode in tnode.rnodes)
                                 {
-                                    rnode.link = rnode.link.Replace($"/{_newStandard}/", $"/{_oldStandard}/");
+                                    if (!string.IsNullOrEmpty($"{rnode.link}"))
+                                    {
+                                        rnode.link = rnode.link.Replace($"/{_newStandard}/", $"/{_oldStandard}/");
+                                    }
+                                    rnodes.Add(rnode);
                                 }
-                                rnodes.Add(rnode);
+                                tnode.rnodes = rnodes;
                             }
-                            tnode.rnodes = rnodes;
+                            tnodes.Add(tnode);
                         }
-                        tnodes.Add(tnode);
-                    }
 
-                    atask.children = tnodes;
-                    atask.code = $"AbilityTask-{_oldStandard}";
-                    atask.standard = $"{_oldStandard}";
-                    atask.codeval = $"{_oldStandard}";
+                        atask.children = tnodes;
+                        atask.code = $"AbilityTask-{_oldStandard}";
+                        atask.standard = $"{_oldStandard}";
+                        atask.codeval = $"{_oldStandard}";
+
+                        ////添加区能力标准点中的节点 
+                        //abilityTasks.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync(atask, new PartitionKey($"AbilityTask-{_oldStandard}")));
+                        await cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync(atask, new PartitionKey($"AbilityTask-{_oldStandard}"));
+                    }
 
-                    ////添加区能力标准点中的节点 
-                    //abilityTasks.Add(cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync(atask, new PartitionKey($"AbilityTask-{_oldStandard}")));
-                    await cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").CreateItemAsync(atask, new PartitionKey($"AbilityTask-{_oldStandard}"));
+                }
+                catch
+                {
+                    return Ok(new { state = 200, msg = "创区成功,能力标准创建成功,微能力点复制失败,遗留数据影响!" });
                 }
 
-                StandardFile saveFile = new StandardFile();
+                StandardFile saveFile = new();
 
                 //新政策文件
                 await foreach (StandardFile standardFile in cosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<StandardFile>(queryText: $"select value(c) from c where  c.id='{_newId}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"StandardFile") }))
@@ -703,7 +763,7 @@ namespace TEAMModelBI.Controllers.BISchool
         /// <summary>
         /// 区域列表
         /// </summary>
-        public record RecArea 
+        public record RecArea
         {
             public string id { get; set; }
             public string code { get; set; }
@@ -717,9 +777,7 @@ namespace TEAMModelBI.Controllers.BISchool
             public string standardName { get; set; }
             public string institution { get; set; }
             public int schoolCount { get; set; }
-            public List<AreaQuoteRecord> aquoteRec { get; set; }
+            public List<AreaQuoteRecord> aquoteRec { get; set; } = new List<AreaQuoteRecord>();
         }
-
-
-}
+    }
 }