Files
jinko.yikatong/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridTimePeriodService.cs
2025-02-19 14:49:13 +08:00

93 lines
3.1 KiB
C#

using Dlhis.Basic.WorkGrids.Request;
using Dlhis.Basic.WorkGrids.Response;
using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Basic.Enums;
using Kurisu.AspNetCore.CustomClass;
using Kurisu.AspNetCore.DataAccess.Dto;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Kurisu.AspNetCore.Utils.Extensions;
using Mapster;
namespace Dlhis.Basic.WorkGrids.Services.Implements;
public class WorkGridTimePeriodService : IWorkGridTimePeriodService
{
private readonly IDbContext _dbContext;
public WorkGridTimePeriodService(IDbContext dbContext)
{
_dbContext = dbContext;
}
/// <inheritdoc />
public async Task SaveAsync(WorkGridTimePeriodSaveRequest request)
{
//await CheckDuplicateTimePeriodAsync(request);
if (!request.Id.HasValue)
{
//判断重复配置
var existsSameType = await _dbContext.Queryable<WorkGridTimePeriodEntity>()
.Where(x => x.Type == request.Type)
.AnyAsync();
existsSameType.ThrowIfTrue($"已存在{request.Type}配置");
var data = request.Adapt<WorkGridTimePeriodEntity>();
data.Type = request.Type;
await _dbContext.InsertAsync(data);
}
else
{
var entity = await _dbContext.Queryable<WorkGridTimePeriodEntity>().Where(x => x.Id == request.Id).SingleAsync();
request.Adapt(entity);
await _dbContext.UpdateAsync(entity);
}
}
/// <inheritdoc />
public async Task<Pagination<WorkGridTimePeriodPageResponse>> GetPageAsync(WorkGridTimePeriodPageRequest request)
{
return await _dbContext.Queryable<WorkGridTimePeriodEntity>()
.Select<WorkGridTimePeriodPageResponse>()
.ToPageListAsync(request);
}
//*************************************************************************************************************************************************
/// <summary>
/// 根据类型获取配置
/// </summary>
/// <param name="timePeriodType"></param>
/// <returns></returns>
private async Task<WorkGridTimePeriodEntity> GetSettingAsync(WorkGridTimePeriodEnumType timePeriodType)
{
return await _dbContext.Queryable<WorkGridTimePeriodEntity>()
.Where(x => x.Type == timePeriodType)
.SingleAsync();
}
/// <summary>
/// 检查时间段重合检查
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
private async Task CheckDuplicateTimePeriodAsync(WorkGridTimePeriodSaveRequest request)
{
var periods = await _dbContext.Queryable<WorkGridTimePeriodEntity>()
.Where(x => x.Type != request.Type)
.Select(x => new TimePeriod
{
Start = x.Start,
End = x.End
})
.ToListAsync();
foreach (var period in periods)
{
period.IsDuplicate(request.Adapt<TimePeriod>()).ThrowIfTrue($"存在时间段重合[{period.Start}-{period.End}]");
}
}
}