Compare commits

...

2 Commits

Author SHA1 Message Date
wyw
a8af673dc8 Merge branch 'master' of http://121.41.2.71:3000/wyw/mh_jy_safe 2026-03-26 11:30:32 +08:00
wyw
52583d19b9 1、课件添加 题目手动输入功能
2、视频与 附件 不能同时存在判断
3、课件明细 添加 ignore 字段传入后台
4、Getshow 方法修改显示 (配置也有修改)
2026-03-26 11:30:06 +08:00
4 changed files with 246 additions and 19 deletions

View File

@ -10834,6 +10834,15 @@ builder.Property(t => t.FILENAME).HasMaxLength(200);
base.Configure(builder); 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_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.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 #endregion

View File

@ -57,5 +57,79 @@ namespace APT.MS.Domain.Entities.SE
/// </summary> /// </summary>
[Description("试题")] [Description("试题")]
public T_SE_TEST Nav_Test { get; set; } 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; }
} }
} }

View File

@ -19,6 +19,69 @@ namespace APT.SE.WebApi.Controllers.Api
public partial class SECoursewearlibraryController : AuthorizeApiController<T_SE_COURSEWEARLIBRARY> 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> /// <summary>
/// 更新 /// 更新
@ -36,7 +99,6 @@ namespace APT.SE.WebApi.Controllers.Api
var Detail = entity.Nav_Detail; var Detail = entity.Nav_Detail;
entity.Nav_Detail = null; entity.Nav_Detail = null;
if (Files != null && Files.Count() > 1) if (Files != null && Files.Count() > 1)
{ {
throw new Exception("课件只能单一文件"); 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> 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_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_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) if (Detail == null || Detail.Count < 1)
{ {
throw new Exception("请添加题目!"); throw new Exception("请添加题目!");
} }
else 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 ScorePer = 0;
decimal sum = Detail.Where(e => !e.IS_DELETED).Sum(e => e.SCOREPER); 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(); int dc = Detail.Where(e => !e.IS_DELETED).Count();
ScorePer = Math.Round(Convert.ToDecimal(100.0 / dc), 2); ScorePer = Math.Round(Convert.ToDecimal(100.0 / dc), 2);
@ -127,6 +218,8 @@ namespace APT.SE.WebApi.Controllers.Api
UnifiedCommit(() => UnifiedCommit(() =>
{ {
UpdateEntityNoCommit(entity); UpdateEntityNoCommit(entity);
if (listAdd != null && listAdd.Any())
BantchSaveEntityNoCommit(listAdd);
if (Detail != null && Detail.Any()) if (Detail != null && Detail.Any())
BantchSaveEntityNoCommit(Detail); BantchSaveEntityNoCommit(Detail);
if (Files != null && Files.Any()) if (Files != null && Files.Any())
@ -163,6 +256,16 @@ namespace APT.SE.WebApi.Controllers.Api
ANSWERSHOW = string.Empty; ANSWERSHOW = string.Empty;
GetAnswerShow(item.Nav_Test, ref ANSWERSHOW); GetAnswerShow(item.Nav_Test, ref ANSWERSHOW);
item.Nav_Test.ANSWERSHOW = 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; return result;
@ -179,7 +282,7 @@ namespace APT.SE.WebApi.Controllers.Api
try 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) switch (Nav_Test.ANSWER)
{ {
@ -192,12 +295,15 @@ namespace APT.SE.WebApi.Controllers.Api
case 2: case 2:
ANSWERSHOW = "B"; ANSWERSHOW = "B";
break; break;
case 3:
ANSWERSHOW = "AB";
break;
case 4: case 4:
ANSWERSHOW = "C"; ANSWERSHOW = "C";
break; break;
case 8:
ANSWERSHOW = "D";
break;
case 3:
ANSWERSHOW = "AB";
break;
case 5: case 5:
ANSWERSHOW = "AC"; ANSWERSHOW = "AC";
break; break;
@ -207,9 +313,6 @@ namespace APT.SE.WebApi.Controllers.Api
case 7: case 7:
ANSWERSHOW = "ABC"; ANSWERSHOW = "ABC";
break; break;
case 8:
ANSWERSHOW = "D";
break;
case 9: case 9:
ANSWERSHOW = "AD"; ANSWERSHOW = "AD";
break; break;
@ -688,7 +791,17 @@ namespace APT.SE.WebApi.Controllers.Api
NUM = i + 1, NUM = i + 1,
TEST_ID = mainTable.ID, TEST_ID = mainTable.ID,
Nav_Test = mainTable, 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,
}); });
} }
} }

