EI-Image-Viewer-Api/IRaCIS.Core.Application/Service/Doctor/VacationService.cs

89 lines
2.8 KiB
C#

using IRaCIS.Application.Interfaces;
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Infra.EFCore;
using Microsoft.AspNetCore.Mvc;
using Panda.DynamicWebApi.Attributes;
namespace IRaCIS.Application.Services
{
[ ApiExplorerSettings(GroupName = "Reviewer")]
public class VacationService : BaseService, IVacationService
{
private readonly IRepository<Vacation> _vacationRepository;
public VacationService(IRepository<Vacation> vacationRepository)
{
_vacationRepository = vacationRepository;
}
/// <summary>
/// 添加休假时间段
/// </summary>
/// <param name="param">Status不传</param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> AddOrUpdateVacation(VacationCommand param)
{
if (param.Id == Guid.Empty|| param.Id ==null)
{
var result = await _vacationRepository.AddAsync(_mapper.Map<Vacation>(param));
var success = await _repository.SaveChangesAsync();
return ResponseOutput.Result(success, result.Id);
}
else
{
var success = await _vacationRepository.BatchUpdateAsync(u => u.Id == param.Id,
h => new Vacation
{
StartDate = param.StartDate,
EndDate = param.EndDate
});
return ResponseOutput.Result(success);
}
}
/// <summary>
/// 删除休假时间段
/// </summary>
/// <param name="holidayId">记录Id</param>
/// <returns></returns>
[HttpDelete("{holidayId:guid}")]
public async Task<IResponseOutput> DeleteVacation(Guid holidayId)
{
var success = await _vacationRepository.BatchDeleteAsync(u => u.Id == holidayId);
return ResponseOutput.Result(success);
}
/// <summary>
/// 获取休假时间段列表
/// </summary>
/// <returns></returns>
[HttpGet("{doctorId:guid}/{pageIndex:int}/{pageSize:int}")]
public async Task<PageOutput<VacationCommand>> GetVacationList(Guid doctorId, int pageIndex, int pageSize)
{
var query = _vacationRepository.Where(u => u.DoctorId == doctorId)
.ProjectTo<VacationCommand>(_mapper.ConfigurationProvider);
return await query.ToPagedListAsync(pageIndex, pageSize, "StartDate");
}
[NonDynamicMethod]
public async Task<IResponseOutput> OnVacation(Guid doctorId)
{
var count = await _vacationRepository.CountAsync(u => u.DoctorId == doctorId && u.EndDate >= DateTime.Now && u.StartDate <= DateTime.Now);
return ResponseOutput.Result(count > 0);
}
}
}