TelHoldRepository.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using Hotline.CallCenter.Calls;
  2. using Hotline.CallCenter.Tels;
  3. using Hotline.Repository.SqlSugar.DataPermissions;
  4. using SqlSugar;
  5. using XF.Domain.Dependency;
  6. namespace Hotline.Repository.SqlSugar.CallCenter
  7. {
  8. public class TelHoldRepository : BaseRepository<TelHold>, ITelHoldRepository, IScopeDependency
  9. {
  10. public TelHoldRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
  11. {
  12. }
  13. /// <summary>
  14. /// 通话是否保持
  15. /// </summary>
  16. /// <param name="telId"></param>
  17. /// <param name="userId"></param>
  18. /// <param name="callId"></param>
  19. /// <param name="cancellationToken"></param>
  20. /// <returns></returns>
  21. public Task<bool> IsHoldingAsync(string telId, string userId, string callId, CancellationToken cancellationToken)
  22. {
  23. return Db.Queryable<TelHold>().AnyAsync(x => x.TelId == telId && x.UserId == userId && x.CallId == callId && !x.EndTime.HasValue);
  24. }
  25. /// <summary>
  26. /// 处理Hold时间计算
  27. /// </summary>
  28. /// <param name="callId"></param>
  29. /// <param name="endTime"></param>
  30. /// <param name="cancellationToken"></param>
  31. /// <returns></returns>
  32. public async Task HandleHoldTime(string callId, string endTime, CancellationToken cancellationToken)
  33. {
  34. var model = await Db.Queryable<Call>().FirstAsync(x => x.Id == callId);
  35. if (model!=null)
  36. {
  37. var list = await Db.Queryable<TelHold>().Where(x => x.CallId == callId && !x.EndTime.HasValue).ToListAsync();
  38. if (list.Any())
  39. {
  40. foreach (var item in list)
  41. {
  42. item.EndHold();
  43. Db.Updateable<TelHold>(item);
  44. }
  45. }
  46. var duration = await Db.Queryable<TelHold>().Where(x => x.CallId == callId).SumAsync(x=>x.HoldDuration);
  47. model.HoldDuration = Convert.ToInt32(duration);
  48. Db.Updateable<Call>(model);
  49. }
  50. }
  51. }
  52. }