SGGL_JT/SUBQHSE/WebAPI/Controllers/HSSE/ModelTestRecordController.cs

448 lines
22 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
/// <summary>
/// 模拟考试
/// </summary>
public class ModelTestRecordController : ApiController
{
#region
/// <summary>
/// 获取模拟考试列表
/// </summary>
/// <param name="projectId"></param>
/// <returns>模拟考试</returns>
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获取模拟考试详细
/// <summary>
/// 根据ID获取模拟考试详细
/// </summary>
/// <param name="modelTestRecordId"></param>
/// <returns>试卷详细</returns>
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获取试卷
/// <summary>
/// 根据TestRecordId获取试卷
/// </summary>
/// <param name="modelTestRecordId"></param>
/// <param name="pageIndex">页码</param>
/// <returns>试卷</returns>
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获取题目详细
/// <summary>
/// 根据TestRecordItemId获取试卷题目详细
/// </summary>
/// <param name="modelTestRecordItemId"></param>
/// <returns>考试人员</returns>
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
/// <summary>
/// 根据ProjectId、PersonId获取当前人试卷列表
/// </summary>
/// <param name="projectId">项目ID</param>
/// <param name="personId">人员ID</param>
/// <param name="states">状态states 0-待考1-在考2-已考null-全部)</param>
/// <param name="pageIndex">页码</param>
/// <returns>考试记录列表</returns>
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
/// <summary>
/// 获取当前试卷的答题倒计时
/// </summary>
/// <param name="modelTestRecordId"></param>
/// <returns></returns>
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
/// <summary>
/// 根据题目ID 选项考生答题
/// </summary>
/// <param name="modelTestRecordItemId">题目ID</param>
/// <param name="selectedItem">选项</param>
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
/// <summary>
/// 交卷
/// </summary>
/// <param name="modelTestRecordId">试卷ID</param>
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
/// <summary>
/// 保存TestPlan [增加、修改]
/// </summary>
/// <param name="modelTestRecord">模拟考试</param>
[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
/// <summary>
/// 开始考试
/// </summary>
/// <param name="modelTestRecordId">模拟考试ID</param>
/// <param name="personId">当前人ID</param>
/// <returns></returns>
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<Model.Training_TestTrainingItem> getTestTrainingItemList = new List<Model.Training_TestTrainingItem>();
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<Model.Training_TestTrainingItem> getTestTrainingItemALLs = new List<Model.Training_TestTrainingItem>();
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
}
}