Jelajahi Sumber

实体调整

zhouj1203@hotmail.com 6 tahun lalu
induk
melakukan
888c6c21dd

+ 1 - 1
TEAMModelOS.Model/Evaluation/Models/AnswerInfo.cs

@@ -7,7 +7,7 @@ using TEAMModelOS.SDK.Context.Attributes.Azure;
 
 namespace TEAMModelOS.Model.EvaluaTion.Models
 {
-    [TableSpace(Name = "Core")]
+    [TableSpace(Name = "Evaluation")]
     [MessagePackObject(keyAsPropertyName: true)]
     public class AnswerInfo : TableEntity
     {

+ 43 - 0
TEAMModelOS.Model/Evaluation/Models/Evaluating.cs

@@ -0,0 +1,43 @@
+using MessagePack;
+using Microsoft.WindowsAzure.Storage.Table;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using TEAMModelOS.SDK.Context.Attributes.Azure;
+
+namespace TEAMModelOS.Model.Evaluation.Models
+{
+    [TableSpace(Name = "Evaluation")]
+    [MessagePackObject(keyAsPropertyName: true)]
+    public class Evaluating: TableEntity
+    {
+        /// <summary>
+        /// 题库集合
+        /// </summary>
+        public string[] ItemIds { get; set; }
+        /// <summary>
+        /// 评测名称
+        /// </summary>
+        public string Name { get; set; }
+        /// <summary>
+        /// 评测科目
+        /// </summary>
+        public string Subject { get; set; }
+        /// <summary>
+        /// 考试情景
+        /// </summary>
+        public string Scene { get; set; }
+        /// <summary>
+        /// 评测类型
+        /// </summary>
+        public string Type { get; set; }
+        /// <summary>
+        /// 评测对象
+        /// </summary>
+        public string Target { get; set; }
+        /// <summary>
+        /// 评测排定
+        /// </summary>
+        public string Schedule { get; set; }
+    }
+}

+ 1 - 1
TEAMModelOS.Model/Evaluation/Models/ExamInfo.cs

@@ -7,7 +7,7 @@ using TEAMModelOS.SDK.Context.Attributes.Azure;
 
 namespace TEAMModelOS.Model.EvaluaTion.Models
 {
-    [TableSpace(Name = "Core")]
+    [TableSpace(Name = "Evaluation")]
     [MessagePackObject(keyAsPropertyName: true)]
     public class ExamInfo : TableEntity
     {

+ 1 - 1
TEAMModelOS.Model/Evaluation/Models/ItemBank.cs

@@ -7,7 +7,7 @@ using TEAMModelOS.SDK.Context.Attributes.Azure;
 
 namespace TEAMModelOS.Model.EvaluaTion.Models
 {
-    [TableSpace(Name = "Core")]
+    [TableSpace(Name = "Evaluation")]
     [MessagePackObject(keyAsPropertyName: true)]
     public class ItemBank : TableEntity
     {

+ 1 - 1
TEAMModelOS.Model/Evaluation/Models/Option.cs

@@ -8,7 +8,7 @@ using TEAMModelOS.SDK.Context.Attributes.Azure;
 namespace TEAMModelOS.Model.EvaluaTion.Models
 {
 
-    [TableSpace(Name = "Core")]
+    [TableSpace(Name = "Evaluation")]
     [MessagePackObject(keyAsPropertyName: true)]
     /// <summary>
     /// 选项信息

+ 1 - 1
TEAMModelOS.Model/Evaluation/Models/Paper.cs

@@ -7,7 +7,7 @@ using TEAMModelOS.SDK.Context.Attributes.Azure;
 
 namespace TEAMModelOS.Model.EvaluaTion.Models
 {
-    [TableSpace(Name = "Core")]
+    [TableSpace(Name = "Evaluation")]
     [MessagePackObject(keyAsPropertyName: true)]
     public class Paper: TableEntity
     {

+ 4 - 2
TEAMModelOS.Model/Evaluation/Models/TestPaper.cs

@@ -1,17 +1,19 @@
 using System;
 using System.Collections.Generic;
 using System.Text;
+using TEAMModelOS.SDK.Context.Attributes.Azure;
 
 namespace TEAMModelOS.Model.Evaluation.Models
 {
     public class TestPaper
     {
         public string id { get; set; }
+        [PartitionKey]
         public string Name { get; set; }
         /// <summary>
-        /// 题目ID集合
+        /// 题目ID
         /// </summary>
-        public string[] ItemIds { get; set; }
+        public string ItemId { get; set; }
         /// <summary>
         /// 题序(试卷排版顺序)
         /// </summary>

+ 165 - 0
TEAMModelOS/Controllers/Evaluation/ExamController.cs

@@ -0,0 +1,165 @@
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using TEAMModelOS.Model.Core.Models;
+using TEAMModelOS.Model.EvaluaTion.Dtos;
+using TEAMModelOS.Model.EvaluaTion.Models;
+using TEAMModelOS.SDK.Extension.DataResult.JsonRpcRequest;
+using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse;
+using TEAMModelOS.SDK.Extension.JsonPath;
+using TEAMModelOS.SDK.Helper.Common.JsonHelper;
+using TEAMModelOS.SDK.Helper.Security.Md5Hash;
+using TEAMModelOS.Service.Core.Interfaces;
+using TEAMModelOS.Service.EvaluaTion.Interfaces;
+
+namespace TEAMModelOS.Controllers.Core
+{
+    [Route("api/[controller]")]
+    [ApiController]
+    [Authorize]
+    public class ExamController :BaseController
+    {
+        private readonly IPaperService _PaperService;
+        private readonly IExamInfoService _examInfoService;
+        private readonly IAnswerInfoService _answerInfoService;
+        private readonly IItemBankService _itemBankService;
+        private readonly IOptionService _optionService;
+        public ExamController(IPaperService paperService, IExamInfoService examInfoService, IAnswerInfoService answerInfoService,
+            IItemBankService itemBankService, IOptionService optionService)
+        {
+            _PaperService = paperService;
+            _examInfoService = examInfoService;
+            _answerInfoService = answerInfoService;
+            _itemBankService = itemBankService;
+            _optionService = optionService;
+        }
+       
+
+        [HttpPost("SaveOrUpdateExam")]
+        public async Task<BaseJosnRPCResponse> SaveOrUpdateExam(JosnRPCRequest<object> request)
+        {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            string json = request.@params.ToString();
+            //试卷信息
+            string query = "$.testpaper.info"; // we should get a list of all titles
+            //选项信息
+            string queryOption = "$.testpaper.item[*].option[*]";
+            //题库信息
+            string queryItem = "$.testpaper.item[*]";
+            //考试信息
+            string queryExam = "$.testpaper.exercise[*].info[*]";
+            //学生学号信息
+            //string queryStuId = "$.testpaper.exercise[*].member[*].info";
+            //作答信息
+            string queryAnswer = "$.testpaper.exercise[*].member[*]";
+            //RowKey 学校某次考试唯一标识 
+            string RowKey = "";
+            JObject parsedJson = JObject.Parse(json);
+            JsonPathContext context = new JsonPathContext
+            { ValueSystem = new JsonNetValueSystem() };
+            Paper paper = new Paper();
+            ItemBank item = null;
+            Option option = null;
+            ExamInfo examInfo = null;
+            AnswerInfo answerInfo = null;
+            //试卷信息
+            List<dynamic> papers = context.SelectNodes(parsedJson,
+                    query).Select(node => node.Value).ToList();
+            List<TestPaperInfo> paperInfo = papers.ToJson().FromJson<List<TestPaperInfo>>();
+            List<Paper> paperList = new List<Paper>();
+            paperInfo.ForEach( p => {
+                paper.Name = p.Name;
+                paper.Subject = p.Subject;
+                RowKey = Md5Hash.Encrypt(p.Name +"-"+ p.Subject);
+                paper.RowKey = RowKey;
+                paperList.Add(paper);
+            });
+   
+            //题库信息
+            List<dynamic> itemBanks = context.SelectNodes(parsedJson,
+                    queryItem).Select(node => node.Value).ToList();
+            List<dynamic> options = context.SelectNodes(parsedJson,
+                    queryOption).Select(node => node.Value).ToList();
+            List<Item> ItemInfo = itemBanks.ToJson().FromJson<List<Item>>();
+            List<ItemOption> optionInfo = options.ToJson().FromJson<List<ItemOption>>();
+            List<ItemBank> itemBanksList = new List<ItemBank>();
+            List<Option> optionsList = new List<Option>();
+            ItemInfo.ForEach(i => {
+                string type = i.Type;
+                item = new ItemBank();
+                item.RowKey = RowKey;
+                item.Index = i.Itemindex;
+
+                item.Question = i.Question;
+                item.Type = type;
+                //i.TryGetValue();
+                item.Objective = i.Objective;
+                item.Point = i.Point;
+                item.Answer = i.Answer;
+                item.ConceptSubject = i.Concept_subject;
+                item.ConceptArea = i.Concept_area;
+                item.Concept = i.Concept;
+                itemBanksList.Add(item);
+                //处理选项数据
+                if (type.Equals("0") || type.Equals("1")) {
+                    optionInfo.ForEach(p => {
+                        option = new Option();
+                        option.RowKey = RowKey;
+                        option.Data = p.Data;
+                        option.ItemId = i.Itemindex;
+                        optionsList.Add(option);
+                        //new Option().data = p.get();
+                    });
+                }
+              
+            });
+
+            //作答记录
+            List<dynamic> exams = context.SelectNodes(parsedJson,
+                    queryExam).Select(node => node.Value).ToList();
+            List<ExerciseInfo> membersInfo = itemBanks.ToJson().FromJson<List<ExerciseInfo>>();
+            List<ExamInfo> examInfosList = new List<ExamInfo>();
+            membersInfo.ForEach(p => {
+                examInfo = new ExamInfo();
+                examInfo.RowKey = RowKey;
+                examInfo.ExName = p.Ex_name;
+                examInfo.ExTime = p.Ex_time;
+                examInfo.CouseName = p.Course_name;
+                examInfo.StuCount = p.Stucount;
+                examInfosList.Add(examInfo);
+            });
+            //学生得分记录
+            List<dynamic> answers = context.SelectNodes(parsedJson,
+                    queryAnswer).Select(node => node.Value).ToList();
+            List<MemberAnswer> memberAnswers = itemBanks.ToJson().FromJson<List<MemberAnswer>>();
+            List<AnswerInfo> answerInfos = new List<AnswerInfo>();
+            memberAnswers.ForEach(p => {
+
+                answerInfo = new AnswerInfo() {
+                    RowKey = RowKey,
+                    Index = p.Itemindex,
+                    Selection = p.Selection,
+                    Point = p.Point
+                    
+                    //exId = 
+                    //studentId =
+                };
+                answerInfos.Add(answerInfo);
+            });
+            await _PaperService.SaveOrUpdate(paperList);
+            await _itemBankService.SaveOrUpdateAll(itemBanksList);
+            await _optionService.SaveOrUpdateAll(optionsList);
+            await _examInfoService.SaveOrUpdateAll(examInfosList);
+            await _answerInfoService.SaveOrUpdateAll(answerInfos);
+            return builder.Data("over").build();
+            //SchoolGrade data = await _GradeSeservice.SaveOrUpdate<SchoolGrade>(request.@params);
+            //return builder.Data(data).build();
+
+        }
+    }
+}