CrazyIter_Bin hai 11 meses
pai
achega
ef081836b5

+ 74 - 28
TEAMModelOS.SDK/DI/AzureCosmos/AzureCosmosExtensions.cs

@@ -17,6 +17,7 @@ using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos.OpenEntity;
 using Microsoft.Azure.Cosmos;
+using TEAMModelOS.Models.Dto;
 
 
 namespace TEAMModelOS.SDK.DI
@@ -244,14 +245,19 @@ namespace TEAMModelOS.SDK.DI
             while (items.HasMoreResults)
             {
                 ResponseMessage response = await items.ReadNextAsync();
-                if (response.IsSuccessStatusCode)
+                if (response.Content!=null)
                 {
                     yield return response;
                 }
-                else
-                {
-                    break;
-                }
+                //ResponseMessage response = await items.ReadNextAsync();
+                //if (response.IsSuccessStatusCode)
+                //{
+                //    yield return response;
+                //}
+                //else
+                //{
+                //    break;
+                //}
             }
         }
         public static async IAsyncEnumerable<ResponseMessage> GetItemQueryStreamIteratorQuery(this Container container, QueryDefinition queryDefinition,QueryRequestOptions requestOptions = null, string continuationToken = null)
@@ -262,59 +268,99 @@ namespace TEAMModelOS.SDK.DI
             while (items.HasMoreResults)
             {
                 ResponseMessage response = await items.ReadNextAsync();
-                if (response.IsSuccessStatusCode)
+                if (response.Content!=null)
                 {
                     yield return response;
                 }
-                else
-                {
-                    break;
-                }
+                 
+
 
+                //ResponseMessage response = await items.ReadNextAsync();
+                //if (response.IsSuccessStatusCode)
+                //{
+                //    yield return response;
+                //}
+                //else
+                //{
+                //    break;
+                //}
             }
         }
 
         public static async IAsyncEnumerable<T> GetItemQueryIteratorQuery<T>(this Container container, QueryDefinition queryDefinition, QueryRequestOptions requestOptions = null, string continuationToken = null)
         {
-            var items = container.GetItemQueryIterator<T>(
+            var items = container.GetItemQueryStreamIterator(
             queryDefinition: queryDefinition, continuationToken: continuationToken,
             requestOptions: requestOptions);
             while (items.HasMoreResults)
             {
-                FeedResponse<T> response = await items.ReadNextAsync();
-                if (response.Any())
+                var response = await items.ReadNextAsync();
+                if (response.Content!=null)
                 {
-                    foreach (var rs in response)
+                    using var json = await JsonDocument.ParseAsync(response.Content);
+
+                    if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
                     {
-                        yield return rs;
+                        foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                        {
+                            yield return obj.ToObject<T>();
+                            
+                        }
                     }
                 }
-                else
-                {
-                    yield break;
-                }
+
+                //FeedResponse<T> response = await items.ReadNextAsync();
+                //if (response.Any())
+                //{
+                //    foreach (var rs in response)
+                //    {
+                //        yield return rs;
+                //    }
+                //}
+                //else
+                //{
+                //    yield break;
+                //}
             }
+
+
         }
         public static async IAsyncEnumerable<T> GetItemQueryIteratorSql<T>(this     Container container, string queryText, QueryRequestOptions requestOptions = null, string continuationToken = null)
         {
-            var items = container.GetItemQueryIterator<T>(
+            var items = container.GetItemQueryStreamIterator(
             queryText: queryText, continuationToken: continuationToken,
             requestOptions: requestOptions);
 
             while (items.HasMoreResults)
             {
-                FeedResponse<T> response = await items.ReadNextAsync();
-                if (response.Any())
+
+                var response = await items.ReadNextAsync();
+                if (response.Content!=null)
                 {
-                    foreach (var rs in response)
+                    using var json = await JsonDocument.ParseAsync(response.Content);
+
+                    if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
                     {
-                        yield return rs;
+                        foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                        {
+                            yield return obj.ToObject<T>();
+
+                        }
                     }
                 }
-                else
-                {
-                    yield break;
-                }
+
+                //FeedResponse<T> response = await items.ReadNextAsync();
+                //if (response.Any())
+                //{
+                //    foreach (var rs in response)
+                //    {
+                //        yield return rs;
+                //    }
+                //}
+                //else
+                //{
+                //    yield break;
+                //}
             }
         }
     }

+ 21 - 9
TEAMModelOS/Controllers/Both/PaperController.cs

@@ -19,6 +19,7 @@ using TEAMModelOS.Filter;
 using TEAMModelOS.SDK.Services;
 using Microsoft.Extensions.Options;
 using TEAMModelOS.Models;
+using OpenXmlPowerTools;
 
 namespace TEAMModelOS.Controllers
 {
@@ -186,7 +187,7 @@ namespace TEAMModelOS.Controllers
                 {
                     permissions= (List<string>)_permissions;
                 }
-                sql.Append("select  c.id,c.code,c.name,c.blob,c.periodId,c.gradeIds,c.subjectId,c.subjectName,c.score,c.useCount,c.scope,c.scoring,c.createTime,c.sheet ,c.mode ,c.sheetNo, c.tags,c.itemSort,c.qamode,c.isCodeOption,c.attachments,c.creatorId,c.secret ,c.markModel from c");
+                sql.Append("select    c.id,c.code,c.name,c.blob,c.periodId,c.gradeIds,c.subjectId,c.subjectName,c.score,c.useCount,c.scope,c.scoring,c.createTime,c.sheet ,c.mode ,c.sheetNo, c.tags,c.itemSort,c.qamode,c.isCodeOption,c.attachments,c.creatorId,c.secret ,c.markModel from c");
                 AzureCosmosQuery cosmosDbQuery = SQLHelper.GetSQL(dict, sql);
 
                 //if (rolse.Contains("admin"))
@@ -200,16 +201,27 @@ namespace TEAMModelOS.Controllers
                 await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorQuery<Paper>(queryDefinition: cosmosDbQuery.CosmosQueryDefinition, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Paper-{code}") }))
                 {
                     papers.Add(item);
-                    //using var json = await JsonDocument.ParseAsync(item.Content);
 
-                    //if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
-                    //{
-                    //    foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
-                    //    {
-                    //        papers.Add(obj.ToObject<object>());
-                    //    }
-                    //}
                 }
+
+                //var s = client.GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryStreamIterator(queryDefinition: cosmosDbQuery.CosmosQueryDefinition,
+                //       requestOptions: new QueryRequestOptions() { PartitionKey= new PartitionKey($"Paper-{code}") });
+                //while (s.HasMoreResults)
+                //{
+                //    var response = await s.ReadNextAsync();
+                //    if (response.Content!=null)
+                //    {
+                //        using var json = await JsonDocument.ParseAsync(response.Content);
+
+                //        if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                //        {
+                //            foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                //            {
+                //                papers.Add(obj.ToObject<Paper>());
+                //            }
+                //        }
+                //    }
+                //}
             }
             if (scope.ToString().Equals("private"))
             {