using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using BLL; namespace WebAPI.Controllers { /// /// 模拟考试 /// public class ModelTestRecordController : ApiController { #region 获取模拟考试列表 /// /// 获取模拟考试列表 /// /// /// 模拟考试 public Model.ResponeData getModelTestRecord(string projectId) { var responeData = new Model.ResponeData(); try { responeData.data = APIModelTestRecordService.getModelTestRecord(projectId); } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } #endregion #region 根据ID获取模拟考试详细 /// /// 根据ID获取模拟考试详细 /// /// /// 试卷详细 public Model.ResponeData getModelTestRecordByTestRecordId(string modelTestRecordId) { var responeData = new Model.ResponeData(); try { responeData.data = APIModelTestRecordService.getModelTestRecordByTestRecordId(modelTestRecordId); } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } #endregion #region 根据TestRecordId获取试卷 /// /// 根据TestRecordId获取试卷 /// /// /// 页码 /// 试卷 public Model.ResponeData getModelTestRecordItemListByModelTestRecordId(string modelTestRecordId, int pageIndex) { var responeData = new Model.ResponeData(); try { var getDataLists = APIModelTestRecordService.getModelTestRecordItemListByModelTestRecordId(modelTestRecordId, pageIndex); int pageCount = APIModelTestRecordService.getModelTestRecordItemCount; responeData.data = new { pageCount, getDataLists }; } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } #endregion #region 根据TestRecordItemId获取题目详细 /// /// 根据TestRecordItemId获取试卷题目详细 /// /// /// 考试人员 public Model.ResponeData getModelTestRecordItemByModelTestRecordItemId(string modelTestRecordItemId) { var responeData = new Model.ResponeData(); try { responeData.data = APIModelTestRecordService.getModelTestRecordItemByModelTestRecordItemId(modelTestRecordItemId); } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } #endregion #region 获取当前人试卷列表 /// /// 根据ProjectId、PersonId获取当前人试卷列表 /// /// 项目ID /// 人员ID /// 状态(states 0-待考;1-在考;2-已考;null-全部) /// 页码 /// 考试记录列表 public Model.ResponeData getModelTrainingTestRecordListByProjectIdPersonId(string projectId, string personId, string states, int pageIndex) { var responeData = new Model.ResponeData(); try { personId = PersonService.GetPersonIdByProjectIdUserId(projectId, personId); var getDataLists = APIModelTestRecordService.getModelTrainingTestRecordListByProjectIdPersonId(projectId, personId, states, pageIndex); int pageCount = APIModelTestRecordService.getModelTrainingTestRecordCount; responeData.data = new { pageCount, getDataLists }; } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } #endregion #region 获取当前试卷的答题倒计时 /// /// 获取当前试卷的答题倒计时 /// /// /// public Model.ResponeData getTestTimesByTestRecordId(string modelTestRecordId) { var responeData = new Model.ResponeData(); try { int mTime = 0; using (Model.SUBQHSEDB db = new Model.SUBQHSEDB(Funs.ConnString)) { var getModelTest = db.Training_ModelTestRecord.FirstOrDefault(e => e.ModelTestRecordId == modelTestRecordId); if (getModelTest != null) { DateTime startTime = DateTime.Now; if (getModelTest.TestStartTime.HasValue) { startTime = getModelTest.TestStartTime.Value; } else { getModelTest.TestStartTime = startTime; db.SubmitChanges(); } int duration = getModelTest.Duration ?? 90; mTime = Convert.ToInt32((getModelTest.TestStartTime.Value.AddMinutes(duration) - DateTime.Now).TotalSeconds); } } responeData.data = new { mTime }; } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } #endregion #region 根据题目ID 选项考生答题 /// /// 根据题目ID 选项考生答题 /// /// 题目ID /// 选项 public Model.ResponeData getModelTestItemAnswerBySelectedItem(string modelTestRecordItemId, string selectedItem) { var responeData = new Model.ResponeData(); try { var getItem = ModelTestRecordItemService.GetModelTestRecordItemModelTestRecordItemId(modelTestRecordItemId); if (getItem != null) { //更新没有结束时间且超时的考试记录 int closeCount = ModelTestRecordService.UpdateTestEndTimeNull(getItem.ModelTestRecordId); if (closeCount > 0) { responeData.code = 2; responeData.message = "本次考试已结束,系统自动交卷!"; } else { APIModelTestRecordService.getModelTestRecordItemAnswerBySelectedItem(modelTestRecordItemId, selectedItem); } } else { responeData.code = 0; responeData.message = "无法找到试题!"; } } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } #endregion #region 交卷 /// /// 交卷 /// /// 试卷ID public Model.ResponeData getSubmitModelTestRecord(string modelTestRecordId) { var responeData = new Model.ResponeData(); try { ////考试分数 decimal getTestScores = APIModelTestRecordService.getSubmitModelTestRecord(modelTestRecordId); responeData.message = "您的成绩为:【" + getTestScores.ToString() + "】。"; responeData.data = new { getTestScores }; } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } #endregion #region 保存模拟考试设置 /// /// 保存TestPlan [增加、修改] /// /// 模拟考试 [HttpPost] public Model.ResponeData SaveModelTestRecord([FromBody] Model.ModelTestRecordItem modelTestRecord) { var responeData = new Model.ResponeData(); try { var getPerson = PersonService.GetPersonByProjectIdUserId(modelTestRecord.ProjectId, modelTestRecord.TestManId); if (getPerson != null) { modelTestRecord.TestManId = getPerson.PersonId; responeData.message = APIModelTestRecordService.SaveModelTestRecord(modelTestRecord); } else { responeData.message = "当前人不在人员信息中!"; } if (!string.IsNullOrEmpty(responeData.message)) { responeData.code = 2; } } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; } return responeData; } #endregion #region 开始考试 /// /// 开始考试 /// /// 模拟考试ID /// 当前人ID /// public Model.ResponeData getStartModelTest(string modelTestRecordId, string personId) { var responeData = new Model.ResponeData(); try { using (Model.SUBQHSEDB db = new Model.SUBQHSEDB(Funs.ConnString)) { var getModelTest = db.Training_ModelTestRecord.FirstOrDefault(e => e.ModelTestRecordId == modelTestRecordId && !e.TestEndTime.HasValue); if (getModelTest != null) { string projectId = getModelTest.ProjectId; var person = PersonService.GetPersonByProjectIdUserId(projectId, personId); if (person != null && getModelTest.TestManId == person.PersonId) { if (!getModelTest.TestStartTime.HasValue) { getModelTest.TestStartTime = DateTime.Now; db.SubmitChanges(); } var item = db.Training_ModelTestRecordItem.FirstOrDefault(x => x.ModelTestRecordId == modelTestRecordId); if (item == null) { List getTestTrainingItemList = new List(); var testPlanTrainings = from x in db.Training_ModelTestRecordTraining where x.ModelTestRecordId == getModelTest.ModelTestRecordId select x; //// 计划考试中单选、多选、判断题总数 int sumTestType1Count = testPlanTrainings.Sum(x => x.TestType1Count) ?? 0; int sumTestType2Count = testPlanTrainings.Sum(x => x.TestType2Count) ?? 0; int sumTestType3Count = testPlanTrainings.Sum(x => x.TestType3Count) ?? 0; ////获取类型下适合岗位试题集合 List getTestTrainingItemALLs = new List(); if (!string.IsNullOrEmpty(projectId)) { getTestTrainingItemALLs = (from x in db.Training_TestTrainingItem join y in db.Training_TestTraining on x.TrainingId equals y.TrainingId where y.ProjectId.Contains(projectId) && x.TrainingId != null && (x.WorkPostIds == null || (x.WorkPostIds.Contains(person.WorkPostId) && person.WorkPostId != null)) select x).ToList(); } else { getTestTrainingItemALLs = (from x in db.Training_TestTrainingItem join y in db.Training_TestTraining on x.TrainingId equals y.TrainingId where y.ProjectId == null && x.TrainingId != null && (x.WorkPostIds == null || (x.WorkPostIds.Contains(person.WorkPostId) && person.WorkPostId != null)) select x).ToList(); } foreach (var itemT in testPlanTrainings) { //// 获取类型下的题目 var getTestTrainingItems = getTestTrainingItemALLs.Where(x => x.TrainingId == itemT.TrainingId).ToList(); if (getTestTrainingItems.Count() > 0) { ////单选题 var getSItem = getTestTrainingItems.Where(x => x.TestType == "1").OrderBy(x => Guid.NewGuid()).Take(itemT.TestType1Count ?? 1); if (getSItem.Count() > 0) { getTestTrainingItemList.AddRange(getSItem); } ///多选题 var getMItem = getTestTrainingItems.Where(x => x.TestType == "2").OrderBy(x => Guid.NewGuid()).Take(itemT.TestType2Count ?? 1); if (getMItem.Count() > 0) { getTestTrainingItemList.AddRange(getMItem); } ///判断题 var getJItem = getTestTrainingItems.Where(x => x.TestType == "3").OrderBy(x => Guid.NewGuid()).Take(itemT.TestType3Count ?? 1); if (getJItem.Count() > 0) { getTestTrainingItemList.AddRange(getJItem); } } } //// 获取得到的单选题、多选题、判断题 数量 int getDiffTestType1Count = sumTestType1Count - getTestTrainingItemList.Where(x => x.TestType == "1").Count(); int getDiffTestType2Count = sumTestType2Count - getTestTrainingItemList.Where(x => x.TestType == "2").Count(); int getDiffTestType3Count = sumTestType3Count - getTestTrainingItemList.Where(x => x.TestType == "3").Count(); if (getDiffTestType1Count > 0 || getDiffTestType2Count > 0 || getDiffTestType3Count > 0) { var getTestTrainingItemNulls = getTestTrainingItemALLs.Where(x => x.WorkPostIds == null).ToList(); if (getTestTrainingItemNulls.Count() > 0) { //// 通用且未选择的题目 var getTestTrainingItemDiffs = getTestTrainingItemNulls.Except(getTestTrainingItemList).ToList(); //// 单选题 if (getDiffTestType1Count > 0) { var getSItemD = getTestTrainingItemDiffs.Where(x => x.TestType == "1").OrderBy(x => Guid.NewGuid()).Take(getDiffTestType1Count); if (getSItemD.Count() > 0) { getTestTrainingItemList.AddRange(getSItemD); } } //// 多选题 if (getDiffTestType2Count > 0) { var getMItemD = getTestTrainingItemDiffs.Where(x => x.TestType == "2").OrderBy(x => Guid.NewGuid()).Take(getDiffTestType2Count); if (getMItemD.Count() > 0) { getTestTrainingItemList.AddRange(getMItemD); } } //// 判断题 if (getDiffTestType3Count > 0) { var getJItemD = getTestTrainingItemDiffs.Where(x => x.TestType == "3").OrderBy(x => Guid.NewGuid()).Take(getDiffTestType3Count); if (getJItemD.Count() > 0) { getTestTrainingItemList.AddRange(getJItemD); } } } } if (getTestTrainingItemList.Count() > 0) { string lang = Const.Languages_Chinese; if (!string.IsNullOrEmpty(person.Languages)) { lang = person.Languages; } var getItems = from x in getTestTrainingItemList select new Model.Training_ModelTestRecordItem { ModelTestRecordItemId = SQLHelper.GetNewID(), ModelTestRecordId = getModelTest.ModelTestRecordId, TrainingItemName = x.TrainingItemName, TrainingItemCode = x.TrainingItemCode, Abstracts = (lang == Const.Languages_English ? x.AbstractsEng : (lang == Const.Languages_Russian ? x.AbstractsRussian : x.Abstracts)), AttachUrl = x.AttachUrl, TestType = x.TestType, AItem = (lang == Const.Languages_English ? x.AItemEng : (lang == Const.Languages_Russian ? x.AItemRussian : x.AItem)), BItem = (lang == Const.Languages_English ? x.BItemEng : (lang == Const.Languages_Russian ? x.BItemRussian : x.BItem)), CItem = (lang == Const.Languages_English ? x.CItemEng : (lang == Const.Languages_Russian ? x.CItemRussian : x.CItem)), DItem = (lang == Const.Languages_English ? x.DItemEng : (lang == Const.Languages_Russian ? x.DItemRussian : x.DItem)), EItem = (lang == Const.Languages_English ? x.EItemEng : (lang == Const.Languages_Russian ? x.EItemRussian : x.EItem)), AnswerItems = x.AnswerItems, Score = x.TestType == "1" ? getModelTest.SValue : (x.TestType == "2" ? getModelTest.MValue : getModelTest.JValue), }; db.Training_ModelTestRecordItem.InsertAllOnSubmit(getItems); db.SubmitChanges(); } } } } responeData.data = new { modelTestRecordId }; } } catch (Exception ex) { responeData.code = 0; responeData.message = ex.Message; ErrLogInfo.WriteLog(ex, "WX接口-开始模拟考试", "ModelTestRecordController.getStartModelTest"); } return responeData; } #endregion } }