Ver Fonte

提交更新

CrazyIter_Bin há 4 anos atrás
pai
commit
7556b8a8a3

+ 5 - 8
TEAMModelFunction/TriggerSurvey.cs

@@ -1,6 +1,7 @@
 using Azure.Cosmos;
 using Azure.Cosmos;
 using Azure.Messaging.ServiceBus;
 using Azure.Messaging.ServiceBus;
 using Azure.Storage.Blobs.Models;
 using Azure.Storage.Blobs.Models;
+using Azure.Storage.Sas;
 using Microsoft.Azure.Documents;
 using Microsoft.Azure.Documents;
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
@@ -164,19 +165,15 @@ namespace TEAMModelFunction
                             //结算每道题的答题情况
                             //结算每道题的答题情况
 
 
                             var ContainerClient =  _azureStorage.GetBlobContainerClient(survey.owner);
                             var ContainerClient =  _azureStorage.GetBlobContainerClient(survey.owner);
-                            var route = ContainerClient.Uri.ToString();
                            
                            
                             //获取
                             //获取
-
                             try {
                             try {
-                                List<BlobItem> items = await ContainerClient.List($"survey/{survey.id}/urecord");
+                                List<string> items = await ContainerClient.List($"survey/{survey.id}/urecord");
                                 List<SurveyRecord> surveyRecords = new List<SurveyRecord>();
                                 List<SurveyRecord> surveyRecords = new List<SurveyRecord>();
-                                foreach (BlobItem item in items)
+                                foreach (string item in items)
                                 {
                                 {
-                                    BlobAuth blobAuth = _azureStorage.GetBlobSasUriRead(survey.owner, $"{item.Name}");
-                                    var url = $"{route}/{item.Name}?{blobAuth.sas}";
-                                    var response = await _clientFactory.CreateClient().GetAsync(new Uri(url));
-                                    var json = await JsonDocument.ParseAsync(await response.Content.ReadAsStreamAsync());
+                                    var Download = await _azureStorage.GetBlobContainerClient(survey.owner).GetBlobClient(item).DownloadAsync();
+                                    var json = await JsonDocument.ParseAsync(Download.Value.Content);
                                     var Record = json.RootElement.ToObject<SurveyRecord>();
                                     var Record = json.RootElement.ToObject<SurveyRecord>();
                                     surveyRecords.Add(Record);
                                     surveyRecords.Add(Record);
                                 }
                                 }

+ 3 - 3
TEAMModelOS.SDK/DI/AzureStorage/AzureStorageBlobExtensions.cs

@@ -41,12 +41,12 @@ namespace TEAMModelOS.SDK.DI
             }
             }
         }
         }
 
 
