89 lines
2.8 KiB
C#
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.BatchUpdateNoTrackingAsync(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.BatchDeleteNoTrackingAsync(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);
|
|
}
|
|
|
|
}
|
|
}
|