CrazyIter_Bin 1 年之前
父節點
當前提交
aacf4556f6

+ 153 - 0
TEAMModelOS.SDK/Models/Cosmos/School/ExamImport.cs

@@ -0,0 +1,153 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace TEAMModelOS.SDK.Models.Cosmos.School
+{
+
+    /// <summary>
+    /// 双向细目表导入
+    /// </summary>
+    public class ExamImport : CosmosEntity
+    {
+        /// <summary>
+        /// id:根据名称不重复的前台生成UUID,
+        /// code:ExamImport-hbcn
+        /// pk:ExamImport
+        /// 评测名称
+        /// </summary>
+        public string name { get; set; }
+
+        /// <summary>
+        /// 评测类型 期末,期中,季考,月考,周考,测验,练习,作业,日常,课中
+        /// </summary>
+        public string type { get; set; }
+        /// <summary>
+        /// 学校id
+        /// </summary>
+        public string school { get; set; }
+        /// <summary>
+        /// 考试时间
+        /// </summary>
+        public long time { get; set; }
+        /// <summary>
+        /// 学年
+        /// </summary>
+        public int year { get; set; }
+        /// <summary>
+        /// 学期
+        /// </summary>
+        public string semesterId { get; set; }
+        /// <summary>
+        /// 学段
+        /// </summary>
+        public string periodId { get; set; }
+        /// <summary>
+        /// 科目
+        /// </summary>
+        public List<ExamImportSubject> subjects { get; set; }= new List<ExamImportSubject>();
+
+    }
+    /// <summary>
+    /// 科目
+    /// </summary>
+    public class ExamImportSubject
+    {
+        /// <summary>
+        /// 科目id 
+        /// </summary>
+        public string id { get; set; }
+        /// <summary>
+        /// 科目名称
+        /// </summary>
+        public string name { get; set; }
+        /// <summary>
+        /// 配分
+        /// </summary>
+       public List<ExamImportItem> items { get; set; }= new List<ExamImportItem>();
+        /// <summary>
+        /// 学生成绩
+        /// </summary>
+        public List<ExamImportStudent> students { get; set; }= new List<ExamImportStudent> ();
+
+    }
+
+    public class ExamImportStudent {
+    
+        /// <summary>
+        /// 学生id
+        /// </summary>
+        public string id { get; set; }
+        /// <summary>
+        /// 姓名
+        /// </summary>
+        public string name { get; set; }
+        /// <summary>
+        /// 班级id
+        /// </summary>
+        public string classId { get; set; }
+       
+        /// <summary>
+        /// 总分
+        /// </summary>
+        public double totalScore { get; set; }
+        /// <summary>
+        /// 小题得分,下标0顺序开始 第一题....N
+        /// </summary>
+        public List<double> scores { get; set; }
+    }
+
+    /// <summary>
+    /// 配分
+    /// </summary>
+    public class ExamImportItem { 
+        /// <summary>
+        /// 从数组下标0开始
+        /// </summary>
+        public int index { get; set; }
+        /// <summary>
+        /// 认知层次
+        /// </summary>
+        public string filed { get; set; }
+        /// <summary>
+        /// 知识点
+        /// </summary>
+        public HashSet<string> point { get; set; } = new HashSet<string>();
+        //compose--综合题,single--单选题,multiple--多选题,judge--判断题,complete--填空题,subjective--问答题,connector--连线题,correct--改错题
+        public string type { get; set; }
+        /// <summary>
+        /// 配分总分
+        /// </summary>
+        public double score { get; set; }
+    }
+
+    /// <summary>
+    /// 双向细目表 前端导入结构
+    /// </summary>
+    public class ImportExam {
+        [Required(ErrorMessage = "评测必填")]
+        public string name { get; set; }
+        [Required(ErrorMessage = "时间必填")]
+        public string time { get; set; }
+        [Required(ErrorMessage = "类型必填")]
+        public string type { get; set; }
+        [Required(ErrorMessage = "学段必填")]
+        public string periodId { get; set; }
+        [Required(ErrorMessage = "学校必填")]
+        public string school { get; set; }
+        public List<ImportExamSubject> subjects { get; set; } = new List<ImportExamSubject>();
+
+    }
+    /// <summary>
+    /// 科目信息,前端导入结构
+    /// </summary>
+    public class ImportExamSubject
+    {
+        public string name { get; set; }
+        public List<ExamImportItem> items { get; set; } = new List<ExamImportItem>();
+        public List<ExamImportStudent> students { get; set; } = new List<ExamImportStudent>();
+    }
+}

+ 81 - 0
TEAMModelOS/Controllers/School/ImportExamController.cs

@@ -0,0 +1,81 @@
+using HTEXLib.COMM.Helpers;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Options;
+using System.Text.Json;
+using System.Threading.Tasks;
+using TEAMModelOS.Filter;
+using TEAMModelOS.Models;
+using TEAMModelOS.SDK;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.SDK.Extension;
+using TEAMModelOS.SDK.Models.Cosmos.School;
+
+namespace TEAMModelOS.Controllers.School
+{
+    [ProducesResponseType(StatusCodes.Status200OK)]
+    [ProducesResponseType(StatusCodes.Status400BadRequest)]
+
+    [Route("school/exam")]
+    [ApiController]
+    public class ImportExamController: ControllerBase
+    {
+
+
+        public IWebHostEnvironment _environment { get; set; }
+        private readonly AzureCosmosFactory _azureCosmos;
+        private readonly SnowflakeId _snowflakeId;
+        private readonly AzureServiceBusFactory _serviceBus;
+        private readonly DingDing _dingDing;
+        private readonly Option _option;
+        private readonly AzureStorageFactory _azureStorage;
+        private readonly AzureRedisFactory _azureRedis;
+        public IConfiguration _configuration { get; set; }
+        private readonly CoreAPIHttpService _coreAPIHttpService;
+        private readonly HttpTrigger _httpTrigger;
+        public ImportExamController(HttpTrigger httpTrigger, CoreAPIHttpService coreAPIHttpService, AzureCosmosFactory azureCosmos, AzureServiceBusFactory serviceBus, SnowflakeId snowflakeId, DingDing dingDing,
+           IOptionsSnapshot<Option> option, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis, IConfiguration configuration, IWebHostEnvironment env)
+        {
+            _environment = env;
+            _coreAPIHttpService = coreAPIHttpService;
+            _azureCosmos = azureCosmos;
+            _serviceBus = serviceBus;
+            _snowflakeId = snowflakeId;
+            _dingDing = dingDing;
+            _option = option?.Value;
+            _azureStorage = azureStorage;
+            _azureRedis = azureRedis;
+            _configuration = configuration;
+            _httpTrigger = httpTrigger;
+        }
+
+        [ProducesDefaultResponseType]
+        [AuthToken(Roles = "teacher,admin")]
+        [HttpPost("import-check")]
+
+
+#if !DEBUG
+        [Authorize(Roles = "IES")]
+#endif
+        public async Task<IActionResult> ImportCheck(JsonElement json) {
+
+            var importExam = json.ToObject<ImportExam>();
+
+            var validData= importExam.Valid();
+
+
+            string sql = $"select value c from c where c.name ='{importExam.name}'";
+            var result =  await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetList<ExamImport>(sql,$"ExamImport-{importExam.school}",pageSize:1);
+            ExamImport examImport = null;
+            if (string.IsNullOrEmpty(result.continuationToken)) { 
+                
+            }
+            if (result.list.IsNotEmpty()) {
+                examImport = result.list[0];
+            }
+            return Ok();
+        }
+    }
+}