namespace Tiobon.Core.Services; /// /// 必选修查询 (服务) /// public class Ghre_RequiredCourseServices : BaseServices, IGhre_RequiredCourseServices { private readonly IBaseRepository _dal; public Ghre_RequiredCourseServices(ICaching caching, IBaseRepository dal) { this._dal = dal; base.BaseDal = dal; base._caching = caching; } public override async Task> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true) { if (string.IsNullOrWhiteSpace(filter.orderBy)) filter.orderBy = "CreateTime1 DESC"; if (filter.pageSize == 0) filter.pageSize = 10000; var countSql = @$" SELECT COUNT(1) FROM Ghre_RequiredCourse_V"; var sql = @$" SELECT * FROM Ghre_RequiredCourse_V"; string conditions = " WHERE IsEnable = 1"; conditions += $"AND dbo.FUserDataBelongPriv ({App.User.ID}, DataBelongID, NULL) = 1"; if (await Db.Queryable().Where(x => x.DataPrivType == "Priv" && x.MenuNo == filter.menuName).AnyAsync()) { var staffIds = await GetUserStaffPrivIds((int)App.User.ID); if (staffIds.Any()) conditions += $" AND StaffId IN ({string.Join(",", staffIds.Select(id => "'" + id + "'"))})"; } if (filter.jsonParam != null) foreach (JProperty jProperty in filter.jsonParam.Properties()) { var name = jProperty.Name; var value = jProperty.Value.ToString(); if (name == "page" || name == "pageSize") continue; if (name == "DueDate") { var jsonParam = JsonConvert.DeserializeObject(value); conditions += $" AND FORMAT(DueDate, 'yyyy-MM-dd') = '{jsonParam.columnValue}'"; continue; } if (!string.IsNullOrWhiteSpace(value)) conditions = DealConditions(conditions, name, value); } sql += conditions; countSql += conditions; int total = await Db.Ado.GetIntAsync(countSql); sql = "SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY " + filter.orderBy + ") NUM FROM (SELECT * FROM (" + sql + " "; sql += ") A ) B ) C"; sql += " WHERE NUM <= " + filter.pageNum * filter.pageSize + " AND NUM >" + (filter.pageNum - 1) * filter.pageSize; var entitys = await Db.Ado.SqlQueryAsync(sql); var courseSceneIds = entitys.Select(x => x.CourseSceneId).Distinct().ToList(); var courses = await Db.Queryable().Where(x => x.CourseSceneId != null && courseSceneIds.Contains(x.CourseSceneId)).ToListAsync(); entitys.ForEach(async x => { //x.RequiredClassLabel = await GetParaLabel("TrainingRequiredClass", x.RequiredClass); x.CourseStatusLabel = await GetParaLabel("TrainingCourseStatus", x.CourseStatus); x.StudyStatusLabel = await GetParaLabel("TrainingStudyStatus", x.StudyStatus); //x.IsPassLabel = x.IsPass == true ? "是" : "否"; x.Indate1 = DateTimeHelper.ConvertToDayString(x.Indate); x.DueDate1 = DateTimeHelper.ConvertToDayString(x.DueDate); x.ExamDate1 = DateTimeHelper.ConvertToDayString(x.ExamDate); #region 处理场景对应课程 if (x.CourseSceneId.IsNotEmptyOrNull()) { x.CourseName = string.Join("\n", courses.Where(x => x.CourseSceneId == x.CourseSceneId).Select(x => x.CourseName + " (" + x.CourseNo + ")")); } #endregion }); return new ServicePageResult(filter.pageNum, total, filter.pageSize, entitys); } }