Files
jinko.yikatong/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs
2025-03-05 12:33:47 +08:00

81 lines
2.8 KiB
C#

using Dlhis.Basic.WorkGrids.Request;
using Dlhis.Basic.WorkGrids.Response;
using Dlhis.Entity.Basic.Entity;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Kurisu.AspNetCore.Utils.Extensions;
namespace Dlhis.Basic.WorkGrids.Services.Implements;
public class WorkGridScheduleService : IWorkGridScheduleService
{
private readonly IDbContext _dbContext;
public WorkGridScheduleService(IDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task SaveAsync(WorkGridScheduleSaveRequest request)
{
var exists = await _dbContext.Queryable<WorkGridScheduleEntity>()
.Where(x => x.Date == request.Date)
.Where(x => x.PeriodType != request.PeriodType)
.Where(x => request.UserCodes.Contains(x.UserCode))
.AnyAsync();
exists.ThrowIfTrue($"存在已经分配的人员");
var data = await _dbContext.Queryable<WorkGridScheduleEntity>()
.Where(x => x.WorkGridCode == request.WorkGridCode)
.Where(x => x.Date == request.Date)
.Where(x => x.PeriodType == request.PeriodType)
.ToListAsync();
await _dbContext.DeleteReallyAsync(data);
var toInserts = request.UserCodes.Select(x => new WorkGridScheduleEntity
{
WorkGridCode = request.WorkGridCode,
Date = request.Date,
PeriodType = request.PeriodType,
UserCode = x
}).ToList();
await _dbContext.InsertAsync(toInserts);
}
/// <inheritdoc />
public async Task<List<WorkGridScheduleResponse>> GetListAsync(Guid workGridCode, DateOnly date)
{
return await _dbContext.Queryable<WorkGridScheduleEntity>()
.Where(x => x.WorkGridCode == workGridCode && x.Date == date)
.Select(x => new WorkGridScheduleResponse
{
Date = x.Date,
PeriodType = x.PeriodType,
UserCode = x.UserCode
})
.ToListAsync();
}
/// <inheritdoc />
public async Task<IEnumerable<WorkGridScheduleSummaryResponse>> GetListSummaryAsync(Guid workGridCode, DateOnly start, DateOnly end)
{
var workGridSchedules = await _dbContext.Queryable<WorkGridScheduleEntity>()
.Where(x => x.WorkGridCode == workGridCode && x.Date >= start && x.Date <= end)
.ToListAsync();
return workGridSchedules.GroupBy(x => x.Date).Select(x =>
{
return new WorkGridScheduleSummaryResponse
{
Date = x.Key,
Details = x.GroupBy(p => p.PeriodType).Select(p => new WorkGridScheduleSummaryDetailResponse
{
PeriodType = p.Key,
Count = p.Count()
})
};
});
}
}