qinchaoyue 7 ヶ月 前
コミット
814ca824fc

+ 16 - 7
src/Hotline.Application.Tests/Domain/OrderVisitDomainServiceTest.cs

@@ -1,14 +1,14 @@
-using Hotline.Orders;
+using Hotline.EventBus;
+using Hotline.Orders;
+using Hotline.Push.FWMessage;
+using Hotline.Push.Notifies;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Push;
 using Hotline.Share.Enums.Order;
+using Hotline.Share.Enums.Push;
 using Hotline.Share.Tools;
+using Mapster;
 using Shouldly;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using XF.Domain.Repository;
 
 namespace Hotline.Application.Tests.Domain;
@@ -17,12 +17,21 @@ public class OrderVisitDomainServiceTest
     private readonly IOrderVisitDomainService _orderVisitDomainService;
     private readonly IOrderVisitRepository _orderVisitRepository;
     private readonly IRepository<OrderVisitDetail> _orderVisitDetailRepository;
+    private readonly Publisher _publisher;
 
-    public OrderVisitDomainServiceTest(IOrderVisitDomainService orderVisitDomainService, IOrderVisitRepository orderVisitRepository, IRepository<OrderVisitDetail> orderVisitDetailRepository)
+    public OrderVisitDomainServiceTest(IOrderVisitDomainService orderVisitDomainService, IOrderVisitRepository orderVisitRepository, IRepository<OrderVisitDetail> orderVisitDetailRepository, Publisher publisher)
     {
         _orderVisitDomainService = orderVisitDomainService;
         _orderVisitRepository = orderVisitRepository;
         _orderVisitDetailRepository = orderVisitDetailRepository;
+        _publisher = publisher;
+    }
+
+    [Fact]
+    public async Task OnSmsUpdate_Test()
+    {
+        var data = new Message() { IsSmsReply = true, SmsReplyContent = "1", PushBusiness = EPushBusiness.VisitSms };
+        await _publisher.PublishAsync(data.Adapt<ReceiveMessageNotify>(), PublishStrategy.ParallelNoWait, new CancellationToken());
     }
 
     [Theory]

+ 17 - 0
src/Hotline/Orders/OrderVisitDetail.cs

@@ -94,5 +94,22 @@ namespace Hotline.Orders
         /// 回访对象类型 10:话务员 20:部门
         /// </summary>
         public EVisitTarget VisitTarget { get; set; }
+
+        /// <summary>
+        /// 短信回访回填
+        /// </summary>
+        /// <param name="visitSatisfactionKv"></param>
+        /// <exception cref="NotImplementedException"></exception>
+        public void ReplyBackfill(Kv visitSatisfactionKv)
+        {
+            this.OrgProcessingResults = visitSatisfactionKv;
+            this.OrgHandledAttitude = visitSatisfactionKv;
+        }
+
+        public void ReplyBackfill(ESeatEvaluate seatEvaluate, EVoiceEvaluate voiceEvaluate)
+        {
+            this.SeatEvaluate ??= seatEvaluate;
+            this.VoiceEvaluate ??= voiceEvaluate;
+        }
     }
 }

+ 9 - 7
src/Hotline/Orders/OrderVisitDomainService.cs

@@ -48,13 +48,13 @@ public class OrderVisitDomainService : IOrderVisitDomainService, IScopeDependenc
         _logger.LogInformation($"UpdateSmsReplyAsync 收到通知: {data.ToJson()}");
         if (data.IsSmsReply == false || data.SmsReplyContent.IsNullOrEmpty() || data.ExternalId.IsNullOrEmpty()) return;
 
-        var orderVisit = await _orderVisitRepository.GetAsync(data.ExternalId)
+        var orderVisit = await _orderVisitRepository.GetAsync(data.ExternalId!)
              ?? throw new UserFriendlyException($"回访单不存在, visitId: {data.ExternalId} message: {data.ToJson()}");
 
         if (orderVisit.VisitState == EVisitState.Visited)
             throw new UserFriendlyException($"回访单已回访. visitId: {data.ExternalId}");
 
-        var replyTxt = data.SmsReplyContent.Trim();
+        var replyTxt = data.SmsReplyContent!;
         if (new string[] { "4", "5" }.Contains(replyTxt))
         {
             // “短信不满意待回访”状态下,由其他方式再次进行回访,回访方式需更新为最新的回访方式
@@ -73,7 +73,7 @@ public class OrderVisitDomainService : IOrderVisitDomainService, IScopeDependenc
             await _orderRepository.GetAsync(orderVisit.OrderId)
                 .Then(async order =>
                 {
-                    order.Visited(replyTxt, GetVisitEvaluateByReplyTxt<string>(replyTxt));
+                    order!.Visited(replyTxt, GetVisitEvaluateByReplyTxt<string>(replyTxt));
                     await _orderRepository.UpdateAsync(order);
                 });
 
@@ -83,17 +83,19 @@ public class OrderVisitDomainService : IOrderVisitDomainService, IScopeDependenc
             .ToListAsync();
         foreach (var item in detailOrg)
         {
-            item.OrgProcessingResults = visitSatisfactionKv;
-            item.OrgHandledAttitude = visitSatisfactionKv;
+            item.ReplyBackfill(visitSatisfactionKv);
         }
+        await _orderVisitDetailRepository.UpdateRangeAsync(detailOrg);
 
         await _orderVisitDetailRepository.Queryable()
             .Where(m => m.VisitId == orderVisit.Id && m.VisitTarget == EVisitTarget.Seat)
             .FirstAsync()
             .Then(async detailSeat =>
             {
-                detailSeat.SeatEvaluate ??= GetVisitEvaluateByReplyTxt<ESeatEvaluate>(replyTxt);
-                detailSeat.VoiceEvaluate ??= GetVisitEvaluateByReplyTxt<EVoiceEvaluate>(replyTxt);
+                detailSeat.ReplyBackfill(
+                    GetVisitEvaluateByReplyTxt<ESeatEvaluate>(replyTxt),
+                    GetVisitEvaluateByReplyTxt<EVoiceEvaluate>(replyTxt)
+                    );
                 await _orderVisitDetailRepository.UpdateAsync(detailSeat);
             });
     }