master
xiaochanghai 11 months ago
parent 1f161eba9d
commit e0789936a3
  1. 23
      Tiobon.Core.Api/Tiobon.Core.Model.xml
  2. 26
      Tiobon.Core.Model/Consts.cs
  3. 4
      Tiobon.Core.Services/Ghre/Ghre_ExamRecordServices.cs
  4. 104
      Tiobon.Core.Services/Ghre/Ghre_ExamServices.cs
  5. 3
      Tiobon.Core.Services/Ghre/Ghre_StudyRecordServices.cs
  6. 6
      Tiobon.Core.Services/Ghre/Ghre_StudyRuleServices.cs
  7. 23
      Tiobon.Core/Tiobon.Core.Model.xml

@ -12592,22 +12592,22 @@
全局常量 全局常量
</summary> </summary>
</member> </member>
<member name="T:Tiobon.Core.Model.Consts.DicExamStatus"> <member name="T:Tiobon.Core.Model.Consts.DIC_EXAM_STATUS">
<summary> <summary>
考试管理-状态 考试管理-状态
</summary> </summary>
</member> </member>
<member name="F:Tiobon.Core.Model.Consts.DicExamStatus.DRAFT"> <member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_STATUS.DRAFT">
<summary> <summary>
草稿箱 草稿箱
</summary> </summary>
</member> </member>
<member name="F:Tiobon.Core.Model.Consts.DicExamStatus.RELEASED"> <member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_STATUS.RELEASED">
<summary> <summary>
已发布 已发布
</summary> </summary>
</member> </member>
<member name="F:Tiobon.Core.Model.Consts.DicExamStatus.DISABLED"> <member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_STATUS.DISABLED">
<summary> <summary>
已归档 已归档
</summary> </summary>
@ -12637,6 +12637,21 @@
考试管理-关联类型-場景 考试管理-关联类型-場景
</summary> </summary>
</member> </member>
<member name="T:Tiobon.Core.Model.Consts.DIC_EXAM_STAFF_SOURCE">
<summary>
考试管理-人员来源
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_STAFF_SOURCE.MANUAL_REQUIRED">
<summary>
手动必修
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_STAFF_SOURCE.STUDY_RULE_REQUIRED">
<summary>
必修规则
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_STUDY_RECORD_COURSE_STATUS_IN"> <member name="F:Tiobon.Core.Model.Consts.DIC_STUDY_RECORD_COURSE_STATUS_IN">
<summary> <summary>
培训记录-课程状态-进行中 培训记录-课程状态-进行中

@ -5,12 +5,13 @@
/// </summary> /// </summary>
public class Consts public class Consts
{ {
#region 考试管理-日期类型
#region 考试管理-状态 #region 考试管理-状态
/// <summary> /// <summary>
/// 考试管理-状态 /// 考试管理-状态
/// </summary> /// </summary>
public static class DicExamStatus public static class DIC_EXAM_STATUS
{ {
/// <summary> /// <summary>
/// 草稿箱 /// 草稿箱
@ -56,6 +57,28 @@ public class Consts
public const string DIC_EXAM_DATE_TYPE_COURSE_SCENE = "CourseSceneId"; public const string DIC_EXAM_DATE_TYPE_COURSE_SCENE = "CourseSceneId";
#endregion #endregion
#region 考试管理-人员来源
/// <summary>
/// 考试管理-人员来源
/// </summary>
public static class DIC_EXAM_STAFF_SOURCE
{
/// <summary>
/// 手动必修
/// </summary>
public const string MANUAL_REQUIRED = "ManualRequired";
/// <summary>
/// 必修规则
/// </summary>
public const string STUDY_RULE_REQUIRED = "StudyRuleRequired";
}
#endregion
#endregion
#region 培训记录-课程状态 #region 培训记录-课程状态
/// <summary> /// <summary>
@ -89,7 +112,6 @@ public class Consts
#endregion #endregion
#region 考试记录 #region 考试记录
#region 考试记录-状态 #region 考试记录-状态

@ -384,10 +384,10 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
var exam = await Db.Queryable<Ghre_Exam>() var exam = await Db.Queryable<Ghre_Exam>()
.Where(x => x.Id == studyRecord.ExamId) .Where(x => x.Id == studyRecord.ExamId)
.FirstAsync(x => x.Status == Consts.DicExamStatus.RELEASED); .FirstAsync(x => x.Status == Consts.DIC_EXAM_STATUS.RELEASED);
if (exam.IsNull()) if (exam.IsNull())
exam = await Db.Queryable<Ghre_Exam>() exam = await Db.Queryable<Ghre_Exam>()
.Where(x => x.Status == Consts.DicExamStatus.RELEASED .Where(x => x.Status == Consts.DIC_EXAM_STATUS.RELEASED
&& ((x.DateType == Consts.DicExamDateType.EXAM_DATE && ((x.DateType == Consts.DicExamDateType.EXAM_DATE
&& x.BeginTime.Value.Date <= DateTime.Now.Date && x.EndTime.Value.Date >= DateTime.Now.Date) || x.DateType == Consts.DicExamDateType.AFTER_HOW_LONG)) && x.BeginTime.Value.Date <= DateTime.Now.Date && x.EndTime.Value.Date >= DateTime.Now.Date) || x.DateType == Consts.DicExamDateType.AFTER_HOW_LONG))
.WhereIF(!studyRecord.CourseId.IsNull(), x => x.CourseId == studyRecord.CourseId) .WhereIF(!studyRecord.CourseId.IsNull(), x => x.CourseId == studyRecord.CourseId)

@ -17,6 +17,7 @@ using MongoDB.Driver.Linq;
using Tiobon.Core.Common.DB.Dapper; using Tiobon.Core.Common.DB.Dapper;
using Tiobon.Core.Common.Helper; using Tiobon.Core.Common.Helper;
using System.Data; using System.Data;
using Snappier;
namespace Tiobon.Core.Services; namespace Tiobon.Core.Services;
@ -717,19 +718,19 @@ public class Ghre_ExamServices : BaseServices<Ghre_Exam, Ghre_ExamDto, InsertGhr
{ {
x.ExamName = x.ExamName + "(" + x.ExamNo + ")"; x.ExamName = x.ExamName + "(" + x.ExamNo + ")";
if (x.Status == Consts.DicExamStatus.RELEASED || x.Status == Consts.DicExamStatus.DISABLED) if (x.Status == Consts.DIC_EXAM_STATUS.RELEASED || x.Status == Consts.DIC_EXAM_STATUS.DISABLED)
{ {
x.canEdit = 0; x.canEdit = 0;
x.canDelete = 0; x.canDelete = 0;
} }
if (x.Status == Consts.DicExamStatus.DRAFT) if (x.Status == Consts.DIC_EXAM_STATUS.DRAFT)
{ {
x.showLink = 0; x.showLink = 0;
x.showResult = 0; x.showResult = 0;
x.canClose = 0; x.canClose = 0;
} }
if (x.Status == Consts.DicExamStatus.DISABLED) if (x.Status == Consts.DIC_EXAM_STATUS.DISABLED)
{ {
x.canClose = 0; x.canClose = 0;
x.canPreview = 0; x.canPreview = 0;
@ -1042,17 +1043,17 @@ public class Ghre_ExamServices : BaseServices<Ghre_Exam, Ghre_ExamDto, InsertGhr
//var list = await _ghra_StaffSceneServices.Query(x => Ids.Contains(x.StaffID)); //var list = await _ghra_StaffSceneServices.Query(x => Ids.Contains(x.StaffID));
var data = await Db.Ado.SqlQueryAsync<StaffTableData>(sql); var data = await Db.Ado.SqlQueryAsync<StaffTableData>(sql);
//var data = list.Select(x => new StaffTableData() data.ForEach(x =>
//{ {
// StaffID = x.StaffID, if (x.DataSource.IsNull())
// StaffNo = x.StaffNo, {
// StaffName = x.StaffName, x.DataSource = Consts.DIC_EXAM_STAFF_SOURCE.MANUAL_REQUIRED;
// Mail = x.Email x.DataSourceLabel = "手动必修";
//}).ToList();
return ServiceResult<List<StaffTableData>>.OprateSuccess("查询成功!", data);
} }
});
return ServiceResult<List<StaffTableData>>.OprateSuccess("查询成功!", data);
}
public async Task<ServiceResult<List<StaffTableData>>> QueryStaff1(long examId) public async Task<ServiceResult<List<StaffTableData>>> QueryStaff1(long examId)
{ {
@ -1076,9 +1077,12 @@ public class Ghre_ExamServices : BaseServices<Ghre_Exam, Ghre_ExamDto, InsertGhr
var data = await Db.Ado.SqlQueryAsync<StaffTableData>(sql); var data = await Db.Ado.SqlQueryAsync<StaffTableData>(sql);
data.ForEach(x => data.ForEach(x =>
{ {
if (x.DataSource == "ManualRequired") if (x.DataSource.IsNull())
x.DataSource = Consts.DIC_EXAM_STAFF_SOURCE.MANUAL_REQUIRED;
if (x.DataSource == Consts.DIC_EXAM_STAFF_SOURCE.MANUAL_REQUIRED)
x.DataSourceLabel = "手动必修"; x.DataSourceLabel = "手动必修";
else if (x.DataSource == "StudyRuleRequired") else if (x.DataSource == Consts.DIC_EXAM_STAFF_SOURCE.STUDY_RULE_REQUIRED)
x.DataSourceLabel = "必修规则"; x.DataSourceLabel = "必修规则";
}); });
@ -1104,17 +1108,17 @@ public class Ghre_ExamServices : BaseServices<Ghre_Exam, Ghre_ExamDto, InsertGhr
if (id == 0) if (id == 0)
{ {
if (string.IsNullOrEmpty(pageData.Status)) if (string.IsNullOrEmpty(pageData.Status))
pageData.Status = Consts.DicExamStatus.DRAFT; pageData.Status = Consts.DIC_EXAM_STATUS.DRAFT;
var insert = Mapper.Map(pageData).ToANew<InsertGhre_ExamInput>(); var insert = Mapper.Map(pageData).ToANew<InsertGhre_ExamInput>();
id = await base.Add(insert); id = await base.Add(insert);
var insertStaffs = pageData.staffTableData var insertStaffs = pageData.staffTableData
.Where(x => x.DataSource == "Manual") .Where(x => x.DataSource == Consts.DIC_EXAM_STAFF_SOURCE.MANUAL_REQUIRED)
.Select(x => new InsertGhre_ExamStaffInput() .Select(x => new InsertGhre_ExamStaffInput()
{ {
ExamId = id, ExamId = id,
StaffId = x.StaffID, StaffId = x.StaffID,
Source = "Manual" Source = x.DataSource ?? Consts.DIC_EXAM_STAFF_SOURCE.MANUAL_REQUIRED
}).ToList(); }).ToList();
await _ghre_ExamStaffServices.Add(insertStaffs); await _ghre_ExamStaffServices.Add(insertStaffs);
@ -1133,12 +1137,12 @@ public class Ghre_ExamServices : BaseServices<Ghre_Exam, Ghre_ExamDto, InsertGhr
} }
var insert = Mapper.Map(pageData).ToANew<EditGhre_ExamInput>(); var insert = Mapper.Map(pageData).ToANew<EditGhre_ExamInput>();
await base.Update(id, insert); await base.Update(id, insert);
await _ghre_ExamStaffServices.Delete(x => x.ExamId == id && x.Source == "Manual"); await _ghre_ExamStaffServices.Delete(x => x.ExamId == id && (x.Source == Consts.DIC_EXAM_STAFF_SOURCE.MANUAL_REQUIRED || x.Source == null));
var insertStaffs = pageData.staffTableData.Where(x => x.DataSource == "Manual").Select(x => new InsertGhre_ExamStaffInput() var insertStaffs = pageData.staffTableData.Where(x => x.DataSource == Consts.DIC_EXAM_STAFF_SOURCE.MANUAL_REQUIRED).Select(x => new InsertGhre_ExamStaffInput()
{ {
ExamId = id, ExamId = id,
StaffId = x.StaffID, StaffId = x.StaffID,
Source = "Manual" Source = x.DataSource ?? Consts.DIC_EXAM_STAFF_SOURCE.MANUAL_REQUIRED
}).ToList(); }).ToList();
await _ghre_ExamStaffServices.Add(insertStaffs); await _ghre_ExamStaffServices.Add(insertStaffs);
@ -1150,7 +1154,7 @@ public class Ghre_ExamServices : BaseServices<Ghre_Exam, Ghre_ExamDto, InsertGhr
public async Task<ServiceResult> UpdateStatus(long[] ids, string status) public async Task<ServiceResult> UpdateStatus(long[] ids, string status)
{ {
if (status == Consts.DicExamStatus.DRAFT) if (status == Consts.DIC_EXAM_STATUS.DRAFT)
{ {
string sql = $@"SELECT A.RoleId, B.RoleNo, B.RoleName string sql = $@"SELECT A.RoleId, B.RoleNo, B.RoleName
FROM Ghrs_UserRole A LEFT JOIN Ghrs_Role B ON A.RoleId = B.RoleId FROM Ghrs_UserRole A LEFT JOIN Ghrs_Role B ON A.RoleId = B.RoleId
@ -1163,7 +1167,7 @@ public class Ghre_ExamServices : BaseServices<Ghre_Exam, Ghre_ExamDto, InsertGhr
return ServiceResult.OprateFailed("暂无取消发布权限!"); return ServiceResult.OprateFailed("暂无取消发布权限!");
} }
if (status != Consts.DicExamStatus.RELEASED && status != Consts.DicExamStatus.DISABLED && status != Consts.DicExamStatus.DRAFT) if (status != Consts.DIC_EXAM_STATUS.RELEASED && status != Consts.DIC_EXAM_STATUS.DISABLED && status != Consts.DIC_EXAM_STATUS.DRAFT)
throw new Exception("无效的状态"); throw new Exception("无效的状态");
HttpRequest request = UserContext.Context.Request; HttpRequest request = UserContext.Context.Request;
@ -1182,10 +1186,10 @@ public class Ghre_ExamServices : BaseServices<Ghre_Exam, Ghre_ExamDto, InsertGhr
ent.UpdateIP = ip; ent.UpdateIP = ip;
ent.UpdateProg = api; ent.UpdateProg = api;
if (entity.Status == Consts.DicExamStatus.RELEASED && status == Consts.DicExamStatus.DRAFT && await _ghre_ExamRecordServices.AnyAsync(x => x.ExamId == id && x.Status == "UnderWay")) if (entity.Status == Consts.DIC_EXAM_STATUS.RELEASED && status == Consts.DIC_EXAM_STATUS.DRAFT && await _ghre_ExamRecordServices.AnyAsync(x => x.ExamId == id && x.Status == "UnderWay"))
return ServiceResult.OprateFailed("已有学员参与考试,不可取消发布!"); return ServiceResult.OprateFailed("已有学员参与考试,不可取消发布!");
if (entity.Status == Consts.DicExamStatus.DISABLED && status == Consts.DicExamStatus.RELEASED) if (entity.Status == Consts.DIC_EXAM_STATUS.DISABLED && status == Consts.DIC_EXAM_STATUS.RELEASED)
{ {
if (entity.LinkType == "CourseId") if (entity.LinkType == "CourseId")
{ {
@ -1193,30 +1197,29 @@ public class Ghre_ExamServices : BaseServices<Ghre_Exam, Ghre_ExamDto, InsertGhr
if (course is null) if (course is null)
return ServiceResult.OprateFailed("该考试关联的课程已被删除,暂不可取消归档!"); return ServiceResult.OprateFailed("该考试关联的课程已被删除,暂不可取消归档!");
if (course.Status != Consts.DicExamStatus.RELEASED) if (course.Status != Consts.DIC_EXAM_STATUS.RELEASED)
return ServiceResult.OprateFailed($"该考试关联的课程【{course.CourseName}({course.CourseNo})】状态为【{(course.Status == Consts.DicExamStatus.DISABLED ? "" : "稿")}】,暂不可取消归档!"); return ServiceResult.OprateFailed($"该考试关联的课程【{course.CourseName}({course.CourseNo})】状态为【{(course.Status == Consts.DIC_EXAM_STATUS.DISABLED ? "" : "稿")}】,暂不可取消归档!");
} }
var examPaper = await _ghre_ExamPaperServices.QueryById(entity.ExamPaperId); var examPaper = await _ghre_ExamPaperServices.QueryById(entity.ExamPaperId);
if (examPaper is null) if (examPaper is null)
return ServiceResult.OprateFailed("该考试关联的试卷已被删除,暂不可取消归档!"); return ServiceResult.OprateFailed("该考试关联的试卷已被删除,暂不可取消归档!");
if (examPaper.Status != Consts.DicExamStatus.RELEASED) if (examPaper.Status != Consts.DIC_EXAM_STATUS.RELEASED)
return ServiceResult.OprateFailed($"该考试关联的试卷【{examPaper.PaperName}({examPaper.PaperNo})】状态为【{(examPaper.Status == Consts.DicExamStatus.DISABLED ? "" : "稿")}】,暂不可取消归档!"); return ServiceResult.OprateFailed($"该考试关联的试卷【{examPaper.PaperName}({examPaper.PaperNo})】状态为【{(examPaper.Status == Consts.DIC_EXAM_STATUS.DISABLED ? "" : "稿")}】,暂不可取消归档!");
} }
if (entity.LinkType == Consts.DIC_EXAM_LINK_TYPE_COURSE) if (entity.LinkType == Consts.DIC_EXAM_LINK_TYPE_COURSE)
{ {
#region 校验同一个课程下 考试时间不允许重叠 #region 校验同一个课程下 考试时间不允许重叠
var exams = await base.Query(x => x.Status == Consts.DicExamStatus.RELEASED && x.CourseId == entity.CourseId && x.Id != id); var exams = await base.Query(x => x.Status == Consts.DIC_EXAM_STATUS.RELEASED && x.CourseId == entity.CourseId && x.Id != id);
if (exams.Any()) if (exams.Any())
for (int i = 0; i < exams.Count; i++) for (int i = 0; i < exams.Count; i++)
{ {
var exam = exams[i]; var exam = exams[i];
var course = await _ghre_CourseServices.QuerySingle(entity.CourseId); var course = await _ghre_CourseServices.QuerySingle(entity.CourseId);
if (exam.DateType != entity.DateType || exam.DateType == Consts.DicExamDateType.AFTER_HOW_LONG) if (exam.DateType != entity.DateType || exam.DateType == Consts.DicExamDateType.AFTER_HOW_LONG)
{
return ServiceResult.OprateFailed($"课程【{course.CourseName}】已存在有效的考试管理数据【{exam.ExamName}({exam.ExamNo})】!"); return ServiceResult.OprateFailed($"课程【{course.CourseName}】已存在有效的考试管理数据【{exam.ExamName}({exam.ExamNo})】!");
}
else if (exam.DateType == Consts.DicExamDateType.EXAM_DATE) else if (exam.DateType == Consts.DicExamDateType.EXAM_DATE)
{ {
if ((entity.BeginTime >= exam.BeginTime && entity.BeginTime <= exam.EndTime) if ((entity.BeginTime >= exam.BeginTime && entity.BeginTime <= exam.EndTime)
@ -1231,19 +1234,21 @@ public class Ghre_ExamServices : BaseServices<Ghre_Exam, Ghre_ExamDto, InsertGhr
else else
{ {
#region 校验同一个课程场景下 考试时间不允许重叠 #region 校验同一个课程场景下 考试时间不允许重叠
var exams = await base.Query(x => x.Status == Consts.DicExamStatus.RELEASED && x.CourseSceneId == entity.CourseSceneId && x.Id != id); var exams = await base.Query(x => x.Status == Consts.DIC_EXAM_STATUS.RELEASED && x.CourseSceneId == entity.CourseSceneId && x.Id != id);
if (exams.Any()) if (exams.Any())
for (int i = 0; i < exams.Count; i++) for (int i = 0; i < exams.Count; i++)
{ {
var exam = exams[i]; var exam = exams[i];
var course = await _ghre_CourseSceneServices.QuerySingle(entity.CourseSceneId); var course = await _ghre_CourseSceneServices.QuerySingle(entity.CourseSceneId);
if (exam.DateType != entity.DateType || exam.DateType == Consts.DicExamDateType.AFTER_HOW_LONG) if (exam.DateType != entity.DateType || exam.DateType == Consts.DicExamDateType.AFTER_HOW_LONG)
{
return ServiceResult.OprateFailed($"课程场景【{course.CourseName}】已存在有效的考试管理数据【{exam.ExamName}({exam.ExamNo})】!"); return ServiceResult.OprateFailed($"课程场景【{course.CourseName}】已存在有效的考试管理数据【{exam.ExamName}({exam.ExamNo})】!");
}
else if (exam.DateType == Consts.DicExamDateType.EXAM_DATE) else if (exam.DateType == Consts.DicExamDateType.EXAM_DATE)
{ {
if ((entity.BeginTime >= exam.BeginTime && entity.BeginTime <= exam.EndTime) || (entity.EndTime >= exam.BeginTime && entity.EndTime <= exam.EndTime)) if ((entity.BeginTime >= exam.BeginTime && entity.BeginTime <= exam.EndTime)
|| (entity.EndTime >= exam.BeginTime && entity.EndTime <= exam.EndTime)
|| (exam.EndTime >= entity.BeginTime && exam.EndTime <= entity.EndTime)
|| (exam.EndTime >= entity.BeginTime && exam.EndTime <= entity.EndTime))
return ServiceResult.OprateFailed($"课程场景【{course.CourseName}】已存在有效的考试管理数据【{exam.ExamName}({exam.ExamNo})】时间重叠!"); return ServiceResult.OprateFailed($"课程场景【{course.CourseName}】已存在有效的考试管理数据【{exam.ExamName}({exam.ExamNo})】时间重叠!");
} }
} }
@ -1251,10 +1256,11 @@ public class Ghre_ExamServices : BaseServices<Ghre_Exam, Ghre_ExamDto, InsertGhr
} }
#region 生成学习记录 #region 生成学习记录
if (status == Consts.DicExamStatus.RELEASED && entity.Status == Consts.DicExamStatus.DRAFT) if (status == Consts.DIC_EXAM_STATUS.RELEASED && entity.Status == Consts.DIC_EXAM_STATUS.DRAFT)
{ {
var staffs = await _ghre_ExamStaffServices.Query(x => x.ExamId == id && x.Source == "Manual"); var staffs = await _ghre_ExamStaffServices.Query(x => x.ExamId == id && x.Source == Consts.DIC_EXAM_STAFF_SOURCE.MANUAL_REQUIRED);
var inserts = new List<Ghre_StudyRecord>(); var inserts = new List<Ghre_StudyRecord>();
;
var snap = await Db.Queryable<Ghre_CourseSnap>().FirstAsync(x => x.CourseId == entity.CourseId); var snap = await Db.Queryable<Ghre_CourseSnap>().FirstAsync(x => x.CourseId == entity.CourseId);
DateTime courseTime = Db.GetDate(); DateTime courseTime = Db.GetDate();
for (int i = 0; i < staffs.Count; i++) for (int i = 0; i < staffs.Count; i++)
@ -1269,20 +1275,28 @@ public class Ghre_ExamServices : BaseServices<Ghre_Exam, Ghre_ExamDto, InsertGhr
CourseId = entity.CourseId, CourseId = entity.CourseId,
CourseSceneId = entity.CourseSceneId, CourseSceneId = entity.CourseSceneId,
JoinTime = courseTime, JoinTime = courseTime,
CourseBeginTime = courseTime, CourseBeginTime = courseTime.Date,
CourseEndTime = courseTime.AddMonths(3), CourseEndTime = courseTime.Date.AddMonths(snap?.ValidityPeriod ?? 1),
CourseType = "ManualRequired", CourseType = Consts.DIC_EXAM_STAFF_SOURCE.MANUAL_REQUIRED,
CourseStatus = Consts.DIC_STUDY_RECORD_COURSE_STATUS_IN, CourseStatus = Consts.DIC_STUDY_RECORD_COURSE_STATUS_IN,
StudyStatus = Consts.DIC_STUDY_RECORD_STUDY_STATUS_NO_JOIN StudyStatus = Consts.DIC_STUDY_RECORD_STUDY_STATUS_NO_JOIN
}); });
} }
if (inserts.Any()) if (inserts.Any())
await Db.Insertable(inserts).ExecuteReturnSnowflakeIdListAsync(); await Db.Insertable(inserts).ExecuteReturnSnowflakeIdListAsync();
#region 自动给学习记录匹配考试ID
var studyRecords = await Db.Queryable<Ghre_StudyRecord>()
.WhereIF(!entity.CourseId.IsNull(), x => x.CourseId == entity.CourseId)
.WhereIF(!entity.CourseSceneId.IsNull(), x => x.CourseSceneId == entity.CourseSceneId)
.Where(x => x.ExamId == null).ToListAsync();
studyRecords.ForEach(x => x.ExamId = entity.Id);
await Db.Updateable(studyRecords).UpdateColumns(it => new { it.ExamId }).ExecuteCommandAsync();
#endregion
} }
#endregion #endregion
if (status == Consts.DIC_EXAM_STATUS.RELEASED || status == Consts.DIC_EXAM_STATUS.DISABLED || status == Consts.DIC_EXAM_STATUS.DRAFT)
if (status == Consts.DicExamStatus.RELEASED || status == Consts.DicExamStatus.DISABLED || status == Consts.DicExamStatus.DRAFT)
{ {
entity.Status = status; entity.Status = status;
entities.Add(entity); entities.Add(entity);
@ -1290,9 +1304,9 @@ public class Ghre_ExamServices : BaseServices<Ghre_Exam, Ghre_ExamDto, InsertGhr
} }
var result = await BaseDal.Update(entities); var result = await BaseDal.Update(entities);
if (status == Consts.DicExamStatus.RELEASED) if (status == Consts.DIC_EXAM_STATUS.RELEASED)
return ServiceResult.OprateSuccess("发布成功!"); return ServiceResult.OprateSuccess("发布成功!");
else if (status == Consts.DicExamStatus.DRAFT) else if (status == Consts.DIC_EXAM_STATUS.DRAFT)
return ServiceResult.OprateSuccess("取消发布成功!"); return ServiceResult.OprateSuccess("取消发布成功!");
else else
return ServiceResult.OprateSuccess("停用成功!"); return ServiceResult.OprateSuccess("停用成功!");
@ -1418,7 +1432,7 @@ public class Ghre_ExamServices : BaseServices<Ghre_Exam, Ghre_ExamDto, InsertGhr
{ {
var exam = await base.QueryById(id); var exam = await base.QueryById(id);
var staffs = await _ghre_ExamStaffServices.Query(x => x.ExamId == id); var staffs = await _ghre_ExamStaffServices.Query(x => x.ExamId == id);
exam.Status = Consts.DicExamStatus.DRAFT; exam.Status = Consts.DIC_EXAM_STATUS.DRAFT;
var insert = Mapper.Map(exam).ToANew<InsertGhre_ExamInput>(); var insert = Mapper.Map(exam).ToANew<InsertGhre_ExamInput>();

@ -189,7 +189,7 @@ namespace Tiobon.Core.Services
A.CourseName, A.CourseName,
A.StandardHour, A.StandardHour,
A.CreditPoints, A.CreditPoints,
A.CourseEndTime CourseBeginDate, A.CourseBeginTime CourseBeginDate,
A.CourseEndTime CourseEndDate, A.CourseEndTime CourseEndDate,
A.ExamDate, A.ExamDate,
A.ExamBeginDate, A.ExamBeginDate,
@ -292,6 +292,7 @@ namespace Tiobon.Core.Services
x.CourseDateString = DateTimeHelper.ConvertToDayString(x.CourseBeginDate) + "~" + DateTimeHelper.ConvertToDayString(x.CourseEndDate); x.CourseDateString = DateTimeHelper.ConvertToDayString(x.CourseBeginDate) + "~" + DateTimeHelper.ConvertToDayString(x.CourseEndDate);
if (x.ExamBeginDate != null && x.ExamEndDate != null) if (x.ExamBeginDate != null && x.ExamEndDate != null)
x.ExamDateString = DateTimeHelper.ConvertToDayString(x.ExamBeginDate) + "~" + DateTimeHelper.ConvertToDayString(x.ExamEndDate); x.ExamDateString = DateTimeHelper.ConvertToDayString(x.ExamBeginDate) + "~" + DateTimeHelper.ConvertToDayString(x.ExamEndDate);
else x.ExamDateString = $"学完{x.AfterHowLong}天";
}); });
return new ServicePageResult<Ghre_StudyRecordESS>(filter.pageNum, total, filter.pageSize, entitys); return new ServicePageResult<Ghre_StudyRecordESS>(filter.pageNum, total, filter.pageSize, entitys);

@ -238,7 +238,7 @@ public class Ghre_StudyRuleServices : BaseServices<Ghre_StudyRule, Ghre_StudyRul
// .FirstAsync(x => x.Status == Consts.DicExamStatus.RELEASED); // .FirstAsync(x => x.Status == Consts.DicExamStatus.RELEASED);
var exam = await Db.Queryable<Ghre_Exam>() var exam = await Db.Queryable<Ghre_Exam>()
.Where(x => x.Status == Consts.DicExamStatus.RELEASED .Where(x => x.Status == Consts.DIC_EXAM_STATUS.RELEASED
&& ((x.DateType == Consts.DicExamDateType.EXAM_DATE && ((x.DateType == Consts.DicExamDateType.EXAM_DATE
&& x.BeginTime.Value.Date <= DateTime.Now.Date && x.EndTime.Value.Date >= DateTime.Now.Date) || x.DateType == Consts.DicExamDateType.AFTER_HOW_LONG)) && 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.CourseId.IsNull(), x => x.CourseId == rule.CourseId)
@ -266,8 +266,8 @@ public class Ghre_StudyRuleServices : BaseServices<Ghre_StudyRule, Ghre_StudyRul
CourseSceneId = rule.CourseSceneId, CourseSceneId = rule.CourseSceneId,
StudyRuleId = ruleId, StudyRuleId = ruleId,
JoinTime = courseTime, JoinTime = courseTime,
CourseBeginTime = courseTime, CourseBeginTime = courseTime.Date,
CourseEndTime = courseTime.AddMonths(rule.DeadlineMonth ?? 3), CourseEndTime = courseTime.Date.AddMonths((rule.DeadlineMonth ?? snap?.ValidityPeriod) ?? 1),
CourseType = rule.RuleType, CourseType = rule.RuleType,
CourseStatus = Consts.DIC_STUDY_RECORD_COURSE_STATUS_IN, CourseStatus = Consts.DIC_STUDY_RECORD_COURSE_STATUS_IN,
StudyStatus = Consts.DIC_STUDY_RECORD_STUDY_STATUS_NO_JOIN, StudyStatus = Consts.DIC_STUDY_RECORD_STUDY_STATUS_NO_JOIN,

@ -12592,22 +12592,22 @@
全局常量 全局常量
</summary> </summary>
</member> </member>
<member name="T:Tiobon.Core.Model.Consts.DicExamStatus"> <member name="T:Tiobon.Core.Model.Consts.DIC_EXAM_STATUS">
<summary> <summary>
考试管理-状态 考试管理-状态
</summary> </summary>
</member> </member>
<member name="F:Tiobon.Core.Model.Consts.DicExamStatus.DRAFT"> <member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_STATUS.DRAFT">
<summary> <summary>
草稿箱 草稿箱
</summary> </summary>
</member> </member>
<member name="F:Tiobon.Core.Model.Consts.DicExamStatus.RELEASED"> <member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_STATUS.RELEASED">
<summary> <summary>
已发布 已发布
</summary> </summary>
</member> </member>
<member name="F:Tiobon.Core.Model.Consts.DicExamStatus.DISABLED"> <member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_STATUS.DISABLED">
<summary> <summary>
已归档 已归档
</summary> </summary>
@ -12637,6 +12637,21 @@
考试管理-关联类型-場景 考试管理-关联类型-場景
</summary> </summary>
</member> </member>
<member name="T:Tiobon.Core.Model.Consts.DIC_EXAM_STAFF_SOURCE">
<summary>
考试管理-人员来源
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_STAFF_SOURCE.MANUAL_REQUIRED">
<summary>
手动必修
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_EXAM_STAFF_SOURCE.STUDY_RULE_REQUIRED">
<summary>
必修规则
</summary>
</member>
<member name="F:Tiobon.Core.Model.Consts.DIC_STUDY_RECORD_COURSE_STATUS_IN"> <member name="F:Tiobon.Core.Model.Consts.DIC_STUDY_RECORD_COURSE_STATUS_IN">
<summary> <summary>
培训记录-课程状态-进行中 培训记录-课程状态-进行中

Loading…
Cancel
Save