From 633f0efedb7ffb70650e7540aff88db3523e9510 Mon Sep 17 00:00:00 2001 From: xiaochanghai Date: Tue, 27 Aug 2024 13:33:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E8=B0=83=E5=BA=A6-=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=BF=85=E9=80=89=E4=BF=AE=E8=A7=84=E5=88=99=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8C=B9=E9=85=8D=E4=BA=BA=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ghre/Ghre_StudyRecordServices.cs | 2 + .../Ghre/Ghre_StudyRuleServices.cs | 153 ++++++++++++++++-- 2 files changed, 138 insertions(+), 17 deletions(-) diff --git a/Tiobon.Core.Services/Ghre/Ghre_StudyRecordServices.cs b/Tiobon.Core.Services/Ghre/Ghre_StudyRecordServices.cs index 4b22e225..4bba2dcd 100644 --- a/Tiobon.Core.Services/Ghre/Ghre_StudyRecordServices.cs +++ b/Tiobon.Core.Services/Ghre/Ghre_StudyRecordServices.cs @@ -180,8 +180,10 @@ public class Ghre_StudyRecordServices : BaseServices() - .Where(x => x.Indate != null && x.Indate.Value.Date == dt.Date) - .Select(x => new + var rules = await Db.Queryable().Where(x => x.TrainType != "PreWork" && x.TrainType != "Orientation").ToListAsync(); + + for (int j = 0; j < rules.Count; j++) + { + var rule = rules[j]; + var ruleId = rule.Id; + var ZoneIds = new List(); + var DeptIds = new List(); + var TitleIds = new List(); + var GradeIds = new List(); + var JobIds = new List(); + if (!rule.ZoneId.IsNull()) + ZoneIds = JsonHelper.JsonToObj>(rule.ZoneId); + if (!rule.DeptId.IsNull()) + DeptIds = JsonHelper.JsonToObj>(rule.DeptId); + if (!rule.TitleId.IsNull()) + TitleIds = JsonHelper.JsonToObj>(rule.TitleId); + if (!rule.GradeId.IsNull()) + GradeIds = JsonHelper.JsonToObj>(rule.GradeId); + if (!rule.JobId.IsNull()) + JobIds = JsonHelper.JsonToObj>(rule.JobId); + + var staffs = await Db.Queryable() + .Where(x => x.Indate != null && x.Indate.Value.Date == dt.Date) + .WhereIF(ZoneIds.Any(), x => ZoneIds.Contains(x.ZoneID)) + .WhereIF(DeptIds.Any(), x => DeptIds.Contains(x.DeptID)) + .WhereIF(TitleIds.Any(), x => TitleIds.Contains(x.TitleID)) + .WhereIF(GradeIds.Any(), x => GradeIds.Contains(x.GradeID)) + .WhereIF(JobIds.Any(), x => JobIds.Contains(x.JobID)) + .Select(x => new + { + x.StaffID, + x.StaffEname, + x.Indate, + x.OutDate + }) + .ToListAsync(); + + + if (!staffs.IsNull()) { - x.StaffID, - x.StaffEname, - x.Indate, - x.OutDate - }).ToListAsync(); + if (staffs.Any()) + { + var snap = await Db.Queryable().FirstAsync(x => x.CourseId == rule.CourseId); + + var inserts = new List(); + var insertExamStaffs = new List(); + var insertResults = new List(); + + //var exam = await Db.Queryable() + // .WhereIF(rule.CourseId != null, x => x.CourseId == rule.CourseId) + // .WhereIF(rule.CourseSceneId != null, x => x.CourseSceneId == rule.CourseSceneId) + // .FirstAsync(x => x.Status == Consts.DicExamStatus.RELEASED); + + var exam = await Db.Queryable() + .Where(x => x.Status == Consts.DIC_EXAM_STATUS.RELEASED + && ((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)) + .WhereIF(!rule.CourseId.IsNull(), x => x.CourseId == rule.CourseId) + .WhereIF(!rule.CourseSceneId.IsNull(), x => x.CourseSceneId == rule.CourseSceneId) + .FirstAsync(); + + for (int i = 0; i < staffs.Count; i++) + { + var staff = staffs[i]; + + var record = await Db.Queryable() + .Where(x => x.StudyRuleId != ruleId && x.StaffId == staff.StaffID) + .WhereIF(!string.IsNullOrWhiteSpace(rule.Year), x => x.Year == rule.Year) + .WhereIF(rule.CourseId != null, x => x.CourseId == rule.CourseId) + .WhereIF(rule.CourseSceneId != null, x => x.CourseSceneId == rule.CourseSceneId) + //.AS("Ghre_StudyRecord_V") + .FirstAsync(); + if (record is null) + { + inserts.Add(new Ghre_StudyRecord() + { + StaffId = staff.StaffID, + ExamId = exam?.Id, + CourseSnapId = snap?.Id, + CourseId = rule.CourseId, + CourseSceneId = rule.CourseSceneId, + StudyRuleId = ruleId, + JoinTime = dt, + CourseBeginTime = dt.Date, + CourseEndTime = dt.Date.AddMonths((rule.DeadlineMonth ?? snap?.ValidityPeriod) ?? 1), + CourseType = rule.RuleType, + CourseStatus = Consts.DIC_STUDY_RECORD_COURSE_STATUS_IN, + StudyStatus = Consts.DIC_STUDY_RECORD_STUDY_STATUS.NO_JOIN, + Year = rule.Year + }); + insertResults.Add(new Ghre_StudyRuleResult() + { + StaffId = staff.StaffID, + StudyRuleId = ruleId, + Status = "SUCCESS", + RemarkSz = "生成成功" + }); + + if (exam != null) + if (!await Db.Queryable().AnyAsync(x => x.ExamId == exam.Id && x.StaffId == staff.StaffID)) + insertExamStaffs.Add(new Ghre_ExamStaff() + { + ExamId = exam.Id, + StudyRuleId = ruleId, + StaffId = staff.StaffID, + Source = "StudyRule" + rule.RuleType + }); + } + else insertResults.Add(new Ghre_StudyRuleResult() + { + StaffId = staff.StaffID, + StudyRuleId = ruleId, + Status = "FAIL", + RemarkSz = "生成失败,该课程学习记录已被其他规则生成!" + }); + } + + if (inserts.Any()) + await Db.Insertable(inserts).ExecuteReturnSnowflakeIdListAsync(); + if (insertResults.Any()) + await Db.Insertable(insertResults).ExecuteReturnSnowflakeIdListAsync(); + + if (insertExamStaffs.Any()) + await Db.Insertable(insertExamStaffs).ExecuteReturnSnowflakeIdListAsync(); + } + } + } } } \ No newline at end of file