master
xiaochanghai 11 months ago
parent 024e2bd51f
commit 1f161eba9d
  1. 35
      Tiobon.Core.Api/Tiobon.Core.Model.xml
  2. 53
      Tiobon.Core.Model/Consts.cs
  3. 28
      Tiobon.Core.Services/Ghre/Ghre_ExamRecordServices.cs
  4. 6
      Tiobon.Core.Services/Ghre/Ghre_StudyRecordServices.cs
  5. 37
      Tiobon.Core.Services/Ghre/Ghre_StudyRuleServices.cs
  6. 48
      Tiobon.Core/Tiobon.Core.Model.xml

@ -12662,6 +12662,41 @@
培训记录-学习状态-已完成 培训记录-学习状态-已完成
</summary> </summary>
</member> </member>
<member name="T:Tiobon.Core.Model.Consts.DIC_EXAM_RECORD_STATUS">
<summary>
考试记录-状态
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_RECORD_STATUS.WAIT">
<summary>
待考试
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_RECORD_STATUS.EXAMING">
<summary>
考试中
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_RECORD_STATUS.EXAM_END">
<summary>
考试结束
</summary>
</member>
<member name="T:Tiobon.Core.Model.Consts.DIC_EXAM_RECORD_SCORE_STATUS">
<summary>
考试记录-评分状态
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_RECORD_SCORE_STATUS.NO_SCORE">
<summary>
评分
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_RECORD_SCORE_STATUS.HAS_SCORE">
<summary>
已评分
</summary>
</member>
<member name="F:Tiobon.Core.Model.AuthorityScopeEnum.NONE"> <member name="F:Tiobon.Core.Model.AuthorityScopeEnum.NONE">
<summary> <summary>
无任何权限 无任何权限

@ -41,8 +41,8 @@ public class Consts
/// <summary> /// <summary>
/// 学完多久 /// 学完多久
/// </summary> /// </summary>
public const string AFTER_HOW_LONG = "AfterHowLong"; public const string AFTER_HOW_LONG = "AfterHowLong";
} }
#endregion #endregion
#region 考试管理-关联类型 #region 考试管理-关联类型
@ -89,4 +89,53 @@ public class Consts
#endregion #endregion
#region 考试记录
#region 考试记录-状态
/// <summary>
/// 考试记录-状态
/// </summary>
public static class DIC_EXAM_RECORD_STATUS
{
/// <summary>
/// 待考试
/// </summary>
public const string WAIT = "Wait";
/// <summary>
/// 考试中
/// </summary>
public const string EXAMING = "Examing";
/// <summary>
/// 考试结束
/// </summary>
public const string EXAM_END = "ExamEnd";
}
#endregion
#region 考试记录-评分状态
/// <summary>
/// 考试记录-评分状态
/// </summary>
public static class DIC_EXAM_RECORD_SCORE_STATUS
{
/// <summary>
/// 评分
/// </summary>
public const string NO_SCORE = "NoScore";
/// <summary>
/// 已评分
/// </summary>
public const string HAS_SCORE = "HasScore";
}
#endregion
#endregion
} }

