diff --git a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs index 2a7287f7..6a31cce9 100644 --- a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs +++ b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs @@ -78,8 +78,9 @@ public class WorkGridScheduleService : IWorkGridScheduleService } var maximumConsecutiveDtos = await MaximumConsecutiveUserCodesAsync(request.UserCodes, 10, request.Date); - maximumConsecutiveDtos.ThrowIfExists(maximumConsecutiveDtos.Select(x => $"{x.UserCode}已经连续排班10天({x.Start}-{x.End}),不可继续排班").Join("\r\n")); - + //张三(工号)已连续排班10天,超10休1规定,禁止排班,请处理 + maximumConsecutiveDtos.ThrowIfExists(maximumConsecutiveDtos.Select(x => $"{x.UserCode}已经连续排班10天({x.Start}-{x.End}),超10休1规定,禁止排班").Join("\r\n")); + var toInserts = request.UserCodes.Select(x => new WorkGridScheduleEntity { WorkGridCode = request.WorkGridCode, diff --git a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs index 7b2c8fde..39c9c5ef 100644 --- a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs +++ b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs @@ -54,22 +54,6 @@ public class DeviceUploadLogService : IDeviceUploadLogService var userCodes2 = gainfos.Select(x => x.Code).Distinct().ToList(); - var min = DateOnly.FromDateTime(requests.Min(x => x.RaiseDateTime)).AddDays(-1); - var max = DateOnly.FromDateTime(requests.Max(x => x.RaiseDateTime)); - - var workGridUsers = await _dbContext.Queryable() - .LeftJoin((x, wg) => x.WorkGridCode == wg.Code) - .Where(x => userCodes2.Contains(x.UserCode)) - .Select((x, wg) => new - { - x.WorkGridCode, x.UserCode, wg.LeaderUserCode, WorkGridName = wg.Name - }) - .ToListAsync(); - - var workGridSchedules = await _dbContext.Queryable() - .Where(x => x.Date >= min && x.Date <= max) - .Where(x => userCodes2.Contains(x.UserCode)).ToListAsync(); - var factories = devices.Select(x => x.TenantId).Distinct().ToList(); var workGridTimePeriods = await _dbContext.Queryable() .Where(x => factories.Contains(x.TenantId)) @@ -79,6 +63,19 @@ public class DeviceUploadLogService : IDeviceUploadLogService }) .ToListAsync(); + var min = DateOnly.FromDateTime(requests.Min(x => x.RaiseDateTime)).AddDays(-1); + var max = DateOnly.FromDateTime(requests.Max(x => x.RaiseDateTime)); + + var workGridSchedules = await _dbContext.Queryable() + .LeftJoin((x, wg) => x.WorkGridCode == wg.Code) + .Where(x => x.Date >= min && x.Date <= max && userCodes2.Contains(x.UserCode)) + .Select((x, wg) => new + { + x.UserCode, x.WorkGridCode, x.Date, x.PeriodType, WorkGridName = wg.Name, + wg.LeaderUserCode + }) + .ToListAsync(); + var inserts = new List(); foreach (var request in requests.Where(x => existsDeviceUniqueNos.Contains(x.DeviceUniqueNo))) { @@ -114,67 +111,83 @@ public class DeviceUploadLogService : IDeviceUploadLogService var workGridInfo = new WorkGridInfo(); var currentWorkGridTimePeriods = workGridTimePeriods.Where(x => x.TenantId == device.TenantId).ToList(); - var workGridUser = workGridUsers.FirstOrDefault(x => x.UserCode == request.UserUniqueNo); - if (needUpload && currentWorkGridTimePeriods.Any() && workGridUser != null) + var currentWorkGridSchedules = workGridSchedules.Where(x => x.UserCode == request.UserUniqueNo).ToList(); + if (needUpload && currentWorkGridTimePeriods.Any() && currentWorkGridSchedules.Any()) { workGridInfo.TimeSetting = currentWorkGridTimePeriods.Select(x => new { - Type = x.Type.GetDescription(), x.Before, x.Start, x.End, x.After, x.TenantId + Type = x.Type.GetDescription(), + x.Before, x.Start, + x.End, x.After, + x.TenantId }).ToList(); + var currentWorkGridSchedule = currentWorkGridSchedules.First(); workGridInfo.WorkGrid = new { - workGridUser.WorkGridCode, - workGridUser.WorkGridName, - workGridUser.LeaderUserCode + currentWorkGridSchedule.WorkGridCode, + currentWorkGridSchedule.WorkGridName, + currentWorkGridSchedule.LeaderUserCode }; var currentDate = request.RaiseDateTime.Date; var currentDateOnly = DateOnly.FromDateTime(currentDate); + //白班判断 var currentDayWorkGridTimePeriod = currentWorkGridTimePeriods.FirstOrDefault(x => x.Type == WorkGridTimePeriodEnumType.Day); - var currentDayWorkGridSchedule = workGridSchedules.FirstOrDefault(x => x.PeriodType == WorkGridTimePeriodEnumType.Day && x.Date == currentDateOnly); - if (currentDayWorkGridTimePeriod != null && currentDayWorkGridSchedule != null) + if (currentDayWorkGridTimePeriod != null) { - var start = currentDate.Add(currentDayWorkGridTimePeriod.Start.AddMinutes(-currentDayWorkGridTimePeriod.Before).ToTimeSpan()); - var end = currentDate.Add(currentDayWorkGridTimePeriod.End.AddMinutes(currentDayWorkGridTimePeriod.After).ToTimeSpan()); - - if (request.RaiseDateTime >= start && request.RaiseDateTime <= end) + var currentDayWorkGridSchedule = currentWorkGridSchedules.FirstOrDefault(x => x.PeriodType == WorkGridTimePeriodEnumType.Day && x.Date == currentDateOnly); + if (currentDayWorkGridSchedule != null) { - workGridInfo.PeriodType = WorkGridTimePeriodEnumType.Day; + var start = currentDate.Add(currentDayWorkGridTimePeriod.Start.AddMinutes(-currentDayWorkGridTimePeriod.Before).ToTimeSpan()); + var end = currentDate.Add(currentDayWorkGridTimePeriod.End.AddMinutes(currentDayWorkGridTimePeriod.After).ToTimeSpan()); + + if (request.RaiseDateTime >= start && request.RaiseDateTime <= end) + { + workGridInfo.PeriodType = WorkGridTimePeriodEnumType.Day; + } } } + //晚班判断 var currentNightWorkGridTimePeriod = currentWorkGridTimePeriods.FirstOrDefault(x => x.Type == WorkGridTimePeriodEnumType.Night); - var currentNightWorkGridSchedules = workGridSchedules - .Where(x => x.PeriodType == WorkGridTimePeriodEnumType.Night && (x.Date == currentDateOnly || x.Date == currentDateOnly.AddDays(-1))).ToList(); - if (currentNightWorkGridTimePeriod != null && currentNightWorkGridSchedules.Any()) + if (currentNightWorkGridTimePeriod != null) { - var startTime = currentNightWorkGridTimePeriod.Start.AddMinutes(-currentNightWorkGridTimePeriod.Before); - var endTime = currentNightWorkGridTimePeriod.End.AddMinutes(currentNightWorkGridTimePeriod.After); + var currentNightWorkGridSchedules = currentWorkGridSchedules + .Where(x => x.PeriodType == WorkGridTimePeriodEnumType.Night) + .Where(x => x.Date == currentDateOnly || x.Date == currentDateOnly.AddDays(-1)) + .ToList(); - if (currentNightWorkGridSchedules.Any(x => x.Date == currentDateOnly)) + if (currentNightWorkGridSchedules.Any()) { - var start = currentDateOnly.ToDateTime(startTime); - var end = currentDateOnly.ToDateTime(new TimeOnly(23, 59, 59, 999)); + var startTime = currentNightWorkGridTimePeriod.Start.AddMinutes(-currentNightWorkGridTimePeriod.Before); + var endTime = currentNightWorkGridTimePeriod.End.AddMinutes(currentNightWorkGridTimePeriod.After); - if (request.RaiseDateTime >= start && request.RaiseDateTime <= end) + if (currentNightWorkGridSchedules.Any(x => x.Date == currentDateOnly)) { - workGridInfo.PeriodType = WorkGridTimePeriodEnumType.Night; + var start = currentDateOnly.ToDateTime(startTime); + var end = currentDateOnly.ToDateTime(new TimeOnly(23, 59, 59, 999)); + + if (request.RaiseDateTime >= start && request.RaiseDateTime <= end) + { + workGridInfo.PeriodType = WorkGridTimePeriodEnumType.Night; + } } - } - if (currentNightWorkGridSchedules.Any(x => x.Date == currentDateOnly.AddDays(-1))) - { - var start = currentDateOnly.AddDays(-1).ToDateTime(startTime); - var end = currentDateOnly.ToDateTime(endTime); - - if (request.RaiseDateTime >= start && request.RaiseDateTime <= end) + if (currentNightWorkGridSchedules.Any(x => x.Date == currentDateOnly.AddDays(-1))) { - workGridInfo.PeriodType = WorkGridTimePeriodEnumType.Night; + var start = currentDateOnly.AddDays(-1).ToDateTime(startTime); + var end = currentDateOnly.ToDateTime(endTime); + + if (request.RaiseDateTime >= start && request.RaiseDateTime <= end) + { + workGridInfo.PeriodType = WorkGridTimePeriodEnumType.Night; + } } } } + needUpload = workGridInfo.PeriodType.HasValue; if (!needUpload) @@ -183,8 +196,8 @@ public class DeviceUploadLogService : IDeviceUploadLogService { await _dingTalkApi.SendWorkMessageAsync(new JinkoSendWorkMessageRequest { - Content = $"{workGridUser.WorkGridName}的网格长,你好,检测到你网格中 {currentGainfo.Name}({currentGainfo.Code})今日未排班,但是有考勤记录,请前往系统处理!", - WorkCodes = new List { workGridUser.LeaderUserCode } + Content = $"{currentWorkGridSchedule.WorkGridName}的网格长,你好,检测到你网格中 {currentGainfo.Name}({currentGainfo.Code})今日未排班,但是有考勤记录,请前往系统处理!", + WorkCodes = new List { currentWorkGridSchedule.LeaderUserCode } }); } catch (Exception e) @@ -216,7 +229,6 @@ public class DeviceUploadLogService : IDeviceUploadLogService await _dbContext.InsertAsync(inserts); } - public async Task> GetMyRecordsAsync(DeviceUploadLogMyRecordRequest request) { var jinkoCode = _currentUser.GetUserClaim(UserClaimConstants.JinkoCode) ?? string.Empty;