diff --git a/APT.MS.Data/Mapping/T4/T4Map.cs b/APT.MS.Data/Mapping/T4/T4Map.cs index ed5bde6..eaa2a7f 100644 --- a/APT.MS.Data/Mapping/T4/T4Map.cs +++ b/APT.MS.Data/Mapping/T4/T4Map.cs @@ -10834,6 +10834,15 @@ builder.Property(t => t.FILENAME).HasMaxLength(200); base.Configure(builder); builder.HasOne(t => t.Nav_Cour).WithMany(t=>t.Nav_Detail).HasForeignKey(t => t.EDU_CARD_ID).OnDelete(DeleteBehavior.Restrict); builder.HasOne(t => t.Nav_Test).WithMany().HasForeignKey(t => t.TEST_ID).OnDelete(DeleteBehavior.Restrict); +builder.Ignore(t => t.NAME); +builder.Ignore(t => t.TYPE); +builder.Ignore(t => t.OPTION_A); +builder.Ignore(t => t.OPTION_B); +builder.Ignore(t => t.OPTION_C); +builder.Ignore(t => t.OPTION_D); +builder.Ignore(t => t.OPTION_E); +builder.Ignore(t => t.ANSWER); +builder.Ignore(t => t.ANSWERSHOW); } } #endregion diff --git a/APT.MS.Domain/Entities/SC/SE/T_SE_COURSEWEARLIBRARY_DETAIL.cs b/APT.MS.Domain/Entities/SC/SE/T_SE_COURSEWEARLIBRARY_DETAIL.cs index 1be8310..a6247a9 100644 --- a/APT.MS.Domain/Entities/SC/SE/T_SE_COURSEWEARLIBRARY_DETAIL.cs +++ b/APT.MS.Domain/Entities/SC/SE/T_SE_COURSEWEARLIBRARY_DETAIL.cs @@ -57,5 +57,79 @@ namespace APT.MS.Domain.Entities.SE /// [Description("试题")] public T_SE_TEST Nav_Test { get; set; } + + + + + + + + /// + /// 题目 + /// + [Description("题目")] + [DataFieldIngore] + public string NAME { get; set; } + + /// + /// 题型 + /// + [Description("题型")] + [DataFieldIngore] + public SETestTypeEnum TYPE { get; set; } + + /// + /// 选项A + /// + [Description("选项A")] + [DataFieldIngore] + public string OPTION_A { get; set; } + + /// + /// 选项B + /// + [Description("选项B")] + [DataFieldIngore] + public string OPTION_B { get; set; } + + /// + /// 选项C + /// + [Description("选项C")] + [DataFieldIngore] + public string OPTION_C { get; set; } + + /// + /// 选项D + /// + [Description("选项D")] + [DataFieldIngore] + public string OPTION_D { get; set; } + /// + /// 选项E + /// + [Description("选项E")] + [DataFieldIngore] + public string OPTION_E { get; set; } + + /// + /// 答案 + /// 是非题 是 1 否 2 + /// 单选题 A 1, B 2, C 4, D 8 + /// 多选题 单选位或 + /// + [Description("答案")] + [DataFieldIngore] + public int ANSWER { get; set; } + + /// + /// 答案 + /// 是非题 是 1 否 2 + /// 单选题 A 1, B 2, C 4, D 8 + /// 多选题 单选位或 + /// + [Description("答案")] + [DataFieldIngore] + public string ANSWERSHOW { get; set; } } } diff --git a/APT.MicroApi/APT.SC.WebApi/Controllers/Api/SEController/SECoursewearlibrary.cs b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/SEController/SECoursewearlibrary.cs index 371a4da..012ef37 100644 --- a/APT.MicroApi/APT.SC.WebApi/Controllers/Api/SEController/SECoursewearlibrary.cs +++ b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/SEController/SECoursewearlibrary.cs @@ -19,6 +19,69 @@ namespace APT.SE.WebApi.Controllers.Api public partial class SECoursewearlibraryController : AuthorizeApiController { + /// + /// 根据str答案 获取 答案 int + /// + /// + /// + /// + private int GetAnswer(SETestTypeEnum TYPE, string strAnswer) + { + int Answer = 0; + + switch (TYPE) + { + case SETestTypeEnum.是非题: + case SETestTypeEnum.单选题: + { + switch (strAnswer) + { + case "是": + case "A": + case "a": + Answer = 1; + break; + case "否": + case "B": + case "b": + Answer = 2; + break; + case "C": + case "c": + Answer = 4; + break; + case "D": + case "d": + Answer = 8; + break; + default: + break; + } + } + break; + case SETestTypeEnum.多选题: + if (strAnswer.IndexOf("A") > -1 || strAnswer.IndexOf("a") > -1) + { + Answer += 1; + } + if (strAnswer.IndexOf("B") > -1 || strAnswer.IndexOf("b") > -1) + { + Answer += 2; + } + if (strAnswer.IndexOf("C") > -1 || strAnswer.IndexOf("c") > -1) + { + Answer += 4; + } + if (strAnswer.IndexOf("D") > -1 || strAnswer.IndexOf("d") > -1) + { + Answer += 8; + } + break; + default: + break; + } + return Answer; + } /// /// 更新 @@ -36,7 +99,6 @@ namespace APT.SE.WebApi.Controllers.Api var Detail = entity.Nav_Detail; entity.Nav_Detail = null; - if (Files != null && Files.Count() > 1) { throw new Exception("课件只能单一文件"); @@ -54,15 +116,44 @@ namespace APT.SE.WebApi.Controllers.Api List listT = new List(); List listTPost = new List(); List listTPoint = new List(); + List listAdd = new List(); if (Detail == null || Detail.Count < 1) { throw new Exception("请添加题目!"); } else { + #region 手动添加的题目 + + foreach (var item in Detail) + { + if (item.IS_DELETED || item.ANSWER != 0) + continue; + item.TEST_ID = Guid.NewGuid(); + listAdd.Add(new T_SE_TEST() + { + ID = item.TEST_ID, + ORG_ID = entity.ORG_ID, + ANSWER = GetAnswer(item.TYPE, item.ANSWERSHOW), + NAME = item.NAME, + TYPE = item.TYPE, + OPTION_A = item.OPTION_A, + OPTION_B = item.OPTION_B, + OPTION_C = item.OPTION_C, + OPTION_D = item.OPTION_D, + OPTION_E = item.OPTION_E, + CREATER_ID = APT.Infrastructure.Api.AppContext.CurrentSession.UserID, + CREATE_TIME = DateTime.Now + }); + } + + #endregion + + decimal ScorePer = 0; decimal sum = Detail.Where(e => !e.IS_DELETED).Sum(e => e.SCOREPER); - if (sum != 100) + var answer0 = Detail.FirstOrDefault(e => !e.IS_DELETED && e.ANSWER == 0); + if (sum != 100 || answer0 != null) { int dc = Detail.Where(e => !e.IS_DELETED).Count(); ScorePer = Math.Round(Convert.ToDecimal(100.0 / dc), 2); @@ -127,6 +218,8 @@ namespace APT.SE.WebApi.Controllers.Api UnifiedCommit(() => { UpdateEntityNoCommit(entity); + if (listAdd != null && listAdd.Any()) + BantchSaveEntityNoCommit(listAdd); if (Detail != null && Detail.Any()) BantchSaveEntityNoCommit(Detail); if (Files != null && Files.Any()) @@ -163,6 +256,16 @@ namespace APT.SE.WebApi.Controllers.Api ANSWERSHOW = string.Empty; GetAnswerShow(item.Nav_Test, ref ANSWERSHOW); item.Nav_Test.ANSWERSHOW = ANSWERSHOW; + + item.NAME = item.Nav_Test.NAME; + item.TYPE = item.Nav_Test.TYPE; + item.OPTION_A = item.Nav_Test.OPTION_A; + item.OPTION_B = item.Nav_Test.OPTION_B; + item.OPTION_C = item.Nav_Test.OPTION_C; + item.OPTION_D = item.Nav_Test.OPTION_D; + item.OPTION_E = item.Nav_Test.OPTION_E; + item.ANSWER = item.Nav_Test.ANSWER; + item.ANSWERSHOW = item.Nav_Test.ANSWERSHOW; } } return result; @@ -179,7 +282,7 @@ namespace APT.SE.WebApi.Controllers.Api try { - if (Nav_Test != null && Nav_Test.ANSWER != 0 && ((int)Nav_Test.TYPE) != 0) + if (Nav_Test != null && Nav_Test.ANSWER != 0)// && ((int)Nav_Test.TYPE) != 0 { switch (Nav_Test.ANSWER) { @@ -192,12 +295,15 @@ namespace APT.SE.WebApi.Controllers.Api case 2: ANSWERSHOW = "B"; break; - case 3: - ANSWERSHOW = "AB"; - break; case 4: ANSWERSHOW = "C"; break; + case 8: + ANSWERSHOW = "D"; + break; + case 3: + ANSWERSHOW = "AB"; + break; case 5: ANSWERSHOW = "AC"; break; @@ -207,9 +313,6 @@ namespace APT.SE.WebApi.Controllers.Api case 7: ANSWERSHOW = "ABC"; break; - case 8: - ANSWERSHOW = "D"; - break; case 9: ANSWERSHOW = "AD"; break; @@ -688,7 +791,17 @@ namespace APT.SE.WebApi.Controllers.Api NUM = i + 1, TEST_ID = mainTable.ID, Nav_Test = mainTable, - CREATE_TIME = mainTable.CREATE_TIME + CREATE_TIME = mainTable.CREATE_TIME, + + NAME = mainTable.NAME, + TYPE = mainTable.TYPE, + OPTION_A = mainTable.OPTION_A, + OPTION_B = mainTable.OPTION_B, + OPTION_C = mainTable.OPTION_C, + OPTION_D = mainTable.OPTION_D, + OPTION_E = mainTable.OPTION_E, + ANSWER = mainTable.ANSWER, + ANSWERSHOW = mainTable.ANSWERSHOW, }); } } diff --git a/APT.MicroApi/APT.SC.WebApi/Controllers/Api/SEController/SETestController.cs b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/SEController/SETestController.cs index 6755cd6..f8d226e 100644 --- a/APT.MicroApi/APT.SC.WebApi/Controllers/Api/SEController/SETestController.cs +++ b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/SEController/SETestController.cs @@ -351,6 +351,14 @@ namespace APT.SE.WebApi.Controllers.Api List listPointNameEmpty = new List(); DateTime dtNow = DateTime.Now; + //数据库现有题目 去重判断 + List listDataAllCheck = GetEntities(e => !e.IS_DELETED, null, null).ToList(); + T_SE_TEST check = null; + List listRepeatDataIndex = new List(); + List listNameTypeError = new List(); + List listRepeatExcelIndex = new List(); + List listNameTypeEError = new List(); + for (int i = 0; i < rowAll; i++) { #region 不能为空 @@ -391,15 +399,15 @@ namespace APT.SE.WebApi.Controllers.Api var testType = dtSource.Rows[i][1].ToString().Trim(); if (!string.IsNullOrEmpty(testType)) { - if (dtSource.Rows[i][1].ToString().Trim() == "是非题") + if (testType == "是非题") { mainTable.TYPE = SETestTypeEnum.是非题; } - else if (dtSource.Rows[i][1].ToString().Trim() == "单选题") + else if (testType == "单选题") { mainTable.TYPE = SETestTypeEnum.单选题; } - else if (dtSource.Rows[i][1].ToString().Trim() == "多选题") + else if (testType == "多选题") { mainTable.TYPE = SETestTypeEnum.多选题; } @@ -412,6 +420,21 @@ namespace APT.SE.WebApi.Controllers.Api { throw new Exception("题型不能为空!"); } + + + check = listDataAllCheck.FirstOrDefault(e => e.NAME == mainTable.NAME && e.TYPE == mainTable.TYPE); + if (check != null) + { + listRepeatDataIndex.Add((i + rowIndex).ToString()); + listNameTypeError.Add(mainTable.NAME + "" + testType); + } + check = mainTables.FirstOrDefault(e => e.NAME == mainTable.NAME && e.TYPE == mainTable.TYPE); + if (check != null) + { + listRepeatExcelIndex.Add((i + rowIndex).ToString()); + listNameTypeEError.Add(mainTable.NAME + "" + testType); + } + if (!string.IsNullOrEmpty(dtSource.Rows[i][2].ToString().Trim())) { mainTable.OPTION_A = (dtSource.Rows[i][2].ToString().Trim()); @@ -437,11 +460,11 @@ namespace APT.SE.WebApi.Controllers.Api { if (mainTable.TYPE == SETestTypeEnum.是非题) { - if (strANSWER == "是" || strANSWER == "A") + if (strANSWER == "A" || strANSWER == "是" || strANSWER == "a") { mainTable.ANSWER = 1; } - else if (strANSWER == "否" || strANSWER == "B") + else if (strANSWER == "B" || strANSWER == "否" || strANSWER == "b") { mainTable.ANSWER = 2; } @@ -454,8 +477,7 @@ namespace APT.SE.WebApi.Controllers.Api listAnswerErrorIndex.Add((i + rowIndex).ToString()); } } - - if (mainTable.TYPE == SETestTypeEnum.单选题) + else if (mainTable.TYPE == SETestTypeEnum.单选题) { if (strANSWER == "A") { @@ -482,7 +504,7 @@ namespace APT.SE.WebApi.Controllers.Api listAnswerErrorIndex.Add((i + rowIndex).ToString()); } } - if (mainTable.TYPE == SETestTypeEnum.多选题) + else if (mainTable.TYPE == SETestTypeEnum.多选题) { int answer = 0; if (strANSWER.Contains("A")) @@ -598,7 +620,7 @@ namespace APT.SE.WebApi.Controllers.Api #region 提示 string strEmptyError = string.Empty; - if (listPostNameEmpty.Count > 0 || dicIndexEmpty.Count > 0 || listPointNameEmpty.Count > 0) + if (listPostNameEmpty.Count > 0 || dicIndexEmpty.Count > 0 || listPointNameEmpty.Count > 0 || listRepeatDataIndex.Count > 0 || listRepeatExcelIndex.Count > 0) { if (dicIndexEmpty.Count > 0) { @@ -629,6 +651,15 @@ namespace APT.SE.WebApi.Controllers.Api { throw new Exception("答案有误,行:【" + string.Join(",", listAnswerErrorIndex) + "】值:" + string.Join(",", listAnswerError)); } + + if (listRepeatDataIndex.Count > 0) + { + throw new Exception("与现有题库重复,行:【" + string.Join(",", listRepeatDataIndex) + "】值:" + string.Join(",", listNameTypeError)); + } + if (listRepeatExcelIndex.Count > 0) + { + throw new Exception("Excel中题目重复,行:【" + string.Join(",", listRepeatExcelIndex) + "】值:" + string.Join(",", listNameTypeEError)); + } } if (strEmptyError != string.Empty) throw new Exception(strEmptyError);