@ -176,7 +176,7 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
.OrderBy(x => x.TaxisNo) .OrderBy(x => x.TaxisNo)
.Where(x => x.ExamRecordDetailId != null && detailIds.Contains(x.ExamRecordDetailId.Value)) .Where(x => x.ExamRecordDetailId != null && detailIds.Contains(x.ExamRecordDetailId.Value))
.ToListAsync(); .ToListAsync();
if (record.ScoreStatus == "NoScore") if (record.ScoreStatus == Consts.DIC_EXAM_RECORD_SCORE_STATUS.NO_SCORE)
await ExamHelper.SystemMarkAsync(Db, record, details, recordAnswers); await ExamHelper.SystemMarkAsync(Db, record, details, recordAnswers);
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);
@ -303,7 +303,7 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
extend.CommentData = await Db.Ado.SqlQuerySingleAsync<CommentData>(sql); extend.CommentData = await Db.Ado.SqlQuerySingleAsync<CommentData>(sql);
if (record.ScoreStatus == "NoScore") if (record.ScoreStatus == Consts.DIC_EXAM_RECORD_SCORE_STATUS.NO_SCORE)
extend.CommentData.IsFirstTime = true; extend.CommentData.IsFirstTime = true;
extend.CommentData.Comment = record.Comment; extend.CommentData.Comment = record.Comment;
@ -326,7 +326,7 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
var record = await QuerySingle(x => x.Id == examRecordId); var record = await QuerySingle(x => x.Id == examRecordId);
record.Score = extend.StaffInfo.StaffScore; record.Score = extend.StaffInfo.StaffScore;
record.ScoreStatus = "HasScore"; record.ScoreStatus = Consts.DIC_EXAM_RECORD_SCORE_STATUS.HAS_SCORE;
record.Comment = extend.CommentData.Comment; record.Comment = extend.CommentData.Comment;
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();
@ -395,7 +395,7 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
.FirstAsync(); .FirstAsync();
if (exam.IsNull()) if (exam.IsNull())
return ServiceResult<QueryExam>.OprateFailed("该门课程尚未开启考试,联系HR !"); return ServiceResult<QueryExam>.OprateFailed("该门课程尚未开启考试,联系HR !");
var insrt = new InsertGhre_ExamRecordInput() var insrt = new InsertGhre_ExamRecordInput()
{ {
@ -406,8 +406,8 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
ExamPaperId = exam.ExamPaperId, ExamPaperId = exam.ExamPaperId,
ExamDate = DateTime.Now.Date, ExamDate = DateTime.Now.Date,
RetakeTimes = 0, RetakeTimes = 0,
Status = "Wait", Status = Consts.DIC_EXAM_RECORD_STATUS.WAIT,
ScoreStatus = "NoScore", ScoreStatus = Consts.DIC_EXAM_RECORD_SCORE_STATUS.NO_SCORE,
BeginTime = exam.BeginTime, BeginTime = exam.BeginTime,
EndTime = exam.EndTime EndTime = exam.EndTime
}; };
@ -544,7 +544,7 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
extend.CourseName = record.CourseName; extend.CourseName = record.CourseName;
extend.CanRetake = true; extend.CanRetake = true;
if (extend.ExamStatus == "ExamEnd") if (extend.ExamStatus == Consts.DIC_EXAM_RECORD_STATUS.EXAM_END)
extend.ScoreOut = false; extend.ScoreOut = false;
//TimeSpan timeDifference = record.EndTime.Value - DateTime.Now; //TimeSpan timeDifference = record.EndTime.Value - DateTime.Now;
@ -572,7 +572,7 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
return ServiceResult.OprateFailed("无效的考试ID!"); return ServiceResult.OprateFailed("无效的考试ID!");
#region 试卷 引用次数 #region 试卷 引用次数
if (entity.Status == "Wait") if (entity.Status == Consts.DIC_EXAM_RECORD_STATUS.WAIT)
{ {
string sql = $"UPDATE Ghre_ExamPaper SET LinkTimes = ISNULL(LinkTimes, 0)+1 WHERE Id={entity.ExamPaperId}"; string sql = $"UPDATE Ghre_ExamPaper SET LinkTimes = ISNULL(LinkTimes, 0)+1 WHERE Id={entity.ExamPaperId}";
await Db.Ado.ExecuteCommandAsync(sql); await Db.Ado.ExecuteCommandAsync(sql);
@ -581,8 +581,8 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
if (entity.ActualBeginTime is null) if (entity.ActualBeginTime is null)
entity.ActualBeginTime = DateTime.Now; entity.ActualBeginTime = DateTime.Now;
if (entity.Status == "Wait") if (entity.Status == Consts.DIC_EXAM_RECORD_STATUS.WAIT)
entity.Status = "Examing"; entity.Status = Consts.DIC_EXAM_RECORD_STATUS.EXAM_END;
@ -603,8 +603,8 @@ 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!");
if (entity.Status == "ExamEnd") if (entity.Status == Consts.DIC_EXAM_RECORD_STATUS.EXAM_END)
entity.Status = "Examing"; entity.Status = Consts.DIC_EXAM_RECORD_STATUS.EXAMING;
entity.RetakeTimes = entity.RetakeTimes is null ? 1 : entity.RetakeTimes + 1; entity.RetakeTimes = entity.RetakeTimes is null ? 1 : entity.RetakeTimes + 1;
@ -715,11 +715,11 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
record.Status = "ExamEnd"; record.Status = Consts.DIC_EXAM_RECORD_STATUS.EXAM_END;
record.ActualEndTime = DateTime.Now; record.ActualEndTime = DateTime.Now;
#region 打分 #region 打分
if (record.ScoreStatus == "NoScore" && record.Status == "ExamEnd") if (record.ScoreStatus == Consts.DIC_EXAM_RECORD_SCORE_STATUS.NO_SCORE && record.Status == Consts.DIC_EXAM_RECORD_STATUS.EXAM_END)
await ExamHelper.SystemMarkAsync(Db, record, recordDetails, recordDetailAnswers); await ExamHelper.SystemMarkAsync(Db, record, recordDetails, recordDetailAnswers);
_context.Ghre_ExamRecordDetail.UpdateRange(recordDetails); _context.Ghre_ExamRecordDetail.UpdateRange(recordDetails);
_context.Ghre_ExamRecordAnswer.UpdateRange(recordDetailAnswers); _context.Ghre_ExamRecordAnswer.UpdateRange(recordDetailAnswers);

@ -290,10 +290,8 @@ namespace Tiobon.Core.Services
{ {
if (x.CourseBeginDate != null && x.CourseEndDate != null) if (x.CourseBeginDate != null && x.CourseEndDate != null)
x.CourseDateString = DateTimeHelper.ConvertToDayString(x.CourseBeginDate) + "~" + DateTimeHelper.ConvertToDayString(x.CourseEndDate); x.CourseDateString = DateTimeHelper.ConvertToDayString(x.CourseBeginDate) + "~" + DateTimeHelper.ConvertToDayString(x.CourseEndDate);
if (x.CourseBeginDate != null && x.CourseEndDate != null) if (x.ExamBeginDate != null && x.ExamEndDate != null)
x.ExamDateString = DateTimeHelper.ConvertToDayString(x.ExamBeginDate) + "~" + DateTimeHelper.ConvertToDayString(x.ExamBeginDate); x.ExamDateString = DateTimeHelper.ConvertToDayString(x.ExamBeginDate) + "~" + DateTimeHelper.ConvertToDayString(x.ExamEndDate);
else
x.ExamDateString = "-";
}); });
return new ServicePageResult<Ghre_StudyRecordESS>(filter.pageNum, total, filter.pageSize, entitys); return new ServicePageResult<Ghre_StudyRecordESS>(filter.pageNum, total, filter.pageSize, entitys);

