fix 优化通行记录判断
This commit is contained in:
@@ -78,8 +78,9 @@ public class WorkGridScheduleService : IWorkGridScheduleService
|
|||||||
}
|
}
|
||||||
|
|
||||||
var maximumConsecutiveDtos = await MaximumConsecutiveUserCodesAsync(request.UserCodes, 10, request.Date);
|
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
|
var toInserts = request.UserCodes.Select(x => new WorkGridScheduleEntity
|
||||||
{
|
{
|
||||||
WorkGridCode = request.WorkGridCode,
|
WorkGridCode = request.WorkGridCode,
|
||||||
|
|||||||
@@ -54,22 +54,6 @@ public class DeviceUploadLogService : IDeviceUploadLogService
|
|||||||
|
|
||||||
var userCodes2 = gainfos.Select(x => x.Code).Distinct().ToList();
|
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<WorkGridUserEntity>()
|
|
||||||
.LeftJoin<WorkGridEntity>((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<WorkGridScheduleEntity>()
|
|
||||||
.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 factories = devices.Select(x => x.TenantId).Distinct().ToList();
|
||||||
var workGridTimePeriods = await _dbContext.Queryable<WorkGridTimePeriodEntity>()
|
var workGridTimePeriods = await _dbContext.Queryable<WorkGridTimePeriodEntity>()
|
||||||
.Where(x => factories.Contains(x.TenantId))
|
.Where(x => factories.Contains(x.TenantId))
|
||||||
@@ -79,6 +63,19 @@ public class DeviceUploadLogService : IDeviceUploadLogService
|
|||||||
})
|
})
|
||||||
.ToListAsync();
|
.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<WorkGridScheduleEntity>()
|
||||||
|
.LeftJoin<WorkGridEntity>((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<DeviceUploadLogEntity>();
|
var inserts = new List<DeviceUploadLogEntity>();
|
||||||
foreach (var request in requests.Where(x => existsDeviceUniqueNos.Contains(x.DeviceUniqueNo)))
|
foreach (var request in requests.Where(x => existsDeviceUniqueNos.Contains(x.DeviceUniqueNo)))
|
||||||
{
|
{
|
||||||
@@ -114,67 +111,83 @@ public class DeviceUploadLogService : IDeviceUploadLogService
|
|||||||
|
|
||||||
var workGridInfo = new WorkGridInfo();
|
var workGridInfo = new WorkGridInfo();
|
||||||
var currentWorkGridTimePeriods = workGridTimePeriods.Where(x => x.TenantId == device.TenantId).ToList();
|
var currentWorkGridTimePeriods = workGridTimePeriods.Where(x => x.TenantId == device.TenantId).ToList();
|
||||||
var workGridUser = workGridUsers.FirstOrDefault(x => x.UserCode == request.UserUniqueNo);
|
var currentWorkGridSchedules = workGridSchedules.Where(x => x.UserCode == request.UserUniqueNo).ToList();
|
||||||
if (needUpload && currentWorkGridTimePeriods.Any() && workGridUser != null)
|
if (needUpload && currentWorkGridTimePeriods.Any() && currentWorkGridSchedules.Any())
|
||||||
{
|
{
|
||||||
workGridInfo.TimeSetting = currentWorkGridTimePeriods.Select(x => new
|
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();
|
}).ToList();
|
||||||
|
|
||||||
|
var currentWorkGridSchedule = currentWorkGridSchedules.First();
|
||||||
workGridInfo.WorkGrid = new
|
workGridInfo.WorkGrid = new
|
||||||
{
|
{
|
||||||
workGridUser.WorkGridCode,
|
currentWorkGridSchedule.WorkGridCode,
|
||||||
workGridUser.WorkGridName,
|
currentWorkGridSchedule.WorkGridName,
|
||||||
workGridUser.LeaderUserCode
|
currentWorkGridSchedule.LeaderUserCode
|
||||||
};
|
};
|
||||||
var currentDate = request.RaiseDateTime.Date;
|
var currentDate = request.RaiseDateTime.Date;
|
||||||
var currentDateOnly = DateOnly.FromDateTime(currentDate);
|
var currentDateOnly = DateOnly.FromDateTime(currentDate);
|
||||||
|
|
||||||
|
//白班判断
|
||||||
var currentDayWorkGridTimePeriod = currentWorkGridTimePeriods.FirstOrDefault(x => x.Type == WorkGridTimePeriodEnumType.Day);
|
var currentDayWorkGridTimePeriod = currentWorkGridTimePeriods.FirstOrDefault(x => x.Type == WorkGridTimePeriodEnumType.Day);
|
||||||
var currentDayWorkGridSchedule = workGridSchedules.FirstOrDefault(x => x.PeriodType == WorkGridTimePeriodEnumType.Day && x.Date == currentDateOnly);
|
if (currentDayWorkGridTimePeriod != null)
|
||||||
if (currentDayWorkGridTimePeriod != null && currentDayWorkGridSchedule != null)
|
|
||||||
{
|
{
|
||||||
var start = currentDate.Add(currentDayWorkGridTimePeriod.Start.AddMinutes(-currentDayWorkGridTimePeriod.Before).ToTimeSpan());
|
var currentDayWorkGridSchedule = currentWorkGridSchedules.FirstOrDefault(x => x.PeriodType == WorkGridTimePeriodEnumType.Day && x.Date == currentDateOnly);
|
||||||
var end = currentDate.Add(currentDayWorkGridTimePeriod.End.AddMinutes(currentDayWorkGridTimePeriod.After).ToTimeSpan());
|
if (currentDayWorkGridSchedule != null)
|
||||||
|
|
||||||
if (request.RaiseDateTime >= start && request.RaiseDateTime <= end)
|
|
||||||
{
|
{
|
||||||
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 currentNightWorkGridTimePeriod = currentWorkGridTimePeriods.FirstOrDefault(x => x.Type == WorkGridTimePeriodEnumType.Night);
|
||||||
var currentNightWorkGridSchedules = workGridSchedules
|
if (currentNightWorkGridTimePeriod != null)
|
||||||
.Where(x => x.PeriodType == WorkGridTimePeriodEnumType.Night && (x.Date == currentDateOnly || x.Date == currentDateOnly.AddDays(-1))).ToList();
|
|
||||||
if (currentNightWorkGridTimePeriod != null && currentNightWorkGridSchedules.Any())
|
|
||||||
{
|
{
|
||||||
var startTime = currentNightWorkGridTimePeriod.Start.AddMinutes(-currentNightWorkGridTimePeriod.Before);
|
var currentNightWorkGridSchedules = currentWorkGridSchedules
|
||||||
var endTime = currentNightWorkGridTimePeriod.End.AddMinutes(currentNightWorkGridTimePeriod.After);
|
.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 startTime = currentNightWorkGridTimePeriod.Start.AddMinutes(-currentNightWorkGridTimePeriod.Before);
|
||||||
var end = currentDateOnly.ToDateTime(new TimeOnly(23, 59, 59, 999));
|
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)))
|
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)
|
|
||||||
{
|
{
|
||||||
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;
|
needUpload = workGridInfo.PeriodType.HasValue;
|
||||||
|
|
||||||
if (!needUpload)
|
if (!needUpload)
|
||||||
@@ -183,8 +196,8 @@ public class DeviceUploadLogService : IDeviceUploadLogService
|
|||||||
{
|
{
|
||||||
await _dingTalkApi.SendWorkMessageAsync(new JinkoSendWorkMessageRequest
|
await _dingTalkApi.SendWorkMessageAsync(new JinkoSendWorkMessageRequest
|
||||||
{
|
{
|
||||||
Content = $"{workGridUser.WorkGridName}的网格长,你好,检测到你网格中 {currentGainfo.Name}({currentGainfo.Code})今日未排班,但是有考勤记录,请前往系统处理!",
|
Content = $"{currentWorkGridSchedule.WorkGridName}的网格长,你好,检测到你网格中 {currentGainfo.Name}({currentGainfo.Code})今日未排班,但是有考勤记录,请前往系统处理!",
|
||||||
WorkCodes = new List<string> { workGridUser.LeaderUserCode }
|
WorkCodes = new List<string> { currentWorkGridSchedule.LeaderUserCode }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@@ -216,7 +229,6 @@ public class DeviceUploadLogService : IDeviceUploadLogService
|
|||||||
await _dbContext.InsertAsync(inserts);
|
await _dbContext.InsertAsync(inserts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<List<DeviceUploadLogResponse>> GetMyRecordsAsync(DeviceUploadLogMyRecordRequest request)
|
public async Task<List<DeviceUploadLogResponse>> GetMyRecordsAsync(DeviceUploadLogMyRecordRequest request)
|
||||||
{
|
{
|
||||||
var jinkoCode = _currentUser.GetUserClaim(UserClaimConstants.JinkoCode) ?? string.Empty;
|
var jinkoCode = _currentUser.GetUserClaim(UserClaimConstants.JinkoCode) ?? string.Empty;
|
||||||
|
|||||||
Reference in New Issue
Block a user