TelDomainService.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. using CallCenter.Caches;
  2. using CallCenter.Devices;
  3. using CallCenter.Share.Dtos;
  4. using CallCenter.Users;
  5. using MapsterMapper;
  6. using XF.Domain.Dependency;
  7. using XF.Domain.Exceptions;
  8. namespace CallCenter.Tels;
  9. public class TelDomainService : ITelDomainService, IScopeDependency
  10. {
  11. private readonly IDeviceManager _deviceManager;
  12. private readonly ITelRepository _telRepository;
  13. private readonly ITelRestRepository _telRestRepository;
  14. private readonly ITelCacheManager _telCacheManager;
  15. private readonly IUserRepository _userRepository;
  16. public TelDomainService(
  17. IDeviceManager deviceManager,
  18. ITelRepository telRepository,
  19. ITelRestRepository telRestRepository,
  20. ITelCacheManager telCacheManager,
  21. IUserRepository userRepository)
  22. {
  23. _deviceManager = deviceManager;
  24. _telRepository = telRepository;
  25. _telRestRepository = telRestRepository;
  26. _telCacheManager = telCacheManager;
  27. _userRepository = userRepository;
  28. }
  29. /// <summary>
  30. /// 查询所有分机
  31. /// </summary>
  32. /// <param name="cancellationToken"></param>
  33. /// <returns></returns>
  34. public Task<List<Tel>> QueryTelsAsync(CancellationToken cancellationToken)
  35. => _deviceManager.QueryTelsAsync(cancellationToken);
  36. /// <summary>
  37. /// 查询所有分机组
  38. /// </summary>
  39. /// <param name="cancellationToken"></param>
  40. /// <returns></returns>
  41. public Task<List<TelGroup>> QueryTelGroupsAsync(CancellationToken cancellationToken)
  42. => _deviceManager.QueryTelGroupsAsync(cancellationToken);
  43. /// <summary>
  44. /// 分机休息
  45. /// </summary>
  46. /// <param name="currentWork"></param>
  47. /// <param name="cancellationToken"></param>
  48. /// <returns></returns>
  49. public async Task RestAsync(Work currentWork, CancellationToken cancellationToken)
  50. {
  51. var isResting = await _telRepository.IsRestingAsync(currentWork.TelNo, cancellationToken);
  52. if (!isResting)
  53. {
  54. //await _deviceManager.TelRestAsync(currentWork.TelNo, cancellationToken);
  55. var tel = _telCacheManager.GetTel(currentWork.TelNo);
  56. await _telRestRepository.AddAsync(new TelRest(currentWork.TelId, currentWork.TelNo, currentWork.UserId, currentWork.UserName),
  57. cancellationToken);
  58. //暂时移除分机组
  59. #region 处理设备
  60. //更新分机组
  61. foreach (var group in tel.Groups)
  62. {
  63. await _deviceManager.ModifyGroupExtAsync(group.No, group.Distribution, group.Voice,tel.No, true, cancellationToken);
  64. }
  65. #endregion
  66. }
  67. }
  68. /// <summary>
  69. /// 分机结束休息
  70. /// </summary>
  71. /// <param name="telId"></param>
  72. /// <param name="cancellationToken"></param>
  73. /// <returns></returns>
  74. public async Task<TelRest> UnRestAsync(string userId, string telId, CancellationToken cancellationToken)
  75. {
  76. var user = await _userRepository.GetAsync(userId, cancellationToken);
  77. var tel = await _telRepository.GetAsync(telId, cancellationToken);
  78. var telCache = _telCacheManager.GetTel(tel.No);
  79. if (telCache is null)
  80. throw new UserFriendlyException("无效分机编号");
  81. //await _deviceManager.TelEndRestAsync(tel.No, cancellationToken);
  82. var restingTel = await _telRestRepository.GetAsync(d => d.TelId == telId && !d.EndTime.HasValue, cancellationToken);
  83. if (restingTel is null)
  84. throw new UserFriendlyException("未查询到分机休息信息");
  85. restingTel.EndRest();
  86. await _telRestRepository.UpdateAsync(restingTel, cancellationToken);
  87. //将分机加入到分机组
  88. #region 处理设备
  89. //更新分机组
  90. foreach (var group in telCache.Groups)
  91. {
  92. await _deviceManager.ModifyGroupExtAsync(group.No, group.Distribution, group.Voice, "", true, cancellationToken);
  93. }
  94. #endregion
  95. return restingTel;
  96. }
  97. /// <summary>
  98. /// 保持通话
  99. /// </summary>
  100. /// <param name="telId"></param>
  101. /// <param name="cancellationToken"></param>
  102. /// <returns></returns>
  103. public async Task HoldAsync(string telId, CancellationToken cancellationToken)
  104. {
  105. var tel = await _telRepository.GetAsync(telId, cancellationToken);
  106. if (tel is null)
  107. throw new UserFriendlyException("无效分机编号");
  108. await _deviceManager.HoldAsync(tel.No, cancellationToken);
  109. }
  110. /// <summary>
  111. /// 恢复通话(解除hold状态)
  112. /// </summary>
  113. /// <param name="telId"></param>
  114. /// <param name="cancellationToken"></param>
  115. /// <returns></returns>
  116. public async Task UnHoldAsync(string telId, CancellationToken cancellationToken)
  117. {
  118. var tel = await _telRepository.GetAsync(telId, cancellationToken);
  119. if (tel is null)
  120. throw new UserFriendlyException("无效分机编号");
  121. await _deviceManager.UnHoldAsync(tel.No, cancellationToken);
  122. }
  123. /// <summary>
  124. /// 开启静音
  125. /// </summary>
  126. /// <param name="telId"></param>
  127. /// <param name="cancellationToken"></param>
  128. /// <returns></returns>
  129. /// <exception cref="UserFriendlyException"></exception>
  130. public async Task MuteAsync(string telId, CancellationToken cancellationToken)
  131. {
  132. var tel = await _telRepository.GetAsync(telId, cancellationToken);
  133. if (tel is null)
  134. throw new UserFriendlyException("无效分机编号");
  135. await _deviceManager.MuteAsync(tel.No, cancellationToken);
  136. }
  137. /// <summary>
  138. /// 解除静音
  139. /// </summary>
  140. /// <param name="telId"></param>
  141. /// <param name="cancellationToken"></param>
  142. /// <returns></returns>
  143. public async Task UnMuteAsync(string telId, CancellationToken cancellationToken)
  144. {
  145. var tel = await _telRepository.GetAsync(telId, cancellationToken);
  146. if (tel is null)
  147. throw new UserFriendlyException("无效分机编号");
  148. await _deviceManager.MuteAsync(tel.No, cancellationToken);
  149. }
  150. }