ExamController.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. using Microsoft.AspNetCore.Authorization;
  2. using Microsoft.AspNetCore.Http;
  3. using Microsoft.AspNetCore.Mvc;
  4. using Newtonsoft.Json.Linq;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Threading.Tasks;
  9. using TEAMModelOS.Model.Core.Models;
  10. using TEAMModelOS.Model.EvaluaTion.Dtos;
  11. using TEAMModelOS.Model.EvaluaTion.Models;
  12. using TEAMModelOS.SDK.Extension.DataResult.JsonRpcRequest;
  13. using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse;
  14. using TEAMModelOS.SDK.Extension.JsonPath;
  15. using TEAMModelOS.SDK.Helper.Common.JsonHelper;
  16. using TEAMModelOS.SDK.Helper.Security.Md5Hash;
  17. using TEAMModelOS.Service.Core.Interfaces;
  18. using TEAMModelOS.Service.EvaluaTion.Interfaces;
  19. namespace TEAMModelOS.Controllers.Core
  20. {
  21. [Route("api/[controller]")]
  22. [ApiController]
  23. [Authorize]
  24. public class ExamController :BaseController
  25. {
  26. private readonly IPaperService _PaperService;
  27. private readonly IExamInfoService _examInfoService;
  28. private readonly IAnswerInfoService _answerInfoService;
  29. private readonly IItemBankService _itemBankService;
  30. private readonly IOptionService _optionService;
  31. public ExamController(IPaperService paperService, IExamInfoService examInfoService, IAnswerInfoService answerInfoService,
  32. IItemBankService itemBankService, IOptionService optionService)
  33. {
  34. _PaperService = paperService;
  35. _examInfoService = examInfoService;
  36. _answerInfoService = answerInfoService;
  37. _itemBankService = itemBankService;
  38. _optionService = optionService;
  39. }
  40. [HttpPost("SaveOrUpdateExam")]
  41. public async Task<BaseJosnRPCResponse> SaveOrUpdateExam(JosnRPCRequest<object> request)
  42. {
  43. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  44. string json = request.@params.ToString();
  45. //试卷信息
  46. string query = "$.testpaper.info"; // we should get a list of all titles
  47. //选项信息
  48. string queryOption = "$.testpaper.item[*].option[*]";
  49. //题库信息
  50. string queryItem = "$.testpaper.item[*]";
  51. //考试信息
  52. string queryExam = "$.testpaper.exercise[*].info[*]";
  53. //学生学号信息
  54. //string queryStuId = "$.testpaper.exercise[*].member[*].info";
  55. //作答信息
  56. string queryAnswer = "$.testpaper.exercise[*].member[*]";
  57. //RowKey 学校某次考试唯一标识
  58. string RowKey = "";
  59. JObject parsedJson = JObject.Parse(json);
  60. JsonPathContext context = new JsonPathContext
  61. { ValueSystem = new JsonNetValueSystem() };
  62. Paper paper = new Paper();
  63. ItemBank item = null;
  64. Option option = null;
  65. ExamInfo examInfo = null;
  66. AnswerInfo answerInfo = null;
  67. //试卷信息
  68. List<dynamic> papers = context.SelectNodes(parsedJson,
  69. query).Select(node => node.Value).ToList();
  70. List<TestPaperInfo> paperInfo = papers.ToJson().FromJson<List<TestPaperInfo>>();
  71. List<Paper> paperList = new List<Paper>();
  72. paperInfo.ForEach( p => {
  73. paper.Name = p.Name;
  74. paper.Subject = p.Subject;
  75. RowKey = Md5Hash.Encrypt(p.Name +"-"+ p.Subject);
  76. paper.RowKey = RowKey;
  77. paperList.Add(paper);
  78. });
  79. //题库信息
  80. List<dynamic> itemBanks = context.SelectNodes(parsedJson,
  81. queryItem).Select(node => node.Value).ToList();
  82. List<dynamic> options = context.SelectNodes(parsedJson,
  83. queryOption).Select(node => node.Value).ToList();
  84. List<Item> ItemInfo = itemBanks.ToJson().FromJson<List<Item>>();
  85. List<ItemOption> optionInfo = options.ToJson().FromJson<List<ItemOption>>();
  86. List<ItemBank> itemBanksList = new List<ItemBank>();
  87. List<Option> optionsList = new List<Option>();
  88. ItemInfo.ForEach(i => {
  89. string type = i.Type;
  90. item = new ItemBank();
  91. item.RowKey = RowKey;
  92. item.Index = i.Itemindex;
  93. item.Question = i.Question;
  94. item.Type = type;
  95. //i.TryGetValue();
  96. item.Objective = i.Objective;
  97. item.Point = i.Point;
  98. item.Answer = i.Answer;
  99. item.ConceptSubject = i.Concept_subject;
  100. item.ConceptArea = i.Concept_area;
  101. item.Concept = i.Concept;
  102. itemBanksList.Add(item);
  103. //处理选项数据
  104. if (type.Equals("0") || type.Equals("1")) {
  105. optionInfo.ForEach(p => {
  106. option = new Option();
  107. option.RowKey = RowKey;
  108. option.Data = p.Data;
  109. option.ItemId = i.Itemindex;
  110. optionsList.Add(option);
  111. //new Option().data = p.get();
  112. });
  113. }
  114. });
  115. //作答记录
  116. List<dynamic> exams = context.SelectNodes(parsedJson,
  117. queryExam).Select(node => node.Value).ToList();
  118. List<ExerciseInfo> membersInfo = itemBanks.ToJson().FromJson<List<ExerciseInfo>>();
  119. List<ExamInfo> examInfosList = new List<ExamInfo>();
  120. membersInfo.ForEach(p => {
  121. examInfo = new ExamInfo();
  122. examInfo.RowKey = RowKey;
  123. examInfo.ExName = p.Ex_name;
  124. examInfo.ExTime = p.Ex_time;
  125. examInfo.CouseName = p.Course_name;
  126. examInfo.StuCount = p.Stucount;
  127. examInfosList.Add(examInfo);
  128. });
  129. //学生得分记录
  130. List<dynamic> answers = context.SelectNodes(parsedJson,
  131. queryAnswer).Select(node => node.Value).ToList();
  132. List<MemberAnswer> memberAnswers = itemBanks.ToJson().FromJson<List<MemberAnswer>>();
  133. List<AnswerInfo> answerInfos = new List<AnswerInfo>();
  134. memberAnswers.ForEach(p => {
  135. answerInfo = new AnswerInfo() {
  136. RowKey = RowKey,
  137. Index = p.Itemindex,
  138. Selection = p.Selection,
  139. Point = p.Point
  140. //exId =
  141. //studentId =
  142. };
  143. answerInfos.Add(answerInfo);
  144. });
  145. await _PaperService.SaveOrUpdate(paperList);
  146. await _itemBankService.SaveOrUpdateAll(itemBanksList);
  147. await _optionService.SaveOrUpdateAll(optionsList);
  148. await _examInfoService.SaveOrUpdateAll(examInfosList);
  149. await _answerInfoService.SaveOrUpdateAll(answerInfos);
  150. return builder.Data("over").build();
  151. //SchoolGrade data = await _GradeSeservice.SaveOrUpdate<SchoolGrade>(request.@params);
  152. //return builder.Data(data).build();
  153. }
  154. }
  155. }