1、课件添加 题目手动输入功能
2、视频与 附件 不能同时存在判断 3、课件明细 添加 ignore 字段传入后台 4、Getshow 方法修改显示 (配置也有修改)
This commit is contained in:
parent
5c7d2a5a0b
commit
52583d19b9
@ -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
|
||||
|
||||
@ -57,5 +57,79 @@ namespace APT.MS.Domain.Entities.SE
|
||||
/// </summary>
|
||||
[Description("试题")]
|
||||
public T_SE_TEST Nav_Test { get; set; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 题目
|
||||
/// </summary>
|
||||
[Description("题目")]
|
||||
[DataFieldIngore]
|
||||
public string NAME { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 题型
|
||||
/// </summary>
|
||||
[Description("题型")]
|
||||
[DataFieldIngore]
|
||||
public SETestTypeEnum TYPE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 选项A
|
||||
/// </summary>
|
||||
[Description("选项A")]
|
||||
[DataFieldIngore]
|
||||
public string OPTION_A { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 选项B
|
||||
/// </summary>
|
||||
[Description("选项B")]
|
||||
[DataFieldIngore]
|
||||
public string OPTION_B { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 选项C
|
||||
/// </summary>
|
||||
[Description("选项C")]
|
||||
[DataFieldIngore]
|
||||
public string OPTION_C { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 选项D
|
||||
/// </summary>
|
||||
[Description("选项D")]
|
||||
[DataFieldIngore]
|
||||
public string OPTION_D { get; set; }
|
||||
/// <summary>
|
||||
/// 选项E
|
||||
/// </summary>
|
||||
[Description("选项E")]
|
||||
[DataFieldIngore]
|
||||
public string OPTION_E { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 答案
|
||||
/// 是非题 是 1 否 2
|
||||
/// 单选题 A 1, B 2, C 4, D 8
|
||||
/// 多选题 单选位或
|
||||
/// </summary>
|
||||
[Description("答案")]
|
||||
[DataFieldIngore]
|
||||
public int ANSWER { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 答案
|
||||
/// 是非题 是 1 否 2
|
||||
/// 单选题 A 1, B 2, C 4, D 8
|
||||
/// 多选题 单选位或
|
||||
/// </summary>
|
||||
[Description("答案")]
|
||||
[DataFieldIngore]
|
||||
public string ANSWERSHOW { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,6 +19,69 @@ namespace APT.SE.WebApi.Controllers.Api
|
||||
public partial class SECoursewearlibraryController : AuthorizeApiController<T_SE_COURSEWEARLIBRARY>
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 根据str答案 获取 答案 int
|
||||
/// </summary>
|
||||
/// <param name="TYPE"></param>
|
||||
/// <param name="strAnswer"></param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新
|
||||
@ -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<T_SE_TEST> listT = new List<T_SE_TEST>();
|
||||
List<T_SE_TEST_LIST_POST> listTPost = new List<T_SE_TEST_LIST_POST>();
|
||||
List<T_SE_TEST_LIST_POINT> listTPoint = new List<T_SE_TEST_LIST_POINT>();
|
||||
List<T_SE_TEST> listAdd = new List<T_SE_TEST>();
|
||||
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,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -351,6 +351,14 @@ namespace APT.SE.WebApi.Controllers.Api
|
||||
List<string> listPointNameEmpty = new List<string>();
|
||||
DateTime dtNow = DateTime.Now;
|
||||
|
||||
//数据库现有题目 去重判断
|
||||
List<T_SE_TEST> listDataAllCheck = GetEntities<T_SE_TEST>(e => !e.IS_DELETED, null, null).ToList();
|
||||
T_SE_TEST check = null;
|
||||
List<string> listRepeatDataIndex = new List<string>();
|
||||
List<string> listNameTypeError = new List<string>();
|
||||
List<string> listRepeatExcelIndex = new List<string>();
|
||||
List<string> listNameTypeEError = new List<string>();
|
||||
|
||||
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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user