OrderVisitDetailEventHandler.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using Hotline.Settings;
  2. using Hotline.Share.Enums.Order;
  3. using Hotline.Share.Tools;
  4. using XF.Domain.Repository;
  5. using XF.Domain.Repository.Events;
  6. namespace Hotline.Orders.DatabaseEventHandler;
  7. /// <summary>
  8. /// OrderVisit 更新数据后执行事务处理
  9. /// 更新 order 表中的 OrgProcessingResults 和 SeatEvaluate 字段
  10. /// </summary>
  11. public class OrderVisitDetailEventHandler : IUpdateDatabaseEvent<OrderVisitDetail>
  12. {
  13. private readonly IRepository<OrderVisitDetail> _orderVisitDetailRepository;
  14. private readonly IOrderRepository _orderRepository;
  15. private readonly IRepository<OrderVisit> _orderVisitRepository;
  16. private readonly ISystemLogRepository _systemLogRepository;
  17. public OrderVisitDetailEventHandler(IOrderRepository orderRepository, IRepository<OrderVisitDetail> orderVisitDetailRepository, IRepository<OrderVisit> orderVisitRepository, ISystemLogRepository systemLogRepository)
  18. {
  19. _orderRepository = orderRepository;
  20. _orderVisitDetailRepository = orderVisitDetailRepository;
  21. _orderVisitRepository = orderVisitRepository;
  22. _systemLogRepository = systemLogRepository;
  23. }
  24. public void OnInserted(OrderVisitDetail entity)
  25. {
  26. OrderUpdate(entity);
  27. }
  28. public void OnUpdated(OrderVisitDetail entity)
  29. {
  30. OrderUpdate(entity);
  31. }
  32. public void OnUpdating(OrderVisitDetail entity)
  33. {
  34. }
  35. private void OrderUpdate(OrderVisitDetail visit)
  36. {
  37. var name = "回填Order回访字段";
  38. if (visit.VisitTarget == EVisitTarget.Org && visit.OrgProcessingResults != null)
  39. {
  40. var orderId = _orderVisitRepository.Queryable()
  41. .Where(m => m.Id == visit.VisitId)
  42. .Select(m => new { m.OrderId, m.No, m.VisitState })
  43. .First();
  44. if (visit.OrgProcessingResults.Value == "不满意" && orderId.VisitState!= EVisitState.Visited) return;
  45. _orderRepository.Updateable()
  46. .SetColumns(m => m.OrgProcessingResults == visit.OrgProcessingResults)
  47. .Where(m => m.Id == orderId.OrderId && m.Status >= EOrderStatus.Published)
  48. .ExecuteCommand();
  49. _systemLogRepository.Add(name, $"OrgProcessingResults: {visit.OrgProcessingResults.ToJson()}", orderId.No, orderId.No, 1);
  50. }
  51. if (visit.VisitTarget == EVisitTarget.Seat && visit.SeatEvaluate != null)
  52. {
  53. var orderId = _orderVisitRepository.Queryable()
  54. .Where(m => m.Id == visit.VisitId)
  55. .Select(m => new { m.OrderId, m.No,m.VisitState })
  56. .First();
  57. if ((visit.SeatEvaluate == ESeatEvaluate.NoSatisfied || visit.SeatEvaluate == ESeatEvaluate.VeryNoSatisfied) && orderId.VisitState!= EVisitState.Visited) return;
  58. _orderRepository.Updateable()
  59. .SetColumns(m => m.SeatEvaluate == visit.SeatEvaluate)
  60. .Where(m => m.Id == orderId.OrderId && m.Status >= EOrderStatus.Published)
  61. .ExecuteCommand();
  62. _systemLogRepository.Add(name, $"SeatEvaluate: {visit.SeatEvaluate}",orderId.No, orderId.No, 1);
  63. }
  64. }
  65. }