using Tiobon.Core.IServices; using Tiobon.Core.Model.Models; using Tiobon.Core.Services.BASE; using Tiobon.Core.IRepository.Base; using Tiobon.Core.Common.Caches; using System.Dynamic; using Tiobon.Core.Model; using Tiobon.Core.Common; using AgileObjects.AgileMapper; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SqlSugar; using Microsoft.AspNetCore.Http; using Tiobon.Core.Common.UserManager; using MongoDB.Driver.Linq; namespace Tiobon.Core.Services; /// /// 考试 (服务) /// public class Ghre_ExamServices : BaseServices, IGhre_ExamServices { private readonly IBaseRepository _dal; private readonly IGhre_CourseServices _ghre_CourseServices; private readonly IGhre_CourseSceneServices _ghre_CourseSceneServices; private readonly IGhra_StaffServices _ghra_StaffSceneServices; private readonly IGhre_ExamStaffServices _ghre_ExamStaffServices; private readonly IGhre_ExamRecordServices _ghre_ExamRecordServices; private readonly IGhre_ExamMessageLogServices _ghre_ExamMessageLogServices; private readonly IGhre_ExamPaperServices _ghre_ExamPaperServices; public Ghre_ExamServices(ICaching caching, IGhre_CourseServices ghre_CourseServices, IGhre_CourseSceneServices ghre_CourseSceneServices, IGhra_StaffServices ghra_StaffSceneServices, IGhre_ExamStaffServices ghre_ExamStaffServices, IGhre_ExamRecordServices ghre_ExamRecordServices, IGhre_ExamMessageLogServices ghre_ExamMessageLogServices, IGhre_ExamPaperServices ghre_ExamPaperServices, IBaseRepository dal) { this._dal = dal; base.BaseDal = dal; base._caching = caching; _ghre_CourseServices = ghre_CourseServices; _ghre_CourseSceneServices = ghre_CourseSceneServices; _ghra_StaffSceneServices = ghra_StaffSceneServices; _ghre_ExamStaffServices = ghre_ExamStaffServices; _ghre_ExamRecordServices = ghre_ExamRecordServices; _ghre_ExamMessageLogServices = ghre_ExamMessageLogServices; _ghre_ExamPaperServices = ghre_ExamPaperServices; } public async Task GetModuleInfo(ModuleParam param) { dynamic result = new ExpandoObject(); dynamic data = new ExpandoObject(); var Toolbar = new List(); Toolbar.Add(new Toolbar() { fnKey = "NewYN", fnKeyValue = null, fnTitle = "新增", fnType = "table", position = "left", icon = "ghr-icon-add", display = true }); Toolbar.Add(new Toolbar() { fnKey = "Release", fnKeyValue = null, fnTitle = "发布", fnType = "table", position = "left", icon = "ghr-publish", display = true }); var DT_Procedure = new DT_Procedure(); var sql = "select QueryProcedure, EditProcedure, IUDProcedure from Ghrs_Menu where MenuNo='{0}'"; sql = string.Format(sql, param.menuName, App.User.ID, param.langId); var dt = Db.Ado.GetDataTable(sql); if (dt.Rows.Count > 0) { DT_Procedure.QueryProcedure = dt.Rows[0]["QueryProcedure"].ToString(); DT_Procedure.EditProcedure = dt.Rows[0]["EditProcedure"].ToString(); DT_Procedure.IUDProcedure = dt.Rows[0]["IUDProcedure"].ToString(); } sql = $@"SELECT PageSettingQueryId, elementType, field, [dbo].[FLangKeyToValue] (Meky, {param.langId}, label) label, Meky, multipleSelect, dataType, required, palceholder, dataSourceType, dbo.FS_GetdataSourceBySet (dataSource, APIDataSourceType, Ghrs_PageSettingQuery.APIDataSourceID) dataSource, sortable, sortOrder, defaultHidden, ConfigIsShow, filterable, CAST(CASE WHEN width = '' THEN '100' ELSE width END AS INT) width, align, fixed, editable, searchable, searchRequired, searchColumnSeq, multipleSearchValue, maxTagCount, selfDefine, selectUI, isPrimaryKey, 'false' isSorted, 'false' isHidden, CASE WHEN searchColumnSeq IS NULL OR searchColumnSeq = '' THEN 'false' ELSE 'true' END isSearched, SortNo, -- searchCanOperator, ( select ParaDetailNo operator, [dbo].[FLangKeyToValue](MKey,1,ParaDetailName) operatorDesc, SqlFunction operatorIcon from Ghrs_ParaDetail where ParaMasterId=13 and IsEnable=1 and ParaDetailNo in (select Value from dbo.Fs1_GHR30_SplitString2(searchCanOperator,',')) order by (select positon from dbo.Fs1_GHR30_SplitString2(searchCanOperator,',') where value= ParaDetailNo) FOR JSON Path ) searchOperator1, '' searchColumnDefaultValue, '' AppColumnType FROM Ghrs_PageSettingQuery WHERE PageNo = '{param.menuName}' AND elementType NOT IN ('PageGroup') AND IsEnable = 1 ORDER BY SortNo ASC"; sql = string.Format(sql, param.menuName, App.User.ID, param.langId); var TableColumn = Db.Ado.SqlQuery(sql); var SearchFormFields = Mapper.Map(TableColumn).ToANew>(); SearchFormFields.ForEach(x => { if (!string.IsNullOrWhiteSpace(x.searchOperator1)) x.searchOperator = JsonConvert.DeserializeObject>(x.searchOperator1); x.searchOperator1 = null; }); #region DT_PageMutiMsg var DT_PageMutiMsg = await _caching.GetAsync>("DT_PageMutiMsg"); if (DT_PageMutiMsg == null || (DT_PageMutiMsg != null && !DT_PageMutiMsg.Any())) { sql = $@"SELECT Langkey field, CASE {param.langId} WHEN 1 THEN isnull (Value01, LangValue) WHEN 2 THEN isnull (Value02, LangValue) WHEN 3 THEN isnull (Value03, LangValue) WHEN 4 THEN isnull (Value04, LangValue) WHEN 5 THEN isnull (Value05, LangValue) WHEN 6 THEN isnull (Value06, LangValue) WHEN 7 THEN isnull (Value07, LangValue) WHEN 8 THEN isnull (Value08, LangValue) WHEN 9 THEN isnull (Value09, LangValue) WHEN 10 THEN isnull (Value10, LangValue) END label FROM Ghrs_LangKey WHERE (LangKey LIKE 'GHR_Page%' OR LangKey LIKE 'GHR_Common%') AND IsEnable = 1"; DT_PageMutiMsg = Db.Ado.SqlQuery(sql); if (DT_PageMutiMsg.Any()) await _caching.SetAsync("DT_PageMutiMsg", DT_PageMutiMsg); } #endregion data.Toolbar = Toolbar; data.DT_Procedure = DT_Procedure; data.SearchFormFields = SearchFormFields; data.DT_PageMutiMsg = DT_PageMutiMsg; result.Success = true; result.Status = 200; result.Data = data; result.Message = "查询成功"; return result; } public async Task QueryList(QueryBody body, string status) { var data = await QueryFilterPage1(body, status); dynamic return1 = new ExpandoObject(); dynamic result = new ExpandoObject(); dynamic DT_TablePageInfoT1 = new ExpandoObject(); result.DT_TableDataT1 = data.result.DT_TableDataT1; DT_TablePageInfoT1.PageNum = body.pageNum; DT_TablePageInfoT1.PageSize = body.pageSize; DT_TablePageInfoT1.TotalCount = data.result.DT_TablePageInfoT1.TotalCount; result.DT_TablePageInfoT1 = DT_TablePageInfoT1; dynamic CardConfig = new ExpandoObject(); CardConfig.cardTitle = "ExamName"; CardConfig.cardImage = "CoverUrl"; CardConfig.column1 = "AfterHowLongLabel"; CardConfig.column1Icon = "ghr-form-designer-deteSelect"; CardConfig.column2 = "ExamPaperName"; CardConfig.column2Icon = "ghr-exam-paper"; CardConfig.column3 = "ExamModeLabel"; CardConfig.column3Icon = "ghr-online-exam"; //CardConfig.column4 = "OpenClassName"; //CardConfig.column4Icon = "ghr-link-openClass"; CardConfig.column4 = ""; CardConfig.column4Icon = ""; CardConfig.column5 = ""; CardConfig.column5Icon = ""; CardConfig.column6 = ""; CardConfig.column6Icon = ""; result.CardConfig = CardConfig; return1.result = result; return1.message = "查询成功!"; return1.Success = true; return1.code = 0; return1.type = "success"; return return1; } public async Task> QueryFilterPage1(QueryBody filter, string status = null) { RefAsync totalCount = 0; string sql = @"SELECT * FROM (SELECT A.*, CASE WHEN A.LinkType = 'CourseId' THEN B.CourseName WHEN A.LinkType = 'CourseSceneId' THEN D.SceneName END CourseName, C.Id CourseTypeId, C.ClassName CourseType, E.PaperName ExamPaperName FROM Ghre_Exam A LEFT JOIN Ghre_Course B ON A.CourseId = B.Id LEFT JOIN Ghre_CourseClass C ON B.CourseClassId = C.Id LEFT JOIN Ghre_CourseScene D ON A.CourseSceneId = D.Id LEFT JOIN Ghre_ExamPaper E ON A.ExamPaperId = E.Id WHERE A.IsEnable = 1) A"; if (string.IsNullOrWhiteSpace(filter.orderBy)) filter.orderBy = "CreateTime DESC"; string conditions = "1=1"; if (filter.jsonParam != null) foreach (JProperty jProperty in filter.jsonParam.Properties()) { var name = jProperty.Name; var value = jProperty.Value.ToString(); if (name == "page" || name == "pageSize") continue; if (name == "ExamDate") { var jsonParam = JsonConvert.DeserializeObject(value); conditions += $" AND ((BeginTime BETWEEN '{jsonParam.columnValue[0]}' AND '{jsonParam.columnValue[1]}') OR (EndTime BETWEEN '{jsonParam.columnValue[0]}' AND '{jsonParam.columnValue[1]}'))"; continue; } if (!string.IsNullOrWhiteSpace(value)) { var jsonParam = JsonConvert.DeserializeObject(value); switch (jsonParam.operationKey) { case "Include": conditions += $" AND {name} LIKE '%{jsonParam.columnValue}%'"; break; case "NotInclude": conditions += $" AND {name} NOT LIKE '%{jsonParam.columnValue}%'"; break; case "IsNull": conditions += $" AND {name} IS NULL"; break; case "NotNull": conditions += $" AND {name} IS NOT NULL"; break; case "Equal": conditions += $" AND {name} ='{jsonParam.columnValue}'"; break; case "NotEqual": conditions += $" AND {name} !='{jsonParam.columnValue}'"; break; default: break; } } } if (!string.IsNullOrWhiteSpace(status)) conditions += $" AND Status ='{status}'"; sql += " WHERE " + conditions; if (filter.pageSize == 0) filter.pageSize = 10000; var data = await Db.SqlQueryable(sql) .OrderBy(filter.orderBy) .ToPageListAsync(filter.pageNum, filter.pageSize, totalCount); data.ForEach(x => { x.ExamName = x.ExamName + "(" + x.ExamNo + ")"; if (x.Status == "Released" || x.Status == "Disabled") { x.canEdit = 0; x.canDelete = 0; } if (x.Status == "Draft") { x.showLink = 0; x.showResult = 0; x.canClose = 0; } if (x.Status == "Disabled") { x.canClose = 0; x.canPreview = 0; } if (x.DateType == "ExamDate") x.AfterHowLongLabel = x.BeginTime.Value.ToString("yyyy-MM-dd") + " ~ " + x.EndTime.Value.ToString("yyyy-MM-dd"); else x.AfterHowLongLabel = $"学完{x.AfterHowLong}天"; x.ExamModeLabel = x.ExamMode == "Online" ? "线上考试" : "线下实操"; }); return new ServicePageResult(filter.pageNum, totalCount, filter.pageSize, data); } public async Task> QueryDefault(long Id) { var input = new DefaultGhre_ExamInput(); #region baseColumns var baseColumns = new List { new DefaultGhre_ExamColumn() { label = "关联课程", field = "LinkType", elementType = "RadioBox", required = true, multipleSelect = false, editable = false, }, new DefaultGhre_ExamColumn() { label = "课程名称", field = "CourseId", elementType = "ApiSelect", required = true, multipleSelect = false, editable = true, dataSource = "api/Common/GetSelect/Ghre_Course?FW=DOTNETCORE" }, new DefaultGhre_ExamColumn() { label = "课程场景", field = "CourseSceneId", elementType = "ApiSelect", required = true, multipleSelect = false, editable = true, dataSource = "api/Common/GetSelect/Ghre_CourseScene?FW=DOTNETCORE" }, new DefaultGhre_ExamColumn() { label = "选择试卷", field = "ExamPaperId", elementType = "ApiSelect", required = true, multipleSelect = false, editable = true, dataSource = "api/Ghre_ExamPaper/GetSelect?FW=DOTNETCORE&linkId=" }, new DefaultGhre_ExamColumn() { label = "考试编号", field = "ExamNo", elementType = "Input", required =false , multipleSelect = false, editable = false }, new DefaultGhre_ExamColumn() { label = "考试名称", field = "ExamName", elementType = "Input", required = true, multipleSelect = false, editable = true, }, new DefaultGhre_ExamColumn() { label = "考试日期", field = "DateType", elementType = "RadioBox", required = true, multipleSelect = false, editable = true, }, new DefaultGhre_ExamColumn() { label = "考试区间", field = "ExamDate", elementType = "GRangePicker", required = true, multipleSelect = false, editable = true, }, new DefaultGhre_ExamColumn() { label = "学完多久", field = "AfterHowLong", elementType = "RadioBox", required = false, multipleSelect = false, editable = true, }, new DefaultGhre_ExamColumn() { label = "考试形式", field = "ExamMode", elementType = "RadioBox", required = false, multipleSelect = false, editable = true, }, new DefaultGhre_ExamColumn() { label = "线下考试地点", field = "ExamPlace", elementType = "Input", required = true, multipleSelect = false, editable = true, }, new DefaultGhre_ExamColumn() { label = "关联开班", field = "IsLinkOpenClass", elementType = "RadioBox", required = true, multipleSelect = false, editable = true }, new DefaultGhre_ExamColumn() { label = "考试说明", field = "RemarkSz", elementType = "InputTextArea", required = true, multipleSelect = false, editable = true } }; #endregion #region staffTableColumns var staffTableColumns = new List { new DefaultGhre_ExamColumn() { label = "工号", field = "StaffNo", align = "center", width=100 }, new DefaultGhre_ExamColumn() { label = "姓名", field = "StaffName", align = "center", width=100 }, new DefaultGhre_ExamColumn() { label = "部门", field = "DeptName", align = "center", width=100 }, new DefaultGhre_ExamColumn() { label = "岗位", field = "TitleName", align = "center", width=100 }, new DefaultGhre_ExamColumn() { label = "入职日期", field = "InDate", align = "center", width=100 }, new DefaultGhre_ExamColumn() { label = "邮箱", field = "Mail", align = "center", width=100 }, new DefaultGhre_ExamColumn() { label = "数据来源", field = "DataSource", align = "center", width=100 } }; #endregion #region pageData if (Id != 0) { var exam = await base.QueryById(Id); var pageData = Mapper.Map(exam).ToANew(); if (pageData.AfterHowLong != 7 && pageData.AfterHowLong != 15 && pageData.AfterHowLong != 30) { pageData.AfterHowLong1 = pageData.AfterHowLong; pageData.AfterHowLong = 0; } if (pageData.DateType == "ExamDate") pageData.ExamDate.Add(pageData.BeginTime.Value.ToString("yyyy/MM/dd")); if (pageData.DateType == "ExamDate") pageData.ExamDate.Add(pageData.EndTime.Value.ToString("yyyy/MM/dd")); input.pageData = pageData; var staffs = await _ghre_ExamStaffServices.Query(x => x.ExamId == Id); var ids = staffs.Select(x => Convert.ToInt32(x.StaffId)).ToList(); var staffTableData = await QueryStaff(ids, null); pageData.staffTableData = staffTableData.Data; } #endregion input.baseColumns = baseColumns; input.staffTableColumns = staffTableColumns; return ServiceResult.OprateSuccess("查询成功!", input); } public async Task>> QueryStaff(List Ids, string type) { string sql = @"SELECT A.StaffID, A.StaffName, A.StaffNo, A.Email Mail, B.DeptName, C.TitleName, FORMAT(A.Indate, 'yyyy/MM/dd') Indate FROM Ghra_Staff A LEFT JOIN Ghro_Dept B ON A.DeptID = B.DeptID LEFT JOIN Ghra_Title C ON A.TitleID = C.TitleID WHERE 1=1 AND A.IsEnable=1 "; if (Ids.Any()) sql += $"AND StaffID IN({string.Join(",", Ids)}) "; else sql += "AND 1!=1 "; //var list = await _ghra_StaffSceneServices.Query(x => Ids.Contains(x.StaffID)); var data = await Db.Ado.SqlQueryAsync(sql); //var data = list.Select(x => new StaffTableData() //{ // StaffID = x.StaffID, // StaffNo = x.StaffNo, // StaffName = x.StaffName, // Mail = x.Email //}).ToList(); return ServiceResult>.OprateSuccess("查询成功!", data); } public async Task> Insert1(long id, DefaultGhre_ExamPageData pageData) { if (pageData.DateType == "ExamDate") { pageData.BeginTime = Convert.ToDateTime(pageData.ExamDate[0]); pageData.EndTime = Convert.ToDateTime(pageData.ExamDate[1]); } if (pageData.AfterHowLong == 0) pageData.AfterHowLong = pageData.AfterHowLong1; if (string.IsNullOrWhiteSpace(pageData.CoverUrl)) { var course = await Db.Queryable().Where(it => it.Id == pageData.ExamPaperId).FirstAsync(); pageData.CoverUrl = course?.CoverUrl; } if (string.IsNullOrWhiteSpace(pageData.ExamNo)) pageData.ExamNo = await GenerateContinuousSequence(); if (id == 0) { if (string.IsNullOrEmpty(pageData.Status)) pageData.Status = "Draft"; var insert = Mapper.Map(pageData).ToANew(); id = await base.Add(insert); var insertStaffs = pageData.staffTableData.Select(x => new InsertGhre_ExamStaffInput() { ExamId = id, StaffId = x.StaffID, Source = x.DataSource }).ToList(); await _ghre_ExamStaffServices.Add(insertStaffs); Db.Updateable().SetColumns(it => it.LinkTimes == it.LinkTimes + 1).Where(it => it.Id == insert.ExamPaperId).ExecuteCommand(); return ServiceResult.OprateSuccess("添加成功!", id); } else { var exam = await base.QueryById(id); if (exam.ExamPaperId != pageData.ExamPaperId) { Db.Updateable().SetColumns(it => it.LinkTimes == it.LinkTimes - 1).Where(it => it.Id == exam.ExamPaperId && it.LinkTimes > 0).ExecuteCommand(); Db.Updateable().SetColumns(it => it.LinkTimes == it.LinkTimes + 1).Where(it => it.Id == pageData.ExamPaperId).ExecuteCommand(); } var insert = Mapper.Map(pageData).ToANew(); await base.Update(id, insert); await _ghre_ExamStaffServices.Delete(x => x.ExamId == id); var insertStaffs = pageData.staffTableData.Select(x => new InsertGhre_ExamStaffInput() { ExamId = id, StaffId = x.StaffID, Source = x.DataSource }).ToList(); await _ghre_ExamStaffServices.Add(insertStaffs); return ServiceResult.OprateSuccess("修改成功!", id); } } public async Task UpdateStatus(long[] ids, string status) { if (status != "Released" && status != "Disabled" && status != "Draft") throw new Exception("无效的状态"); HttpRequest request = UserContext.Context.Request; var api = request.Path.ObjToString().TrimEnd('/').ToLower(); var ip = GetUserIp(UserContext.Context); var entities = new List(); foreach (var id in ids) { if (id == null || !BaseDal.Any(id)) continue; var entity = await BaseDal.QueryById(id); BasePoco ent = entity; ent.UpdateIP = ip; ent.UpdateProg = api; if (status != "Released" && await _ghre_ExamRecordServices.AnyAsync(x => x.ExamId == id)) return ServiceResult.OprateFailed("已有学员参与考试,不可取消发布!"); if (status == "Released" || status == "Disabled" || status == "Draft") { entity.Status = status; entities.Add(entity); } } var result = await BaseDal.Update(entities); if (status == "Released") return ServiceResult.OprateSuccess("发布成功!"); else if (status == "Draft") return ServiceResult.OprateSuccess("取消发布成功!"); else return ServiceResult.OprateSuccess("停用成功!"); } public async Task GetStatus(long id) { if (await _ghre_ExamRecordServices.AnyAsync(x => x.ExamId == id)) return ServiceResult.OprateFailed("已有学员参与考试,不可取消发布!"); return ServiceResult.OprateSuccess("可以取消发布!"); } public async Task StartExam(long id) { if (!await _ghre_ExamRecordServices.AnyAsync(x => x.ExamId == id)) { var dt = DateTime.Now; var exam = await base.QueryById(id); if (exam.DateType == "ExamDate") { if (exam.BeginTime > dt) return ServiceResult.OprateFailed("考试尚未开始!"); if (exam.EndTime < dt) return ServiceResult.OprateFailed("考试已结束!"); } var insrt = new InsertGhre_ExamRecordInput() { ExamId = id, UserId = UserContext.Current.User_Id, ActualBeginTime = dt, ExamPaperId = exam.ExamPaperId }; await _ghre_ExamRecordServices.Add(insrt); } return ServiceResult.OprateSuccess("操作成功!"); } public async Task GenerateContinuousSequence() { try { string prefixTemp = "E"; string result = string.Empty; string tableCode = "Ghre_Exam"; string columnCode = "ExamNo"; int length = 6; int tempLength = 5; int sequence; #region 查询 DbSelect dbSelect = new DbSelect(tableCode + " A", "A", null); dbSelect.IsInitDefaultValue = false; if (!string.IsNullOrEmpty(prefixTemp)) dbSelect.Select("MAX(SUBSTRING(A." + columnCode + "," + (prefixTemp.Length + 1).ToString() + "," + tempLength.ToString() + "))"); else dbSelect.Select("MAX(A." + columnCode + ")"); //} //dbSelect.Select("MAX(CONVERT(DECIMAL,SUBSTRING(A.ISSUE_NO," + (prefix.Length + dateString.Length + 1).ToString() + "," + tempLength.ToString() + ")))"); if (!string.IsNullOrEmpty(prefixTemp)) dbSelect.Where("SUBSTRING(A." + columnCode + ",1," + (prefixTemp.Length).ToString() + ")", " = ", prefixTemp); dbSelect.Where("LEN(A." + columnCode + ")", "=", length); string sql = dbSelect.GetSql(); //await Db.Ado.GetScalarAsync(sql) string maxSequence = Convert.ToString(await Db.Ado.GetScalarAsync(sql)); #endregion //tempLength = tempLength - dateString.Length; if (string.IsNullOrEmpty(maxSequence)) result = prefixTemp + Convert.ToString(1).PadLeft(tempLength, '0'); else { if (!string.IsNullOrEmpty(prefixTemp)) { if (int.TryParse(maxSequence, out sequence)) { sequence += 1; if (sequence.ToString().Length > tempLength) throw new Exception("自动生成字串长度已经超过设定长度!"); } else throw new Exception("表中的数据无法进行自动编号,请联系软件开发商!"); result = prefixTemp + sequence.ToString().PadLeft(tempLength, '0'); } else { if (int.TryParse(maxSequence, out sequence)) { sequence += 1; if (sequence.ToString().Length > length) throw new Exception("自动生成字串长度已经超过设定长度!"); } else throw new Exception("表中的数据无法进行自动编号,请联系软件开发商!"); result = sequence.ToString().PadLeft(length, '0'); } } return result; } catch (Exception) { throw; } } public async Task Copy(long id) { var exam = await base.QueryById(id); var staffs = await _ghre_ExamStaffServices.Query(x => x.ExamId == id); exam.Status = "Draft"; var insert = Mapper.Map(exam).ToANew(); var insertStaffs = Mapper.Map(exam).ToANew>(); id = await base.Add(insert); insertStaffs.ForEach(x => x.ExamId = id); if (insertStaffs.Any()) await _ghre_ExamStaffServices.Add(insertStaffs); return ServiceResult.OprateSuccess("复制成功!"); } public async Task> QueryMessageLog(long id) { var view = await _ghre_ExamMessageLogServices.QueryById(id); if (view == null) view = new Ghre_ExamMessageLogDto() { NotificationScope = "All", IsFirstEntry = true, }; if (view.IsFirstEntry == false) view.NotificationScope = "Need"; var exam = await base.QueryById(id); if (exam is null) return ServiceResult.OprateFailed("无效的考试ID!"); var examPaper = await _ghre_ExamPaperServices.QueryById(exam.ExamPaperId); view.ExamName = exam.ExamName; if (exam.BeginTime != null) view.BeginDate = exam.BeginTime.Value.ToString("yyyy-MM-dd"); if (exam.EndTime != null) view.EndDate = exam.EndTime.Value.ToString("yyyy-MM-dd"); view.ExamMode = exam.ExamMode; view.RemarkSz = exam.RemarkSz; view.AnswerTime = examPaper.AnswerTime; view.Id = id; return ServiceResult.OprateSuccess("查询成功!", view); } public async Task InsertMessageLog(Ghre_ExamMessageLogDto insert) { Db.Updateable().SetColumns(it => it.IsEnable == 0).Where(it => it.ExamId == insert.Id && it.IsEnable == 1).ExecuteCommand(); var insert1 = Mapper.Map(insert).ToANew(); await _ghre_ExamMessageLogServices.Add(insert1); return ServiceResult.OprateSuccess("提交成功!"); } }