using Hotline.Repository.SqlSugar.Extensions; using Hotline.Schedulings; using Hotline.Share.Dtos.File; using Hotline.Share.Dtos; using Microsoft.AspNetCore.Mvc; using XF.Domain.Authentications; using XF.Domain.Exceptions; using XF.Domain.Repository; using Hotline.Share.Dtos.Schedulings; using MapsterMapper; using Hotline.Users; namespace Hotline.Api.Controllers { public class SchedulingController : BaseController { private readonly IRepository _schedulingRepository; private readonly IRepository _schedulingShiftRepository; private readonly IRepository _schedulingUserRepository; private readonly IMapper _mapper; public SchedulingController( IRepository schedulingRepository, IRepository schedulingShiftRepository, IRepository schedulingUserRepository, IMapper mapper ) { _schedulingRepository = schedulingRepository; _schedulingShiftRepository = schedulingShiftRepository; _schedulingUserRepository = schedulingUserRepository; _mapper= mapper; } #region 排班人员 /// /// 新增排班人员 /// /// /// [HttpPost("user")] public async Task Add([FromBody] List dtos) { List user = new List(); foreach (var dto in dtos) { if (string.IsNullOrEmpty(dto.UserId)) throw UserFriendlyException.SameMessage("请带上用户信息"); var model = _mapper.Map(dto); user.Add(model); } await _schedulingUserRepository.AddRangeAsync(user, HttpContext.RequestAborted); } /// /// 删除排班人员 /// /// /// [HttpDelete("user")] public async Task Delete([FromBody] UserDeleteDto dto) { foreach (var Id in dto.Ids) { await _schedulingUserRepository.RemoveAsync(x => x.Id == Id); } } /// /// 更新排班人员 /// /// /// [HttpPut("user")] public async Task Update([FromBody] UserUpdateDto dto) { var user = await _schedulingUserRepository.GetAsync(dto.Id, HttpContext.RequestAborted); if (user is null) throw UserFriendlyException.SameMessage("无效排班人员"); _mapper.Map(dto, user); await _schedulingUserRepository.UpdateAsync(user, HttpContext.RequestAborted); } /// /// 批量更新排班人员 /// /// /// [HttpPut("batch_user")] public async Task Update([FromBody] List dto) { List users = new List(); foreach (var item in dto) { var user = await _schedulingUserRepository.GetAsync(item.Id, HttpContext.RequestAborted); if (user is null) throw UserFriendlyException.SameMessage("无效排班人员"); _mapper.Map(dto, user); users.Add(user); } await _schedulingUserRepository.UpdateRangeAsync(users, HttpContext.RequestAborted); } /// /// 获取排班人员列表 /// /// /// [HttpGet("user_list")] public async Task> List([FromQuery] UserListDto dto) { var (total, items) = await _schedulingUserRepository.Queryable() .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.UserName.Contains(dto.Keyword!)) .OrderByDescending(x => x.CreationTime) .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted); return new PagedDto(total, items); } /// /// 获取排班人员实体 /// /// /// [HttpGet("user/{id}")] public async Task UserEntity(string id) { return await _schedulingUserRepository.Queryable() .FirstAsync(x => x.Id == id); } #endregion #region 班次管理 /// /// 新增班次管理 /// /// /// [HttpPost("shift")] public async Task Add([FromBody] SchedulingShiftDto dto) { var model = _mapper.Map(dto); await _schedulingShiftRepository.AddAsync(model, HttpContext.RequestAborted); } /// /// 删除班次管理 /// /// /// [HttpDelete("shift")] public async Task Delete([FromBody] ShiftDeleteDto dto) { foreach (var Id in dto.Ids) { await _schedulingShiftRepository.RemoveAsync(x => x.Id == Id); } } /// /// 更新班次管理 /// /// /// [HttpPut("shift")] public async Task Update([FromBody] ShiftUpdateDto dto) { var user = await _schedulingShiftRepository.GetAsync(dto.Id, HttpContext.RequestAborted); if (user is null) throw UserFriendlyException.SameMessage("无效班次信息"); _mapper.Map(dto, user); await _schedulingShiftRepository.UpdateAsync(user, HttpContext.RequestAborted); } /// /// 获取班次管理列表 /// /// /// [HttpGet("shift_list")] public async Task> List([FromQuery] ShiftListDto dto) { var (total, items) = await _schedulingShiftRepository.Queryable() .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Name.Contains(dto.Keyword!)) .OrderByDescending(x => x.CreationTime) .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted); return new PagedDto(total, items); } /// /// 获取班次管理实体 /// /// /// [HttpGet("shift/{id}")] public async Task ShiftEntity(string id) { return await _schedulingShiftRepository.Queryable() .FirstAsync(x => x.Id == id); } #endregion #region 排班管理 /// /// 新增排班人员 /// /// /// [HttpPost] public async Task Add([FromBody] List dtos) { List schedulings = new List(); foreach (var dto in dtos) { if (string.IsNullOrEmpty(dto.SchedulingUserId)) throw UserFriendlyException.SameMessage("请传入排班用户信息"); if (string.IsNullOrEmpty(dto.ShiftId)) throw UserFriendlyException.SameMessage("请传入排班班次信息"); var scheduling = _mapper.Map(dto); scheduling.SendOrderNum = 0; schedulings.Add(scheduling); } await _schedulingRepository.AddRangeAsync(schedulings, HttpContext.RequestAborted); } /// /// 删除排班人员 /// /// /// [HttpDelete] public async Task Delete([FromBody] DeleteDto dto) { foreach (var Id in dto.Ids) { await _schedulingRepository.RemoveAsync(x => x.Id == Id); } } /// /// 更新排班人员 /// /// /// [HttpPut] public async Task Update([FromBody] UpdateDto dto) { var scheduling = await _schedulingRepository.GetAsync(dto.Id, HttpContext.RequestAborted); if (scheduling is null) throw UserFriendlyException.SameMessage("无效排班信息"); _mapper.Map(dto, scheduling); await _schedulingRepository.UpdateAsync(scheduling, HttpContext.RequestAborted); } /// /// 批量更新排班人员 /// /// /// [HttpPut("batch")] public async Task Update([FromBody] List dto) { List schedulings = new List(); foreach (var item in dto) { var scheduling = await _schedulingRepository.GetAsync(item.Id, HttpContext.RequestAborted); if (scheduling is null) throw UserFriendlyException.SameMessage("无效排班信息"); _mapper.Map(dto, scheduling); schedulings.Add(scheduling); } await _schedulingRepository.UpdateRangeAsync(schedulings, HttpContext.RequestAborted); } /// /// 获取排班人员列表 /// /// /// [HttpGet("list")] public async Task> List([FromQuery] ListDto dto) { var (total, items) = await _schedulingRepository.Queryable() .Includes(x => x.SchedulingUser) .Includes(x => x.SchedulingShift) .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.ShiftName.Contains(dto.Keyword!)) .WhereIF(dto.StartTime.HasValue, x => x.SchedulingTime >= dto.StartTime) .WhereIF(dto.EndTime.HasValue, x => x.SchedulingTime <= dto.EndTime) .OrderByDescending(x => x.CreationTime) .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted); return new PagedDto(total, items); } /// /// 获取排班人员实体 /// /// /// [HttpGet("{id}")] public async Task Entity(string id) { return await _schedulingRepository.Queryable() .FirstAsync(x => x.Id == id); } #endregion } }