From 18819ad2591dddc4f3cc118d4928e8c99366c5c4 Mon Sep 17 00:00:00 2001 From: xiaju <1784803958@qq.com> Date: Thu, 6 Mar 2025 17:51:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=B0=83=E4=BC=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SGGL/BLL/API/HSSE/APITestRecordService.cs | 152 ++++++++++++++++++ SGGL/BLL/API/HSSE/APITrainingTaskService.cs | 21 ++- SGGL/BLL/BLL.csproj | 45 +++++- SGGL/BLL/OpenService/GetDataService.cs | 4 +- SGGL/Model/APIItem/HSSE/TrainingTaskItem.cs | 13 ++ .../APIItem/HSSE/TrainingTaskItemItem.cs | 57 ++++--- .../Controllers/HSSE/TestPlanController.cs | 78 +++++++++ 7 files changed, 343 insertions(+), 27 deletions(-) diff --git a/SGGL/BLL/API/HSSE/APITestRecordService.cs b/SGGL/BLL/API/HSSE/APITestRecordService.cs index 0f83682..f5a5748 100644 --- a/SGGL/BLL/API/HSSE/APITestRecordService.cs +++ b/SGGL/BLL/API/HSSE/APITestRecordService.cs @@ -75,6 +75,158 @@ namespace BLL } #endregion + + public static string CreateTestRecordItem(Model.Training_CompanyTrainingItem getCompanyTraining, string testRecordId, Model.SitePerson_Person person, Model.Sys_User user) + { + using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) + { + var trainingIds = getCompanyTraining.TestTrainingIds.Split(','); + var testTrainings = db.Training_TestTraining.Where(x => trainingIds.Contains(x.TrainingId)); + var getTestRecord = db.Training_TestRecord.FirstOrDefault(x => x.TestRecordId == testRecordId); + if (getTestRecord != null && !getTestRecord.TestStartTime.HasValue) + { + ////考试时长 + getTestRecord.Duration = 120; + getTestRecord.TestStartTime = DateTime.Now; + db.SubmitChanges(); + } + + ////当前人考试记录 未加入考试计划的 当考试开始扫码时 不允许再参与考试 + var item = db.Training_TestRecordItem.FirstOrDefault(x => x.TestRecordId == getTestRecord.TestRecordId); + if (item == null) + { + List getTestTrainingItemList = new List(); + //var testPlanTrainings = from x in db.Training_TestPlanTraining + // where x.TestPlanId == getTestPlan.TestPlanId + // select x; + //// 计划考试中单选、多选、判断题总数 + var sysTestRule = Funs.DB.Sys_TestRule.FirstOrDefault(); + + int sumTestType1Count = 0;// testPlanTrainings.Sum(x => x.TestType1Count) ?? 0; + int sumTestType2Count = 0;//testPlanTrainings.Sum(x => x.TestType2Count) ?? 0; + int sumTestType3Count = 0;//testPlanTrainings.Sum(x => x.TestType3Count) ?? 0; + if (sysTestRule != null) + { + + sumTestType1Count = sysTestRule.SCount; + sumTestType2Count = sysTestRule.MCount; + sumTestType3Count = sysTestRule.JCount; + } + ////获取类型下适合岗位试题集合 + List getTestTrainingItemALLs; + string WorkPostId = ""; + string DepartId = ""; + if (person != null) + { + WorkPostId = person.WorkPostId; + } + if (user != null) + { + DepartId = user.DepartId; + } + + getTestTrainingItemALLs = (from x in db.Training_TestTrainingItem + where x.TrainingId != null && (x.WorkPostIds == null || string.IsNullOrEmpty(WorkPostId) || x.WorkPostIds.Contains(WorkPostId)) || (x.DepartIds == null || string.IsNullOrEmpty(DepartId) || x.DepartIds.Contains(DepartId)) + select x).ToList(); + foreach (var itemT in testTrainings) + { + //// 获取类型下的题目 + 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(sumTestType1Count); + if (getSItem.Count() > 0) + { + getTestTrainingItemList.AddRange(getSItem); + } + ///多选题 + var getMItem = getTestTrainingItems.Where(x => x.TestType == "2").OrderBy(x => Guid.NewGuid()).Take(sumTestType2Count); + if (getMItem.Count() > 0) + { + getTestTrainingItemList.AddRange(getMItem); + } + ///判断题 + var getJItem = getTestTrainingItems.Where(x => x.TestType == "3").OrderBy(x => Guid.NewGuid()).Take(sumTestType3Count); + 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) + { + var getItems = from x in getTestTrainingItemList + select new Model.Training_TestRecordItem + { + TestRecordItemId = SQLHelper.GetNewID(), + TestRecordId = getTestRecord.TestRecordId, + TrainingItemName = x.TrainingItemName, + TrainingItemCode = x.TrainingItemCode, + Abstracts = x.Abstracts, + AttachUrl = x.AttachUrl, + TestType = x.TestType, + AItem = x.AItem, + BItem = x.BItem, + CItem = x.CItem, + DItem = x.DItem, + EItem = x.EItem, + AnswerItems = x.AnswerItems, + Score = x.TestType == "1" ? sysTestRule.SValue : (x.TestType == "2" ? sysTestRule.MValue : sysTestRule.JValue), + }; + + db.Training_TestRecordItem.InsertAllOnSubmit(getItems); + db.SubmitChanges(); + BLL.RedisHelper redis = new BLL.RedisHelper(); + redis.SetObjString(testRecordId, getItems); + } + } + } + return testRecordId; + } + + #region 根据PersonId、TestPlanId生成试卷 扫码生成试卷 /// /// 根据PersonId、TestPlanId生成试卷 扫码生成试卷 diff --git a/SGGL/BLL/API/HSSE/APITrainingTaskService.cs b/SGGL/BLL/API/HSSE/APITrainingTaskService.cs index f909897..f027876 100644 --- a/SGGL/BLL/API/HSSE/APITrainingTaskService.cs +++ b/SGGL/BLL/API/HSSE/APITrainingTaskService.cs @@ -37,6 +37,8 @@ namespace BLL TrainTypeName = db.Base_TrainType.FirstOrDefault(b => b.TrainTypeId == y.TrainTypeId).TrainTypeName, TrainLevelName = db.Base_TrainLevel.FirstOrDefault(b => b.TrainLevelId == y.TrainLevelId).TrainLevelName, PlanStatesName = y.States == "3" ? "已完成" : "培训中", + TaskStatesName = x.States == "2" ? "已完成" : "培训中", + TrainingItemCode = getTrainingItemCode(y.PlanId), IsRetakeCourse = y.IsRetakeCourse == 1 ? 1 : 0, }).ToList(); if (!string.IsNullOrWhiteSpace(isRetakeCourse)) @@ -46,6 +48,18 @@ namespace BLL return getDataLists; } } + + public static string getTrainingItemCode(string PlanId) + { + using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) + { + var ids = db.Training_PlanItem.Where(xx => xx.PlanId == PlanId).Select(x => x.CompanyTrainingItemId).ToList(); + var codes = db.Training_CompanyTrainingItem.Where(x => ids.Contains(x.CompanyTrainingItemId)).Select(x => x.CompanyTrainingItemCode); + string res = string.Join(",", codes); + return res; + } + } + #endregion #region 根据TaskId获取培训任务教材列表 @@ -62,6 +76,8 @@ namespace BLL GetDataService.CreateTrainingTaskItemByTaskId(taskId); var getDataLists = (from x in db.Training_TaskItem + join y in db.Training_CompanyTrainingItem on x.TrainingItemCode equals y.CompanyTrainingItemCode into temp + from y in temp.DefaultIfEmpty() where x.TaskId == taskId orderby x.TrainingItemCode select new Model.TrainingTaskItemItem @@ -69,11 +85,12 @@ namespace BLL TaskItemId = x.TaskItemId, TaskId = x.TaskId, PlanId = x.PlanId, - PersonId = x.PersonId, StartTime = x.StartTime, EndTime = x.EndTime, - LearnTime = x.LearnTime, + LearningTime = x.LearnTime, + AttachTime = y.LearningTime, VideoProgress = x.VideoProgress, + PersonId = x.PersonId, TrainingItemCode = x.TrainingItemCode, TrainingItemName = x.TrainingItemName, AttachUrl = x.AttachUrl.Replace('\\', '/'), diff --git a/SGGL/BLL/BLL.csproj b/SGGL/BLL/BLL.csproj index 4adb7f3..e7eea2c 100644 --- a/SGGL/BLL/BLL.csproj +++ b/SGGL/BLL/BLL.csproj @@ -21,6 +21,8 @@ + + true @@ -66,8 +68,11 @@ ..\packages\SharpZipLib.1.3.3\lib\net45\ICSharpCode.SharpZipLib.dll - - ..\packages\Microsoft.Extensions.Logging.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll + + ..\packages\Microsoft.Bcl.AsyncInterfaces.6.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll + + + ..\packages\Microsoft.Extensions.Logging.Abstractions.6.0.0\lib\net461\Microsoft.Extensions.Logging.Abstractions.dll ..\packages\Microsoft.Office.Interop.Excel.15.0.4795.1001\lib\net20\Microsoft.Office.Interop.Excel.dll @@ -103,12 +108,18 @@ ..\packages\MicrosoftOfficeCore.15.0.0\lib\net35\Office.dll False + + ..\packages\Pipelines.Sockets.Unofficial.2.2.8\lib\net461\Pipelines.Sockets.Unofficial.dll + ..\packages\Quartz.3.7.0\lib\netstandard2.0\Quartz.dll ..\packages\RestSharp.106.15.0\lib\net452\RestSharp.dll + + ..\packages\StackExchange.Redis.2.8.24\lib\net461\StackExchange.Redis.dll + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll @@ -125,7 +136,14 @@ - + + ..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll + True + True + + + ..\packages\System.IO.Pipelines.5.0.1\lib\net461\System.IO.Pipelines.dll + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll @@ -142,6 +160,11 @@ ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll + True + True + @@ -155,6 +178,12 @@ + + ..\packages\System.Threading.Channels.5.0.0\lib\net461\System.Threading.Channels.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + @@ -274,6 +303,9 @@ + + + @@ -1160,6 +1192,13 @@ + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + +