课程场景参数设置页面新增课程管理多选字段,保存后要能反写到已发布的课程管理中的“课程场景”字段

将现在课程场景列表页的课程排序功能,更改为在课程场景新增或维护页面里设置课程排序及保存。
master
xiaochanghai 3 months ago
parent d51702ed26
commit cdc9cb5828
  1. 5
      Tiobon.Core.Api/Tiobon.Core.Model.xml
  2. 7
      Tiobon.Core.Model/Base/Ghre/Ghre_CourseScene.Dto.Base.cs
  3. 68
      Tiobon.Core.Services/Ghre/Ghre_CourseSceneServices.cs
  4. 125
      Tiobon.Core.Services/Ghre/Ghre_ExamRecordServices.cs

@ -3120,6 +3120,11 @@
默认封面图Name 默认封面图Name
</summary> </summary>
</member> </member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.Courses">
<summary>
课程列表
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghre_CourseSnapBase"> <member name="T:Tiobon.Core.Model.Models.Ghre_CourseSnapBase">
<summary> <summary>
Ghre_CourseSnap (Dto.Base) Ghre_CourseSnap (Dto.Base)

@ -150,8 +150,6 @@ public class Ghre_CourseSceneBase
[Display(Name = "CoverUrl"), Description("封面图"), MaxLength(2000, ErrorMessage = "封面图 不能超过 2000 个字符")] [Display(Name = "CoverUrl"), Description("封面图"), MaxLength(2000, ErrorMessage = "封面图 不能超过 2000 个字符")]
public string CoverUrl { get; set; } public string CoverUrl { get; set; }
public List<string> CourseIds { get; set; } = new List<string>();
/// <summary> /// <summary>
/// 是否使用默认封面 /// 是否使用默认封面
/// </summary> /// </summary>
@ -162,4 +160,9 @@ public class Ghre_CourseSceneBase
/// </summary> /// </summary>
[Display(Name = "DefaultCoverImageName"), Description("默认封面图Name"), MaxLength(32, ErrorMessage = "默认封面图Name 不能超过 32 个字符")] [Display(Name = "DefaultCoverImageName"), Description("默认封面图Name"), MaxLength(32, ErrorMessage = "默认封面图Name 不能超过 32 个字符")]
public string DefaultCoverImageName { get; set; } public string DefaultCoverImageName { get; set; }
/// <summary>
/// 课程列表
/// </summary>
public List<Ghre_Course> Courses { get; set; } = new List<Ghre_Course>();
} }

@ -1,7 +1,4 @@
using NPOI.SS.UserModel; namespace Tiobon.Core.Services;
using Tiobon.Core.IServices;
namespace Tiobon.Core.Services;
/// <summary> /// <summary>
/// 课程场景 (服务) /// 课程场景 (服务)
@ -46,31 +43,70 @@ public class Ghre_CourseSceneServices : BaseServices<Ghre_CourseScene, Ghre_Cour
public override async Task<long> Add(InsertGhre_CourseSceneInput entity) public override async Task<long> Add(InsertGhre_CourseSceneInput entity)
{ {
if (entity.CourseIds != null && entity.CourseIds.Any()) var courseIds = new List<long>();
if (entity.Courses != null && entity.Courses.Any())
{ {
courseIds = entity.Courses.Select(x => x.Id).ToList();
entity.CourseId = JsonHelper.ObjToJson(courseIds);
entity.CourseId = JsonHelper.ObjToJson(entity.CourseIds); var list = Db.Queryable<Ghre_Course>().Where(x => courseIds.Contains(x.Id)).Select(x => x.CourseName).ToList();
var list = Db.Queryable<Ghre_Course>().Where(x => entity.CourseIds.Contains(x.Id.ToString())).Select(x => x.CourseName).ToList();
entity.CourseName = string.Join("、", list.Select(x => x).ToArray()); entity.CourseName = string.Join("、", list.ToArray());
}
var id = await base.Add(entity);
var courses = Db.Queryable<Ghre_Course>().Where(x => courseIds.Contains(x.Id)).ToList();
for (int i = 0; i < courses.Count; i++)
{
var courseSceneIds = new List<long>();
if (courses[i].CourseSceneIds.IsNotEmptyOrNull())
courseSceneIds = JsonHelper.JsonToObj<List<long>>(courses[i].CourseSceneIds);
courseSceneIds.Add(id);
courses[i].CourseSceneIds = JsonHelper.ObjToJson(courseSceneIds);
await Db.Updateable(courses).UpdateColumns(it => new { it.CourseSceneIds }, true)//true表示追加AOP赋值列
.ExecuteCommandAsync();
} }
return await base.Add(entity); return id;
} }
public override async Task<bool> Update(long Id, EditGhre_CourseSceneInput editModel) public override async Task<bool> Update(long Id, EditGhre_CourseSceneInput editModel)
{ {
var courseIds = new List<long>();
if (editModel.CourseIds != null && editModel.CourseIds.Any()) if (editModel.Courses != null && editModel.Courses.Any())
{ {
courseIds = editModel.Courses.Select(x => x.Id).ToList();
editModel.CourseId = JsonHelper.ObjToJson(courseIds);
editModel.CourseId = JsonHelper.ObjToJson(editModel.CourseIds); var list = Db.Queryable<Ghre_Course>().Where(x => courseIds.Contains(x.Id)).Select(x => x.CourseName).ToList();
var list = Db.Queryable<Ghre_Course>().Where(x => editModel.CourseIds.Contains(x.Id.ToString())).Select(x => x.CourseName).ToList();
editModel.CourseName = string.Join("、", list.Select(x => x).ToArray()); editModel.CourseName = string.Join("、", list.Select(x => x).ToArray());
} }
return await base.Update(Id, editModel); var result = await base.Update(Id, editModel);
var courses = await Db.Queryable<Ghre_Course>().Where(x => x.CourseSceneIds != null && x.CourseSceneIds.Contains(Id.ObjToString())).ToListAsync();
for (int j = 0; j < courses.Count; j++)
{
var courseSceneIds = new List<long>();
if (courses[j].CourseSceneIds.IsNotEmptyOrNull())
courseSceneIds = JsonHelper.JsonToObj<List<long>>(courses[j].CourseSceneIds);
courseSceneIds = courseSceneIds.Where(x => x != Id).ToList();
courses[j].CourseSceneIds = JsonHelper.ObjToJson(courseSceneIds);
await Db.Updateable(courses).UpdateColumns(it => new { it.CourseSceneIds }, true)//true表示追加AOP赋值列
.ExecuteCommandAsync();
}
courses = Db.Queryable<Ghre_Course>().Where(x => courseIds.Contains(x.Id)).ToList();
for (int i = 0; i < courses.Count; i++)
{
var courseSceneIds = new List<long>();
if (courses[i].CourseSceneIds.IsNotEmptyOrNull())
courseSceneIds = JsonHelper.JsonToObj<List<long>>(courses[i].CourseSceneIds);
courseSceneIds.Add(Id);
courses[i].CourseSceneIds = JsonHelper.ObjToJson(courseSceneIds);
await Db.Updateable(courses).UpdateColumns(it => new { it.CourseSceneIds }, true)//true表示追加AOP赋值列
.ExecuteCommandAsync();
}
return result;
} }
#region Excel导入 #region Excel导入

@ -1114,89 +1114,102 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
public async Task DealPass(ISqlSugarClient Db, long studyRecordId) public async Task DealPass(ISqlSugarClient Db, long studyRecordId)
{ {
try
{
var record = await Db.Queryable<Ghre_ExamRecord>().FirstAsync(x => x.Id == studyRecordId);
_logger.LogInformation($"【DealPass:{studyRecordId}】1");
var record = await Db.Queryable<Ghre_ExamRecord>().FirstAsync(x => x.Id == studyRecordId); var studyRecord = await Db.Queryable<Ghre_StudyRecord>().FirstAsync(x => x.Id == record.StudyRecordId);
var examPaper = await Db.Queryable<Ghre_ExamPaper>().FirstAsync(x => x.Id == record.ExamPaperId);
_logger.LogInformation($"【DealPass:{studyRecordId}】PassScore:{examPaper.PassScore},Score:{record.Score},PassScore:{record.AdjustScore},");
var studyRecord = await Db.Queryable<Ghre_StudyRecord>().FirstAsync(x => x.Id == record.StudyRecordId); record.IsPass = examPaper.PassScore > ((record.Score ?? 0) + (record.AdjustScore ?? 0)) ? false : true;
var examPaper = await Db.Queryable<Ghre_ExamPaper>().FirstAsync(x => x.Id == record.ExamPaperId); _logger.LogInformation($"【DealPass:{studyRecordId}】IsPass:{record.IsPass}");
record.IsPass = examPaper.PassScore > ((record.Score ?? 0) + (record.AdjustScore ?? 0)) ? false : true;
record.FinallyIsPass = record.IsPass; record.FinallyIsPass = record.IsPass;
await Db.Updateable(record).UpdateColumns(it => new { it.IsPass, it.FinallyIsPass }, true)//true表示追加AOP赋值列 await Db.Updateable(record).UpdateColumns(it => new { it.IsPass, it.FinallyIsPass }, true)//true表示追加AOP赋值列
.ExecuteCommandAsync(); .ExecuteCommandAsync();
await Db.Deleteable<Ghre_CreditPoint>().Where(x => x.ExamId == studyRecord.ExamId).ExecuteCommandAsync(); await Db.Deleteable<Ghre_CreditPoint>().Where(x => x.ExamId == studyRecord.ExamId).ExecuteCommandAsync();
if (record.IsPass == true) if (record.IsPass == true)
{
if (studyRecord.CourseSceneId.IsNull())
{ {
var course = await Db.Queryable<Ghre_Course>().FirstAsync(x => x.Id == studyRecord.CourseId); if (studyRecord.CourseSceneId.IsNull())
#region 学分发放
var creditPoint = new Ghre_CreditPoint()
{ {
CourseId = studyRecord.CourseId, var course = await Db.Queryable<Ghre_Course>().FirstAsync(x => x.Id == studyRecord.CourseId);
CourseSnapId = studyRecord.CourseSnapId,
StaffId = studyRecord.StaffId,
ExamId = studyRecord.ExamId,
Date = DateTime.Now.Date,
CreditPoints = course.CreditPoints
};
await Db.Insertable(creditPoint).ExecuteReturnSnowflakeIdListAsync();
#endregion
#region 证书发放
#endregion
}
else
{
var courses = await Db.Queryable<Ghre_Course>().Where(x => x.CourseSceneId == studyRecord.CourseSceneId).ToListAsync();
for (int i = 0; i < courses.Count; i++)
{
var snap = await Db.Queryable<Ghre_CourseSnap>().FirstAsync(x => x.CourseId == courses[i].Id);
#region 学分发放 #region 学分发放
var creditPoint = new Ghre_CreditPoint() var creditPoint = new Ghre_CreditPoint()
{ {
CourseId = courses[i].Id, CourseId = studyRecord.CourseId,
CourseSnapId = snap?.Id, CourseSnapId = studyRecord.CourseSnapId,
StaffId = studyRecord.StaffId, StaffId = studyRecord.StaffId,
ExamId = studyRecord.ExamId, ExamId = studyRecord.ExamId,
Date = DateTime.Now.Date, Date = DateTime.Now.Date,
CreditPoints = courses[i].CreditPoints CreditPoints = course.CreditPoints
}; };
await Db.Insertable(creditPoint).ExecuteReturnSnowflakeIdListAsync(); await Db.Insertable(creditPoint).ExecuteReturnSnowflakeIdListAsync();
#endregion #endregion
#region 证书发放
#endregion
} }
else
{
var courses = await Db.Queryable<Ghre_Course>().Where(x => x.CourseSceneId == studyRecord.CourseSceneId).ToListAsync();
} for (int i = 0; i < courses.Count; i++)
{
var snap = await Db.Queryable<Ghre_CourseSnap>().FirstAsync(x => x.CourseId == courses[i].Id);
} #region 学分发放
var creditPoint = new Ghre_CreditPoint()
{
CourseId = courses[i].Id,
CourseSnapId = snap?.Id,
StaffId = studyRecord.StaffId,
ExamId = studyRecord.ExamId,
Date = DateTime.Now.Date,
CreditPoints = courses[i].CreditPoints
};
await Db.Insertable(creditPoint).ExecuteReturnSnowflakeIdListAsync();
#endregion
}
#region 处理培训记录有效时间 }
if (studyRecord.StudyRuleId != null)
{ }
var studyRule = await Db.Queryable<Ghre_StudyRule>().FirstAsync(x => x.Id == studyRecord.StudyRuleId);
if (studyRule != null && studyRule.ResultValidPeriod != null) #region 处理培训记录有效时间
if (studyRecord.StudyRuleId != null)
{ {
studyRecord.ValidBeginTime = DateTime.Now; var studyRule = await Db.Queryable<Ghre_StudyRule>().FirstAsync(x => x.Id == studyRecord.StudyRuleId);
studyRecord.ValidEndTime = studyRecord.ValidBeginTime.Value.AddMonths(studyRule.ResultValidPeriod.Value); if (studyRule != null && studyRule.ResultValidPeriod != null)
{
studyRecord.ValidBeginTime = DateTime.Now;
studyRecord.ValidEndTime = studyRecord.ValidBeginTime.Value.AddMonths(studyRule.ResultValidPeriod.Value);
await Db.Updateable(studyRecord).UpdateColumns(it => new { it.ValidBeginTime, it.ValidEndTime }, true)//true表示追加AOP赋值列 await Db.Updateable(studyRecord).UpdateColumns(it => new { it.ValidBeginTime, it.ValidEndTime }, true)//true表示追加AOP赋值列
.ExecuteCommandAsync(); .ExecuteCommandAsync();
record.ValidBeginTime = studyRecord.ValidBeginTime; record.ValidBeginTime = studyRecord.ValidBeginTime;
record.ValidEndTime = studyRecord.ValidEndTime; record.ValidEndTime = studyRecord.ValidEndTime;
await Db.Updateable(record).UpdateColumns(it => new { it.ValidBeginTime, it.ValidEndTime }) await Db.Updateable(record).UpdateColumns(it => new { it.ValidBeginTime, it.ValidEndTime })
.ExecuteCommandAsync(); .ExecuteCommandAsync();
}
} }
#endregion
_logger.LogInformation($"【DealPass:{studyRecordId}】2");
}
catch (Exception E)
{
_logger.LogInformation($"【DealPass:{studyRecordId}】Message:{E.Message}");
_logger.LogInformation($"【DealPass:{studyRecordId}】StackTrace:{E.StackTrace}");
} }
#endregion
} }
public async Task<ServiceResult> ViewExamPaperCallBackAsync(long examRecordId) public async Task<ServiceResult> ViewExamPaperCallBackAsync(long examRecordId)

Loading…
Cancel
Save