SchedulingController.cs 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. using Hotline.Repository.SqlSugar.Extensions;
  2. using Hotline.Schedulings;
  3. using Hotline.Share.Dtos.File;
  4. using Hotline.Share.Dtos;
  5. using Microsoft.AspNetCore.Mvc;
  6. using XF.Domain.Authentications;
  7. using XF.Domain.Exceptions;
  8. using XF.Domain.Repository;
  9. using Hotline.Share.Dtos.Schedulings;
  10. using MapsterMapper;
  11. using Hotline.Users;
  12. namespace Hotline.Api.Controllers
  13. {
  14. public class SchedulingController : BaseController
  15. {
  16. private readonly IRepository<Scheduling> _schedulingRepository;
  17. private readonly IRepository<SchedulingShift> _schedulingShiftRepository;
  18. private readonly IRepository<SchedulingUser> _schedulingUserRepository;
  19. private readonly IMapper _mapper;
  20. public SchedulingController(
  21. IRepository<Scheduling> schedulingRepository,
  22. IRepository<SchedulingShift> schedulingShiftRepository,
  23. IRepository<SchedulingUser> schedulingUserRepository,
  24. IMapper mapper
  25. ) {
  26. _schedulingRepository = schedulingRepository;
  27. _schedulingShiftRepository = schedulingShiftRepository;
  28. _schedulingUserRepository = schedulingUserRepository;
  29. _mapper= mapper;
  30. }
  31. #region 排班人员
  32. /// <summary>
  33. /// 新增排班人员
  34. /// </summary>
  35. /// <param name="dtos"></param>
  36. /// <returns></returns>
  37. [HttpPost("user")]
  38. public async Task Add([FromBody] List<SchedulingUserDto> dtos)
  39. {
  40. List<SchedulingUser> user = new List<SchedulingUser>();
  41. foreach (var dto in dtos)
  42. {
  43. if (string.IsNullOrEmpty(dto.UserId))
  44. throw UserFriendlyException.SameMessage("请带上用户信息");
  45. var model = _mapper.Map<SchedulingUser>(dto);
  46. user.Add(model);
  47. }
  48. await _schedulingUserRepository.AddRangeAsync(user, HttpContext.RequestAborted);
  49. }
  50. /// <summary>
  51. /// 删除排班人员
  52. /// </summary>
  53. /// <param name="dto"></param>
  54. /// <returns></returns>
  55. [HttpDelete("user")]
  56. public async Task Delete([FromBody] UserDeleteDto dto)
  57. {
  58. foreach (var Id in dto.Ids)
  59. {
  60. await _schedulingUserRepository.RemoveAsync(x => x.Id == Id);
  61. }
  62. }
  63. /// <summary>
  64. /// 更新排班人员
  65. /// </summary>
  66. /// <param name="dto"></param>
  67. /// <returns></returns>
  68. [HttpPut("user")]
  69. public async Task Update([FromBody] UserUpdateDto dto)
  70. {
  71. var user = await _schedulingUserRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
  72. if (user is null)
  73. throw UserFriendlyException.SameMessage("无效排班人员");
  74. _mapper.Map(dto, user);
  75. await _schedulingUserRepository.UpdateAsync(user, HttpContext.RequestAborted);
  76. }
  77. /// <summary>
  78. /// 批量更新排班人员
  79. /// </summary>
  80. /// <param name="dto"></param>
  81. /// <returns></returns>
  82. [HttpPut("batch_user")]
  83. public async Task Update([FromBody] List<UserUpdateDto> dto)
  84. {
  85. List<SchedulingUser> users = new List<SchedulingUser>();
  86. foreach (var item in dto)
  87. {
  88. var user = await _schedulingUserRepository.GetAsync(item.Id, HttpContext.RequestAborted);
  89. if (user is null)
  90. throw UserFriendlyException.SameMessage("无效排班人员");
  91. _mapper.Map(dto, user);
  92. users.Add(user);
  93. }
  94. await _schedulingUserRepository.UpdateRangeAsync(users, HttpContext.RequestAborted);
  95. }
  96. /// <summary>
  97. /// 获取排班人员列表
  98. /// </summary>
  99. /// <param name="dto"></param>
  100. /// <returns></returns>
  101. [HttpGet("user_list")]
  102. public async Task<PagedDto<SchedulingUser>> List([FromQuery] UserListDto dto)
  103. {
  104. var (total, items) = await _schedulingUserRepository.Queryable()
  105. .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.UserName.Contains(dto.Keyword!))
  106. .OrderByDescending(x => x.CreationTime)
  107. .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
  108. return new PagedDto<SchedulingUser>(total, items);
  109. }
  110. /// <summary>
  111. /// 获取排班人员实体
  112. /// </summary>
  113. /// <param name="id"></param>
  114. /// <returns></returns>
  115. [HttpGet("user/{id}")]
  116. public async Task<SchedulingUser> UserEntity(string id)
  117. {
  118. return await _schedulingUserRepository.Queryable()
  119. .FirstAsync(x => x.Id == id);
  120. }
  121. #endregion
  122. #region 班次管理
  123. /// <summary>
  124. /// 新增班次管理
  125. /// </summary>
  126. /// <param name="dtos"></param>
  127. /// <returns></returns>
  128. [HttpPost("shift")]
  129. public async Task Add([FromBody] SchedulingShiftDto dto)
  130. {
  131. var model = _mapper.Map<SchedulingShift>(dto);
  132. await _schedulingShiftRepository.AddAsync(model, HttpContext.RequestAborted);
  133. }
  134. /// <summary>
  135. /// 删除班次管理
  136. /// </summary>
  137. /// <param name="dto"></param>
  138. /// <returns></returns>
  139. [HttpDelete("shift")]
  140. public async Task Delete([FromBody] ShiftDeleteDto dto)
  141. {
  142. foreach (var Id in dto.Ids)
  143. {
  144. await _schedulingShiftRepository.RemoveAsync(x => x.Id == Id);
  145. }
  146. }
  147. /// <summary>
  148. /// 更新班次管理
  149. /// </summary>
  150. /// <param name="dto"></param>
  151. /// <returns></returns>
  152. [HttpPut("shift")]
  153. public async Task Update([FromBody] ShiftUpdateDto dto)
  154. {
  155. var user = await _schedulingShiftRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
  156. if (user is null)
  157. throw UserFriendlyException.SameMessage("无效班次信息");
  158. _mapper.Map(dto, user);
  159. await _schedulingShiftRepository.UpdateAsync(user, HttpContext.RequestAborted);
  160. }
  161. /// <summary>
  162. /// 获取班次管理列表
  163. /// </summary>
  164. /// <param name="dto"></param>
  165. /// <returns></returns>
  166. [HttpGet("shift_list")]
  167. public async Task<PagedDto<SchedulingShift>> List([FromQuery] ShiftListDto dto)
  168. {
  169. var (total, items) = await _schedulingShiftRepository.Queryable()
  170. .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.Name.Contains(dto.Keyword!))
  171. .OrderByDescending(x => x.CreationTime)
  172. .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
  173. return new PagedDto<SchedulingShift>(total, items);
  174. }
  175. /// <summary>
  176. /// 获取班次管理实体
  177. /// </summary>
  178. /// <param name="id"></param>
  179. /// <returns></returns>
  180. [HttpGet("shift/{id}")]
  181. public async Task<SchedulingShift> ShiftEntity(string id)
  182. {
  183. return await _schedulingShiftRepository.Queryable()
  184. .FirstAsync(x => x.Id == id);
  185. }
  186. #endregion
  187. #region 排班管理
  188. /// <summary>
  189. /// 新增排班人员
  190. /// </summary>
  191. /// <param name="dtos"></param>
  192. /// <returns></returns>
  193. [HttpPost]
  194. public async Task Add([FromBody] List<SchedulingDto> dtos)
  195. {
  196. List<Scheduling> schedulings = new List<Scheduling>();
  197. foreach (var dto in dtos)
  198. {
  199. if (string.IsNullOrEmpty(dto.SchedulingUserId))
  200. throw UserFriendlyException.SameMessage("请传入排班用户信息");
  201. if (string.IsNullOrEmpty(dto.ShiftId))
  202. throw UserFriendlyException.SameMessage("请传入排班班次信息");
  203. var scheduling = _mapper.Map<Scheduling>(dto);
  204. scheduling.SendOrderNum = 0;
  205. schedulings.Add(scheduling);
  206. }
  207. await _schedulingRepository.AddRangeAsync(schedulings, HttpContext.RequestAborted);
  208. }
  209. /// <summary>
  210. /// 删除排班人员
  211. /// </summary>
  212. /// <param name="dto"></param>
  213. /// <returns></returns>
  214. [HttpDelete]
  215. public async Task Delete([FromBody] DeleteDto dto)
  216. {
  217. foreach (var Id in dto.Ids)
  218. {
  219. await _schedulingRepository.RemoveAsync(x => x.Id == Id);
  220. }
  221. }
  222. /// <summary>
  223. /// 更新排班人员
  224. /// </summary>
  225. /// <param name="dto"></param>
  226. /// <returns></returns>
  227. [HttpPut]
  228. public async Task Update([FromBody] UpdateDto dto)
  229. {
  230. var scheduling = await _schedulingRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
  231. if (scheduling is null)
  232. throw UserFriendlyException.SameMessage("无效排班信息");
  233. _mapper.Map(dto, scheduling);
  234. await _schedulingRepository.UpdateAsync(scheduling, HttpContext.RequestAborted);
  235. }
  236. /// <summary>
  237. /// 批量更新排班人员
  238. /// </summary>
  239. /// <param name="dto"></param>
  240. /// <returns></returns>
  241. [HttpPut("batch")]
  242. public async Task Update([FromBody] List<UpdateDto> dto)
  243. {
  244. List<Scheduling> schedulings = new List<Scheduling>();
  245. foreach (var item in dto)
  246. {
  247. var scheduling = await _schedulingRepository.GetAsync(item.Id, HttpContext.RequestAborted);
  248. if (scheduling is null)
  249. throw UserFriendlyException.SameMessage("无效排班信息");
  250. _mapper.Map(dto, scheduling);
  251. schedulings.Add(scheduling);
  252. }
  253. await _schedulingRepository.UpdateRangeAsync(schedulings, HttpContext.RequestAborted);
  254. }
  255. /// <summary>
  256. /// 获取排班人员列表
  257. /// </summary>
  258. /// <param name="dto"></param>
  259. /// <returns></returns>
  260. [HttpGet("list")]
  261. public async Task<PagedDto<Scheduling>> List([FromQuery] ListDto dto)
  262. {
  263. var (total, items) = await _schedulingRepository.Queryable()
  264. .Includes(x => x.SchedulingUser)
  265. .Includes(x => x.SchedulingShift)
  266. .WhereIF(!string.IsNullOrEmpty(dto.Keyword), x => x.ShiftName.Contains(dto.Keyword!))
  267. .WhereIF(dto.StartTime.HasValue, x => x.SchedulingTime >= dto.StartTime)
  268. .WhereIF(dto.EndTime.HasValue, x => x.SchedulingTime <= dto.EndTime)
  269. .OrderByDescending(x => x.CreationTime)
  270. .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
  271. return new PagedDto<Scheduling>(total, items);
  272. }
  273. /// <summary>
  274. /// 获取排班人员实体
  275. /// </summary>
  276. /// <param name="id"></param>
  277. /// <returns></returns>
  278. [HttpGet("{id}")]
  279. public async Task<Scheduling> Entity(string id)
  280. {
  281. return await _schedulingRepository.Queryable()
  282. .FirstAsync(x => x.Id == id);
  283. }
  284. #endregion
  285. }
  286. }