You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Tiobon.Web.Core/Tiobon.Core.Services/Ghre/Ghre_ExamPaperServices.cs

417 lines
17 KiB

using System.Dynamic;
using AgileObjects.AgileMapper;
using SqlSugar;
using Tiobon.Core.Common.DB.Dapper.Extensions;
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
{
/// <summary>
/// 试卷 (服务)
/// </summary>
public class Ghre_ExamPaperServices : BaseServices<Ghre_ExamPaper, Ghre_ExamPaperDto, InsertGhre_ExamPaperInput, EditGhre_ExamPaperInput>, IGhre_ExamPaperServices
{
private IGhre_ExamPaperConfigServices _ghre_ExamPaperConfigServices;
private IGhre_ExamPaperQuestionServices _ghre_ExamPaperQuestionServices;
private IGhre_QuestionServices _ghre_QuestionServices;
private IGhre_QuestionAnswerServices _ghre_QuestionAnswerServices;
private readonly IBaseRepository<Ghre_ExamPaper> _dal;
public Ghre_ExamPaperServices(IBaseRepository<Ghre_ExamPaper> dal,
IGhre_ExamPaperConfigServices ghre_ExamPaperConfigServices,
IGhre_QuestionServices ghre_QuestionServices,
IGhre_QuestionAnswerServices ghre_QuestionAnswerServices,
IGhre_ExamPaperQuestionServices ghre_ExamPaperQuestionServices)
{
this._dal = dal;
base.BaseDal = dal;
_ghre_ExamPaperConfigServices = ghre_ExamPaperConfigServices;
_ghre_ExamPaperQuestionServices = ghre_ExamPaperQuestionServices;
_ghre_QuestionServices = ghre_QuestionServices;
_ghre_QuestionAnswerServices = ghre_QuestionAnswerServices;
}
public async Task<ServiceResult<DefaultGhre_ExamPaperInput>> QueryDefault(long Id)
{
var input = new DefaultGhre_ExamPaperInput();
#region baseColumns
var baseColumns = new List<DefaultGhre_ExamPaperColumn>
{
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"
},
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 = false,
multipleSelect = false,
editable = true,
dataSource = "api/Common/GetSelect/Ghre_Course"
},
new DefaultGhre_ExamPaperColumn()
{
label = "课程场景",
field = "CourseSceneId",
elementType = "ApiSelect",
required = false,
multipleSelect = false,
editable = true,
dataSource = "api/Common/GetSelect/Ghre_CourseScene"
}
};
#endregion
#region randomSetColumns
var randomSetColumns = new List<DefaultGhre_ExamPaperColumn>
{
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 = "DifficultyLevel",
elementType = "ApiSelect",
required = true,
multipleSelect = false,
editable = true,
displayType=2
},
new DefaultGhre_ExamPaperColumn()
{
label = "数量",
field = "Quantity",
elementType = "InputNumber",
required = true,
multipleSelect = false,
editable = true,
displayType=2
},
new DefaultGhre_ExamPaperColumn()
{
label = "分值",
field = "Score",
elementType = "InputNumber",
required = true,
multipleSelect = false,
editable = true,
displayType=2
}
};
#endregion
#region manualSetColumns
var manualSetColumns = new List<DefaultGhre_ExamPaperColumn>
{
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,
displayType=2
},
new DefaultGhre_ExamPaperColumn()
{
label = "分值",
field = "Score",
elementType = "InputNumber",
required = true,
multipleSelect = false,
editable = true,
displayType=2
}
};
#endregion
#region pageData
if (Id == 0)
{
dynamic baseData = new ExpandoObject();
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 = null;
baseData.CourseId = null;
baseData.CourseSceneId = null;
input.pageData.baseData = baseData;
input.pageData.examPaperSetType = "random";
}
else if (Id != 0)
{
var exampaper = await base.QueryById(Id);
dynamic baseData = new ExpandoObject();
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.LinkId;
baseData.CourseSceneId = exampaper.LinkId;
input.pageData.baseData = baseData;
input.pageData.styleInfo.coverImage = exampaper.CoverUrl;
input.pageData.styleInfo.paperStyle = exampaper.Style;
input.pageData.examPaperSetType = exampaper.SetMethod;
input.pageData.examPaperSetData = await _ghre_ExamPaperConfigServices.Query(x => x.ExamPaperId == Id);
var questions = await _ghre_ExamPaperQuestionServices.Query(x => x.ExamPaperId == Id);
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();
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();
});
x.detail = detail;
});
input.pageData.previewList = previews;
}
#endregion
input.baseColumns = baseColumns;
input.randomSetColumns = randomSetColumns;
input.manualSetColumns = manualSetColumns;
return ServiceResult<DefaultGhre_ExamPaperInput>.OprateSuccess("查询成功!", input);
}
public async Task<ServiceResult<InsertExamPaperConfigInput>> InsertConfig(InsertGhre_ExamPaperConfigInput insert)
{
var input = new InsertExamPaperConfigInput();
input.tableData = Mapper.Map(insert).ToANew<Ghre_ExamPaperConfig>();
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.DifficultyLevel}'";
var questions = await Db.Ado.SqlQueryAsync<Ghre_Question>(sql);
long parentId = SnowFlakeSingle.instance.getID();
var previews = questions.Select(x => new DefaultGhre_ExamPaperPreview()
{
Id = x.Id,
parentId = parentId,
QuestionId = x.Id,
}).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 = 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();
});
x.detail = detail;
});
input.previewList = previews;
return ServiceResult<InsertExamPaperConfigInput>.OprateSuccess("查询成功!", input);
}
}
}