ソースを参照

复制试卷中的试题文件,带检验,优化

Li 2 年 前
コミット
5b66eb7090

+ 40 - 2
TEAMModelBI/Controllers/Census/PaperController.cs

@@ -1,11 +1,14 @@
 using Azure.Cosmos;
 using Azure.Storage.Blobs;
 using Azure.Storage.Blobs.Models;
+using Azure.Storage.Sas;
+using DocumentFormat.OpenXml.Drawing.Diagrams;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.Extensions.Options;
 using System;
 using System.Collections.Generic;
+using System.Globalization;
 using System.IO;
 using System.Text;
 using System.Text.Json;
@@ -19,6 +22,7 @@ using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.DI.AzureCosmos.Inner;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;
+using TEAMModelOS.SDK.Models.Cosmos.BI;
 
 namespace TEAMModelBI.Controllers.Census
 {
@@ -126,8 +130,13 @@ namespace TEAMModelBI.Controllers.Census
                 var oldBobCilent = _azureStorage.GetBlobContainerClient(containerName: $"{cItem.oldSc}");
                 var newBobCilent = _azureStorage.GetBlobContainerClient(containerName: $"{cItem.newSc}");
 
-                string blobUrl = $"{paper.blob}";
+                string blobUrl = "";
+                if (paper.blob.IndexOf('/') == 0)
+                    blobUrl = $"{paper.blob}".Substring(1, paper.blob.Length - 1);
+                else
+                    blobUrl = $"{paper.blob}";
 
+                List<Task<CopyFromUriOperation>> filelist = new();   //可复制256M以上文件
                 await foreach (BlobItem blobItem in oldBobCilent.GetBlobsAsync(BlobTraits.None, BlobStates.None, blobUrl))
                 {
                     if (blobItem.Name.EndsWith(".json"))
@@ -135,7 +144,36 @@ namespace TEAMModelBI.Controllers.Census
                         BlobClient tempClient = oldBobCilent.GetBlobClient(blobItem.Name);
                         using (var meomoryStream = new MemoryStream())
                         {
-                            var response = oldBobCilent.GetBlobClient($"{blobItem.Name}").DownloadTo(meomoryStream);
+                            StringBuilder itemStr = new("[");
+                            BlobClient tempBlobClient = oldBobCilent.GetBlobClient(blobItem.Name);
+                            BlobDownloadInfo download = tempBlobClient.Download();
+                            var content = download.Content;
+                            string text;
+                            using (var streamReader = new StreamReader(content))
+                            {
+                                while ((text = streamReader.ReadLine()) != null)
+                                {
+                                    if (streamReader.EndOfStream)
+                                        itemStr.Append($"{text.ToString()}");
+                                    else
+                                        itemStr.Append($"{text.ToString()},");
+                                }
+
+                                itemStr.Append("]");
+                                streamReader.Close();
+                            }
+                            string input = itemStr.ToString();
+                            BlobItemInfo blobbItemInfo = input.ToObject<BlobItemInfo>();
+
+                            //var response = oldBobCilent.GetBlobClient($"{blobItem.Name}").DownloadTo(meomoryStream);
+                            //BlobItemInfo blobbItemInfo = Encoding.UTF8.GetString(meomoryStream.ToArray()).ToString().ToObject<BlobItemInfo>();
+                            blobbItemInfo.exercise.periodId = cItem.newPrdId;
+                            blobbItemInfo.exercise.gradeIds = cItem.newGrId;
+                            blobbItemInfo.exercise.subjectId = cItem.newSubId;
+
+                            var urlSas = _azureStorage.GetBlobSAS($"{cItem.newSc}", blobItem.Name, BlobSasPermissions.Read | BlobSasPermissions.List);   //获取容器sas和有效期
+
+                            var ster = newBobCilent.UploadFileByContainer(blobbItemInfo.ToJsonString(), blobItem.Name, blobbItemInfo.id);
                         }
                     }
                 }

+ 48 - 0
TEAMModelBI/Models/ItemInfo.cs

@@ -0,0 +1,48 @@
+using DocumentFormat.OpenXml.Office2010.ExcelAc;
+using System.Collections.Generic;
+
+namespace TEAMModelBI.Models
+{
+    /// <summary>
+    /// 试题的结构
+    /// </summary>
+    public class BlobItemInfo
+    {
+        public string id { get; set; }
+
+        public string pid { get; set; }
+        public Exercise exercise { get; set; }
+        public int render { get; set; }
+        public Questions item { get; set; }
+    }
+
+    public class Exercise
+    {
+        public List<string> answer { get; set; }
+        public string explain { get; set; }
+        public string type { get; set; }
+        public string opts { get; set; }
+        public List<string> knowledge { get; set; }
+        public int field { get; set; }
+        public int level { get; set; }
+        public string periodId { get; set; }
+        public List<string> gradeIds { get; set; }
+        public string subjectId { get; set; }
+        public List<string> children { get; set; }
+        public string scope { get; set; }
+        public int score { get; set; }
+        public List<string> repair { get; set; }
+    }
+
+    public class Questions 
+    {
+        public string question { get; set; }
+        public List<OptionInfo> option { get; set; }
+    }
+
+    public class OptionInfo 
+    {
+        public string code { get; set; }
+        public string value { get; set; }
+    }
+}