JAELYS %!s(int64=4) %!d(string=hai) anos
pai
achega
06e69433d5
Modificáronse 34 ficheiros con 83 adicións e 328 borrados
  1. 1 1
      TEAMModelOS.SDK/Context/Constant/ContentTypeDict.cs
  2. 3 22
      TEAMModelOS.SDK/DI/AzureCosmos/AzureCosmosFactory.cs
  3. 10 15
      TEAMModelOS.SDK/DI/AzureStorage/AzureStorageBlobExtensions.cs
  4. 1 2
      TEAMModelOS.SDK/Models/Cosmos/Common/ExamClassResult.cs
  5. 1 2
      TEAMModelOS.SDK/Models/Cosmos/Teacher/Homework.cs
  6. 1 2
      TEAMModelOS.SDK/Models/Cosmos/Common/ItemInfo.cs
  7. 1 2
      TEAMModelOS.SDK/Models/Cosmos/Common/Knowledge.cs
  8. 1 2
      TEAMModelOS.SDK/Models/Cosmos/Teacher/LearnProcess.cs
  9. 1 2
      TEAMModelOS.SDK/Models/Cosmos/Teacher/LearnTask.cs
  10. 1 2
      TEAMModelOS.SDK/Models/Cosmos/Teacher/LearnUnit.cs
  11. 0 99
      TEAMModelOS.SDK/Models/Cosmos/Common/Resource.cs
  12. 1 1
      TEAMModelOS.SDK/Models/Cosmos/Common/Syllabus.cs
  13. 0 85
      TEAMModelOS.SDK/Models/Cosmos/Common/Volume.cs
  14. 1 2
      TEAMModelOS.SDK/Models/Cosmos/School/Class.cs
  15. 1 2
      TEAMModelOS.SDK/Models/Cosmos/School/Course.cs
  16. 1 2
      TEAMModelOS.SDK/Models/Cosmos/School/CourseManagement.cs
  17. 1 2
      TEAMModelOS.SDK/Models/Cosmos/School/ExamAnswer.cs
  18. 1 2
      TEAMModelOS.SDK/Models/Cosmos/School/ExamInfo.cs
  19. 1 2
      TEAMModelOS.SDK/Models/Cosmos/School/ExamResult.cs
  20. 1 2
      TEAMModelOS.SDK/Models/Cosmos/School/Paper.cs
  21. 1 2
      TEAMModelOS.SDK/Models/Cosmos/School/School.cs
  22. 1 2
      TEAMModelOS.SDK/Models/Cosmos/School/Survey.cs
  23. 1 2
      TEAMModelOS.SDK/Models/Cosmos/School/Vote.cs
  24. 1 2
      TEAMModelOS.SDK/Models/Cosmos/Student/ClassStudent.cs
  25. 1 2
      TEAMModelOS.SDK/Models/Cosmos/Student/ExamRecord.cs
  26. 1 2
      TEAMModelOS.SDK/Models/Cosmos/Student/HomeworkRecord.cs
  27. 1 2
      TEAMModelOS.SDK/Models/Cosmos/Student/LearnRecord.cs
  28. 1 2
      TEAMModelOS.SDK/Models/Cosmos/Student/OldStudent.cs
  29. 1 2
      TEAMModelOS.SDK/Models/Cosmos/Student/SurveyRecord.cs
  30. 1 2
      TEAMModelOS.SDK/Models/Cosmos/Student/VoteRecord.cs
  31. 1 1
      TEAMModelOS.SDK/Models/Cosmos/Teacher/Comment.cs
  32. 1 2
      TEAMModelOS.SDK/Models/Cosmos/Teacher/CoursePlan.cs
  33. 41 39
      TEAMModelOS/Controllers/Import/ImportExerciseController.cs
  34. 1 15
      TEAMModelOS/Controllers/xTest/BlobController.cs

+ 1 - 1
TEAMModelOS.SDK/Context/Constant/ContentTypeDict.cs

@@ -169,7 +169,7 @@ namespace TEAMModelOS.SDK.Context.Constant
 {"application/xml",".xml"}
         };
 
