using System.Data; using System.Net; using System.Text.RegularExpressions; using AgileObjects.AgileMapper; using MathNet.Numerics.Distributions; using Microsoft.AspNetCore.Http; using MongoDB.Driver.Linq; using Newtonsoft.Json.Linq; using SqlSugar; using Tiobon.Core.Common; using Tiobon.Core.Common.Caches; using Tiobon.Core.Common.Helper; using Tiobon.Core.Common.UserManager; using Tiobon.Core.IRepository.Base; using Tiobon.Core.IServices; using Tiobon.Core.Model; using Tiobon.Core.Model.Models; using Tiobon.Core.Services.BASE; namespace Tiobon.Core.Services; /// /// 试卷 (服务) /// public class Ghre_ExamPaperServices : BaseServices, IGhre_ExamPaperServices { private readonly IGhre_ExamPaperConfigServices _ghre_ExamPaperConfigServices; private readonly IGhre_ExamPaperQuestionServices _ghre_ExamPaperQuestionServices; private readonly IGhre_QuestionServices _ghre_QuestionServices; private readonly IGhrs_UserServices _ghrs_UserServices; private readonly IGhre_QuestionAnswerServices _ghre_QuestionAnswerServices; private readonly IGhre_CourseServices _ghre_CourseServices; private readonly IGhre_CourseSceneServices _ghre_CourseSceneServices; private readonly IGhre_ExamServices _ghre_ExamServices; private readonly IGhre_ExamRecordServices _ghre_ExamRecordServices; private readonly IBaseRepository _dal; public Ghre_ExamPaperServices(IBaseRepository dal, IGhre_ExamPaperConfigServices ghre_ExamPaperConfigServices, IGhre_QuestionServices ghre_QuestionServices, IGhre_QuestionAnswerServices ghre_QuestionAnswerServices, IGhre_ExamPaperQuestionServices ghre_ExamPaperQuestionServices, IGhre_CourseServices ghre_CourseServices, IGhre_CourseSceneServices ghre_CourseSceneServices, //IGhre_ExamServices ghre_ExamServices, IGhre_ExamRecordServices ghre_ExamRecordServices, ICaching caching, IGhrs_UserServices ghrs_UserServices) { this._dal = dal; base.BaseDal = dal; base._caching = caching; _ghre_ExamPaperConfigServices = ghre_ExamPaperConfigServices; _ghre_ExamPaperQuestionServices = ghre_ExamPaperQuestionServices; _ghre_QuestionServices = ghre_QuestionServices; _ghre_QuestionAnswerServices = ghre_QuestionAnswerServices; _ghrs_UserServices = ghrs_UserServices; _ghre_CourseServices = ghre_CourseServices; _ghre_CourseSceneServices = ghre_CourseSceneServices; //_ghre_ExamServices = ghre_ExamServices; _ghre_ExamRecordServices = ghre_ExamRecordServices; } public override async Task QueryById(object objId) { var entity = await base.QueryById(objId); entity.SetMethodLabel = await GetParaLabel("SetMethod", entity.SetMethod); entity.ScoreMethodLabel = await GetParaLabel("ScoreMethod", entity.ScoreMethod); return entity; } //public override async Task> QueryFilterPage(QueryBody body) //{ // var data = await BaseDal.QueryFilterPage(body); // var data1 = Mapper.Map(data.result.DT_TableDataT1).ToANew>(); // var linkIds = data1.Where(x => x.LinkId != null).Select(x => x.LinkId.Value).Distinct().ToList(); // var courses = await _ghre_CourseServices.Query(x => linkIds.Contains(x.Id)); // var courseScenes = await _ghre_CourseSceneServices.Query(x => linkIds.Contains(x.Id)); // data1.ForEach(async x => // { // try // { // x.ScoreMethodLabel = await GetParaLabel("ScoreMethod", x.ScoreMethod); // x.TotalScore1 = Regex.Replace(x.PassScore.ToString(), @"\.(0+)$", "") + "/" + Regex.Replace(x.TotalScore.ToString(), @"\.(0+)$", ""); // x.SetMethodLabel = await GetParaLabel("SetMethod", x.SetMethod); // if (x.LinkType == "CourseId") // x.CourseName = courses.FirstOrDefault(o => o.Id == x.LinkId)?.CourseName; // else if (x.LinkType == "CourseSceneId") // x.CourseName = courseScenes.FirstOrDefault(o => o.Id == x.LinkId)?.SceneName; // } // catch (Exception) // { // } // }); // return new ServicePageResult(body.pageNum, data.result.DT_TablePageInfoT1.TotalCount, body.pageSize, data1); //} public async Task> QueryList(QueryBody body, string status) { var data = await base.QueryFilterPage(body, $"Status='{status}'"); var data1 = Mapper.Map(data.result.DT_TableDataT1).ToANew>(); var linkIds = data1.Where(x => x.LinkId != null).Select(x => x.LinkId.Value).Distinct().ToList(); var courses = await _ghre_CourseServices.Query(x => linkIds.Contains(x.Id)); var courseScenes = await _ghre_CourseSceneServices.Query(x => linkIds.Contains(x.Id)); data1.ForEach(async x => { try { x.ScoreMethodLabel = await GetParaLabel("ScoreMethod", x.ScoreMethod); x.TotalScore1 = Regex.Replace(x.PassScore.ToString(), @"\.(0+)$", "") + "/" + Regex.Replace(x.TotalScore.ToString(), @"\.(0+)$", ""); x.SetMethodLabel = await GetParaLabel("SetMethod", x.SetMethod); if (x.LinkType == "CourseId") x.CourseName = courses.FirstOrDefault(o => o.Id == x.LinkId)?.CourseName; else if (x.LinkType == "CourseSceneId") x.CourseName = courseScenes.FirstOrDefault(o => o.Id == x.LinkId)?.SceneName; } catch (Exception) { } }); return new ServicePageResult(body.pageNum, data.result.DT_TablePageInfoT1.TotalCount, body.pageSize, data1); } //public async Task> QueryFilterPage1(QueryBody filter, string status = null) //{ // if (string.IsNullOrWhiteSpace(filter.orderBy)) // filter.orderBy = "CreateTime DESC"; // RefAsync totalCount = 0; // var query = Db.Queryable(); // if (!string.IsNullOrWhiteSpace(status)) // query = query.Where(x => x.Status == status); // 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 (!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 (filter.pageSize == 0) // filter.pageSize = 10000; // query = query.Where(conditions); // var list = await query // .OrderByIF(!string.IsNullOrEmpty(filter.orderBy), filter.orderBy) // .ToPageListAsync(filter.pageNum, filter.pageSize, totalCount); // return new ServicePageResult(filter.pageNum, totalCount, filter.pageSize, list); //} public async Task> QueryDefault(long Id) { var input = new DefaultGhre_ExamPaperInput(); #region baseColumns var baseColumns = new List { new DefaultGhre_ExamPaperColumn() { label = "试卷编号", field = "PaperNo", elementType = "Input", required = false, multipleSelect = false, editable = false, }, new DefaultGhre_ExamPaperColumn() { label = "试卷名称", field = "PaperName", elementType = "Input", required = true, multipleSelect = false, editable = true, }, new DefaultGhre_ExamPaperColumn() { label = "答题分钟", field = "AnswerTime", elementType = "InputNumber", required = true, multipleSelect = false, editable = true, }, new DefaultGhre_ExamPaperColumn() { label = "评分方式", field = "ScoreMethod", elementType = "ApiSelect", required = true, multipleSelect = false, editable = true, dataSource = "api/Common/GetSelect/ScoreMethod?FW=DOTNETCORE" }, new DefaultGhre_ExamPaperColumn() { label = "卷面总分", field = "TotalScore", elementType = "InputNumber", required = true, multipleSelect = false, editable = true, }, new DefaultGhre_ExamPaperColumn() { label = "及格分", field = "PassScore", elementType = "InputNumber", required = true, multipleSelect = false, editable = true, }, new DefaultGhre_ExamPaperColumn() { label = "可重考次数", field = "RetakeTimes", elementType = "InputNumber", required = true, multipleSelect = false, editable = true, }, new DefaultGhre_ExamPaperColumn() { label = "试卷说明", field = "RemarkSz", elementType = "InputTextArea", required = false, multipleSelect = false, editable = true, }, new DefaultGhre_ExamPaperColumn() { label = "关联课程", field = "LinkType", elementType = "CourseRadioBox", required = false, multipleSelect = false, editable = true, }, new DefaultGhre_ExamPaperColumn() { label = "课程名称", field = "CourseId", elementType = "ApiSelect", required = true, multipleSelect = false, editable = true, dataSource = "api/Common/GetSelect/Ghre_Course?FW=DOTNETCORE" }, new DefaultGhre_ExamPaperColumn() { label = "课程场景", field = "CourseSceneId", elementType = "ApiSelect", required = true, multipleSelect = false, editable = true, dataSource = "api/Common/GetSelect/Ghre_CourseScene?FW=DOTNETCORE" } }; #endregion #region randomSetColumns var randomSetColumns = new List { new DefaultGhre_ExamPaperColumn() { label = "课程名称", field = "CourseId", elementType = "ApiSelect", required = true, multipleSelect = false, editable = true, displayType=1, dataSource = "api/Ghre_Course/QuerySelect?FW=DOTNETCORE" }, new DefaultGhre_ExamPaperColumn() { label = "题目类型", field = "QuestionType", elementType = "ApiSelect", required = true, multipleSelect = false, editable = true, displayType=2, dataSource = "api/Common/GetSelect/QuestionType?FW=DOTNETCORE" }, new DefaultGhre_ExamPaperColumn() { label = "难易程度", field = "DifficultyLevel", elementType = "ApiSelect", required = true, multipleSelect = false, editable = true, displayType=2, width=80, dataSource = "api/Common/GetSelect/DifficultyLevel?FW=DOTNETCORE" }, new DefaultGhre_ExamPaperColumn() { label = "数量", field = "Quantity", elementType = "InputNumber", required = true, multipleSelect = false, editable = true, width=80, displayType=2 }, new DefaultGhre_ExamPaperColumn() { label = "分值", field = "Score", elementType = "InputNumber", required = true, multipleSelect = false, editable = true, width=80, displayType=2 } }; #endregion #region manualSetColumns var manualSetColumns = new List { new DefaultGhre_ExamPaperColumn() { label = "课程名称", field = "CourseId", elementType = "ApiSelect", required = true, multipleSelect = false, editable = true, displayType=1 }, new DefaultGhre_ExamPaperColumn() { label = "题目类型", field = "QuestionType", elementType = "ApiSelect", required = true, multipleSelect = false, editable = true, displayType= 2 }, new DefaultGhre_ExamPaperColumn() { label = "题目内容", field = "QuestionContent", elementType = "ApiSelect", required = true, multipleSelect = false, editable = true, displayType=2 }, new DefaultGhre_ExamPaperColumn() { label = "难易程度", field = "DifficultyLevel", elementType = "ApiSelect", required = true, multipleSelect = false, editable = true, width=80, displayType=2 }, new DefaultGhre_ExamPaperColumn() { label = "分值", field = "Score", elementType = "InputNumber", required = true, multipleSelect = false, editable = true, width=80, displayType=2 } }; #endregion #region pageData if (Id == 0) { var baseData = new DefaultGhre_ExamPaperBaseData(); baseData.PaperNo = null; baseData.PaperName = null; baseData.AnswerTime = null; baseData.ScoreMethod = null; baseData.TotalScore = null; baseData.PassScore = null; baseData.RetakeTimes = null; baseData.RemarkSz = null; baseData.LinkType = "CourseId"; baseData.CourseId = null; baseData.CourseSceneId = null; input.pageData.baseData = baseData; input.pageData.examPaperSetType = "random"; } else if (Id != 0) { var exampaper = await base.QueryById(Id); var baseData = new DefaultGhre_ExamPaperBaseData(); baseData.PaperNo = exampaper.PaperNo; baseData.PaperName = exampaper.PaperName; baseData.AnswerTime = exampaper.AnswerTime; baseData.ScoreMethod = exampaper.ScoreMethod; baseData.TotalScore = exampaper.TotalScore; baseData.PassScore = exampaper.PassScore; baseData.RetakeTimes = exampaper.RetakeTimes; baseData.RemarkSz = exampaper.RemarkSz; baseData.LinkType = exampaper.LinkType; baseData.CourseId = exampaper.LinkType == "CourseId" ? exampaper.LinkId : null; baseData.CourseSceneId = exampaper.LinkType == "CourseSceneId" ? exampaper.LinkId : null; input.pageData.baseData = baseData; input.CreateDataInfo = exampaper.CreateDataInfo; input.UpdateDataInfo = exampaper.UpdateDataInfo; input.pageData.styleInfo.coverImage = exampaper.CoverUrl; input.pageData.styleInfo.paperStyle = exampaper.Style; input.pageData.styleInfo.coverBackGround = exampaper.CoverBackGround; input.pageData.examPaperSetType = exampaper.SetMethod; input.pageData.examPaperSetData = await _ghre_ExamPaperConfigServices.Query(x => x.ExamPaperId == Id, "TaxisNo ASC"); var questions = await _ghre_ExamPaperQuestionServices.Query(x => x.ExamPaperId == Id, "TaxisNo ASC"); var previews = questions.Where(x => x.QuestionId != null).Select(x => new DefaultGhre_ExamPaperPreview() { Id = x.Id, ConfigId = x.ConfigId, parentId = x.ConfigId, QuestionId = x.QuestionId.Value, ExamPaperId = x.ExamPaperId }).ToList(); var questionIds = previews.Select(x => x.QuestionId).Distinct().ToList(); var questions1 = await _ghre_QuestionServices.Query(x => questionIds.Contains(x.Id)); var answers = await _ghre_QuestionAnswerServices.Query(x => x.QuestionId != null && questionIds.Contains(x.QuestionId.Value), "TaxisNo ASC"); previews.ForEach(x => { var answers1 = answers.Where(y => y.QuestionId == x.QuestionId).ToList(); x.QuestionType = questions1.FirstOrDefault(a => a.Id == x.QuestionId)?.QuestionType; x.QuestionContent = questions1.FirstOrDefault(a => a.Id == x.QuestionId)?.QuestionContent; if (!string.IsNullOrEmpty(x.QuestionContent)) x.QuestionContent = WebUtility.HtmlDecode(x.QuestionContent); //var detail = questions1.Select(o => //new FromGhre_QuestionQuestionTypeDetail() //{ // Id = o.Id, // difficulty = o.DifficultyLevel, // RemarkSz = o.QuestionAnalysis, // content = o.QuestionContent, //}).ToList(); //detail.ForEach(y => //{ // y.answer = answers1.Where(x => x.IsCorrect == true).FirstOrDefault()?.QuestionNo; // y.answer1 = answers1.Where(x => x.IsCorrect == true).Select(x => x.QuestionNo).ToList(); // y.answerList = answers.Select(x => new FromGhre_QuestionQuestionAnswerList() // { // No = x.QuestionNo, // label = x.AnswerContent, // imageUrl = x.ImageUrl, // imgWidthPc = x.ImageWidthPc, // imgWidthApp = x.ImageWidthApp, // }).ToList(); //}); var detail = new FromGhre_QuestionQuestionTypeDetail(); detail.content = x.QuestionContent; detail.difficulty = questions1.FirstOrDefault(a => a.Id == x.QuestionId)?.DifficultyLevel; detail.answer = answers1.Where(x => x.IsCorrect == true).FirstOrDefault()?.QuestionNo; detail.answer1 = answers1.Where(x => x.IsCorrect == true).Select(x => x.QuestionNo).ToList(); detail.answerList = answers1.Select(x => new FromGhre_QuestionQuestionAnswerList() { No = x.QuestionNo, label = x.AnswerContent, imageUrl = x.ImageUrl, imgWidthPc = x.ImageWidthPc, imgWidthApp = x.ImageWidthApp, }).ToList(); x.detail = detail; }); input.pageData.previewList = previews; } #endregion input.baseColumns = baseColumns; input.randomSetColumns = randomSetColumns; input.manualSetColumns = manualSetColumns; return ServiceResult.OprateSuccess("查询成功!", input); } public async Task> InsertConfig(InsertGhre_ExamPaperConfigInput insert) { var input = new InsertExamPaperConfigInput(); long parentId = SnowFlakeSingle.instance.getID(); input.tableData = Mapper.Map(insert).ToANew(); input.tableData.Id = parentId; if (insert.QuestionId != null) insert.Quantity = 1; string sql = $@"SELECT TOP {insert.Quantity} *,NEWID() AS GuidValue FROM Ghre_Question WHERE IsEnable=1"; if (!string.IsNullOrWhiteSpace(insert.DifficultyLevel)) sql += $" AND DifficultyLevel='{insert.DifficultyLevel}'"; if (!string.IsNullOrWhiteSpace(insert.QuestionType)) sql += $" AND QuestionType='{insert.QuestionType}'"; if (insert.CourseId != null) sql += $" AND CourseId='{insert.CourseId}'"; if (insert.QuestionId != null) sql += $" AND Id='{insert.QuestionId}'"; sql += $" ORDER BY GuidValue ASC"; var questions = await Db.Ado.SqlQueryAsync(sql); var previews = questions.Select(x => new DefaultGhre_ExamPaperPreview() { Id = x.Id, parentId = parentId, QuestionId = x.Id, QuestionType = x.QuestionType, QuestionContent = x.QuestionContent, }).ToList(); var questionIds = previews.Select(x => x.QuestionId).Distinct().ToList(); var questions1 = await _ghre_QuestionServices.Query(x => questionIds.Contains(x.Id)); var answers = await _ghre_QuestionAnswerServices.Query(x => x.QuestionId != null && questionIds.Contains(x.QuestionId.Value), "TaxisNo ASC"); previews.ForEach(x => { var answers1 = answers.Where(y => y.QuestionId == x.QuestionId).ToList(); var detail = new FromGhre_QuestionQuestionTypeDetail(); detail.answer = answers1.Where(x => x.IsCorrect == true).FirstOrDefault()?.QuestionNo; detail.answer1 = answers1.Where(x => x.IsCorrect == true).Select(x => x.QuestionNo).ToList(); detail.answerList = answers1.Select(x => new FromGhre_QuestionQuestionAnswerList() { No = x.QuestionNo, label = x.AnswerContent, imageUrl = x.ImageUrl, imgWidthPc = x.ImageWidthPc, imgWidthApp = x.ImageWidthApp, }).ToList(); if (!string.IsNullOrEmpty(x.QuestionContent)) x.QuestionContent = WebUtility.HtmlDecode(x.QuestionContent); detail.content = x.QuestionContent; x.detail = detail; }); input.previewList = previews; return ServiceResult.OprateSuccess("查询成功!", input); } public async Task> Insert1(DefaultGhre_ExamPaperPageData insertModel) { ValidForm(insertModel); await Db.Ado.BeginTranAsync(); try { var insert = new InsertGhre_ExamPaperInput(); insert = Mapper.Map(insertModel.baseData).ToANew(); insert.PaperNo = await GenerateContinuousSequence("Ghre_ExamPaper", "PaperNo", "P"); insert.LinkId = insertModel.baseData.LinkType == "CourseId" ? insertModel.baseData.CourseId : insertModel.baseData.CourseSceneId; insert.CoverUrl = insertModel.styleInfo.coverImage; insert.CoverBackGround = insertModel.styleInfo.coverBackGround; insert.Style = insertModel.styleInfo.paperStyle; insert.SetMethod = insertModel.examPaperSetType; insert.Status = "Draft"; var id = await Add(insert); var configs = Mapper.Map(insertModel.examPaperSetData).ToANew>(); configs.ForEach(x => x.ExamPaperId = id); var insertConfigs = Db.Insertable(configs); string sql = insertConfigs.ToSqlString(); long row = await Db.Ado.ExecuteCommandAsync(sql); var questions = insertModel.previewList .Select(x => new InsertGhre_ExamPaperQuestionInput { ExamPaperId = id, QuestionId = x.QuestionId, ConfigId = x.parentId, }).ToList(); questions.ForEach(x => { x.Score = configs.FirstOrDefault(o => o.Id == x.ConfigId)?.Score; }); await _ghre_ExamPaperQuestionServices.Add(questions); await Db.Ado.CommitTranAsync(); return ServiceResult.OprateSuccess("新增成功!", id); } catch (Exception) { await Db.Ado.RollbackTranAsync(); throw; } } public async Task Update1(long id, DefaultGhre_ExamPaperPageData insertModel) { ValidForm(insertModel); await Db.Ado.BeginTranAsync(); try { Db.Ado.ExecuteCommand($@"delete from Ghre_ExamPaperConfig WHERE ExamPaperId='{id}'; delete from Ghre_ExamPaperQuestion WHERE ExamPaperId='{id}';"); var insert = new EditGhre_ExamPaperInput(); var paper = await base.QueryById(id); insert = Mapper.Map(insertModel.baseData).ToANew(); insert.PaperNo = await GenerateContinuousSequence("Ghre_ExamPaper", "PaperNo", "P"); insert.LinkId = insertModel.baseData.LinkType == "CourseId" ? insertModel.baseData.CourseId : insertModel.baseData.CourseSceneId; insert.CoverUrl = insertModel.styleInfo.coverImage; insert.CoverBackGround = insertModel.styleInfo.coverBackGround; insert.Style = insertModel.styleInfo.paperStyle; insert.SetMethod = insertModel.examPaperSetType; insert.Status = "Draft"; #region 串联试卷和课程关系 if ( (insert.LinkType == "CourseId" && insert.LinkType == paper.LinkType && paper.LinkId != insert.LinkId) || (insert.LinkType == "CourseSceneId" && insert.LinkType != paper.LinkType) ) { var courses = await _ghre_CourseServices.Query(x => x.Id == paper.LinkId && x.ExamPaperId.Contains(id.ObjToString())); courses.ForEach(async x => { var ids = JsonHelper.JsonToObj>(x.ExamPaperId); ids = ids.Where(o => o != id).ToList(); x.ExamPaperId = JsonHelper.ObjToJson(ids); await Db.Updateable(x).UpdateColumns(it => new { it.ExamPaperId }).ExecuteCommandAsync(); }); } #endregion await Update(id, insert); var configs = Mapper.Map(insertModel.examPaperSetData).ToANew>(); configs.ForEach(x => x.ExamPaperId = id); var insertConfigs = Db.Insertable(configs); string sql = insertConfigs.ToSqlString(); long row = await Db.Ado.ExecuteCommandAsync(sql); var questions = insertModel.previewList .Select(x => new InsertGhre_ExamPaperQuestionInput { ExamPaperId = id, QuestionId = x.QuestionId, ConfigId = x.parentId, }).ToList(); questions.ForEach(x => { x.Score = configs.FirstOrDefault(o => o.Id == x.ConfigId)?.Score; }); await _ghre_ExamPaperQuestionServices.Add(questions); await Db.Ado.CommitTranAsync(); return ServiceResult.OprateSuccess("修改成功!"); } catch (Exception) { await Db.Ado.RollbackTranAsync(); throw; } } 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); List entities = new List(); for (int i = 0; i < ids.Count(); i++) { var id = ids[i]; if (!BaseDal.Any(id)) continue; var entity = await BaseDal.QueryById(id); #region 校验数据是否被引用 if (entity.Status == "Released" && (status == "Draft" || status == "Disabled"))//取消发布-停用 { if (await Db.Queryable().AnyAsync(x => x.ExamPaperId == id && x.Status != "Disabled")) { var exam = await Db.Queryable().FirstAsync(x => x.ExamPaperId == id && x.Status != "Disabled"); return ServiceResult.OprateFailed($"试卷【{entity.PaperName}({entity.PaperNo})】已与考试【{exam.ExamName}({exam.ExamNo})】关联,暂不可{(status == "Draft" ? "取消发布" : "停用")}"); } if (await _ghre_ExamRecordServices.AnyAsync(x => x.ExamPaperId == id && x.Status == "UnderWay")) { var exam = await _ghre_ExamRecordServices.QuerySingleDto(x => x.ExamPaperId == id && x.Status == "UnderWay"); return ServiceResult.OprateFailed($"试卷【{entity.PaperName}({entity.PaperNo})】,当前有学员正在考试中,暂不可{(status == "Draft" ? "取消发布" : "停用")}"); } } #endregion BasePoco ent = entity; ent.UpdateIP = ip; ent.UpdateProg = api; 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 static void ValidForm(DefaultGhre_ExamPaperPageData model) { if (model.baseData.PassScore == 0) throw new Exception("及格分需大于0!"); if (model.baseData.PassScore >= model.baseData.TotalScore) throw new Exception("及格分需小于卷面总分!"); if (model.baseData.AnswerTime <= 0) throw new Exception("答题时间需大于0!"); } #region 获取通用列表下拉 /// /// 获取通用列表下拉 /// /// /// public async Task> GetSelectAsync(long? linkId) { var result = new CommonSelect(); var TableColumn = new JArray(); var DT_TablePageInfoT1 = new JArray(); var DT_TableDataT1 = new JArray(); var searchItem = new JObject(); JObject item; DataTable dt; string sql; searchItem = [ new JProperty("defaultHidden", true), new JProperty("field","value"), new JProperty("label","试卷ID"), ]; TableColumn.Add(searchItem); searchItem = [ new JProperty("field","label"), new JProperty("label","试卷名称"), ]; TableColumn.Add(searchItem); sql = $"SELECT Id, PaperNo, PaperName FROM Ghre_ExamPaper WHERE LinkId='{linkId}' AND Status ='Released' AND IsEnable=1 ORDER BY CreateTime DESC"; dt = await Db.Ado.GetDataTableAsync(sql); for (int i = 0; i < dt.Rows.Count; i++) { item = [ new JProperty("value",long.Parse(dt.Rows[i]["Id"].ToString())), new JProperty("label", dt.Rows[i]["PaperName"].ToString() + "("+dt.Rows[i]["PaperNo"].ToString()+")") ]; DT_TableDataT1.Add(item); } item = [ new JProperty("ListMax",100), new JProperty("ListMin",10), new JProperty("PageNum",1), new JProperty("PageSize",99999), new JProperty("TotalCount",dt.Rows.Count), new JProperty("UIType","Auto") ]; DT_TablePageInfoT1.Add(item); result.JM_TableColumnT1.TableColumn = TableColumn; result.DT_TableDataT1 = DT_TableDataT1; result.DT_TablePageInfoT1 = DT_TablePageInfoT1; return new ServiceResult() { Success = true, Message = "查询成功", Data = result, }; } #endregion }