576 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			576 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			C#
		
	
	
	
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 根据projectId、states获取考试计划列表
 | 
						||
        /// <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))
 | 
						||
            {
 | 
						||
                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,
 | 
						||
                                        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;
 | 
						||
            }
 | 
						||
        }
 | 
						||
        #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))
 | 
						||
            {
 | 
						||
                Model.TestPlanItem returnItem = new Model.TestPlanItem();
 | 
						||
                var getTestP = db.Training_TestPlan.FirstOrDefault(x => x.TestPlanId == testPlanId);
 | 
						||
                if (getTestP != null)
 | 
						||
                {
 | 
						||
                    returnItem.TestPlanId = getTestP.TestPlanId;
 | 
						||
                    returnItem.ProjectId = getTestP.ProjectId;
 | 
						||
                    returnItem.TestPlanCode = getTestP.PlanCode;
 | 
						||
                    returnItem.TestPlanName = getTestP.PlanName;
 | 
						||
                    returnItem.TestPlanManId = getTestP.PlanManId;
 | 
						||
                    returnItem.TestPlanManName = UserService.GetUserNameByUserId(getTestP.PlanManId);
 | 
						||
                    returnItem.TestPlanDate = getTestP.PlanDate.HasValue ? string.Format("{0:yyyy-MM-dd HH:mm}", getTestP.PlanDate) : "";
 | 
						||
                    returnItem.TestStartTime = string.Format("{0:yyyy-MM-dd HH:mm}", getTestP.TestStartTime);
 | 
						||
                    returnItem.TestEndTime = string.Format("{0:yyyy-MM-dd HH:mm}", getTestP.TestEndTime);
 | 
						||
                    returnItem.Duration = getTestP.Duration;
 | 
						||
                    returnItem.SValue = getTestP.SValue;
 | 
						||
                    returnItem.MValue = getTestP.MValue;
 | 
						||
                    returnItem.JValue = getTestP.JValue;
 | 
						||
                    returnItem.TotalScore = getTestP.TotalScore ?? 0;
 | 
						||
                    returnItem.QuestionCount = getTestP.QuestionCount ?? 0;
 | 
						||
                    returnItem.TestPalce = getTestP.TestPalce;
 | 
						||
                    returnItem.UnitIds = getTestP.UnitIds;
 | 
						||
                    returnItem.UnitNames = UnitService.getUnitNamesUnitIds(getTestP.UnitIds);
 | 
						||
                    returnItem.WorkPostIds = getTestP.WorkPostIds;
 | 
						||
                    returnItem.WorkPostNames = WorkPostService.getWorkPostNamesWorkPostIds(getTestP.WorkPostIds);
 | 
						||
                    returnItem.States = getTestP.States;
 | 
						||
                    if (!string.IsNullOrEmpty(getTestP.QRCodeUrl))
 | 
						||
                    {
 | 
						||
                        returnItem.QRCodeUrl = getTestP.QRCodeUrl.Replace('\\', '/');
 | 
						||
                    }
 | 
						||
                    returnItem.TrainingPlanId = getTestP.PlanId;
 | 
						||
 | 
						||
                    //返回考生记录
 | 
						||
                    var getTestRecord = db.Training_TestRecord.Where(x => x.TestPlanId == testPlanId).ToList();
 | 
						||
                    List<Model.TestRecordItem> trItemList = new List<Model.TestRecordItem>();
 | 
						||
                    if (getTestRecord.Count>0)
 | 
						||
                    {
 | 
						||
                        foreach (var item in getTestRecord)
 | 
						||
                        {
 | 
						||
                            Model.TestRecordItem trItemModel = new Model.TestRecordItem();
 | 
						||
                            trItemModel.TestManId = item.TestManId;
 | 
						||
                            trItemModel.TestManName = db.SitePerson_Person.FirstOrDefault(e => e.PersonId == item.TestManId).PersonName;
 | 
						||
                            trItemList.Add(trItemModel);
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                    returnItem.TestRecordItems = trItemList; 
 | 
						||
 | 
						||
                }
 | 
						||
                return returnItem;
 | 
						||
            }
 | 
						||
        }
 | 
						||
        #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,
 | 
						||
                    ProjectId = getTestPlan.ProjectId,
 | 
						||
                    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,
 | 
						||
                    States = getTestPlan.States,
 | 
						||
                    PlanDate = DateTime.Now,
 | 
						||
                };
 | 
						||
 | 
						||
                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;
 | 
						||
                        ////删除 考生记录
 | 
						||
                        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)
 | 
						||
                        {
 | 
						||
                            var person = db.SitePerson_Person.FirstOrDefault(e => e.PersonId == 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,
 | 
						||
                                };
 | 
						||
                                if (string.IsNullOrEmpty(newTrainDetail.TestType))
 | 
						||
                                {
 | 
						||
                                    var getTrainTypeName = db.Training_TestPlan.FirstOrDefault(x => x.TestPlanId == newTrainDetail.TestPlanId);
 | 
						||
                                    if (getTrainTypeName != null)
 | 
						||
                                    {
 | 
						||
                                        newTrainDetail.TestType = getTrainTypeName.PlanName;
 | 
						||
                                    }
 | 
						||
                                }
 | 
						||
                                db.Training_TestRecord.InsertOnSubmit(newTrainDetail);
 | 
						||
                                db.SubmitChanges();
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                    if (getTestPlan.TestPlanTrainingItems.Count() > 0)
 | 
						||
                    {
 | 
						||
                        foreach (var item in getTestPlan.TestPlanTrainingItems)
 | 
						||
                        {
 | 
						||
                            var trainingType = TestTrainingService.GetTestTrainingById(item.TrainingTypeId);
 | 
						||
                            if (trainingType != null)
 | 
						||
                            {
 | 
						||
                                var getT = db.Training_TestPlanTraining.FirstOrDefault(x => x.TestPlanId == newTestPlan.TestPlanId && x.TrainingId == item.TrainingTypeId);
 | 
						||
                                if (getT == 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)
 | 
						||
                    {
 | 
						||
                        var getT = db.Training_TestPlanTraining.FirstOrDefault(x => x.TestPlanId == testPlanId && x.TrainingId == item.TrainingTypeId);
 | 
						||
                        if (getT == 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),
 | 
						||
                        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)
 | 
						||
                            {
 | 
						||
                                var getT = db.Training_TestPlanTraining.FirstOrDefault(x => x.TestPlanId == testPlanId && x.TrainingId == item.TrainingId);
 | 
						||
                                if (getT == null)
 | 
						||
                                {
 | 
						||
                                    /////考试题型类别及数量
 | 
						||
                                    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);
 | 
						||
            }
 | 
						||
        }
 | 
						||
    }
 | 
						||
}
 |