fix 优化排班控制
This commit is contained in:
@@ -49,14 +49,33 @@ public class WorkGridScheduleService : IWorkGridScheduleService
|
||||
var others = request.UserCodes.Except(workGridUserCodes).ToList();
|
||||
others.ThrowIfExists($"{others.Join(",")}非当前网格人员");
|
||||
|
||||
var exists = await _dbContext.Queryable<WorkGridScheduleEntity>()
|
||||
var dateBefore = request.Date.AddDays(-1);
|
||||
var dateAfter = request.Date.AddDays(1);
|
||||
|
||||
var scheduleRange = await _dbContext.Queryable<WorkGridScheduleEntity>()
|
||||
.Where(x => x.WorkGridCode == request.WorkGridCode
|
||||
&& x.Date == request.Date
|
||||
&& x.Date >= dateBefore && x.Date <= dateAfter
|
||||
&& request.UserCodes.Contains(x.UserCode)
|
||||
)
|
||||
.AnyAsync();
|
||||
.ToListAsync();
|
||||
|
||||
exists.ThrowIfTrue("当天已经存在排班人员");
|
||||
var existsUserCodes = scheduleRange.Where(x => x.Date == request.Date && request.UserCodes.Contains(x.UserCode)).Select(x => x.UserCode).ToList();
|
||||
existsUserCodes.ThrowIfExists(existsUserCodes.Join(",") + "当天已存在排班");
|
||||
|
||||
if (request.PeriodType == WorkGridTimePeriodEnumType.Day)
|
||||
{
|
||||
existsUserCodes = scheduleRange
|
||||
.Where(x => x.Date == dateBefore && x.PeriodType == WorkGridTimePeriodEnumType.Night && request.UserCodes.Contains(x.UserCode))
|
||||
.Select(x => x.UserCode).ToList();
|
||||
existsUserCodes.ThrowIfExists(existsUserCodes.Join(",") + $"在{dateBefore.ToString("yyyy-MM-dd")}已存在{WorkGridTimePeriodEnumType.Night.GetDescription()}");
|
||||
}
|
||||
else if (request.PeriodType == WorkGridTimePeriodEnumType.Night)
|
||||
{
|
||||
existsUserCodes = scheduleRange
|
||||
.Where(x => x.Date == dateAfter && x.PeriodType == WorkGridTimePeriodEnumType.Day && request.UserCodes.Contains(x.UserCode))
|
||||
.Select(x => x.UserCode).ToList();
|
||||
existsUserCodes.ThrowIfExists(existsUserCodes.Join(",") + $"在{dateAfter.ToString("yyyy-MM-dd")}已存在{WorkGridTimePeriodEnumType.Day.GetDescription()}");
|
||||
}
|
||||
|
||||
var maximumConsecutiveDtos = await MaximumConsecutiveUserCodesAsync(request.UserCodes, 10, request.Date);
|
||||
maximumConsecutiveDtos.ThrowIfExists(maximumConsecutiveDtos.Select(x => $"{x.UserCode}已经连续排班10天({x.Start}-{x.End}),不可继续排班").Join("\r\n"));
|
||||
@@ -228,7 +247,7 @@ public class WorkGridScheduleService : IWorkGridScheduleService
|
||||
WITH ranked_dates AS (SELECT UserCode,
|
||||
date,
|
||||
ROW_NUMBER() OVER (PARTITION BY UserCode ORDER BY date) AS rn
|
||||
FROM WorkGridSchedules where UserCode in ({p})
|
||||
FROM WorkGridSchedules where IsDeleted = 0 and UserCode in ({p})
|
||||
GROUP BY UserCode, date),
|
||||
grouped AS (SELECT UserCode,
|
||||
date,
|
||||
|
||||
@@ -193,6 +193,8 @@ public class WorkGridService : IWorkGridService
|
||||
})
|
||||
.SingleAsync();
|
||||
|
||||
if (myWorkGrid != null)
|
||||
{
|
||||
var userCodes = myWorkGrid.UserInfos.Select(x => x.Code).ToList();
|
||||
if (userCodes.Any())
|
||||
{
|
||||
@@ -203,6 +205,7 @@ public class WorkGridService : IWorkGridService
|
||||
item.MaximumConsecutiveSchedules = maximumConsecutiveUserCodes.FirstOrDefault(x => x.UserCode == item.Code);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return myWorkGrid;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user