View File

@ -351,6 +351,14 @@ namespace APT.SE.WebApi.Controllers.Api
List<string> listPointNameEmpty = new List<string>(); List<string> listPointNameEmpty = new List<string>();
DateTime dtNow = DateTime.Now; 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++) for (int i = 0; i < rowAll; i++)
{ {
#region #region
@ -391,15 +399,15 @@ namespace APT.SE.WebApi.Controllers.Api
var testType = dtSource.Rows[i][1].ToString().Trim(); var testType = dtSource.Rows[i][1].ToString().Trim();
if (!string.IsNullOrEmpty(testType)) if (!string.IsNullOrEmpty(testType))
{ {
if (dtSource.Rows[i][1].ToString().Trim() == "是非题") if (testType == "是非题")
{ {
mainTable.TYPE = SETestTypeEnum.; mainTable.TYPE = SETestTypeEnum.;
} }
else if (dtSource.Rows[i][1].ToString().Trim() == "单选题") else if (testType == "单选题")
{ {
mainTable.TYPE = SETestTypeEnum.; mainTable.TYPE = SETestTypeEnum.;
} }
else if (dtSource.Rows[i][1].ToString().Trim() == "多选题") else if (testType == "多选题")
{ {
mainTable.TYPE = SETestTypeEnum.; mainTable.TYPE = SETestTypeEnum.;
} }
@ -412,6 +420,21 @@ namespace APT.SE.WebApi.Controllers.Api
{ {
throw new Exception("题型不能为空!"); 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())) if (!string.IsNullOrEmpty(dtSource.Rows[i][2].ToString().Trim()))
{ {
mainTable.OPTION_A = (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 (mainTable.TYPE == SETestTypeEnum.)
{ {
if (strANSWER == "" || strANSWER == "A") if (strANSWER == "A" || strANSWER == "是" || strANSWER == "a")
{ {
mainTable.ANSWER = 1; mainTable.ANSWER = 1;
} }
else if (strANSWER == "否" || strANSWER == "B") else if (strANSWER == "B" || strANSWER == "否" || strANSWER == "b")
{ {
mainTable.ANSWER = 2; mainTable.ANSWER = 2;
} }
@ -454,8 +477,7 @@ namespace APT.SE.WebApi.Controllers.Api
listAnswerErrorIndex.Add((i + rowIndex).ToString()); listAnswerErrorIndex.Add((i + rowIndex).ToString());
} }
} }
else if (mainTable.TYPE == SETestTypeEnum.)
if (mainTable.TYPE == SETestTypeEnum.)
{ {
if (strANSWER == "A") if (strANSWER == "A")
{ {
@ -482,7 +504,7 @@ namespace APT.SE.WebApi.Controllers.Api
listAnswerErrorIndex.Add((i + rowIndex).ToString()); listAnswerErrorIndex.Add((i + rowIndex).ToString());
} }
} }
if (mainTable.TYPE == SETestTypeEnum.) else if (mainTable.TYPE == SETestTypeEnum.)
{ {
int answer = 0; int answer = 0;
if (strANSWER.Contains("A")) if (strANSWER.Contains("A"))
@ -598,7 +620,7 @@ namespace APT.SE.WebApi.Controllers.Api
#region #region
string strEmptyError = string.Empty; 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) if (dicIndexEmpty.Count > 0)
{ {
@ -629,6 +651,15 @@ namespace APT.SE.WebApi.Controllers.Api
{ {
throw new Exception("答案有误,行:【" + string.Join(",", listAnswerErrorIndex) + "】值:" + string.Join(",", listAnswerError)); 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) if (strEmptyError != string.Empty)
throw new Exception(strEmptyError); throw new Exception(strEmptyError);