XingTangCallSatisfactionSyncJob.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using Hotline.CallCenter.Calls;
  2. using MapsterMapper;
  3. using Microsoft.Extensions.Logging;
  4. using Quartz;
  5. using SqlSugar;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using XF.Domain.Repository;
  12. using XingTang.Sdk;
  13. namespace Hotline.Application.Jobs
  14. {
  15. /// <summary>
  16. /// 兴唐评价结果
  17. /// </summary>
  18. public class XingTangCallSatisfactionSyncJob : IJob, IDisposable
  19. {
  20. private readonly IRepository<CallNative> _callRepository;
  21. private readonly ISqlSugarClient _db;
  22. private readonly IRepository<CallSatisfaction> _callSatisfactionRepository;
  23. private readonly IMapper _mapper;
  24. private readonly ILogger<XingTangCallSatisfactionSyncJob> _logger;
  25. public XingTangCallSatisfactionSyncJob(IRepository<CallNative> callRepository, ISqlSugarClient db, IRepository<CallSatisfaction> callSatisfactionRepository, IMapper mapper, ILogger<XingTangCallSatisfactionSyncJob> logger)
  26. {
  27. _callRepository = callRepository;
  28. _db = db;
  29. _callSatisfactionRepository = callSatisfactionRepository;
  30. _mapper = mapper;
  31. _logger = logger;
  32. }
  33. public void Dispose()
  34. {
  35. }
  36. public async Task Execute(IJobExecutionContext context)
  37. {
  38. var callSatisfactions = await _db.Queryable<XingtangSatisfaction>()
  39. .Where(d => (d.IsSync == null || !d.IsSync) && (d.Tries == null || d.Tries <= 50))
  40. .OrderBy(d => d.Id)
  41. .Take(10)
  42. .ToListAsync(context.CancellationToken);
  43. var occupyCallSatisfactions = new List<XingtangSatisfaction>();
  44. foreach (var callSatisfaction in callSatisfactions)
  45. {
  46. callSatisfaction.IsSync = true;
  47. callSatisfaction.Tries += 1;
  48. var rows = await _db.Updateable(callSatisfaction)
  49. .ExecuteCommandWithOptLockAsync();
  50. if (rows > 0)
  51. occupyCallSatisfactions.Add(callSatisfaction);
  52. }
  53. try
  54. {
  55. var callStatisfactions = _mapper.Map<List<CallSatisfaction>>(occupyCallSatisfactions);
  56. foreach (var item in callSatisfactions)
  57. {
  58. var call = _callRepository.Queryable().Where(x => x.CallNo == item.CallNo).FirstAsync();
  59. if(call != null)
  60. {
  61. item.Id = call.Id;
  62. }
  63. }
  64. await _callSatisfactionRepository.AddRangeAsync(callStatisfactions, context.CancellationToken);
  65. }
  66. catch (Exception e)
  67. {
  68. _logger.LogError($"获取通话记录评价:{e.Message} \n {e.StackTrace}");
  69. foreach (var callSatisfaction in occupyCallSatisfactions)
  70. {
  71. callSatisfaction.IsSync = false;
  72. }
  73. await _db.Updateable(occupyCallSatisfactions)
  74. .UpdateColumns(d => new { d.IsSync })
  75. .ExecuteCommandAsync(context.CancellationToken);
  76. }
  77. }
  78. }
  79. }