using static Tiobon.Core.Model.Consts; namespace Tiobon.Core.Services; /// /// 培训计划 (服务) /// public class Ghre_PlanServices : BaseServices, IGhre_PlanServices { private readonly IBaseRepository _dal; private readonly ICommonServices _commonServices; public Ghre_PlanServices(ICaching caching, IBaseRepository dal, ICommonServices commonServices) { this._dal = dal; base.BaseDal = dal; base._caching = caching; _commonServices = commonServices; } public override async Task> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true) { var result = await base.QueryFilterPage(filter, condition, IsEnable); int? year = null; if (filter.jsonParam != null) foreach (JProperty jProperty in filter.jsonParam.Properties()) { var name = jProperty.Name; var value = jProperty.Value.ToString(); if (name == "Year") { var jsonParam = JsonHelper.JsonToObj(value); year = jsonParam.columnValue.ObjToInt(); } } var DT_TableDataT1 = result.result.DT_TableDataT1; var deptIds = DT_TableDataT1.Select(x => x.DeptId).Distinct().ToList(); var courseIds = DT_TableDataT1.Select(x => x.CourseId).Distinct().ToList(); var schoolIds = DT_TableDataT1.Select(x => x.SchoolId).Distinct().ToList(); var staffIds = new List(); for (int i = 0; i < DT_TableDataT1.Count; i++) { if (DT_TableDataT1[i].StaffIds.IsNotEmptyOrNull()) staffIds.AddRange(JsonHelper.JsonToObj>(DT_TableDataT1[i].StaffIds)); DT_TableDataT1[i].TrainCategory = await GetParaLabel("TrainingCategory", DT_TableDataT1[i].TrainCategory); if (DT_TableDataT1[i].Month.IsNotEmptyOrNull()) DT_TableDataT1[i].Months = JsonHelper.JsonToObj>(DT_TableDataT1[i].Month); //DT_TableDataT1[i].Month = await GetParaLabel("MonthSelect", DT_TableDataT1[i].Month); DT_TableDataT1[i].InOrOut = await GetParaLabel("CourseInOrOut", DT_TableDataT1[i].InOrOut); if (DT_TableDataT1[i].Months.Any()) DT_TableDataT1[i].Months.ForEach(x => { if (x.ObjToInt() == 1) DT_TableDataT1[i].M1 = "✔"; else if (x.ObjToInt() == 2) DT_TableDataT1[i].M2 = "✔"; else if (x.ObjToInt() == 3) DT_TableDataT1[i].M3 = "✔"; else if (x.ObjToInt() == 4) DT_TableDataT1[i].M4 = "✔"; else if (x.ObjToInt() == 5) DT_TableDataT1[i].M5 = "✔"; else if (x.ObjToInt() == 6) DT_TableDataT1[i].M6 = "✔"; else if (x.ObjToInt() == 7) DT_TableDataT1[i].M7 = "✔"; else if (x.ObjToInt() == 8) DT_TableDataT1[i].M8 = "✔"; else if (x.ObjToInt() == 9) DT_TableDataT1[i].M9 = "✔"; else if (x.ObjToInt() == 10) DT_TableDataT1[i].M10 = "✔"; else if (x.ObjToInt() == 11) DT_TableDataT1[i].M11 = "✔"; else if (x.ObjToInt() == 12) DT_TableDataT1[i].M12 = "✔"; }); } staffIds = staffIds.Distinct().ToList(); var staffs = await Db.Queryable().Where(x => staffIds.Contains(x.StaffID)).ToListAsync(); var depts = await Db.Queryable().Where(x => deptIds.Contains(x.DeptID)).ToListAsync(); var courses = await Db.Queryable().Where(x => courseIds.Contains(x.Id)).ToListAsync(); var schools = await Db.Queryable().Where(x => schoolIds.Contains(x.Id)).ToListAsync(); for (int i = 0; i < DT_TableDataT1.Count; i++) { if (DT_TableDataT1[i].StaffIds.IsNotEmptyOrNull()) { var staffIds1 = JsonHelper.JsonToObj>(DT_TableDataT1[i].StaffIds); if (staffIds1.Any()) DT_TableDataT1[i].StaffNames = string.Join("、", staffs.Where(x => staffIds1.Contains(x.StaffID)).Select(x => x.StaffName)); } if (DT_TableDataT1[i].CourseId.IsNotEmptyOrNull() && DT_TableDataT1[i].CourseName.IsNullOrEmpty()) DT_TableDataT1[i].CourseName = courses.Where(x => x.Id == DT_TableDataT1[i].CourseId).Select(x => x.CourseName).FirstOrDefault(); if (DT_TableDataT1[i].DeptId.IsNotEmptyOrNull()) DT_TableDataT1[i].DeptName = depts.Where(x => x.DeptID == DT_TableDataT1[i].DeptId).Select(x => x.DeptName).FirstOrDefault(); if (DT_TableDataT1[i].SchoolId.IsNotEmptyOrNull()) DT_TableDataT1[i].SchoolName = schools.Where(x => x.Id == DT_TableDataT1[i].SchoolId).Select(x => x.SchoolName).FirstOrDefault(); if (DT_TableDataT1[i].TrainNum != null && DT_TableDataT1[i].TrainDays != null) DT_TableDataT1[i].TotalDays = DT_TableDataT1[i].TrainNum * DT_TableDataT1[i].TrainDays; DT_TableDataT1[i].BuiltInLabel = DT_TableDataT1[i].BuiltIn == 1 ? "是" : "否"; } ModuleParam param = new ModuleParam() { langId = filter.langId, menuName = filter.menuName }; var module = await _commonServices.GetModuleInfoAsync(param); result.result.JM_TableColumnT1 = module.Data.JM_TableColumnT1; var yearField = module.Data.JM_TableColumnT1.TableColumn.Where(x => x.field == "Year").SingleOrDefault(); if (year != yearField?.searchColumnDefaultValue.ObjToInt()) { result.result.JM_TableColumnT1.TableColumn?.ForEach(x => { if (x.GroupName == "计划年月") { int month = x.field.Replace("M", null).Replace("_F", null).ObjToInt(); x.label = year + "-" + (month < 10 ? "0" + month : month); if (month == 12) year++; } }); } return result; } public override async Task Add(InsertGhre_PlanInput entity) { if (entity.StaffId != null) entity.StaffIds = JsonHelper.ObjToJson(entity.StaffId.OrderBy(n => n).ToList()); if (entity.StaffId.IsNotEmptyOrNull() && entity.StaffId.Count > 0) entity.TrainNum = entity.StaffId.Count; if (entity.Months != null) entity.Month = JsonHelper.ObjToJson(entity.Months.OrderBy(n => n).ToList()); var result = await base.Add(entity); return result; } public override async Task Update(long Id, EditGhre_PlanInput editModel) { if (editModel.StaffId != null) editModel.StaffIds = JsonHelper.ObjToJson(editModel.StaffId); if (editModel.StaffId.IsNotEmptyOrNull() && editModel.StaffId.Count > 0) editModel.TrainNum = editModel.StaffId.Count; if (editModel.Months != null) editModel.Month = JsonHelper.ObjToJson(editModel.Months.OrderBy(n => n).ToList()); var result = await base.Update(Id, editModel, null, ["Status"]); return result; } public override async Task> QueryForm(QueryForm body) { var result = await base.QueryForm(body); string StaffIds = result.result.DT_TableDataT1[0].StaffIds; string Month = result.result.DT_TableDataT1[0].Month; if (!string.IsNullOrWhiteSpace(StaffIds)) result.result.DT_TableDataT1[0].StaffId = JsonConvert.DeserializeObject>(StaffIds); if (!string.IsNullOrWhiteSpace(Month)) result.result.DT_TableDataT1[0].Months = JsonConvert.DeserializeObject>(Month); if (result.result.DT_TableDataT1[0].TrainNum != null && result.result.DT_TableDataT1[0].TrainDays != null) result.result.DT_TableDataT1[0].TotalDays = result.result.DT_TableDataT1[0].TrainNum * result.result.DT_TableDataT1[0].TrainDays; return result; } public async Task> InsertByStatus(InsertGhre_PlanInput insertModel, string status) { if (insertModel.StaffId != null) insertModel.StaffIds = JsonHelper.ObjToJson(insertModel.StaffId); var data = ServiceResult.OprateSuccess("新增成功", 0); insertModel.Status = status; var id = await Add(insertModel); data.Success = id > 0; if (data.Success) data.Data = id; else return ServiceResult.OprateFailed("失败!"); return data; } public async Task UpdateStatus(InsertGhre_PlanInput input, string status) { 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 input.Ids) { if (!BaseDal.Any(id)) continue; var entity = await BaseDal.QueryById(id); switch (status) { case DIC_REQUEST_STATUS.Active: entity.AgreeReason = input.Reason; entity.AgreeTime = DateTime.Now; entity.AgreeUserId = App.User.ID; break; case DIC_REQUEST_STATUS.Temporary: entity.RefuseReason = input.Reason; entity.RefuseTime = DateTime.Now; entity.RefuseUserId = App.User.ID; break; } entity.UpdateIP = ip; entity.UpdateProg = api; entity.Status = status; entities.Add(entity); } var result = await BaseDal.Update(entities); return ServiceResult.OprateSuccess("执行成功!"); } public async Task> QueryUshioPlan(QueryBody filter) { var result = await QueryFilterPage(filter, "", true); var inPlanIds = result.result.DT_TableDataT1.Where(x => x.InOrOut == "In").Select(x => x.Id).ToList(); var outPlanIds = result.result.DT_TableDataT1.Where(x => x.InOrOut == "Out").Select(x => x.Id).ToList(); int? year = null; if (filter.jsonParam != null) foreach (JProperty jProperty in filter.jsonParam.Properties()) { var name = jProperty.Name; var value = jProperty.Value.ToString(); if (name == "Year") { var jsonParam = JsonHelper.JsonToObj(value); year = jsonParam.columnValue.ObjToInt(); } } var studyRecordGroup1 = await Db.SqlQueryable("select * from Ghre_StudyRecord_V") .Where(m => inPlanIds.Contains(m.PlanId.Value) && m.PlanId != null && ( m.CourseType == "ManualInsert" || (m.BeginTime != null && m.EndTime != null && m.ExamId == null) || (m.BeginTime != null && m.EndTime != null && m.ExamId != null && m.IsRequireStudy == true && m.IsPass == true) )) .Select(q => new { q.Id, q.PlanId, ExamDate = q.ExamDate1 ?? q.EndTime }) .GroupBy(q => new { q.Id, q.PlanId, q.ExamDate }) .Select(m => new { m.PlanId, ExamDate = m.ExamDate.Value, Count = SqlFunc.AggregateCount(m.Id) }) .ToListAsync(); studyRecordGroup1 = studyRecordGroup1.Where(x => x.ExamDate.Year == year).ToList(); var data = Mapper.Map(result.result.DT_TableDataT1).ToANew>(); data.ForEach(async d => { int year = d.Year.Value; if (d.InOrOut == "In") { d.M1_Count = studyRecordGroup1.Where(x => x.PlanId == d.Id && x.ExamDate.Year == year && x.ExamDate.Month == 1).Sum(x => x.Count); d.M2_Count = studyRecordGroup1.Where(x => x.PlanId == d.Id && x.ExamDate.Year == year && x.ExamDate.Month == 2).Sum(x => x.Count); d.M3_Count = studyRecordGroup1.Where(x => x.PlanId == d.Id && x.ExamDate.Year == year && x.ExamDate.Month == 3).Sum(x => x.Count); d.M4_Count = studyRecordGroup1.Where(x => x.PlanId == d.Id && x.ExamDate.Year == year && x.ExamDate.Month == 4).Sum(x => x.Count); d.M5_Count = studyRecordGroup1.Where(x => x.PlanId == d.Id && x.ExamDate.Year == year && x.ExamDate.Month == 5).Sum(x => x.Count); d.M6_Count = studyRecordGroup1.Where(x => x.PlanId == d.Id && x.ExamDate.Year == year && x.ExamDate.Month == 6).Sum(x => x.Count); d.M7_Count = studyRecordGroup1.Where(x => x.PlanId == d.Id && x.ExamDate.Year == year && x.ExamDate.Month == 7).Sum(x => x.Count); d.M8_Count = studyRecordGroup1.Where(x => x.PlanId == d.Id && x.ExamDate.Year == year && x.ExamDate.Month == 8).Sum(x => x.Count); d.M9_Count = studyRecordGroup1.Where(x => x.PlanId == d.Id && x.ExamDate.Year == year && x.ExamDate.Month == 9).Sum(x => x.Count); d.M10_Count = studyRecordGroup1.Where(x => x.PlanId == d.Id && x.ExamDate.Year == year && x.ExamDate.Month == 10).Sum(x => x.Count); d.M11_Count = studyRecordGroup1.Where(x => x.PlanId == d.Id && x.ExamDate.Year == year && x.ExamDate.Month == 11).Sum(x => x.Count); d.M12_Count = studyRecordGroup1.Where(x => x.PlanId == d.Id && x.ExamDate.Year == year && x.ExamDate.Month == 12).Sum(x => x.Count); } else { var sql = $"select TrainDays,BeginDate,EndDate from [120.26.205.42].[GhrUshio].[dbo].Ushio_ExternalTrainApply where TrainNeeds like '%{d.Id}%'"; var applys = await DbAccess.QueryListAsync(sql); d.M1_Count = applys.Where(x => x.BeginDate.Year == year && x.BeginDate.Month == 1).Sum(x => x.TrainDays); d.M2_Count = applys.Where(x => x.BeginDate.Year == year && x.BeginDate.Month == 2).Sum(x => x.TrainDays); d.M3_Count = applys.Where(x => x.BeginDate.Year == year && x.BeginDate.Month == 3).Sum(x => x.TrainDays); d.M4_Count = applys.Where(x => x.BeginDate.Year == year && x.BeginDate.Month == 4).Sum(x => x.TrainDays); d.M5_Count = applys.Where(x => x.BeginDate.Year == year && x.BeginDate.Month == 5).Sum(x => x.TrainDays); d.M6_Count = applys.Where(x => x.BeginDate.Year == year && x.BeginDate.Month == 6).Sum(x => x.TrainDays); d.M7_Count = applys.Where(x => x.BeginDate.Year == year && x.BeginDate.Month == 7).Sum(x => x.TrainDays); d.M8_Count = applys.Where(x => x.BeginDate.Year == year && x.BeginDate.Month == 8).Sum(x => x.TrainDays); d.M9_Count = applys.Where(x => x.BeginDate.Year == year && x.BeginDate.Month == 9).Sum(x => x.TrainDays); d.M10_Count = applys.Where(x => x.BeginDate.Year == year && x.BeginDate.Month == 10).Sum(x => x.TrainDays); d.M11_Count = applys.Where(x => x.BeginDate.Year == year && x.BeginDate.Month == 11).Sum(x => x.TrainDays); d.M12_Count = applys.Where(x => x.BeginDate.Year == year && x.BeginDate.Month == 12).Sum(x => x.TrainDays); } if (d.M1_Count > 0 && d.TrainNum > 0) d.M1_CompletionRate = d.M1_Count / d.TrainNum; if (d.M2_Count > 0 && d.TrainNum > 0) d.M2_CompletionRate = d.M2_Count / d.TrainNum; if (d.M3_Count > 0 && d.TrainNum > 0) d.M3_CompletionRate = d.M3_Count / d.TrainNum; if (d.M4_Count > 0 && d.TrainNum > 0) d.M4_CompletionRate = d.M4_Count / d.TrainNum; if (d.M5_Count > 0 && d.TrainNum > 0) d.M5_CompletionRate = d.M5_Count / d.TrainNum; if (d.M6_Count > 0 && d.TrainNum > 0) d.M6_CompletionRate = d.M6_Count / d.TrainNum; if (d.M7_Count > 0 && d.TrainNum > 0) d.M7_CompletionRate = d.M7_Count / d.TrainNum; if (d.M8_Count > 0 && d.TrainNum > 0) d.M8_CompletionRate = d.M8_Count / d.TrainNum; if (d.M9_Count > 0 && d.TrainNum > 0) d.M9_CompletionRate = d.M9_Count / d.TrainNum; if (d.M10_Count > 0 && d.TrainNum > 0) d.M10_CompletionRate = d.M10_Count / d.TrainNum; if (d.M11_Count > 0 && d.TrainNum > 0) d.M11_CompletionRate = d.M11_Count / d.TrainNum; if (d.M12_Count > 0 && d.TrainNum > 0) d.M12_CompletionRate = d.M12_Count / d.TrainNum; }); ModuleParam param = new ModuleParam() { langId = filter.langId, menuName = filter.menuName }; var module = await _commonServices.GetModuleInfoAsync(param); var result1 = new ServicePageResult(filter.pageNum, result.result.DT_TablePageInfoT1.TotalCount, filter.pageSize, data); result1.result.JM_TableColumnT1 = module.Data.JM_TableColumnT1; var yearField = module.Data.JM_TableColumnT1.TableColumn.Where(x => x.field == "Year").SingleOrDefault(); if (year != yearField?.searchColumnDefaultValue.ObjToInt()) { result1.result.JM_TableColumnT1.TableColumn?.ForEach(x => { if (x.GroupName == "计划年月") { int month = x.field.Replace("M", null).Replace("_F", null).ObjToInt(); x.label = year + "-" + (month < 10 ? "0" + month : month); if (month == 12) year++; } }); } return result1; } }