|
|
@ -16,6 +16,7 @@ using Tiobon.Core.DataAccess; |
|
|
|
using System.Data; |
|
|
|
using System.Data; |
|
|
|
using static Tiobon.Core.Model.Consts; |
|
|
|
using static Tiobon.Core.Model.Consts; |
|
|
|
using Mysqlx.Crud; |
|
|
|
using Mysqlx.Crud; |
|
|
|
|
|
|
|
using MongoDB.Driver.Linq; |
|
|
|
|
|
|
|
|
|
|
|
namespace Tiobon.Core.Services; |
|
|
|
namespace Tiobon.Core.Services; |
|
|
|
|
|
|
|
|
|
|
@ -109,6 +110,7 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe |
|
|
|
|
|
|
|
|
|
|
|
entitys.ForEach(async x => |
|
|
|
entitys.ForEach(async x => |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
x.ScoreMethodLabel = await GetParaLabel("ScoreMethod", x.ScoreMethod); |
|
|
|
x.ScoreStatus = await GetParaLabel("TrainingExamScoreStatus", x.ScoreStatus); |
|
|
|
x.ScoreStatus = await GetParaLabel("TrainingExamScoreStatus", x.ScoreStatus); |
|
|
|
//x.CourseStatusLabel = await GetParaLabel("TrainingCourseStatus", x.CourseStatus); |
|
|
|
//x.CourseStatusLabel = await GetParaLabel("TrainingCourseStatus", x.CourseStatus); |
|
|
|
//x.StudyStatusLabel = await GetParaLabel("TrainingStudyStatus", x.StudyStatus); |
|
|
|
//x.StudyStatusLabel = await GetParaLabel("TrainingStudyStatus", x.StudyStatus); |
|
|
@ -362,35 +364,29 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe |
|
|
|
body.pageNum = 1; |
|
|
|
body.pageNum = 1; |
|
|
|
body.pageSize = 10000; |
|
|
|
body.pageSize = 10000; |
|
|
|
|
|
|
|
|
|
|
|
long examRecordId = 0; |
|
|
|
|
|
|
|
//if (await Db.Queryable<Ghre_Exam>().AnyAsync(x => x.Id == id)) |
|
|
|
|
|
|
|
//{ |
|
|
|
|
|
|
|
// var examRecord = await Db.Queryable<Ghre_ExamRecord>().FirstAsync(x => x.ExamId == id); |
|
|
|
|
|
|
|
// if (examRecord != null) |
|
|
|
|
|
|
|
// examRecordId = examRecord.Id; |
|
|
|
|
|
|
|
// else |
|
|
|
|
|
|
|
// { |
|
|
|
|
|
|
|
// var insrt = new InsertGhre_ExamRecordInput() |
|
|
|
|
|
|
|
// { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// }; |
|
|
|
|
|
|
|
// examRecordId = await base.Add(insrt); |
|
|
|
|
|
|
|
// } |
|
|
|
|
|
|
|
//} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var staffId = GetStaffId(); |
|
|
|
var staffId = GetStaffId(); |
|
|
|
if (await Db.Queryable<Ghre_StudyRecord>().AnyAsync(x => x.Id == id)) |
|
|
|
|
|
|
|
|
|
|
|
long? examRecordId = null; |
|
|
|
|
|
|
|
Ghre_StudyRecord studyRecord = null; |
|
|
|
|
|
|
|
if (await Db.Queryable<Ghre_Exam>().AnyAsync(x => x.Id == id)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
var examRecord = await Db.Queryable<Ghre_ExamRecord>().FirstAsync(x => x.StudyRecordId == id); |
|
|
|
studyRecord = await Db.Queryable<Ghre_StudyRecord>().FirstAsync(x => x.ExamId == id && x.StaffId == staffId); |
|
|
|
|
|
|
|
if (studyRecord != null) |
|
|
|
|
|
|
|
id = studyRecord.Id; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Ghre_Exam exam = null; |
|
|
|
|
|
|
|
if (await Db.Queryable<Ghre_StudyRecord>().AnyAsync(x => x.Id == id && x.StaffId == staffId)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
var examRecord = await Db.Queryable<Ghre_ExamRecord>().FirstAsync(x => x.StudyRecordId == id && x.StaffId == staffId); |
|
|
|
|
|
|
|
|
|
|
|
if (!examRecord.IsNull()) |
|
|
|
if (!examRecord.IsNull()) |
|
|
|
examRecordId = examRecord.Id; |
|
|
|
examRecordId = examRecord.Id; |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
var studyRecord = await Db.Queryable<Ghre_StudyRecord>().FirstAsync(x => x.Id == id); |
|
|
|
studyRecord = await Db.Queryable<Ghre_StudyRecord>().FirstAsync(x => x.Id == id && x.StaffId == staffId); |
|
|
|
|
|
|
|
|
|
|
|
var exam = await Db.Queryable<Ghre_Exam>() |
|
|
|
exam = await Db.Queryable<Ghre_Exam>() |
|
|
|
.Where(x => x.Id == studyRecord.ExamId) |
|
|
|
.Where(x => x.Id == studyRecord.ExamId) |
|
|
|
.FirstAsync(x => x.Status == Consts.DIC_EXAM_STATUS.RELEASED); |
|
|
|
.FirstAsync(x => x.Status == Consts.DIC_EXAM_STATUS.RELEASED); |
|
|
|
if (exam.IsNull()) |
|
|
|
if (exam.IsNull()) |
|
|
@ -429,20 +425,42 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (examRecordId == 0) examRecordId = id; |
|
|
|
if (examRecordId == 0) examRecordId = id; |
|
|
|
|
|
|
|
|
|
|
|
var records = await QueryFilterPage(body, $"Id='{examRecordId}' AND StaffId='{staffId}'"); |
|
|
|
var records = await QueryFilterPage(body, $"Id='{examRecordId}' AND StaffId='{staffId}'"); |
|
|
|
|
|
|
|
|
|
|
|
if (!records.result.DT_TableDataT1.Any()) |
|
|
|
if (!records.result.DT_TableDataT1.Any()) |
|
|
|
return ServiceResult<QueryExam>.OprateFailed("无效的考试ID!"); |
|
|
|
return ServiceResult<QueryExam>.OprateFailed("无效的考试链接!"); |
|
|
|
|
|
|
|
|
|
|
|
var record = records.result.DT_TableDataT1.FirstOrDefault(); |
|
|
|
var record = records.result.DT_TableDataT1.FirstOrDefault(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (studyRecord.IsNull()) |
|
|
|
|
|
|
|
studyRecord = await Db.Queryable<Ghre_StudyRecord>().FirstAsync(x => x.Id == record.StudyRecordId); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (studyRecord.StudyProgress.IsNull() || (!studyRecord.StudyProgress.IsNull() && studyRecord.StudyProgress < 100)) |
|
|
|
|
|
|
|
return ServiceResult<QueryExam>.OprateFailed("学习尚未结束暂不可考试!"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (exam.IsNull()) |
|
|
|
|
|
|
|
exam = await Db.Queryable<Ghre_Exam>() |
|
|
|
|
|
|
|
.Where(x => x.Id == studyRecord.ExamId) |
|
|
|
|
|
|
|
.FirstAsync(x => x.Status == Consts.DIC_EXAM_STATUS.RELEASED); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (exam.IsNull()) |
|
|
|
|
|
|
|
return ServiceResult<QueryExam>.OprateFailed("该门课程尚未开启考试,请联系HR !"); |
|
|
|
|
|
|
|
|
|
|
|
var dt = Db.GetDate(); |
|
|
|
var dt = Db.GetDate(); |
|
|
|
|
|
|
|
if (exam.DateType == Consts.DicExamDateType.AFTER_HOW_LONG) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
record.BeginTime = studyRecord?.EndTime; |
|
|
|
|
|
|
|
if (!record.BeginTime.IsNull()) |
|
|
|
|
|
|
|
record.EndTime = record.BeginTime.Value.AddDays(exam.AfterHowLong ?? 7); |
|
|
|
|
|
|
|
} |
|
|
|
if (!(record.BeginTime.Value.Date <= dt.Date && record.EndTime.Value.Date >= dt.Date)) |
|
|
|
if (!(record.BeginTime.Value.Date <= dt.Date && record.EndTime.Value.Date >= dt.Date)) |
|
|
|
return ServiceResult<QueryExam>.OprateFailed("考试已结束!"); |
|
|
|
return ServiceResult<QueryExam>.OprateFailed("考试已结束!"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var details = await Db.Queryable<Ghre_ExamRecordDetail>().Where(x => x.ExamRecordId == record.Id).ToListAsync(); |
|
|
|
var details = await Db.Queryable<Ghre_ExamRecordDetail>().Where(x => x.ExamRecordId == record.Id).ToListAsync(); |
|
|
|
var detailIds = details.Select(x => x.Id).ToList(); |
|
|
|
var detailIds = details.Select(x => x.Id).ToList(); |
|
|
|
var recordAnswers = await Db.Queryable<Ghre_ExamRecordAnswer>() |
|
|
|
var recordAnswers = await Db.Queryable<Ghre_ExamRecordAnswer>() |
|
|
@ -640,8 +658,20 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe |
|
|
|
|
|
|
|
|
|
|
|
if (entity is null) |
|
|
|
if (entity is null) |
|
|
|
return ServiceResult.OprateFailed("无效的考试ID!"); |
|
|
|
return ServiceResult.OprateFailed("无效的考试ID!"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var exam = await Db.Queryable<Ghre_Exam>() |
|
|
|
|
|
|
|
.Where(x => x.Id == entity.ExamId) |
|
|
|
|
|
|
|
.FirstAsync(x => x.Status == Consts.DIC_EXAM_STATUS.RELEASED); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var studyRecord = await Db.Queryable<Ghre_StudyRecord>().FirstAsync(x => x.Id == entity.StudyRecordId); |
|
|
|
|
|
|
|
if (exam.DateType == Consts.DicExamDateType.AFTER_HOW_LONG) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
entity.BeginTime = studyRecord?.EndTime; |
|
|
|
|
|
|
|
if (!entity.BeginTime.IsNull()) |
|
|
|
|
|
|
|
entity.EndTime = entity.BeginTime.Value.AddDays(exam.AfterHowLong ?? 7); |
|
|
|
|
|
|
|
} |
|
|
|
var dt = Db.GetDate(); |
|
|
|
var dt = Db.GetDate(); |
|
|
|
if (!(entity.BeginTime.Value <= dt.Date && entity.EndTime.Value >= dt.Date)) |
|
|
|
if (!(entity.BeginTime.Value.Date <= dt.Date && entity.EndTime.Value.Date >= dt.Date)) |
|
|
|
return ServiceResult.OprateFailed("考试已结束!"); |
|
|
|
return ServiceResult.OprateFailed("考试已结束!"); |
|
|
|
|
|
|
|
|
|
|
|
#region 试卷 引用次数 |
|
|
|
#region 试卷 引用次数 |
|
|
@ -702,8 +732,21 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe |
|
|
|
var exampaper = await Db.Queryable<Ghre_ExamPaper>().FirstAsync(x => x.Id == record.ExamPaperId); |
|
|
|
var exampaper = await Db.Queryable<Ghre_ExamPaper>().FirstAsync(x => x.Id == record.ExamPaperId); |
|
|
|
|
|
|
|
|
|
|
|
var dt = Db.GetDate(); |
|
|
|
var dt = Db.GetDate(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var exam = await Db.Queryable<Ghre_Exam>() |
|
|
|
|
|
|
|
.Where(x => x.Id == record.ExamId) |
|
|
|
|
|
|
|
.FirstAsync(x => x.Status == Consts.DIC_EXAM_STATUS.RELEASED); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var studyRecord = await Db.Queryable<Ghre_StudyRecord>().FirstAsync(x => x.Id == record.StudyRecordId); |
|
|
|
|
|
|
|
if (exam.DateType == Consts.DicExamDateType.AFTER_HOW_LONG) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
record.BeginTime = studyRecord?.EndTime; |
|
|
|
|
|
|
|
if (!record.BeginTime.IsNull()) |
|
|
|
|
|
|
|
record.EndTime = record.BeginTime.Value.AddDays(exam.AfterHowLong ?? 7); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var endTime = record.EndTime.Value.AddDays(1).AddSeconds(9); |
|
|
|
var endTime = record.EndTime.Value.AddDays(1).AddSeconds(9); |
|
|
|
if (!(record.BeginTime <= dt && record.EndTime >= dt)) |
|
|
|
if (!(record.BeginTime.Value.Date <= dt.Date && record.EndTime.Value.Date >= dt.Date)) |
|
|
|
return ServiceResult.OprateFailed("考试已结束!"); |
|
|
|
return ServiceResult.OprateFailed("考试已结束!"); |
|
|
|
|
|
|
|
|
|
|
|
string sql = $@"UPDATE Ghre_ExamRecordDetail set IsEnable=0 where ExamRecordId='{record.Id}';
|
|
|
|
string sql = $@"UPDATE Ghre_ExamRecordDetail set IsEnable=0 where ExamRecordId='{record.Id}';
|
|
|
|