OrderVisit.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. using Hotline.Ai.Visit;
  2. using Hotline.Share.Dtos;
  3. using Hotline.Share.Enums.Order;
  4. using Hotline.Users;
  5. using SqlSugar;
  6. using System.ComponentModel;
  7. using XF.Domain.Repository;
  8. namespace Hotline.Orders;
  9. /// <summary>
  10. /// 已回访工单
  11. /// </summary>
  12. [Description("工单回访")]
  13. [SugarIndex("index_order_no", nameof(OrderVisit.No), OrderByType.Desc)]
  14. [SugarIndex("index_visit_orderId", nameof(OrderVisit.OrderId), OrderByType.Asc)]
  15. public class OrderVisit : CreationEntity
  16. {
  17. /// <summary>
  18. /// 工单编码(冗余)
  19. /// </summary>
  20. public string No { get; set; }
  21. /// <summary>
  22. /// 工单ID
  23. /// </summary>
  24. public string OrderId { get; set; }
  25. /// <summary>
  26. /// 工单
  27. /// </summary>
  28. [Navigate(NavigateType.OneToOne, nameof(OrderId))]
  29. public Order Order { get; set; }
  30. /// <summary>
  31. /// 回访状态
  32. /// </summary>
  33. public EVisitState VisitState { get; set; }
  34. /// <summary>
  35. /// 回访方式
  36. /// </summary>
  37. [SugarColumn(IsNullable = true)]
  38. public EVisitType? VisitType { get; set; }
  39. /// <summary>
  40. /// 发布时间
  41. /// </summary>
  42. public DateTime PublishTime { get; set; }
  43. /// <summary>
  44. /// 回访人
  45. /// </summary>
  46. [SugarColumn(IsNullable = true)]
  47. public string? EmployeeId { get; set; }
  48. /// <summary>
  49. /// 回访人(对象)
  50. /// </summary>
  51. [Navigate(NavigateType.OneToOne, nameof(EmployeeId))]
  52. public User? Employee { get; set; }
  53. /// <summary>
  54. /// 是否接通
  55. /// </summary>
  56. [SugarColumn(IsNullable = true)]
  57. public bool? IsPutThrough { get; set; }
  58. /// <summary>
  59. /// 重办状态
  60. /// </summary>
  61. [SugarColumn(IsNullable = true)]
  62. public EAgainState? AgainState { get; set; }
  63. /// <summary>
  64. /// 回访时间
  65. /// </summary>
  66. [SugarColumn(IsNullable = true)]
  67. public DateTime? VisitTime { get; set; }
  68. /// <summary>
  69. /// 回访明细
  70. /// </summary>
  71. [Navigate(NavigateType.OneToMany, nameof(OrderVisitDetail.VisitId))]
  72. public List<OrderVisitDetail> OrderVisitDetails { get; set; }
  73. /// <summary>
  74. /// 当前评价结果
  75. /// </summary>
  76. [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
  77. public Kv? NowEvaluate { get; set; }
  78. /// <summary>
  79. /// 是否可以处理
  80. /// </summary>
  81. public bool IsCanHandle { get; set; }
  82. /// <summary>
  83. /// 是否可以AI回访
  84. /// </summary>
  85. public bool? IsCanAiVisit { get; set; }
  86. /// <summary>
  87. /// 渠道为电话时,此字段存在
  88. /// </summary>
  89. public string? CallId { get; set; }
  90. /// <summary>
  91. /// 第一次电话回访拨打时间
  92. /// </summary>
  93. public DateTime? FirstVisitTime { get; set; }
  94. /// <summary>
  95. /// 最后一次电话回访拨打时间
  96. /// </summary>
  97. public DateTime? LastVisitTime { get; set; }
  98. /// <summary>
  99. /// 智能回访次数
  100. /// </summary>
  101. [SugarColumn(DefaultValue = "0")]
  102. public int AiVisitCount { get; set; }
  103. /// <summary>
  104. /// 智能回访录音地址
  105. /// </summary>
  106. public string? RecordUrl { get; set; }
  107. /// <summary>
  108. /// 部门扭转
  109. /// </summary>
  110. public bool? OrgJudge { get; set; }
  111. /// <summary>
  112. /// 坐席扭转
  113. /// </summary>
  114. public bool? SeatJudge { get; set; }
  115. /// <summary>
  116. /// 评判状态
  117. /// </summary>
  118. public EJudgeState? JudgeState { get; set; }
  119. /// <summary>
  120. /// 评判意见
  121. /// </summary>
  122. public string? JudgeContent { get; set; }
  123. /// <summary>
  124. /// 评判人Id
  125. /// </summary>
  126. public string? JudgeUserId { get; set; }
  127. /// <summary>
  128. /// 评判人名称
  129. /// </summary>
  130. public string? JudgeUserName { get; set; }
  131. /// <summary>
  132. /// 评判时间
  133. /// </summary>
  134. public DateTime? JudgeTime { get; set; }
  135. /// <summary>
  136. /// 是否有效智能回访
  137. /// </summary>
  138. public bool? IsEffectiveAiVisit { get; set; }
  139. /// <summary>
  140. /// 是否批量回访
  141. /// </summary>
  142. public bool? IsBatchVisit { get; set; }
  143. /// <summary>
  144. /// 是否回访结果修改
  145. /// </summary>
  146. public bool? IsUpdate { get; set; }
  147. /// <summary>
  148. /// 语音段列表信息
  149. /// </summary>
  150. [SugarColumn(ColumnDataType = "json", IsJson = true, IsNullable = true)]
  151. public List<SentenceList>? SentenceList { get; set; }
  152. public void AiVisitTime()
  153. {
  154. LastVisitTime = DateTime.Now;
  155. if (FirstVisitTime is null)
  156. {
  157. FirstVisitTime = LastVisitTime;
  158. }
  159. }
  160. }