using Tiobon.Core.IServices;
using Tiobon.Core.Model.Models;
using Tiobon.Core.Services.BASE;
using Tiobon.Core.IRepository.Base;
using Tiobon.Core.Common.Caches;
using Tiobon.Core.Common;
using Tiobon.Core.Model;
using Newtonsoft.Json.Linq;
using SqlSugar;
using Newtonsoft.Json;
using System.Data;
using Microsoft.AspNetCore.Http;
using Tiobon.Core.Common.UserManager;
using Tiobon.Core.Common.Helper;
using AgileObjects.AgileMapper;
using static Tiobon.Core.Model.Consts;
namespace Tiobon.Core.Services;
///
/// 课程 (服务)
///
public class Ghre_CourseServices : BaseServices, IGhre_CourseServices
{
private readonly IBaseRepository _dal;
private IGhre_CourseClassServices _ghre_CourseClassServices;
private IGhre_CourseSnapServices _ghre_CourseSnapServices;
public Ghre_CourseServices(IBaseRepository dal,
ICaching caching,
IGhre_CourseClassServices ghre_CourseClassServices,
IGhre_CourseSnapServices ghre_CourseSnapServices)
{
this._dal = dal;
base.BaseDal = dal;
_ghre_CourseClassServices = ghre_CourseClassServices;
_ghre_CourseSnapServices = ghre_CourseSnapServices;
base._caching = caching;
}
public async Task> QueryList(QueryBody filter, string status, List ids)
{
RefAsync totalCount = 0;
string sql = @"SELECT *
FROM (SELECT A.*,
D.SceneName + ' (' + D.SceneNo + ')' CourseSceneName,
E.CourseWareName + ' (' + E.CourseWareNo + ')' CourseWareName,
F.StaffName + ' (' + F.StaffNo + ')' ManagerStaffName,
G.UserName CreateName,
H.UserName UpdateName,
CASE A.InOrOut
WHEN 'In' THEN F.StaffName
WHEN 'Out' THEN J.TeacherName
END TeacherName,
ISNULL (A.UpdateTime, A.CreateTime) CreateTime1
FROM Ghre_Course A
LEFT JOIN Ghre_CourseScene D ON A.CourseSceneId = D.Id
LEFT JOIN Ghre_CourseWare E ON A.CourseWareId = E.Id
LEFT JOIN Ghra_Staff F ON A.ManagerId = F.StaffID
LEFT JOIN Ghrs_User G ON A.CreateBy = G.UserId
LEFT JOIN Ghrs_User H ON A.UpdateBy = H.UserId
LEFT JOIN Ghra_Staff I ON A.TeacherId = I.StaffID
LEFT JOIN Ghre_Teacher J ON A.SchoolTeacherId = I.StaffID
WHERE A.IsEnable = 1) A";
if (string.IsNullOrWhiteSpace(filter.orderBy))
filter.orderBy = "CreateTime1 DESC";
string conditions = " WHERE 1=1";
if (!string.IsNullOrWhiteSpace(status))
conditions += $" AND Status ='{status}'";
if (ids != null && ids.Any())
conditions += $" AND Id IN({string.Join(",", ids)})";
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 (!string.IsNullOrWhiteSpace(value))
{
var jsonParam = JsonConvert.DeserializeObject(value);
if (name == "CourseNoOrName")
{
conditions += $" AND ( CourseNo LIKE '%{jsonParam.columnValue}%' OR CourseName LIKE '%{jsonParam.columnValue}%')";
continue;
}
switch (jsonParam.operationKey)
{
case "Include":
conditions += $" AND {name} LIKE '%{jsonParam.columnValue}%'";
break;
case "NotInclude":
conditions += $" AND {name} NOT LIKE '%{jsonParam.columnValue}%'";
break;
case "IsNull":
conditions += $" AND {name} IS NULL";
break;
case "NotNull":
conditions += $" AND {name} IS NOT NULL";
break;
case "Equal":
conditions += $" AND {name} ='{jsonParam.columnValue}'";
break;
case "NotEqual":
conditions += $" AND {name} !='{jsonParam.columnValue}'";
break;
case "GreaterOrEqual"://大于等于
conditions += $" AND {name} >='{jsonParam.columnValue}'";
break;
case "Greater"://大于
conditions += $" AND {name} >'{jsonParam.columnValue}'";
break;
case "LessOrEqual"://小于等于
conditions += $" AND {name} <='{jsonParam.columnValue}'";
break;
case "Less"://小于
conditions += $" AND {name} <'{jsonParam.columnValue}'";
break;
case "EqualAny"://
if (jsonParam.columnValue != null)
{
var ids1 = JsonHelper.JsonToObj>(jsonParam.columnValue.ToString());
conditions += $" AND {name} IN ({string.Join(",", ids1.Select(id => "'" + id + "'"))})";
}
break;
case "NotEqualAny"://
if (jsonParam.columnValue != null)
{
var ids1 = JsonHelper.JsonToObj>(jsonParam.columnValue.ToString());
conditions += $" AND ({name} NOT IN ({string.Join(",", ids1.Select(id => "'" + id + "'"))}) OR {name} IS NULL)";
}
break;
default:
break;
}
}
}
if (filter.pageSize == 0)
filter.pageSize = 10000;
sql += conditions;
var data = await Db.SqlQueryable(sql)
.OrderBy(filter.orderBy)
.ToPageListAsync(filter.pageNum, filter.pageSize, totalCount);
var classsIds1 = data.Select(x => x.CourseClassId).Distinct().ToList();
var classsIds = new List();
classsIds1.ForEach(x =>
{
if (!string.IsNullOrWhiteSpace(x))
{
var courseClassIds = JsonConvert.DeserializeObject>(x);
classsIds = classsIds.Concat(courseClassIds).ToList();
}
});
classsIds = classsIds.Distinct().ToList();
var classs = await _ghre_CourseClassServices.Query(x => classsIds.Contains(x.Id));
data.ForEach(async x =>
{
x.ChargeMethodLabel = await GetParaLabel("CourseChargeMethod", x.ChargeMethod);
x.InOrOutLabel = await GetParaLabel("CourseInOrOut", x.InOrOut);
x.IsOPenLabel = x.IsOPen == true ? "是" : "否";
var courseClass = classs.Where(a => x.CourseClassId.Contains(a.Id.ToString())).ToList();
x.CourseClassName = string.Join(",", courseClass.Select(a => a.ClassName + " (" + a.ClassNo + ")"));
});
return new ServicePageResult(filter.pageNum, totalCount, filter.pageSize, data);
}
public async Task> QueryDeptID(int StaffID)
{
string sql = $"SELECT A.DeptID from Ghra_Staff A LEFT JOIN Ghro_Dept B ON A.DeptID = B.DeptID WHERE A.StaffID='{StaffID}'";
int id = await Db.Ado.GetIntAsync(sql);
return ServiceResult.OprateSuccess("查询成功!", id);
}
public async Task> QueryTeacher(long? linkId)
{
var result = new CommonSelect();
JArray TableColumn = new JArray();
JArray DT_TablePageInfoT1 = new JArray();
JArray DT_TableDataT1 = new JArray();
JObject searchItem = new JObject();
JObject item;
DataTable dt;
string sql;
searchItem = [
new JProperty("defaultHidden", true),
new JProperty("field","value"),
new JProperty("label","讲师ID"),
];
TableColumn.Add(searchItem);
searchItem = [
new JProperty("field","label"),
new JProperty("label","讲师名称"),
];
TableColumn.Add(searchItem);
sql = "SELECT Id, TeacherNo , TeacherName FROM Ghre_Teacher WHERE IsEnable=1 ";
if (linkId != null)
sql += $"AND SchoolId ='{linkId}'";
dt = await Db.Ado.GetDataTableAsync(sql);
for (int i = 0; i < dt.Rows.Count; i++)
{
item = [
new JProperty("value",long.Parse(dt.Rows[i]["Id"].ToString())),
new JProperty("label",dt.Rows[i]["TeacherNo"].ToString()+"-"+dt.Rows[i]["TeacherName"].ToString())
];
DT_TableDataT1.Add(item);
}
item = [
new JProperty("ListMax",100),
new JProperty("ListMin",10),
new JProperty("PageNum",1),
new JProperty("PageSize",99999),
new JProperty("TotalCount",dt.Rows.Count),
new JProperty("UIType","Auto")
];
DT_TablePageInfoT1.Add(item);
result.JM_TableColumnT1.TableColumn = TableColumn;
result.DT_TableDataT1 = DT_TableDataT1;
result.DT_TablePageInfoT1 = DT_TablePageInfoT1;
return new ServiceResult() { Success = true, Message = "查询成功", Data = result, };
}
public override async Task> QueryForm(QueryForm body)
{
var result = await base.QueryForm(body);
string examPaperId = result.result.DT_TableDataT1[0].ExamPaperId;
if (!string.IsNullOrWhiteSpace(examPaperId))
result.result.DT_TableDataT1[0].ExamPaperIds = JsonConvert.DeserializeObject>(examPaperId);
string courseClassId = result.result.DT_TableDataT1[0].CourseClassId;
if (!string.IsNullOrWhiteSpace(courseClassId))
result.result.DT_TableDataT1[0].CourseClassIds = JsonConvert.DeserializeObject>(courseClassId);
else result.result.DT_TableDataT1[0].ExamPaperIds = new List();
if (body.doType == "Copy")
{
result.result.DT_TableDataT1[0].CourseNo = null;
result.result.DT_TableDataT1[0].CourseName = null;
}
result.result.DT_TableDataT1[0].IsOPenLabel = result.result.DT_TableDataT1[0].IsOPen?.ToString();
return result;
}
public async Task UpdateStatus(long[] ids, string status)
{
if (status != Consts.DIC_COURSE_STATUS.RELEASED && status != Consts.DIC_COURSE_STATUS.DISABLED && status != Consts.DIC_COURSE_STATUS.DRAFT)
throw new Exception("无效的状态");
HttpRequest request = UserContext.Context.Request;
var api = request.Path.ObjToString().TrimEnd('/').ToLower();
var ip = GetUserIp(UserContext.Context);
var entities = new List();
foreach (var id in ids)
{
if (id == null || !BaseDal.Any(id))
continue;
var entity = await BaseDal.QueryById(id);
#region 关联数据有效性验证
if (entity.Status == Consts.DIC_COURSE_STATUS.DRAFT && status == Consts.DIC_COURSE_STATUS.RELEASED)
{
if (!entity.CourseClassId.IsNull())
{
var CourseClassIds = JsonConvert.DeserializeObject>(entity.CourseClassId);
if (CourseClassIds != null && CourseClassIds.Any())
{
for (int i = 0; i < CourseClassIds.Count; i++)
{
if (!await Db.Queryable().AnyAsync(x => x.Id == CourseClassIds[i]))
throw new Exception($"课程关联的课程分类已失效,请修正数据后继续发布!");
}
}
}
if (!entity.CourseSceneId.IsNull())
if (!await Db.Queryable().AnyAsync(x => x.Id == entity.CourseSceneId))
return ServiceResult.OprateFailed($"课程关联的课程场景已失效,请修正数据后继续发布!");
if (!entity.ExamPaperId.IsNull())
{
var ExamPaperIds = JsonConvert.DeserializeObject>(entity.ExamPaperId);
if (ExamPaperIds != null && ExamPaperIds.Any())
{
for (int i = 0; i < ExamPaperIds.Count; i++)
{
if (!await Db.Queryable().AnyAsync(x => x.Id == ExamPaperIds[0] && x.Status == DIC_EXAM_PAPER_STATUS.RELEASED))
return ServiceResult.OprateFailed($"课程关联的试卷已失效,请修正数据后继续发布!");
}
}
}
#region 课程ID 同步至课件
if (!entity.CourseWareId.IsNull())
{
var ware = await Db.Queryable().FirstAsync(x => x.Id == entity.CourseWareId);
if (ware != null)
{
var courseIds2 = new List();
if (!string.IsNullOrWhiteSpace(ware.CourseIds))
courseIds2 = JsonConvert.DeserializeObject>(ware.CourseIds);
if (!courseIds2.Any(x => x == id))
{
courseIds2.Add(id);
ware.CourseIds = JsonConvert.SerializeObject(courseIds2);
await Db.Updateable().SetColumns(it => it.CourseIds == ware.CourseIds).Where(it => it.Id == ware.Id).ExecuteCommandAsync();
}
}
}
#endregion
}
#endregion
if (entity.Status == Consts.DIC_COURSE_STATUS.RELEASED)
{
var examPaper = await Db.Queryable().FirstAsync(x => x.LinkId == id && x.LinkType == "CourseId" && x.Status != Consts.DIC_COURSE_STATUS.DISABLED);
if (examPaper != null)
return ServiceResult.OprateFailed($"课程【{entity.CourseName}({entity.CourseNo})】已与试卷【{examPaper.PaperName}({examPaper.PaperName})】关联,暂不可{(status == Consts.DIC_COURSE_STATUS.DRAFT ? "取消发布" : "停用")}");
if (await Db.Queryable().AnyAsync(x => x.CourseId == id && x.StudyStatus != Consts.DicStudyRecordStudyStatus.HAS_FINISH && x.CourseEndTime != null && x.CourseEndTime.Value.Date >= DateTime.Now.Date))
return ServiceResult.OprateFailed($"课程【{entity.CourseName}({entity.CourseNo})】有学员正在学习中,暂不可{(status == Consts.DIC_COURSE_STATUS.DRAFT ? "取消发布" : "停用")}");
}
BasePoco ent = entity;
ent.UpdateIP = ip;
ent.UpdateProg = api;
if (status == Consts.DIC_COURSE_STATUS.RELEASED || status == Consts.DIC_COURSE_STATUS.DISABLED || status == Consts.DIC_COURSE_STATUS.DRAFT)
{
entity.Status = status;
entities.Add(entity);
}
#region 生成课程快照
if (status == Consts.DIC_COURSE_STATUS.RELEASED)
{
var sql = $"UPDATE Ghre_CourseSnap SET IsEnable = 0 WHERE CourseId = '{id}' AND IsEnable = 1";
await Db.Ado.ExecuteCommandAsync(sql);
var entity1 = Mapper.Map(entity).ToANew();
var courseClassIds = JsonConvert.DeserializeObject>(entity1.CourseClassId);
var classs = await _ghre_CourseClassServices.Query(x => courseClassIds.Contains(x.Id));
entity1.CourseClass = string.Join("、", classs.Select(o => o.ClassName));
entity1.CourseClass1 = string.Join("、", classs.Select(o => o.ClassName + "(" + o.ClassNo + ")"));
entity1.CourseId = id;
await _ghre_CourseSnapServices.Add(entity1);
}
#endregion
}
var result = await BaseDal.Update(entities);
if (status == Consts.DIC_COURSE_STATUS.RELEASED)
return ServiceResult.OprateSuccess("发布成功!");
else if (status == Consts.DIC_COURSE_STATUS.DRAFT)
return ServiceResult.OprateSuccess("已启用成功,请进入草稿箱查看!");
else
return ServiceResult.OprateSuccess("停用成功!");
}
public override async Task Add(InsertGhre_CourseInput entity)
{
entity.ExamPaperId = JsonHelper.ObjToJson(entity.ExamPaperIds);
entity.CourseClassId = JsonHelper.ObjToJson(entity.CourseClassIds);
entity.Status = Consts.DIC_COURSE_STATUS.DRAFT;
entity.DefaultCoverImageName = entity.DefaultCoverImageName ?? "defaultCourseCover1";
entity.UseDefaultCoverImage = entity.UseDefaultCoverImage ?? true;
entity.IsOPen = entity.IsOPenLabel;
if (entity.InOrOut == "In")
{
var teacher = await Db.Queryable().FirstAsync(x => x.StaffId == entity.TeacherId);
if (!teacher.IsNull())
{
entity.SchoolTeacherId = teacher.Id;
//entity.SchoolId = teacher.SchoolId;
}
}
var result = await base.Add(entity);
return result;
}
public override async Task Update(long Id, EditGhre_CourseInput editModel)
{
editModel.ExamPaperId = JsonHelper.ObjToJson(editModel.ExamPaperIds);
editModel.CourseClassId = JsonHelper.ObjToJson(editModel.CourseClassIds);
if (!editModel.CourseClassId.IsNull())
{
var CourseClassIds = JsonConvert.DeserializeObject>(editModel.CourseClassId);
if (CourseClassIds != null && CourseClassIds.Any())
{
for (int i = 0; i < CourseClassIds.Count; i++)
{
if (!await Db.Queryable().AnyAsync(x => x.Id == CourseClassIds[i]))
throw new Exception($"课程关联的课程分类已失效,请修正数据后继续发布!");
}
}
}
if (!editModel.CourseSceneId.IsNull())
if (!await Db.Queryable().AnyAsync(x => x.Id == editModel.CourseSceneId))
throw new Exception($"课程关联的课程场景已失效,请修正数据后继续发布!");
if (!editModel.ExamPaperId.IsNull())
{
var ExamPaperIds = JsonConvert.DeserializeObject>(editModel.ExamPaperId);
if (ExamPaperIds != null && ExamPaperIds.Any())
{
for (int i = 0; i < ExamPaperIds.Count; i++)
{
if (!await Db.Queryable().AnyAsync(x => x.Id == ExamPaperIds[i] && x.Status == DIC_EXAM_PAPER_STATUS.RELEASED))
throw new Exception($"课程关联的试卷已失效,请修正数据后继续发布!");
}
}
}
editModel.IsOPen = editModel.IsOPenLabel;
var result = await base.Update(Id, editModel);
return result;
}
#region 获取通用列表下拉
///
/// 获取通用列表下拉
///
///
///
public async Task> GetSelectAsync(long? linkId, string keyWords)
{
var result = new CommonSelect();
var TableColumn = new JArray();
var DT_TablePageInfoT1 = new JArray();
var DT_TableDataT1 = new JArray();
var searchItem = new JObject();
JObject item;
DataTable dt;
string sql;
searchItem = [
new JProperty("defaultHidden", true),
new JProperty("field","value"),
new JProperty("label","课程ID"),
];
TableColumn.Add(searchItem);
searchItem = [
new JProperty("field","label"),
new JProperty("label","课程名称"),
];
TableColumn.Add(searchItem);
sql = $"SELECT Id, CourseNo , CourseName FROM Ghre_Course WHERE Status ='{Consts.DIC_COURSE_STATUS.RELEASED}' AND IsEnable=1";
if (!string.IsNullOrWhiteSpace(keyWords))
sql += $"AND ( CourseNo like '%{keyWords}%' or CourseName like '%{keyWords}%')";
if (linkId.HasValue)
sql += $" AND CourseSceneId='{linkId}'";
sql += $" ORDER BY UpdateTime DESC, CreateTime DESC";
dt = await Db.Ado.GetDataTableAsync(sql);
for (int i = 0; i < dt.Rows.Count; i++)
{
item = [
new JProperty("value",long.Parse(dt.Rows[i]["Id"].ToString())),
new JProperty("label", dt.Rows[i]["CourseName"].ToString() + "("+dt.Rows[i]["CourseNo"].ToString()+")")
];
DT_TableDataT1.Add(item);
}
item = [
new JProperty("ListMax",100),
new JProperty("ListMin",10),
new JProperty("PageNum",1),
new JProperty("PageSize",99999),
new JProperty("TotalCount",dt.Rows.Count),
new JProperty("UIType","Auto")
];
DT_TablePageInfoT1.Add(item);
result.JM_TableColumnT1.TableColumn = TableColumn;
result.DT_TableDataT1 = DT_TableDataT1;
result.DT_TablePageInfoT1 = DT_TablePageInfoT1;
return new ServiceResult() { Success = true, Message = "查询成功", Data = result, };
}
#endregion
public async Task> ExportExcel(QueryExport body, string status)
{
QueryBody filter = new QueryBody();
filter.pageNum = 1;
filter.pageSize = 1000000;
filter.langId = body.langId;
var condition = "1=1";
var ids = new List();
if (body.exportSet.SelectRowKeys != null && body.exportSet.SelectRowKeys.Any())
ids = body.exportSet.SelectRowKeys;
var data = await QueryList(filter, status, ids);
string sql = $@"SELECT *
FROM Ghrs_PageSettingQuery
WHERE IsEnable = 1
AND PageNo = '{body.menuName}'
AND (defaultHidden = 'false' or defaultHidden is null)
ORDER BY SortNo ASC";
var columns = await Db.Ado.SqlQueryAsync(sql);
var fieldDescs = new Dictionary();
if (body.exportSet.ExFields.Any())
body.exportSet.ExFields.ForEach(x =>
{
if (columns.Any(o => o.field == x))
fieldDescs.Add(x, columns.FirstOrDefault(o => o.field == x)?.label);
});
else
fieldDescs = columns.ToDictionary(item => item.field, item => item.label);
var dt = ToDataTable(data.result.DT_TableDataT1, fieldDescs, null);
// 获取所有列名
var dtColumns = dt.Columns;
var id = SnowFlakeSingle.instance.getID();
var physicsPath = $"{Environment.CurrentDirectory}{Path.DirectorySeparatorChar}wwwroot";
var path = $"{$"{Path.DirectorySeparatorChar}files{Path.DirectorySeparatorChar}export{Path.DirectorySeparatorChar}{id}{Path.DirectorySeparatorChar}"}";
if (!Directory.Exists(physicsPath + path))
Directory.CreateDirectory(physicsPath + path);
path = path + body.exportSet.TitleName + ".xlsx";
NPOIHelper.ExportExcel(dt, body.exportSet.TitleName, "sheet1", physicsPath + path);
var result = new ExcelData();
result.filePath = path;
result.fileName = body.exportSet.TitleName + ".xlsx";
return ServiceResult.OprateSuccess("导出成功", result);
}
#region 获取公开课查询条件
public async Task> QueryPublicSearchFields(QueryBody body)
{
var entity = new CoursePublicSearch();
string sql = @"SELECT Langkey field,
CASE {2}
WHEN 1 THEN isnull (Value01, LangValue)
WHEN 2 THEN isnull (Value02, LangValue)
WHEN 3 THEN isnull (Value03, LangValue)
WHEN 4 THEN isnull (Value04, LangValue)
WHEN 5 THEN isnull (Value05, LangValue)
WHEN 6 THEN isnull (Value06, LangValue)
WHEN 7 THEN isnull (Value07, LangValue)
WHEN 8 THEN isnull (Value08, LangValue)
WHEN 9 THEN isnull (Value09, LangValue)
WHEN 10 THEN isnull (Value10, LangValue)
END label
FROM Ghrs_LangKey
WHERE IsEnable = 1
AND (LangKey LIKE 'GHR_Page%' OR LangKey LIKE 'GHR_Common%')";
sql = string.Format(sql, body.menuName, App.User.ID, body.langId);
entity.DT_PageMutiMsg = await Db.Ado.SqlQueryAsync(sql);
entity.SearchFields.Add(new CoursePublicSearchField()
{
label = "课程编号/名称",
field = "CourseNoOrName",
elementType = "Input",
editable = true,
required = false,
multipleSelect = false,
});
entity.SearchFields.Add(new CoursePublicSearchField()
{
label = "课程分类",
field = "CourseClassId",
elementType = "ApiSelect",
dataSource = "CommonList_TrainingCourseClass",
editable = true,
required = false,
multipleSelect = false,
});
entity.SearchFields.Add(new CoursePublicSearchField()
{
label = "课程场景",
field = "CourseSceneId",
elementType = "ApiSelect",
dataSource = "CommonList_TrainingCourseScene",
editable = true,
required = false,
multipleSelect = false,
});
entity.SearchFields.Add(new CoursePublicSearchField()
{
label = "是否学过",
field = "HasStudy",
elementType = "ApiSelect",
dataSource = "TBParaDetail_Train_CourseIsOpen",
editable = true,
required = false,
multipleSelect = false,
});
return ServiceResult.OprateSuccess("", entity);
}
#endregion
#region 获取公开课
public async Task> QueryPublic(QueryBody filter)
{
int? staffId = GetStaffId();
RefAsync totalCount = 0;
var dt = DateTime.Now.Date;
string sql = @$"SELECT A.Id,
A.CoverUrl,
A.UseDefaultCoverImage,
A.DefaultCoverImageName,
A.CourseName + ' (' + A.CourseNo + ')' CourseName,
ISNULL (A.StandardHour, 0) StandardHour,
ISNULL (A.CreditPoints, 0) CreditPoints,
NULL ExamDate,
B.BeginTime ExamBeginDate,
B.EndTime ExamEndDate,
CAST ('0' AS BIT) DisableBtn,
B.DateType,
B.AfterHowLong,
C.Id StudyRecordId
FROM Ghre_Course A
LEFT JOIN Ghre_Exam B
ON A.Id = B.CourseId
AND B.Status = '{DIC_EXAM_STATUS.RELEASED}'
AND ( ( B.DateType = '{DicExamDateType.EXAM_DATE}'
AND B.BeginTime <= '{dt}'
AND B.EndTime >= '{dt}')
OR B.DateType = '{DicExamDateType.AFTER_HOW_LONG}')
LEFT JOIN Ghre_StudyRecord C
ON A.Id = C.CourseId
AND C.IsEnable = 1
AND C.StaffId = '{staffId}'
AND C.CourseBeginTime <= '{dt}'
AND C.CourseEndTime >= '{dt}'
WHERE A.IsOPen = 'true'
AND A.IsEnable = 1
AND A.Status = '{DIC_COURSE_STATUS.RELEASED}'";
if (string.IsNullOrWhiteSpace(filter.orderBy))
filter.orderBy = "CourseName ASC";
string conditions = " AND 1=1";
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 == "CourseNoOrName")
{
var jsonParam = JsonConvert.DeserializeObject(value);
conditions += $" AND (CourseNo LIKE '%{jsonParam.columnValue}%' OR CourseName LIKE '%{jsonParam.columnValue}%')";
continue;
}
if (name == "CourseClassId")
{
var jsonParam = JsonConvert.DeserializeObject(value);
conditions += $" AND CourseClassId LIKE '%{jsonParam.columnValue}%' ";
continue;
}
if (!string.IsNullOrWhiteSpace(value))
{
var jsonParam = JsonConvert.DeserializeObject(value);
switch (jsonParam.operationKey)
{
case "Include":
conditions += $" AND {name} LIKE '%{jsonParam.columnValue}%'";
break;
case "NotInclude":
conditions += $" AND {name} NOT LIKE '%{jsonParam.columnValue}%'";
break;
case "IsNull":
conditions += $" AND {name} IS NULL";
break;
case "NotNull":
conditions += $" AND {name} IS NOT NULL";
break;
case "Equal":
conditions += $" AND {name} ='{jsonParam.columnValue}'";
break;
case "NotEqual":
conditions += $" AND {name} !='{jsonParam.columnValue}'";
break;
default:
break;
}
}
}
//if (ids != null && ids.Any())
// conditions += $" AND Id IN({string.Join(",", ids)})";
sql += conditions;
if (filter.pageSize == 0)
filter.pageSize = 10000;
var data = await Db.SqlQueryable(sql)
.OrderBy(filter.orderBy)
.ToPageListAsync(filter.pageNum, filter.pageSize, totalCount);
data.ForEach(x =>
{
if (!x.ExamId.IsNull())
{
if (x.ExamBeginDate != null && x.ExamEndDate != null && x.DateType == DicExamDateType.EXAM_DATE)
x.ExamDateString = DateTimeHelper.ConvertToDayString(x.ExamBeginDate) + " ~ " + DateTimeHelper.ConvertToDayString(x.ExamEndDate);
else if (x.DateType == DicExamDateType.AFTER_HOW_LONG)
x.ExamDateString = $"学完{x.AfterHowLong}天";
}
if (!x.StudyRecordId.IsNull())
x.DisableBtn = true;
});
return new ServicePageResult(filter.pageNum, totalCount, filter.pageSize, data);
}
#endregion
}