-        public static readonly  Dictionary<string, string> dict = new Dictionary<string, string> {
+        public static readonly Dictionary<string, string> dict = new Dictionary<string, string> {
             {".3g2", "video/3gpp"},
             {".3ga", "video/3gpp"},
             {".3gp", "video/3gpp"},

+ 3 - 22
TEAMModelOS.SDK/DI/AzureCosmos/AzureCosmosFactory.cs

@@ -1,29 +1,8 @@
-using Azure;
 using Azure.Cosmos;
-using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.Logging;
 using Microsoft.Extensions.Options;
 using System;
 using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using TEAMModelOS.Models;
-using TEAMModelOS.SDK.Context.Attributes.Azure;
-using TEAMModelOS.SDK.Context.Configuration;
-using TEAMModelOS.SDK.DI.AzureCosmos.Inner;
-using TEAMModelOS.SDK.Helper.Common.ReflectorExtensions;
-using System.Diagnostics;
-using System.IO;
-using System.Linq.Expressions;
-using System.Net;
-using System.Reflection;
-using System.Text;
-using System.Text.Json;
-using System.Threading;
-using TEAMModelOS.SDK.Context.Exception;
-using TEAMModelOS.SDK.DI;
-using Azure.Cosmos.Serialization;
 
 namespace TEAMModelOS.SDK.DI
 {
@@ -57,7 +36,9 @@ namespace TEAMModelOS.SDK.DI
         {
             try
             {
-                var cm = CosmosClients.GetOrAdd(name, x => new CosmosClient(_optionsMonitor.Get(name).CosmosConnectionString, new CosmosClientOptions() {  ApplicationRegion = region, SerializerOptions = new CosmosSerializationOptions() { PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase } }));
+                //CosmosClientOptions 的 SerializerOptions = new CosmosSerializationOptions() { PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase } 
+                //需等待官方修正
+                var cm = CosmosClients.GetOrAdd(name, x => new CosmosClient(_optionsMonitor.Get(name).CosmosConnectionString, new CosmosClientOptions() {  ApplicationRegion = region }));
                 return cm;
             }
             catch (Exception e)

+ 10 - 15
TEAMModelOS.SDK/DI/AzureStorage/AzureStorageBlobExtensions.cs

@@ -50,6 +50,7 @@ namespace TEAMModelOS.SDK.DI
             {
                 BlobContainerClient bcc = client.GetBlobContainerClient(blobContainerName);
                 BlobBatchClient bbc = client.GetBlobBatchClient();
+                
                 List<Uri> blobs = new List<Uri>();
                 await foreach (var item in bcc.GetBlobsAsync(BlobTraits.None, BlobStates.None, prefix))
                 {
@@ -90,30 +91,28 @@ namespace TEAMModelOS.SDK.DI
         ///"student": [ "stu/{studentId}/ans", "stu/{studentId}/task" ]
         /// </summary>
         /// <param name="name">容器名称</param>
-        /// <param name="text">文件内容的流</param>
+        /// <param name="json">文件内容的流</param>
         /// <param name="folder">业务文件夹</param>
         /// <param name="fileName">文件名</param>
         /// <param name="contentTypeDefault">是否存放文件后缀对应的contentType</param>
         /// <returns></returns>
-        public static async Task<AzureBlobModel> UploadFileByContainer(this AzureStorageFactory azureStorage, string name, string text, string folder, string fileName, bool contentTypeDefault = true)
+        public static async Task<string> UploadFileByContainer(this AzureStorageFactory azureStorage, string name, string json, string root , string blobpath, bool contentTypeDefault = true)
         {
 
             // string groupName =folder;
 
-            BlobContainerClient blobContainer = azureStorage.GetBlobContainerClient(name.ToLower().Replace("#", "")); //blobClient.GetContainerReference(groupName); 
-            Uri url = blobContainer.Uri;
+            BlobContainerClient blobContainer = azureStorage.GetBlobContainerClient(name.ToLower().Replace("#", "")); //blobClient.GetContainerReference(groupName);            
 
-            var blockBlob = blobContainer.GetBlobClient(folder + "/" + fileName);
-            string fileext = fileName.Substring(fileName.LastIndexOf(".") > 0 ? fileName.LastIndexOf(".") : 0);
+            var blockBlob = blobContainer.GetBlobClient($"{root}/{blobpath}");
+            
             string content_type = "application/octet-stream";
             if (!contentTypeDefault)
             {
+                string fileext = blobpath.Substring(blobpath.LastIndexOf(".") > 0 ? blobpath.LastIndexOf(".") : 0);
                 ContentTypeDict.dict.TryGetValue(fileext, out string contenttype);
                 if (!string.IsNullOrEmpty(contenttype))
                 {
                     content_type = contenttype;
-
-
                 }
                 else
                 {
@@ -126,16 +125,12 @@ namespace TEAMModelOS.SDK.DI
 
                 //blockBlob.Properties.ContentType = content_type;
             }
-            byte[] bytes = System.Text.Encoding.Default.GetBytes(text);
+            byte[] bytes = System.Text.Encoding.Default.GetBytes(json);
             Stream streamBlob = new MemoryStream(bytes);
             await blockBlob.UploadAsync(streamBlob, true);
             blockBlob.SetHttpHeaders(new BlobHttpHeaders { ContentType = content_type });
-            AzureBlobModel model = new AzureBlobModel(fileName, name, folder, fileName, folder, content_type, bytes.Length)
-            {
-                Sha1Code = ShaHashHelper.GetSHA1(bytes),
-                BlobUrl = blockBlob.Uri.ToString()
-            };
-            return model;
+            
+            return  blockBlob.Uri.ToString();
         }
 
         /// <summary>

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/Common/ExamClassResult.cs

@@ -6,8 +6,7 @@ using TEAMModelOS.SDK.Context.Attributes.Azure;
 using TEAMModelOS.SDK.DI;
 
 namespace TEAMModelOS.SDK.Models
-{
-    [CosmosDB(Database = "TEAMModelOS", Name = "Common")]
+{    
     public class ExamClassResult :CosmosEntity
     {
         public ExamClassResult() {

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/Teacher/Homework.cs

@@ -10,8 +10,7 @@ namespace TEAMModelOS.SDK.Models
 {
     /// <summary>
     /// 作业
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "Teacher")]
+    /// </summary>    
     public class Homework:CosmosEntity
     {        
         public Homework()

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/Common/ItemInfo.cs

@@ -9,8 +9,7 @@ namespace TEAMModelOS.SDK.Models
 {
     /// <summary>
     ///  Teaching materials 教学材料  题目信息
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS",  Name = "Common", Cache =true)]
+    /// </summary>    
     public class ItemInfo :CosmosEntity
     {       
         public ItemInfo()

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/Common/Knowledge.cs

@@ -11,8 +11,7 @@ namespace TEAMModelOS.SDK.Models
 {
     /// <summary>
     ///Teaching materials 教学材料 --- 知识点,知识块
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "Common", Cache = true )]
+    /// </summary>    
     public class Knowledge: CosmosEntity
     {
         public Knowledge()

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/Teacher/LearnProcess.cs

@@ -10,8 +10,7 @@ namespace TEAMModelOS.SDK.Models
 
     /// <summary>
     /// 编序学习
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "Teacher")]
+    /// </summary>    
     public class LearnProcess : CosmosEntity
     {        
         public LearnProcess() {

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/Teacher/LearnTask.cs

@@ -9,8 +9,7 @@ namespace TEAMModelOS.SDK.Models
 { 
     /// <summary>
     /// 学习任务
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "Teacher")]
+    /// </summary>    
     public class LearnTask :CosmosEntity
     {  
         /// <summary>

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/Teacher/LearnUnit.cs

@@ -10,8 +10,7 @@ namespace TEAMModelOS.SDK.Models
 {
     /// <summary>
     /// 学习单元
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "Teacher")]
+    /// </summary>    
     public class LearnUnit:CosmosEntity
     {       
         public LearnUnit() {

+ 0 - 99
TEAMModelOS.SDK/Models/Cosmos/Common/Resource.cs

@@ -1,99 +0,0 @@
-using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Text;
-using System.Text.Json.Serialization;
-using TEAMModelOS.SDK.Context.Attributes.Azure;
-using TEAMModelOS.SDK.DI;
-
-namespace TEAMModelOS.SDK.Models
-{
-    /// <summary>
-    /// Teaching materials 教学材料 ---内容资源
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "Common", Cache = true)]
-    public class Resource : CosmosEntity
-    {
-        [PartitionKey]
-        [Required(ErrorMessage = "{0} 必须填写")]
-        public string code { get; set; }
-        // [PartitionKey(name = "SyllabusResource")]
-        public string pk { get; set; }
-        public int? ttl { get; set; }
-        public string id { get; set; }
-
-   
-
-        /// <summary>
-        /// 文件名字
-        /// </summary>
-        [Required(ErrorMessage = "{0} 必须填写")]
-        public string fileName { get; set; }
-
-        /// <summary>
-        /// 文件后缀
-        /// </summary>
-        [Required(ErrorMessage = "{0} 必须填写")]
-        public string extension { get; set; }
-
-        /// <summary>
-        /// 文件类型
-        /// </summary>
-        [Required(ErrorMessage = "{0} 必须填写")]
-        public string contentType { get; set; }
-
-        /// <summary>
-        /// 文件类型
-        /// </summary>
-        [Required(ErrorMessage = "{0} 必须填写")]
-        public string type { get; set; }
-
-        /// <summary>
-        /// 文件大小
-        /// </summary>
-        [Required(ErrorMessage = "{0} 必须填写")]
-        public long size { get; set; }
-
-        /// <summary>
-        /// 上传时间
-        /// </summary>
-        [Required(ErrorMessage = "{0} 必须填写")]
-        public long createTime { get; set; }
-
-        /// <summary>
-        /// 关联课纲数量
-        /// </summary>
-        public int relationNum { get; set; } = 0;
-
-        /// <summary>
-        /// 链接
-        /// </summary>
-        [Required(ErrorMessage = "{0} 必须填写")]
-        public string blobUrl { get; set; }
-
-        /// <summary>
-        /// 缩略图链接  图片视频有 文件没有
-        /// </summary>
-        public string compressUrl { get; set; }
-
-        /// <summary>
-        /// 可见性
-        /// </summary>
-        [Required(ErrorMessage = "{0} 必须填写")]
-        public string range { get; set; }
-
-        /// <summary>
-        /// 判断是否唯一
-        /// </summary>
-        [Required(ErrorMessage = "{0} 必须填写")]
-        public string sha1Code { get; set; }
-
-
-        /// <summary>
-        /// 关联知识点的id数组
-        /// </summary>
-        public List<string> points { get; set; }
-
-    }
-}

+ 1 - 1
TEAMModelOS.SDK/Models/Cosmos/Common/Syllabus.cs

@@ -10,7 +10,7 @@ namespace TEAMModelOS.SDK.Models
     /// <summary>
     /// Teaching materials 教学材料 ---课纲
     /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "School")]
+    
     public class Syllabus : CosmosEntity
     {
         [PartitionKey]

+ 0 - 85
TEAMModelOS.SDK/Models/Cosmos/Common/Volume.cs

@@ -1,85 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using TEAMModelOS.SDK.Context.Attributes.Azure;
-using System.Text.Json.Serialization;
-using System.ComponentModel.DataAnnotations;
-using Newtonsoft.Json;
-using TEAMModelOS.SDK.DI;
-
-
-namespace TEAMModelOS.SDK.Models
-{
-    [CosmosDB(Database = "TEAMModelOS", Name = "Common", Monitor = true)]
-
-    public class Volume : CosmosEntity
-    {
-        /// <summary>
-        /// 0默认教学课纲的册别 1个人或单独的专题课纲册别 2,系统课纲
-        /// </summary>
-
-        public int type { get; set; }
-
-
-        /// <summary>
-        /// 学段
-        /// </summary>
-
-        public string periodId { get; set; }
-
-
-        /// <summary>
-        /// 学科
-        /// </summary>
-
-        public string subjectId { get; set; }
-
-
-        /// <summary>
-        /// 年级
-        /// </summary>
-
-        public string gradeId { get; set; }
-
-
-        /// <summary>
-        /// 学期code
-        /// </summary>
-
-        public string semesterId { get; set; }
-
-
-        /// <summary>
-        /// 状态
-        /// </summary>
-
-        public int status { get; set; } = 1;
-
-
-        /// <summary>
-        /// 册别name
-        /// </summary>
-        [Required(ErrorMessage = "{0} 必须填写")]
-        public string volumeName { get; set; }
-
-
-        /// <summary>
-        /// 册别code
-        /// </summary>
-        public string volumeCode { get; set; }
-
-
-        /// <summary>
-        /// 创建者醍摩豆id
-        /// </summary>
-        public string TEAMModelId { get; set; }
-
-        /// <summary>
-        /// 共编使用者 的醍摩豆id
-        /// </summary>
-        public List<string> editors { get; set; }
-
-        public int resourceCount { get; set; }
-        public int itemCount { get; set; }
-    }
-}

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/School/Class.cs

@@ -9,8 +9,7 @@ using TEAMModelOS.SDK.Context.Attributes.Azure;
 using TEAMModelOS.SDK.DI;
 
 namespace TEAMModelOS.SDK.Models
-{
-    [CosmosDB(Database = "TEAMModelOS", Name = "School")]
+{    
     public class Class : CosmosEntity
     {
         public Class()

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/School/Course.cs

@@ -8,8 +8,7 @@ namespace TEAMModelOS.SDK.Models
 {
     /// <summary>
     /// 课程
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "School")]
+    /// </summary>    
     public class Course : CosmosEntity
     {
         public Course()

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/School/CourseManagement.cs

@@ -9,8 +9,7 @@ namespace TEAMModelOS.SDK.Models
 {
     /// <summary>
     /// 课程
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "School")]
+    /// </summary>    
     public class CourseManagement : CosmosEntity
     {
         public CourseManagement()

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/School/ExamAnswer.cs

@@ -10,8 +10,7 @@ namespace TEAMModelOS.SDK.Models
 {
     /// <summary>
     /// 考生作答信息
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "School")]
+    /// </summary>    
     public class ExamAnswer :CosmosEntity
     {
        // [PartitionKey(name = "ExamAnswer")]

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/School/ExamInfo.cs

@@ -11,8 +11,7 @@ namespace TEAMModelOS.SDK.Models
 {
     /// <summary>
     /// 考试基础信息
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "School")]
+    /// </summary>    
     public class ExamInfo :CosmosEntity
     { 
         public ExamInfo() {

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/School/ExamResult.cs

@@ -9,8 +9,7 @@ namespace TEAMModelOS.SDK.Models
 {
     /// <summary>
     /// 考试成绩信息
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "School")]
+    /// </summary>    
     public  class ExamResult:CosmosEntity
     {        
         public ExamResult()

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/School/Paper.cs

@@ -10,8 +10,7 @@ namespace TEAMModelOS.SDK.Models
 {
     /// <summary>
     /// 试卷信息
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "School")]
+    /// </summary>    
     public class Paper : CosmosEntity
     {
         public Paper()

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/School/School.cs

@@ -8,8 +8,7 @@ using TEAMModelOS.SDK.Context.Attributes.Azure;
 using TEAMModelOS.SDK.DI;
 
 namespace TEAMModelOS.SDK.Models
-{
-    [CosmosDB(Database = "TEAMModelOS", Name = "School")]
+{    
     public class School : CosmosEntity
     {        
         public School()

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/School/Survey.cs

@@ -10,8 +10,7 @@ namespace TEAMModelOS.SDK.Models
 {
     /// <summary>
     /// 问卷调查
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS",Name = "School")]
+    /// </summary>    
     public class Survey : CosmosEntity
     {
         public Survey() {

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/School/Vote.cs

@@ -10,8 +10,7 @@ namespace TEAMModelOS.SDK.Models
 {
     /// <summary>
     /// 投票
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "School")]
+    /// </summary>    
     public class Vote : CosmosEntity
     {   
         public Vote()

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/Student/ClassStudent.cs

@@ -6,8 +6,7 @@ using TEAMModelOS.SDK.Context.Attributes.Azure;
 using TEAMModelOS.SDK.DI;
 
 namespace TEAMModelOS.SDK.Models
-{
-    [CosmosDB(Database = "TEAMModelOS", Name = "Student", Cache = false)]
+{    
     public class ClassStudent : CosmosEntity
     {        
         public ClassStudent() {

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/Student/ExamRecord.cs

@@ -7,8 +7,7 @@ using TEAMModelOS.SDK.Context.Attributes.Azure;
 
 
 namespace TEAMModelOS.SDK.Models
-{
-    [CosmosDB(Database = "TEAMModelOS", Name = "Student")]
+{    
     public class ExamRecord : CosmosEntity
     { 
         /// <summary>

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/Student/HomeworkRecord.cs

@@ -11,8 +11,7 @@ namespace TEAMModelOS.SDK.Models
 
     /// <summary>
     /// 作业数据
-    /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "Student")]
+    /// </summary>    
     public class HomeworkRecord : CosmosEntity
     {
         

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/Student/LearnRecord.cs

@@ -8,8 +8,7 @@ using TEAMModelOS.SDK.DI;
 namespace TEAMModelOS.SDK.Models
 {    /// <summary>
      ///  编序式和学习单元 作答记录
-     /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "Student")]
+     /// </summary>    
     public class LearnRecord : CosmosEntity
     {        
         public LearnRecord() {

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/Student/OldStudent.cs

@@ -8,8 +8,7 @@ using TEAMModelOS.SDK.Context.Attributes.Azure;
 using TEAMModelOS.SDK.DI;
 
 namespace TEAMModelOS.SDK.Models
-{
-    [CosmosDB(Database = "TEAMModelOS", Name = "Student")]
+{    
     public class OldStudent :CosmosEntity
     {       
         

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/Student/SurveyRecord.cs

@@ -7,8 +7,7 @@ using TEAMModelOS.SDK.Context.Attributes.Azure;
 using TEAMModelOS.SDK.DI;
 
 namespace TEAMModelOS.SDK.Models
-{
-    [CosmosDB(Database = "TEAMModelOS", Name = "Student")]
+{    
     public class SurveyRecord : CosmosEntity
     {
         public SurveyRecord() {

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/Student/VoteRecord.cs

@@ -6,8 +6,7 @@ using TEAMModelOS.SDK.Context.Attributes.Azure;
 using TEAMModelOS.SDK.DI;
 
 namespace TEAMModelOS.SDK.Models
-{
-    [CosmosDB(Database = "TEAMModelOS", Name = "Student")]
+{    
     public class VoteRecord : CosmosEntity
     {
 

+ 1 - 1
TEAMModelOS.SDK/Models/Cosmos/Teacher/Comment.cs

@@ -11,7 +11,7 @@ namespace TEAMModelOS.SDK.Models
     /// <summary>
     /// 教师评语罐头
     /// </summary>
-    [CosmosDB(Database = "TEAMModelOS", Name = "Teacher")]
+    
     public class Comment : CosmosEntity
     {
        

+ 1 - 2
TEAMModelOS.SDK/Models/Cosmos/Teacher/CoursePlan.cs

@@ -8,8 +8,7 @@ using TEAMModelOS.SDK.Context.Attributes.Azure;
 using TEAMModelOS.SDK.DI;
 
 namespace TEAMModelOS.SDK.Models
-{
-    [CosmosDB(Database = "TEAMModelOS", Name = "Teacher")]
+{    
     public class CoursePlan : CosmosEntity
     {
         public CoursePlan(){

+ 41 - 39
TEAMModelOS/Controllers/Import/ImportExerciseController.cs

@@ -29,6 +29,7 @@ using TEAMModelOS.SDK.Module.AzureBlob.Container;
 using TEAMModelOS.Services;
 using HTEXLib.Translator;
 using HTEXLib.DOCX.Models;
+using System.Collections.Concurrent;
 
 namespace TEAMModelOS.Controllers
 {
@@ -42,9 +43,9 @@ namespace TEAMModelOS.Controllers
         //  private readonly IHtexService htexService;
         private readonly AzureStorageFactory _azureStorage;
         private readonly IWebHostEnvironment _webHostEnvironment;
-        private  List<LangConfig> langConfigs { get; set; }
+        private List<LangConfig> langConfigs { get; set; }
         private readonly IHttpClientFactory _clientFactory;
-        public ImportController(   AzureStorageFactory azureStorage, IWebHostEnvironment webHostEnvironment,
+        public ImportController(AzureStorageFactory azureStorage, IWebHostEnvironment webHostEnvironment,
             PPTX2HTEXTranslator PPTX2HTEXTranslator, IHttpClientFactory clientFactory,
             DOXC2HTMLTranslator DOXC2HTMLTranslator, HTML2ITEMTranslator HTML2ITEMTranslator)
         {
@@ -68,7 +69,7 @@ namespace TEAMModelOS.Controllers
             string text = builder.ToString();
             langConfigs = text.ToObject<List<LangConfig>>();
         }
-       
+
 
         /// <summary>
         /// {"url":"https://***.blob.core.cn/xxx/1.pptx"}
@@ -100,7 +101,7 @@ namespace TEAMModelOS.Controllers
                 BlobAuth blobAuth = _azureStorage.GetBlobSasUriRead(ContainerName, BlobName);
                 var response = await _clientFactory.CreateClient().GetAsync(new Uri(blobAuth.url));
                 response.EnsureSuccessStatusCode();
-                Stream stream=  await response.Content.ReadAsStreamAsync();
+                Stream stream = await response.Content.ReadAsStreamAsync();
 
                 if (ext.ToLower() == "pptx" || ext.ToLower() == "xml")
                 {
@@ -111,7 +112,8 @@ namespace TEAMModelOS.Controllers
                 {
                     return Ok(new { index = "" });
                 }
-                else {
+                else
+                {
                     return BadRequest("不支持该文件类型的解析!");
                 }
             }
@@ -161,11 +163,12 @@ namespace TEAMModelOS.Controllers
                 string index = await PPTXTranslator(id, FileName, streamFile);
                 return Ok(new { index = index });
             }
-            else {
+            else
+            {
                 return BadRequest("type is not pptx or xml !");
             }
-            
-           
+
+
         }
 
         /// <summary>
@@ -179,16 +182,16 @@ namespace TEAMModelOS.Controllers
         /// <returns></returns>
         [HttpPost("upload-word")]
         [RequestSizeLimit(102_400_000_00)] //最大10000m左右
-        public   IActionResult UploadWord([FromForm] IFormFile file)
+        public IActionResult UploadWord([FromForm] IFormFile file)
         {
-          //  ResponseBuilder responseBuilder = new ResponseBuilder();
+            //  ResponseBuilder responseBuilder = new ResponseBuilder();
             if (!FileType.GetExtention(file.FileName).ToLower().Equals("docx"))
             {
-                return BadRequest(new Dictionary<string, object> { {"msg", "type is not docx!" },{ "code",ResponseCode.FAILED} });
+                return BadRequest(new Dictionary<string, object> { { "msg", "type is not docx!" }, { "code", ResponseCode.FAILED } });
             }
 
-            var doc= _DOXC2HTMLTranslator.Translate(file.OpenReadStream());
-           // Dictionary<string, object> model = await ImportExerciseService.UploadWord(_azureStorage, file);
+            var doc = _DOXC2HTMLTranslator.Translate(file.OpenReadStream());
+            // Dictionary<string, object> model = await ImportExerciseService.UploadWord(_azureStorage, file);
             return Ok(doc);
         }
 
@@ -198,7 +201,7 @@ namespace TEAMModelOS.Controllers
         /// <param name="request"></param>
         /// <returns></returns>
         [HttpPost("parse-html")]
-        public  IActionResult  AnalyzeHtml(JsonElement request)
+        public IActionResult AnalyzeHtml(JsonElement request)
         {
             //ResponseBuilder builder = ResponseBuilder.custom();
             Dictionary<string, object> dict = new Dictionary<string, object>();
@@ -211,8 +214,8 @@ namespace TEAMModelOS.Controllers
             bool flagLang = dict.TryGetValue("lang", out object lang);
             if (flag && htmlString != null && !string.IsNullOrEmpty(htmlString.ToString()))
             {
-                LangConfig langConfig= langConfigs.Where(x => x.Lang == lang.ToString()).FirstOrDefault();
-                var exercises= _HTML2ITEMTranslator.Translate(htmlString.ToString(), langConfig);
+                LangConfig langConfig = langConfigs.Where(x => x.Lang == lang.ToString()).FirstOrDefault();
+                var exercises = _HTML2ITEMTranslator.Translate(htmlString.ToString(), langConfig);
                 return Ok(exercises);
             }
             else
@@ -220,7 +223,7 @@ namespace TEAMModelOS.Controllers
                 return BadRequest();
             }
         }
-       
+
 
         private async Task<string> PPTXTranslator(string id, string FileName, Stream streamFile)
         {
@@ -229,27 +232,23 @@ namespace TEAMModelOS.Controllers
             HTEXLib.Htex htex = _PPTX2HTEXTranslator.Translate(streamFile);
             htex.name = FileName;
             var slides = htex.slides;
-            List<Task> tasks = new List<Task>();
-            HTEX hTEX = new HTEX() { name = FileName, size = htex.size, thumbnail = htex.thumbnail, id = shaCode };
-            Dictionary<string, string> texts = new Dictionary<string, string>();
-            List<string> shas = new List<string>();
+            List<Task<string>> tasks = new List<Task<string>>();
+            HTEXIndex index = new HTEXIndex() { name = FileName, size = htex.size, thumbnail = htex.thumbnail, id = shaCode };
+
+            List<KeyValuePair<string, string>> blobslidenames = new List<KeyValuePair<string, string>>();
             foreach (var slide in slides)
             {
-                string text = JsonHelper.ToJson(slide, ignoreNullValue: false);
-                string sha = Guid.NewGuid().ToString("N");
-                texts.Add(sha, text);
-                shas.Add(sha);
+                string json = JsonHelper.ToJson(slide, ignoreNullValue: false);
+                string guid = Guid.NewGuid().ToString("N");
+                blobslidenames.Add(new KeyValuePair<string, string>(guid, json));
             }
-            Dictionary<string, string> bloburls = new Dictionary<string, string>();
-            foreach (var key in texts.Keys)
+            ConcurrentDictionary<string, string> bloburls = new ConcurrentDictionary<string, string>();
+            
+            foreach (var key in blobslidenames)
             {
-                tasks.Add(_azureStorage.UploadFileByContainer(id, texts[key], "res", FileName + "/" + key + ".json", false)
-                    .ContinueWith((Task<AzureBlobModel> blob) =>
-                    {
-                        bloburls.Add(key, blob.Result.BlobUrl);
-                    })
-                    );
+                tasks.Add(_azureStorage.UploadFileByContainer(id, key.Value, "res", $"{FileName}/{key.Key}.json" ,  false));
             }
+
             await Task.WhenAll(tasks);
             List<Sld> slds = new List<Sld>();
             foreach (string sha in shas)
@@ -287,14 +286,15 @@ namespace TEAMModelOS.Controllers
                 dict.TryAdd(key, str);
             }
             await Task.WhenAll(tasksFiles);
-            hTEX.stores = dict;
-            hTEX.slides = slds;
-            var blob=  await _azureStorage.UploadFileByContainer(id, JsonHelper.ToJson(hTEX, ignoreNullValue: false), "res", FileName + "/" + "index.json", false);
+            index.stores = dict;
+            index.slides = slds;
+            var blob = await _azureStorage.UploadFileByContainer(id, JsonHelper.ToJson(index, ignoreNullValue: false), "res", FileName + "/" + "index.json", false);
             return System.Web.HttpUtility.UrlDecode(blob.BlobUrl, Encoding.UTF8);
         }
     }
 
-    public class HTEX {
+    public class HTEXIndex
+    {
         public string id { get; set; }
         public string version { get; set; } = "1.0.20201210";
         public string name { get; set; }
@@ -314,7 +314,8 @@ namespace TEAMModelOS.Controllers
         public string scope { get; set; }
         public int? multipleRule { get; set; }
     }
-    public class Sld {
+    public class Sld
+    {
         /// <summary>
         /// normal,普通的hte页面 single 单选题 multiple 多选题 judge 判断题 complete 填空题 subjective 问答题 compose 综合题 
         /// </summary>
@@ -333,7 +334,8 @@ namespace TEAMModelOS.Controllers
         public string thumbnail { get; set; }
     }
 
-    public class Scoring { 
+    public class Scoring
+    {
         public double score { get; set; }
         public List<string> ans { get; set; } = new List<string>();
     }

+ 1 - 15
TEAMModelOS/Controllers/xTest/BlobController.cs

@@ -85,21 +85,7 @@ namespace TEAMModelOS.Controllers.Core
             {
                 return responseBuilder.Error(ResponseCode.PARAMS_ERROR, "文件名错误").build();
             };
-        }
-
-
-        /// <summary>
-        /// 测试单个文本内容的上传
-        /// </summary>
-        /// <param name="azureBlobSASDto"></param>
-        /// <returns></returns>
-        [HttpPost("uploadText")]
-        public async Task<BaseResponse> UploadText(JsonElement request)
-        {
-            ResponseBuilder responseBuilder = new ResponseBuilder();
-            return responseBuilder.Data(await _azureStorage.UploadFileByContainer("hbcn", request.ToJsonString(), "exam", _snowflakeId.NextId() + ".json")).build();
-
-        }
+        }