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); } } }