|
@@ -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();
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|