@ -200,8 +200,7 @@ public class Ghre_StudyRuleServices : BaseServices<Ghre_StudyRule, Ghre_StudyRul
await Db.Ado.BeginTranAsync(); await Db.Ado.BeginTranAsync();
var rule = await Db.Queryable<Ghre_StudyRule>().FirstAsync(x => x.Id == ruleId); var rule = await Db.Queryable<Ghre_StudyRule>().FirstAsync(x => x.Id == ruleId);
var ruleStaffs = await Db.Queryable<Ghre_StudyRuleStaff>().Where(x => x.StudyRuleId == ruleId).ToListAsync(); var ruleStaffs = await Db.Queryable<Ghre_StudyRuleStaff>().Where(x => x.StudyRuleId == ruleId).ToListAsync();
await Db.Updateable<Ghre_StudyRuleResult>().Where(x => x.StudyRuleId == ruleId && x.IsEnable == 1) await Db.Updateable<Ghre_StudyRuleResult>().Where(x => x.StudyRuleId == ruleId && x.IsEnable == 1)
@ -211,22 +210,20 @@ public class Ghre_StudyRuleServices : BaseServices<Ghre_StudyRule, Ghre_StudyRul
var ruleStaffIds = ruleStaffs.Select(x => x.StaffId).ToList(); var ruleStaffIds = ruleStaffs.Select(x => x.StaffId).ToList();
var staffs = await Db.Queryable<Ghra_Staff>() var staffs = await Db.Queryable<Ghra_Staff>()
.WhereIF(rule.ZoneId != null, x => x.ZoneID == rule.ZoneId) .WhereIF(!rule.ZoneId.IsNull(), x => x.ZoneID == rule.ZoneId)
.WhereIF(rule.DeptId != null, x => x.DeptID == rule.DeptId) .WhereIF(!rule.DeptId.IsNull(), x => x.DeptID == rule.DeptId)
.WhereIF(rule.TitleId != null, x => x.TitleID == rule.TitleId) .WhereIF(!rule.TitleId.IsNull(), x => x.TitleID == rule.TitleId)
.WhereIF(rule.GradeId != null, x => x.GradeID == rule.GradeId) .WhereIF(!rule.GradeId.IsNull(), x => x.GradeID == rule.GradeId)
.WhereIF(rule.JobId != null, x => x.JobID == rule.JobId) .WhereIF(!rule.JobId.IsNull(), x => x.JobID == rule.JobId)
.WhereIF(ruleStaffIds != null && ruleStaffIds.Any(), x => ruleStaffIds.Contains(x.StaffID)) .WhereIF(!ruleStaffIds.IsNull() && ruleStaffIds.Any(), x => ruleStaffIds.Contains(x.StaffID))
.WhereIF(rule.GradeId != null, x => x.GradeID == rule.GradeId) .WhereIF(!rule.GradeId.IsNull(), x => x.GradeID == rule.GradeId)
.ToListAsync(); .ToListAsync();
if (staffs != null) if (!staffs.IsNull())
{ {
DateTime courseTime = Db.GetDate(); DateTime courseTime = Db.GetDate();
var snap = await Db.Queryable<Ghre_CourseSnap>().FirstAsync(x => x.CourseId == rule.CourseId); var snap = await Db.Queryable<Ghre_CourseSnap>().FirstAsync(x => x.CourseId == rule.CourseId);
if (staffs.Any()) if (staffs.Any())
{ {
var inserts = new List<Ghre_StudyRecord>(); var inserts = new List<Ghre_StudyRecord>();
@ -235,10 +232,18 @@ public class Ghre_StudyRuleServices : BaseServices<Ghre_StudyRule, Ghre_StudyRul
await Db.Deleteable<Ghre_StudyRecord>().Where(x => x.StudyRuleId == ruleId && x.BeginTime == null).ExecuteCommandAsync(); await Db.Deleteable<Ghre_StudyRecord>().Where(x => x.StudyRuleId == ruleId && x.BeginTime == null).ExecuteCommandAsync();
await Db.Deleteable<Ghre_ExamStaff>().Where(x => x.StudyRuleId == ruleId).ExecuteCommandAsync(); await Db.Deleteable<Ghre_ExamStaff>().Where(x => x.StudyRuleId == ruleId).ExecuteCommandAsync();
//var exam = await Db.Queryable<Ghre_Exam>()
// .WhereIF(rule.CourseId != null, x => x.CourseId == rule.CourseId)
// .WhereIF(rule.CourseSceneId != null, x => x.CourseSceneId == rule.CourseSceneId)
// .FirstAsync(x => x.Status == Consts.DicExamStatus.RELEASED);
var exam = await Db.Queryable<Ghre_Exam>() var exam = await Db.Queryable<Ghre_Exam>()
.WhereIF(rule.CourseId != null, x => x.CourseId == rule.CourseId) .Where(x => x.Status == Consts.DicExamStatus.RELEASED
.WhereIF(rule.CourseSceneId != null, x => x.CourseSceneId == rule.CourseSceneId) && ((x.DateType == Consts.DicExamDateType.EXAM_DATE
.FirstAsync(x => x.Status == Consts.DicExamStatus.RELEASED); && x.BeginTime.Value.Date <= DateTime.Now.Date && x.EndTime.Value.Date >= DateTime.Now.Date) || x.DateType == Consts.DicExamDateType.AFTER_HOW_LONG))
.WhereIF(!rule.CourseId.IsNull(), x => x.CourseId == rule.CourseId)
.WhereIF(!rule.CourseSceneId.IsNull(), x => x.CourseSceneId == rule.CourseSceneId)
.FirstAsync();
for (int i = 0; i < staffs.Count; i++) for (int i = 0; i < staffs.Count; i++)
{ {
@ -307,10 +312,8 @@ public class Ghre_StudyRuleServices : BaseServices<Ghre_StudyRule, Ghre_StudyRul
} }
else else
{
rule.Result = "未匹配到相关关人员数据!"; rule.Result = "未匹配到相关关人员数据!";
}
await Db.Updateable<Ghre_StudyRule>().Where(x => x.Id == ruleId) await Db.Updateable<Ghre_StudyRule>().Where(x => x.Id == ruleId)
.SetColumns(it => new Ghre_StudyRule() { Result = rule.Result })//类只能在表达示里面不能提取 .SetColumns(it => new Ghre_StudyRule() { Result = rule.Result })//类只能在表达示里面不能提取
.ExecuteCommandAsync(); .ExecuteCommandAsync();

@ -12612,14 +12612,19 @@
已归档 已归档
</summary> </summary>
</member> </member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_DATE_TYPE_EXAM_DATE"> <member name="T:Tiobon.Core.Model.Consts.DicExamDateType">
<summary> <summary>
考试管理-日期类型-考试区间 考试管理-日期类型
</summary> </summary>
</member> </member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_DATE_TYPE_AFTERHOWLONG"> <member name="F:Tiobon.Core.Model.Consts.DicExamDateType.EXAM_DATE">
<summary> <summary>
考试管理-日期类型-学完多久 时间区间
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DicExamDateType.AFTER_HOW_LONG">
<summary>
学完多久
</summary> </summary>
</member> </member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_LINK_TYPE_COURSE"> <member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_LINK_TYPE_COURSE">
@ -12657,6 +12662,41 @@
培训记录-学习状态-已完成 培训记录-学习状态-已完成
</summary> </summary>
</member> </member>
<member name="T:Tiobon.Core.Model.Consts.DIC_EXAM_RECORD_STATUS">
<summary>
考试记录-状态
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_RECORD_STATUS.WAIT">
<summary>
待考试
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_RECORD_STATUS.EXAMING">
<summary>
考试中
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_RECORD_STATUS.EXAM_END">
<summary>
考试结束
</summary>
</member>
<member name="T:Tiobon.Core.Model.Consts.DIC_EXAM_RECORD_SCORE_STATUS">
<summary>
考试记录-评分状态
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_RECORD_SCORE_STATUS.NO_SCORE">
<summary>
评分
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_RECORD_SCORE_STATUS.HAS_SCORE">
<summary>
已评分
</summary>
</member>
<member name="F:Tiobon.Core.Model.AuthorityScopeEnum.NONE"> <member name="F:Tiobon.Core.Model.AuthorityScopeEnum.NONE">
<summary> <summary>
无任何权限 无任何权限

Loading…
Cancel
Save