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);