CallIdManager.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Microsoft.Extensions.Logging;
  7. using XF.Domain.Repository;
  8. namespace Hotline.CallCenter.Calls
  9. {
  10. /// <summary>
  11. /// 生成CallId与CallNo形成映射并持久化
  12. /// </summary>
  13. public class CallIdManager
  14. {
  15. private readonly IRepository<CallidRelation> _callorderRepository;
  16. private readonly ILogger<CallIdManager> _logger;
  17. public CallIdManager(
  18. IRepository<CallidRelation> callorderRepository,
  19. ILogger<CallIdManager> logger)
  20. {
  21. _callorderRepository = callorderRepository;
  22. _logger = logger;
  23. }
  24. public async Task<string> GetOrSetAsync(string callNo, CancellationToken cancellationToken)
  25. {
  26. var callOrder = await _callorderRepository.GetAsync(callNo, cancellationToken);
  27. if (callOrder == null)
  28. {
  29. callOrder = new CallidRelation
  30. {
  31. Id = callNo,
  32. CallId = Ulid.NewUlid().ToString(),
  33. };
  34. try
  35. {
  36. await _callorderRepository.AddAsync(callOrder, cancellationToken);
  37. }
  38. catch (Exception e)
  39. {
  40. _logger.LogError($"写入callidRelation失败:{e.Message}");
  41. }
  42. }
  43. return callOrder.CallId;
  44. }
  45. }
  46. }