-        public static async Task<List<BlobItem>> List(this BlobContainerClient client, string prefix = null) {
+        public static async Task<List<string>> List(this BlobContainerClient client, string prefix = null) {
             try
             try
             {
             {
-                List<BlobItem> items = new List<BlobItem>();
+                List<string> items = new List<string>();
                 await foreach (BlobItem item in client.GetBlobsAsync(BlobTraits.None, BlobStates.None, prefix)) {
                 await foreach (BlobItem item in client.GetBlobsAsync(BlobTraits.None, BlobStates.None, prefix)) {
-                    items.Add(item);
+                    items.Add(item.Name);
                 }
                 }
                 return items;
                 return items;
             }
             }

+ 54 - 39
TEAMModelOS/Controllers/Common/SurveyController.cs

@@ -25,6 +25,7 @@ using TEAMModelOS.SDK.Module.AzureBlob.Configuration;
 using System.Net.Http;
 using System.Net.Http;
 using TEAMModelOS.SDK.Models.Cosmos;
 using TEAMModelOS.SDK.Models.Cosmos;
 using Azure.Messaging.ServiceBus;
 using Azure.Messaging.ServiceBus;
+using Azure.Storage.Sas;
 
 
 namespace TEAMModelOS.Controllers
 namespace TEAMModelOS.Controllers
 {
 {
@@ -535,59 +536,73 @@ namespace TEAMModelOS.Controllers
 
 
                                 var ContainerClient = _azureStorage.GetBlobContainerClient(survey.owner);
                                 var ContainerClient = _azureStorage.GetBlobContainerClient(survey.owner);
                                 var route = ContainerClient.Uri.ToString();
                                 var route = ContainerClient.Uri.ToString();
-                                List<BlobItem> items = await ContainerClient.List($"survey/{survey.id}/urecord");
-                                List<SurveyRecord> surveyRecords = new List<SurveyRecord>();
+
                                 //获取
                                 //获取
 
 
-                                foreach (BlobItem item in items)
-                                {
-                                    BlobAuth blobAuth = _azureStorage.GetBlobSasUriRead(survey.owner, $"{item.Name}");
-                                    var url = $"{route}/{item.Name}?{blobAuth.sas}";
-                                    var response = await _clientFactory.CreateClient().GetAsync(new Uri(url));
-                                    var json = await JsonDocument.ParseAsync(await response.Content.ReadAsStreamAsync());
-                                    var Record = json.RootElement.ToObject<SurveyRecord>();
-                                    surveyRecords.Add(Record);
-                                }
-                                List<Task<string>> tasks = new List<Task<string>>();
-                                for (int index = 0; index < survey.ans.Count; index++)
+                                try
                                 {
                                 {
-                                    string url = $"{survey.id}/qrecord/{index}.json";
-                                    QuestionRecord question = new QuestionRecord() { index = index };
-                                    foreach (SurveyRecord record in surveyRecords)
+                                    List<string> items = await ContainerClient.List($"survey/{survey.id}/urecord");
+                                    List<SurveyRecord> surveyRecords = new List<SurveyRecord>();
+                                    (string uri, string sas) blobAuth = _azureStorage.GetBlobContainerSAS(survey.owner, BlobContainerSasPermissions.Read);
+                                    string sas = blobAuth.sas;
+                                    var rcode = await _clientFactory.CreateClient().GetAsync(new Uri($"{route}/survey/{survey.id}/record.json?{sas}"));
+                                    var jsonc = await JsonDocument.ParseAsync(await rcode.Content.ReadAsStreamAsync());
+                                    var Recordc = jsonc.RootElement.ToObject<JsonElement>();
+                                    HttpClient httpClient = _clientFactory.CreateClient();
+                                    await _dingDing.SendBotMsg($"问卷调查问题结算数据11111--->>{Recordc.ToJsonString()}", GroupNames.成都开发測試群組);
+                                    foreach (string item in items)
                                     {
                                     {
-                                        if (record.ans.Count == survey.ans.Count)
+                                        var url = $"{route}/{item}?{sas}";
+                                        var response = await httpClient.GetAsync(new Uri(url));
+                                        var json = await JsonDocument.ParseAsync(await response.Content.ReadAsStreamAsync());
+                                        var Record = json.RootElement.ToObject<SurveyRecord>();
+                                        surveyRecords.Add(Record);
+                                    }
+                                    await _dingDing.SendBotMsg($"问卷调查问题结算数据{surveyRecords.ToJsonString()}", GroupNames.成都开发測試群組);
+                                    for (int index = 0; index < survey.ans.Count; index++)
+                                    {
+                                        string url = $"{survey.id}/qrecord/{index}.json";
+                                        QuestionRecord question = new QuestionRecord() { index = index };
+                                        foreach (SurveyRecord record in surveyRecords)
                                         {
                                         {
-                                            foreach (var an in record.ans[index])
+                                            if (record.ans.Count == survey.ans.Count)
                                             {
                                             {
-                                                //
-                                                if (question.opt.ContainsKey(an))
-                                                {
-                                                    if (question.opt[an] != null)
-                                                    {
-                                                        question.opt[an].Add(record.userid);
-                                                    }
-                                                    else
-                                                    {
-                                                        question.opt[an] = new HashSet<string>() { record.userid };
-                                                    }
-                                                }
-                                                else
+                                                foreach (var an in record.ans[index])
                                                 {
                                                 {
-                                                    if (survey.ans[index].Contains(an))
+                                                    //
+                                                    if (question.opt.ContainsKey(an))
                                                     {
                                                     {
-                                                        //如果是客观题code
-                                                        question.opt.Add(an, new HashSet<string> { record.userid });
+                                                        if (question.opt[an] != null)
+                                                        {
+                                                            question.opt[an].Add(record.userid);
+                                                        }
+                                                        else
+                                                        {
+                                                            question.opt[an] = new HashSet<string>() { record.userid };
+                                                        }
                                                     }
                                                     }
                                                     else
                                                     else
                                                     {
                                                     {
-                                                        //如果不是客观code
-                                                        question.other[record.userid] = an;
+                                                        if (survey.ans[index].Contains(an))
+                                                        {
+                                                            //如果是客观题code
+                                                            question.opt.Add(an, new HashSet<string> { record.userid });
+                                                        }
+                                                        else
+                                                        {
+                                                            //如果不是客观code
+                                                            question.other[record.userid] = an;
+                                                        }
                                                     }
                                                     }
                                                 }
                                                 }
                                             }
                                             }
                                         }
                                         }
+                                        await _azureStorage.UploadFileByContainer(survey.owner, question.ToJsonString(), "survey", url);
                                     }
                                     }
-                                    tasks.Add(_azureStorage.UploadFileByContainer(survey.owner, question.ToJsonString(), "survey", url, false));
+                                }
+                                catch (Exception ex)
+                                {
+                                    await _dingDing.SendBotMsg($"问卷调查问题结算异常{ex.Message}\n{ex.StackTrace}", GroupNames.成都开发測試群組);
                                 }
                                 }
                                 if (string.IsNullOrEmpty(survey.recordUrl))
                                 if (string.IsNullOrEmpty(survey.recordUrl))
                                 {
                                 {
@@ -597,9 +612,9 @@ namespace TEAMModelOS.Controllers
                                 else
                                 else
                                 {
                                 {
                                     //异动,且已经有结算记录则不必再继续。
                                     //异动,且已经有结算记录则不必再继续。
-                                   // break;
+                                    //break;
                                 }
                                 }
-                                await Task.WhenAll(tasks);
+                                // await Task.WhenAll(tasks);
                                 //更新结束状态
                                 //更新结束状态
                                 data.progress = "finish";
                                 data.progress = "finish";
                                 if (survey.scope == "school")
                                 if (survey.scope == "school")

+ 3 - 0
TEAMModelOS/Controllers/XTest/TestController.cs

@@ -29,6 +29,9 @@ namespace TEAMModelOS.Controllers.XTest
         [HttpGet("multiple-blob")]
         [HttpGet("multiple-blob")]
         public async Task<IActionResult> MultipleBlob() {
         public async Task<IActionResult> MultipleBlob() {
             await  _azureStorage.GetBlobContainerClient("hbcn").List("other");
             await  _azureStorage.GetBlobContainerClient("hbcn").List("other");
+            var dn=await _azureStorage.GetBlobContainerClient("hbcn").GetBlobClient("survey/2e44ee33-ba65-34b6-7e0f-b7e627c70a54/record.json").DownloadAsync();
+            var jsonc = await JsonDocument.ParseAsync(  dn.Value.Content);
+            var Recordc = jsonc.RootElement.ToObject<JsonElement>();
             return Ok();
             return Ok();
         }
         }