ChengDa_English/SGGL/BLL/API/HSSE/APITestPlanService.cs

599 lines
31 KiB
C#
Raw Normal View History

2022-03-15 17:36:38 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using EmitMapper;
using EmitMapper.MappingConfiguration;
namespace BLL
{
/// <summary>
/// 考试计划
/// </summary>
public static class APITestPlanService
{
#region projectIdstates获取考试计划列表
/// <summary>
/// 根据projectId、states获取考试计划列表
/// </summary>
/// <param name="projectId">项目ID</param>
/// <param name="states">状态0-待提交1-已发布2-考试中3考试结束</param>
/// <returns></returns>
public static List<Model.TestPlanItem> getTestPlanListByProjectIdStates(string projectId, string states)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
2022-12-20 09:32:32 +08:00
if (string.IsNullOrEmpty(projectId))
{
var getDataLists = (from x in db.Training_TestPlan
where x.ProjectId ==null && (x.States == states || states == null)
orderby x.TestStartTime descending
select new Model.TestPlanItem
{
TestPlanId = x.TestPlanId,
TestPlanCode = x.PlanCode,
TestPlanName = x.PlanName,
ProjectId = x.ProjectId,
DepartIds = x.DepartIds,
DepartNames = WorkPostService.getDepartNamesByIds(x.DepartIds),
TestPlanManId = x.PlanManId,
TestPlanManName = db.Sys_User.First(y => y.UserId == x.PlanManId).UserName,
TestPalce = x.TestPalce,
TestStartTime = string.Format("{0:yyyy-MM-dd HH:mm}", x.TestStartTime),
TestEndTime = string.Format("{0:yyyy-MM-dd HH:mm}", x.TestEndTime),
States = x.States,
QRCodeUrl = x.QRCodeUrl.Replace('\\', '/'),
}).ToList();
return getDataLists;
}
else
{
var getDataLists = (from x in db.Training_TestPlan
where x.ProjectId == projectId && (x.States == states || states == null)
orderby x.TestStartTime descending
select new Model.TestPlanItem
{
TestPlanId = x.TestPlanId,
TestPlanCode = x.PlanCode,
TestPlanName = x.PlanName,
ProjectId = x.ProjectId,
TestPlanManId = x.PlanManId,
DepartIds = x.DepartIds,
DepartNames = WorkPostService.getDepartNamesByIds(x.DepartIds),
TestPlanManName = db.Sys_User.First(y => y.UserId == x.PlanManId).UserName,
TestPalce = x.TestPalce,
TestStartTime = string.Format("{0:yyyy-MM-dd HH:mm}", x.TestStartTime),
TestEndTime = string.Format("{0:yyyy-MM-dd HH:mm}", x.TestEndTime),
States = x.States,
QRCodeUrl = x.QRCodeUrl.Replace('\\', '/'),
}).ToList();
return getDataLists;
}
2022-03-15 17:36:38 +08:00
}
}
#endregion
#region ID获取考试计划详细
/// <summary>
/// 根据考试ID获取考试计划详细
/// </summary>
/// <param name="testPlanId"></param>
/// <returns></returns>
public static Model.TestPlanItem getTestPlanByTestPlanId(string testPlanId)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
2022-12-20 09:32:32 +08:00
var getDataLists = (from x in db.Training_TestPlan
2022-03-15 17:36:38 +08:00
where x.TestPlanId == testPlanId
select new Model.TestPlanItem
{
TestPlanId = x.TestPlanId,
ProjectId = x.ProjectId,
TestPlanCode = x.PlanCode,
TestPlanName = x.PlanName,
TestPlanManId = x.PlanManId,
TestPlanDate = string.Format("{0:yyyy-MM-dd HH:mm}", x.PlanDate),
TestStartTime = string.Format("{0:yyyy-MM-dd HH:mm}", x.TestStartTime),
TestEndTime = string.Format("{0:yyyy-MM-dd HH:mm}", x.TestEndTime),
Duration = x.Duration,
SValue = x.SValue,
MValue = x.MValue,
JValue = x.JValue,
TotalScore = x.TotalScore ?? 0,
QuestionCount = x.QuestionCount ?? 0,
TestPalce = x.TestPalce,
UnitIds = x.UnitIds,
UnitNames = UnitService.getUnitNamesUnitIds(x.UnitIds),
WorkPostIds = x.WorkPostIds,
WorkPostNames = WorkPostService.getWorkPostNamesWorkPostIds(x.WorkPostIds),
2022-12-20 09:32:32 +08:00
DepartIds = x.DepartIds,
DepartNames = WorkPostService.getDepartNamesByIds(x.DepartIds),
2022-03-15 17:36:38 +08:00
States = x.States,
QRCodeUrl = x.QRCodeUrl.Replace('\\', '/'),
TrainingPlanId = x.PlanId,
2022-12-20 09:32:32 +08:00
}).FirstOrDefault();
if (getDataLists != null)
{
var user = db.Sys_User.FirstOrDefault(y => y.UserId == getDataLists.TestPlanManId);
if (user != null)
getDataLists.TestPlanManName = user.UserName;
if (!string.IsNullOrEmpty(getDataLists.UnitIds))
{
string[] uids = getDataLists.UnitIds.Split(',');
var units = db.Base_Unit.Where(x => uids.Contains(x.UnitId)).ToList();
string unitName = "";
foreach(var u in units)
{
unitName += u.UnitName + ",";
}
if (!string.IsNullOrEmpty(unitName))
{
getDataLists.UnitNames = unitName;
}
}
}
return getDataLists;
2022-03-15 17:36:38 +08:00
}
}
#endregion
#region
/// <summary>
/// 保存TestPlan
/// </summary>
/// <param name="getTestPlan">考试计划记录</param>
public static string SaveTestPlan(Model.TestPlanItem getTestPlan)
{
string alterStr =string.Empty ;
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
Model.Training_TestPlan newTestPlan = new Model.Training_TestPlan
{
TestPlanId = getTestPlan.TestPlanId,
2022-12-20 09:32:32 +08:00
2022-03-15 17:36:38 +08:00
PlanCode = getTestPlan.TestPlanCode,
PlanName = getTestPlan.TestPlanName,
PlanManId = getTestPlan.TestPlanManId,
//PlanDate= getTestPlan.TestPlanDate,
TestStartTime = Funs.GetNewDateTimeOrNow(getTestPlan.TestStartTime),
TestEndTime = Funs.GetNewDateTimeOrNow(getTestPlan.TestEndTime),
Duration = getTestPlan.Duration,
SValue = getTestPlan.SValue,
MValue = getTestPlan.MValue,
JValue = getTestPlan.JValue,
TotalScore = getTestPlan.TotalScore,
QuestionCount = getTestPlan.QuestionCount,
TestPalce = getTestPlan.TestPalce,
UnitIds = getTestPlan.UnitIds,
WorkPostIds = getTestPlan.WorkPostIds,
2022-12-20 09:32:32 +08:00
DepartIds = getTestPlan.DepartIds,
2022-03-15 17:36:38 +08:00
States = getTestPlan.States,
PlanDate = DateTime.Now,
};
2022-12-20 09:32:32 +08:00
if (!string.IsNullOrEmpty(getTestPlan.ProjectId))
{
newTestPlan.ProjectId = getTestPlan.ProjectId;
}
2022-03-15 17:36:38 +08:00
if (!string.IsNullOrEmpty(getTestPlan.TrainingPlanId))
{
newTestPlan.PlanId = getTestPlan.TrainingPlanId;
}
var isUpdate = db.Training_TestPlan.FirstOrDefault(x => x.TestPlanId == newTestPlan.TestPlanId);
if (isUpdate == null)
{
string unitId = string.Empty;
var user = db.Sys_User.FirstOrDefault(e => e.UserId == newTestPlan.PlanManId);
if (user != null)
{
unitId = user.UnitId;
}
newTestPlan.PlanCode = CodeRecordsService.ReturnCodeByMenuIdProjectId(Const.ProjectTestPlanMenuId, newTestPlan.ProjectId, unitId);
if (string.IsNullOrEmpty(newTestPlan.TestPlanId))
{
newTestPlan.TestPlanId = SQLHelper.GetNewID();
}
db.Training_TestPlan.InsertOnSubmit(newTestPlan);
db.SubmitChanges();
CodeRecordsService.InsertCodeRecordsByMenuIdProjectIdUnitId(Const.ProjectTestPlanMenuId, newTestPlan.ProjectId, null, newTestPlan.TestPlanId, newTestPlan.PlanDate);
}
else
{
isUpdate.States = newTestPlan.States;
if (isUpdate.States == "0" || isUpdate.States == "1")
{
isUpdate.PlanName = newTestPlan.PlanName;
isUpdate.PlanManId = newTestPlan.PlanManId;
isUpdate.PlanDate = newTestPlan.PlanDate;
isUpdate.TestStartTime = newTestPlan.TestStartTime;
isUpdate.TestEndTime = newTestPlan.TestEndTime;
isUpdate.Duration = newTestPlan.Duration;
isUpdate.TotalScore = newTestPlan.TotalScore;
isUpdate.QuestionCount = newTestPlan.QuestionCount;
isUpdate.TestPalce = newTestPlan.TestPalce;
isUpdate.UnitIds = newTestPlan.UnitIds;
isUpdate.WorkPostIds = newTestPlan.WorkPostIds;
2022-12-20 09:32:32 +08:00
isUpdate.DepartIds = newTestPlan.DepartIds;
2022-03-15 17:36:38 +08:00
////删除 考生记录
var deleteRecords = from x in db.Training_TestRecord
where x.TestPlanId == isUpdate.TestPlanId
select x;
if (deleteRecords.Count() > 0)
{
foreach (var item in deleteRecords)
{
var testRecordItem = from x in db.Training_TestRecordItem
where x.TestRecordId == item.TestRecordId
select x;
if (testRecordItem.Count() > 0)
{
db.Training_TestRecordItem.DeleteAllOnSubmit(testRecordItem);
db.SubmitChanges();
}
}
db.Training_TestRecord.DeleteAllOnSubmit(deleteRecords);
db.SubmitChanges();
}
////删除 考试题目类型
var deleteTestPlanTrainings = from x in db.Training_TestPlanTraining where x.TestPlanId == isUpdate.TestPlanId select x;
if (deleteTestPlanTrainings.Count() > 0)
{
db.Training_TestPlanTraining.DeleteAllOnSubmit(deleteTestPlanTrainings);
db.SubmitChanges();
}
}
else if (isUpdate.States == "3") ////考试状态3时 更新培训计划状态 把培训计划写入培训记录中
{
DateTime? endTime = Funs.GetNewDateTime(getTestPlan.TestEndTime);
////判断是否有未考完的考生
var getTrainingTestRecords = db.Training_TestRecord.FirstOrDefault(x => x.TestPlanId == isUpdate.TestPlanId
&& (!x.TestStartTime.HasValue || ((!x.TestEndTime.HasValue || !x.TestScores.HasValue) && x.TestStartTime.Value.AddMinutes(isUpdate.Duration) >= DateTime.Now)));
if (getTrainingTestRecords != null && endTime.HasValue && endTime.Value.AddMinutes(isUpdate.Duration) < DateTime.Now)
{
alterStr = "当前存在未交卷考生,不能提前结束考试!";
isUpdate.States = "2";
}
else
{
SubmitTest(isUpdate);
}
}
else if (newTestPlan.States == "2") ////开始考试 只更新考试计划状态为考试中。
{
if (isUpdate.TestStartTime > DateTime.Now)
{
isUpdate.States = "1";
alterStr = "未到考试扫码开始时间,不能开始考试!";
}
}
if (string.IsNullOrEmpty(alterStr))
{
db.SubmitChanges();
}
}
if (newTestPlan.States == "0" || newTestPlan.States == "1")
{
if (getTestPlan.TestRecordItems.Count() > 0)
{
////新增考试人员明细
foreach (var item in getTestPlan.TestRecordItems)
{
2022-12-20 09:32:32 +08:00
var user = db.Sys_User.FirstOrDefault(e => e.UserId == item.TestManId);
var person = db.SitePerson_Person.FirstOrDefault(e => e.PersonId == item.TestManId);
if (user != null || person != null)
2022-03-15 17:36:38 +08:00
{
Model.Training_TestRecord newTrainDetail = new Model.Training_TestRecord
{
TestRecordId = SQLHelper.GetNewID(),
ProjectId = newTestPlan.ProjectId,
TestPlanId = newTestPlan.TestPlanId,
TestManId = item.TestManId,
TestType = item.TestType,
Duration = newTestPlan.Duration,
};
db.Training_TestRecord.InsertOnSubmit(newTrainDetail);
db.SubmitChanges();
}
2022-12-20 09:32:32 +08:00
2022-03-15 17:36:38 +08:00
}
}
if (getTestPlan.TestPlanTrainingItems.Count() > 0)
{
foreach (var item in getTestPlan.TestPlanTrainingItems)
{
var trainingType = TestTrainingService.GetTestTrainingById(item.TrainingTypeId);
if (trainingType != null)
{
Model.Training_TestPlanTraining newPlanItem = new Model.Training_TestPlanTraining
{
TestPlanTrainingId = SQLHelper.GetNewID(),
TestPlanId = newTestPlan.TestPlanId,
TrainingId = item.TrainingTypeId,
TestType1Count = item.TestType1Count,
TestType2Count = item.TestType2Count,
TestType3Count = item.TestType3Count,
};
db.Training_TestPlanTraining.InsertOnSubmit(newPlanItem);
db.SubmitChanges();
}
}
}
}
}
return alterStr;
}
/// <summary>
/// 新增 考试人员明细
/// </summary>
public static void AddTrainingTestRecord(List<Model.TestRecordItem> testRecords, Model.Training_TestPlan newTestPlan)
{
foreach (var item in testRecords)
{
var person = PersonService.GetPersonById(item.TestManId);
if (person != null)
{
Model.Training_TestRecord newTrainDetail = new Model.Training_TestRecord
{
TestRecordId = SQLHelper.GetNewID(),
ProjectId = newTestPlan.ProjectId,
TestPlanId = newTestPlan.TestPlanId,
TestManId = item.TestManId,
TestType = item.TestType,
Duration= newTestPlan.Duration,
};
TestRecordService.AddTestRecord(newTrainDetail);
}
}
}
/// <summary>
/// 新增 考试教材类型 明细
/// </summary>
public static void AddTrainingTestPlanTraining(List<Model.TestPlanTrainingItem> TestPlanItems, string testPlanId)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
foreach (var item in TestPlanItems)
{
var trainingType = db.Training_TestTraining.FirstOrDefault(e => e.TrainingId == item.TrainingTypeId);
if (trainingType != null)
{
Model.Training_TestPlanTraining newPlanItem = new Model.Training_TestPlanTraining
{
TestPlanTrainingId = SQLHelper.GetNewID(),
TestPlanId = testPlanId,
TrainingId = item.TrainingTypeId,
TestType1Count = item.TestType1Count,
TestType2Count = item.TestType2Count,
TestType3Count = item.TestType3Count,
};
db.Training_TestPlanTraining.InsertOnSubmit(newPlanItem);
db.SubmitChanges();
}
}
}
}
#endregion
#region ID生成
/// <summary>
/// 根据培训计划ID生成 考试计划信息
/// </summary>
/// <param name="getTestPlan"></param>
public static string SaveTestPlanByTrainingPlanId(string trainingPlanId,string userId)
{
string testPlanId = string.Empty;
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
////培训计划
var getTrainingPlan = db.Training_Plan.FirstOrDefault(x => x.PlanId == trainingPlanId); ;
if (getTrainingPlan != null && getTrainingPlan.States == "1")
{
testPlanId = SQLHelper.GetNewID();
Model.Training_TestPlan newTestPlan = new Model.Training_TestPlan
{
TestPlanId = testPlanId,
ProjectId = getTrainingPlan.ProjectId,
//PlanCode = getTrainingPlan.PlanCode,
PlanName = getTrainingPlan.PlanName,
PlanManId = userId,
PlanDate = DateTime.Now,
TestStartTime = DateTime.Now,
TestPalce = getTrainingPlan.TeachAddress,
UnitIds = getTrainingPlan.UnitIds,
UnitNames = UnitService.getUnitNamesUnitIds(getTrainingPlan.UnitIds),
WorkPostIds = getTrainingPlan.WorkPostId,
WorkPostNames = WorkPostService.getWorkPostNamesWorkPostIds(getTrainingPlan.WorkPostId),
2022-12-20 09:32:32 +08:00
DepartIds=getTrainingPlan.DepartIds,
DepartNames = WorkPostService.getDepartNamesByIds(getTrainingPlan.DepartIds),
2022-03-15 17:36:38 +08:00
PlanId = getTrainingPlan.PlanId,
States = "0",
};
string unitId = string.Empty;
var user = db.Sys_User.FirstOrDefault(e => e.UserId == userId);
if (user != null)
{
unitId = user.UnitId;
}
newTestPlan.PlanCode = CodeRecordsService.ReturnCodeByMenuIdProjectId(Const.ProjectTestPlanMenuId, newTestPlan.ProjectId, unitId);
int Duration = 90;
int SValue = 1;
int MValue = 2;
int JValue = 1;
int testType1Count = 40;
int testType2Count = 10;
int testType3Count = 40;
////获取考试规则设置数据
var getTestRule = db.Sys_TestRule.FirstOrDefault(); ////考试数据设置
if (getTestRule != null)
{
Duration = getTestRule.Duration;
SValue = getTestRule.SValue;
MValue = getTestRule.MValue;
JValue = getTestRule.JValue;
testType1Count = getTestRule.SCount;
testType2Count = getTestRule.MCount;
testType3Count = getTestRule.JCount;
}
////按照培训类型获取试题类型及题型数量
var getTrainTypeItems = from x in db.Base_TrainTypeItem
where x.TrainTypeId == getTrainingPlan.TrainTypeId
select x;
if (getTrainTypeItems.Count() > 0)
{
testType1Count = getTrainTypeItems.Sum(x => x.SCount);
testType2Count = getTrainTypeItems.Sum(x => x.MCount);
testType3Count = getTrainTypeItems.Sum(x => x.JCount);
}
newTestPlan.Duration = getTestRule.Duration;
newTestPlan.SValue = getTestRule.SValue;
newTestPlan.MValue = getTestRule.MValue;
newTestPlan.JValue = getTestRule.JValue;
newTestPlan.TotalScore = testType1Count * SValue + testType2Count * MValue + testType3Count * JValue;
newTestPlan.QuestionCount = testType1Count + testType2Count + testType3Count;
newTestPlan.TestEndTime = newTestPlan.TestStartTime.AddMinutes(newTestPlan.Duration);
////新增考试计划记录
var getIsTestPlan = db.Training_TestPlan.FirstOrDefault(x => x.PlanId == newTestPlan.PlanId);
if (getIsTestPlan == null)
{
db.Training_TestPlan.InsertOnSubmit(newTestPlan);
db.SubmitChanges();
CodeRecordsService.InsertCodeRecordsByMenuIdProjectIdUnitId(Const.ProjectTestPlanMenuId, newTestPlan.ProjectId, null, testPlanId, newTestPlan.PlanDate);
///培训人员
var getTrainingTask = (from x in db.Training_Task where x.PlanId == trainingPlanId select x).ToList();
foreach (var itemTask in getTrainingTask)
{
Model.Training_TestRecord newTestRecord = new Model.Training_TestRecord
{
TestRecordId = SQLHelper.GetNewID(),
ProjectId = getTrainingPlan.ProjectId,
TestPlanId = testPlanId,
TestManId = itemTask.UserId,
TestType= db.Base_TrainType.First(z=>z.TrainTypeId == getTrainingPlan.TrainTypeId).TrainTypeName,
};
db.Training_TestRecord.InsertOnSubmit(newTestRecord);
db.SubmitChanges();
}
if (getTrainTypeItems.Count() == 0)
{
/////考试题型类别及数量
Model.Training_TestPlanTraining newTestPlanTraining = new Model.Training_TestPlanTraining
{
TestPlanTrainingId = SQLHelper.GetNewID(),
TestPlanId = testPlanId,
TestType1Count = testType1Count,
TestType2Count = testType2Count,
TestType3Count = testType3Count,
};
db.Training_TestPlanTraining.InsertOnSubmit(newTestPlanTraining);
db.SubmitChanges();
}
else
{
foreach (var item in getTrainTypeItems)
{
/////考试题型类别及数量
Model.Training_TestPlanTraining newTestPlanTraining = new Model.Training_TestPlanTraining
{
TestPlanTrainingId = SQLHelper.GetNewID(),
TestPlanId = testPlanId,
TrainingId = item.TrainingId,
TestType1Count = item.SCount,
TestType2Count = item.MCount,
TestType3Count = item.JCount,
};
db.Training_TestPlanTraining.InsertOnSubmit(newTestPlanTraining);
db.SubmitChanges();
}
}
}
////回写培训计划状态
getTrainingPlan.States = "2";
db.SubmitChanges();
}
}
return testPlanId;
}
#endregion
#region TestPlanId获取考试试题类型列表
/// <summary>
/// 根据TestPlanId获取考试试题类型列表
/// </summary>
/// <param name="testPlanId">考试计划ID</param>
/// <returns></returns>
public static List<Model.TestPlanTrainingItem> getTestPlanTrainingListByTestPlanId(string testPlanId)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
var getDataLists = (from x in db.Training_TestPlanTraining
join y in db.Training_TestTraining on x.TrainingId equals y.TrainingId
where x.TestPlanId == testPlanId
orderby y.TrainingCode
select new Model.TestPlanTrainingItem
{
TestPlanTrainingId = x.TestPlanTrainingId,
TestPlanId = x.TestPlanId,
TrainingTypeId = x.TrainingId,
TrainingTypeName = y.TrainingName,
TestType1Count = x.TestType1Count ?? 0,
TestType2Count = x.TestType2Count ?? 0,
TestType3Count = x.TestType3Count ?? 0,
}).ToList();
return getDataLists;
}
}
#endregion
/// <summary>
/// 结束考试
/// </summary>
public static void SubmitTest(Model.Training_TestPlan getTestPlan)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
////所有交卷的人员 交卷 并计算分数
var getTrainingTestRecords = from x in db.Training_TestRecord
where x.TestPlanId == getTestPlan.TestPlanId && (!x.TestEndTime.HasValue || !x.TestScores.HasValue)
select x;
foreach (var itemRecord in getTrainingTestRecords)
{
itemRecord.TestEndTime = DateTime.Now;
itemRecord.TestScores = db.Training_TestRecordItem.Where(x => x.TestRecordId == itemRecord.TestRecordId).Sum(x => x.SubjectScore) ?? 0;
db.SubmitChanges();
}
var getTrainingTasks = from x in db.Training_Task
where x.PlanId == getTestPlan.PlanId && (x.States != "2" || x.States == null)
select x;
foreach (var item in getTrainingTasks)
{
item.States = "2";
db.SubmitChanges();
}
////TODO 讲培训计划 考试记录 写入到培训记录
APITrainRecordService.InsertTrainRecord(getTestPlan);
}
}
}
}