UserDomainService.cs 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using CallCenter.Caches;
  2. using CallCenter.Devices;
  3. using CallCenter.Share.Dtos;
  4. using CallCenter.Tels;
  5. using MapsterMapper;
  6. using SqlSugar;
  7. using XF.Domain.Cache;
  8. using XF.Domain.Dependency;
  9. using XF.Domain.Exceptions;
  10. namespace CallCenter.Users
  11. {
  12. public class UserDomainService : IUserDomainService, IScopeDependency
  13. {
  14. private readonly IUserRepository _userRepository;
  15. private readonly IWorkRepository _workRepository;
  16. private readonly IDeviceManager _deviceManager;
  17. private readonly IUserCacheManager _userCacheManager;
  18. private readonly ITelCacheManager _telCacheManager;
  19. private readonly ITypedCache<Work> _cacheWork;
  20. private readonly IMapper _mapper;
  21. public UserDomainService(
  22. IUserRepository userRepository,
  23. IWorkRepository workRepository,
  24. IDeviceManager deviceManager,
  25. ITypedCache<Work> cacheWork,
  26. IUserCacheManager userCacheManager,
  27. IMapper mapper, ITelCacheManager telCacheManager)
  28. {
  29. _userRepository = userRepository;
  30. _workRepository = workRepository;
  31. _deviceManager = deviceManager;
  32. _userCacheManager = userCacheManager;
  33. _cacheWork = cacheWork;
  34. _mapper = mapper;
  35. _telCacheManager = telCacheManager;
  36. }
  37. /// <summary>
  38. /// 上班
  39. /// </summary>
  40. /// <param name="userId">userId</param>
  41. /// <param name="tel"></param>
  42. /// <param name="cancellationToken"></param>
  43. /// <returns></returns>
  44. public async Task OnDutyAsync(string userId, Tel tel, CancellationToken cancellationToken)
  45. {
  46. var user = await _userRepository.GetAsync(userId, cancellationToken);
  47. if (user is null)
  48. throw new UserFriendlyException("无效的用户编号");
  49. var workingTel = await _workRepository.GetCurrentWorkByUserAsync(userId, cancellationToken);
  50. if (workingTel is not null)
  51. throw new UserFriendlyException($"当前用户已上班,userId:{userId}");
  52. var telIsWorking = await _workRepository.AnyAsync(d => d.TelId == tel.Id && !d.EndTime.HasValue, cancellationToken);
  53. if (telIsWorking)
  54. throw new UserFriendlyException("当前分机已被占用");
  55. var work = new Work(userId, user.Name, tel.Id, tel.No);
  56. await _workRepository.AddAsync(work, cancellationToken);
  57. if (!string.IsNullOrEmpty(user.StaffNo))
  58. await _deviceManager.UpdateStaffNoAsync(tel.No, user.StaffNo, tel.LineId, cancellationToken);
  59. //更新分机组
  60. foreach (var group in tel.Groups)
  61. {
  62. await _deviceManager.ModifyGroupExtAsync(group.No,group.Distribution,group.Voice, "", true, cancellationToken);
  63. }
  64. }
  65. /// <summary>
  66. /// 下班
  67. /// </summary>
  68. /// <param name="userId"></param>
  69. /// <param name="cancellationToken"></param>
  70. /// <returns></returns>
  71. public async Task<WorkDto?> OffDutyAsync(string userId, CancellationToken cancellationToken)
  72. {
  73. var work = _userCacheManager.GetWorkByUser(userId);
  74. var tel = _telCacheManager.GetTel(work.TelNo);
  75. work.OffDuty();
  76. await _workRepository.UpdateAsync(work, cancellationToken);
  77. await _deviceManager.UpdateStaffNoAsync(work.TelNo, string.Empty, tel.LineId, cancellationToken);
  78. _cacheWork.Remove(work.GetKey(KeyMode.UserId));
  79. _cacheWork.Remove(work.GetKey(KeyMode.TelNo));
  80. foreach (var group in tel.Groups)
  81. {
  82. await _deviceManager.ModifyGroupExtAsync(group.No,group.Distribution, group.Voice,"", false, cancellationToken);
  83. }
  84. return _mapper.Map<WorkDto>(work);
  85. }
  86. }
  87. }