116 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
using IRaCIS.Application.Contracts;
 | 
						|
using IRaCIS.Application.Interfaces;
 | 
						|
using Microsoft.AspNetCore.Mvc;
 | 
						|
using Panda.DynamicWebApi.Attributes;
 | 
						|
 | 
						|
namespace IRaCIS.Core.Application.Service
 | 
						|
{
 | 
						|
    [ApiExplorerSettings(GroupName = "Reviewer")]
 | 
						|
    public class VacationService(IRepository<Vacation> _vacationRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IVacationService
 | 
						|
    {
 | 
						|
 | 
						|
        /// <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 _vacationRepository.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(new PageInput() { PageIndex = pageIndex, PageSize = pageSize }, nameof(VacationCommand.StartDate));
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 获取是否休假
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="inDto"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost]
 | 
						|
        public async Task<GetIsVacationOutDto> GetIsVacation(GetIsVacationInDto inDto)
 | 
						|
        {
 | 
						|
            var query = await _vacationRepository.Where(u => u.DoctorId == inDto.DoctorId).ToListAsync();
 | 
						|
 | 
						|
            bool isVacation = false;
 | 
						|
 | 
						|
            var now = DateTime.Now;
 | 
						|
            foreach (var item in query)
 | 
						|
            {
 | 
						|
                if (item.StartDate <= now && now <= item.EndDate)
 | 
						|
                {
 | 
						|
                    isVacation = true;
 | 
						|
                    break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
 | 
						|
            return new GetIsVacationOutDto() { 
 | 
						|
            
 | 
						|
            IsVacation= isVacation
 | 
						|
            };
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        [NonDynamicMethod]
 | 
						|
        public async Task<IResponseOutput> OnVacation(Guid doctorId)
 | 
						|
        {
 | 
						|
            //防止生成sql生成GETDATE() 时区导致的问题
 | 
						|
            var appDateTimeNow = DateTime.Now;
 | 
						|
 | 
						|
            var count = await _vacationRepository.CountAsync(u => u.DoctorId == doctorId && u.EndDate >= appDateTimeNow && u.StartDate <= appDateTimeNow);
 | 
						|
 | 
						|
            return ResponseOutput.Result(count > 0);
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
}
 |