using Hotline.Settings; using Hotline.Share.Enums.Order; using Hotline.Share.Tools; using XF.Domain.Repository; using XF.Domain.Repository.Events; namespace Hotline.Orders.DatabaseEventHandler; /// /// OrderVisit 更新数据后执行事务处理 /// 更新 order 表中的 OrgProcessingResults 和 SeatEvaluate 字段 /// public class OrderVisitDetailEventHandler : IUpdateDatabaseEvent { private readonly IRepository _orderVisitDetailRepository; private readonly IOrderRepository _orderRepository; private readonly IRepository _orderVisitRepository; private readonly ISystemLogRepository _systemLogRepository; public OrderVisitDetailEventHandler(IOrderRepository orderRepository, IRepository orderVisitDetailRepository, IRepository orderVisitRepository, ISystemLogRepository systemLogRepository) { _orderRepository = orderRepository; _orderVisitDetailRepository = orderVisitDetailRepository; _orderVisitRepository = orderVisitRepository; _systemLogRepository = systemLogRepository; } public void OnInserted(OrderVisitDetail entity) { OrderUpdate(entity); } public void OnUpdated(OrderVisitDetail entity) { OrderUpdate(entity); } public void OnUpdating(OrderVisitDetail entity) { } private void OrderUpdate(OrderVisitDetail visit) { var name = "回填Order回访字段"; if (visit.VisitTarget == EVisitTarget.Org && visit.OrgProcessingResults != null) { var orderId = _orderVisitRepository.Queryable() .Where(m => m.Id == visit.VisitId) .Select(m => new { m.OrderId, m.No, m.VisitState }) .First(); if (visit.OrgProcessingResults.Value == "不满意" && orderId.VisitState!= EVisitState.Visited) return; _orderRepository.Updateable() .SetColumns(m => m.OrgProcessingResults == visit.OrgProcessingResults) .Where(m => m.Id == orderId.OrderId && m.Status >= EOrderStatus.Published) .ExecuteCommand(); _systemLogRepository.Add(name, $"OrgProcessingResults: {visit.OrgProcessingResults.ToJson()}", orderId.No, orderId.No, 1); } if (visit.VisitTarget == EVisitTarget.Seat && visit.SeatEvaluate != null) { var orderId = _orderVisitRepository.Queryable() .Where(m => m.Id == visit.VisitId) .Select(m => new { m.OrderId, m.No,m.VisitState }) .First(); if ((visit.SeatEvaluate == ESeatEvaluate.NoSatisfied || visit.SeatEvaluate == ESeatEvaluate.VeryNoSatisfied) && orderId.VisitState!= EVisitState.Visited) return; _orderRepository.Updateable() .SetColumns(m => m.SeatEvaluate == visit.SeatEvaluate) .Where(m => m.Id == orderId.OrderId && m.Status >= EOrderStatus.Published) .ExecuteCommand(); _systemLogRepository.Add(name, $"SeatEvaluate: {visit.SeatEvaluate}",orderId.No, orderId.No, 1); } } }