Bladeren bron

Merge branch 'fix/bug_order_visit_sms' into test

qinchaoyue 1 week geleden
bovenliggende
commit
e2769544a2

+ 15 - 4
src/Hotline.Application/OrderApp/Handlers/OrderHandler/OrderVisitSmsHandler.cs

@@ -2,6 +2,7 @@
 using Hotline.Orders;
 using Hotline.Push.FWMessage;
 using Hotline.Push.Notifies;
+using Hotline.Settings;
 using Hotline.Share.Dtos.Push;
 using Hotline.Share.Enums.Push;
 using Hotline.Share.Mq;
@@ -14,16 +15,22 @@ public class OrderVisitSmsHandler : INotificationHandler<ReceiveMessageNotify>
 {
     private readonly IOrderVisitDomainService _orderVisitDomainService;
     private readonly IRepository<Message> _messageRepository;
+    private readonly ISystemLogRepository _logRepository;
 
-    public OrderVisitSmsHandler(IOrderVisitDomainService orderVisitDomainService, IRepository<Message> messageRepository)
+    public OrderVisitSmsHandler(IOrderVisitDomainService orderVisitDomainService, IRepository<Message> messageRepository, ISystemLogRepository logRepository)
     {
         _orderVisitDomainService = orderVisitDomainService;
         _messageRepository = messageRepository;
+        _logRepository = logRepository;
     }
 
     public async Task Handle(ReceiveMessageNotify notification, CancellationToken cancellationToken)
     {
-        if (notification.NotifyDto.Type != "2") return;
+        if (notification.NotifyDto.Type != "2")
+        {
+            _logRepository.Add("短信回访-不处理", notification, "Type=2才处理,现在Type:" + notification.NotifyDto.Type, "OrderVisitSmsHandler", 0);
+            return;
+        }
 
         var msg = await _messageRepository
             .Queryable()
@@ -31,8 +38,12 @@ public class OrderVisitSmsHandler : INotificationHandler<ReceiveMessageNotify>
             .Where(m => m.PushBusiness == EPushBusiness.VisitSms || m.PushBusiness == EPushBusiness.SearchSms)
             .Where(m => m.SendState == ESendState.Success)
             .OrderByDescending(m => m.CreationTime)
-            .FirstAsync();
-        if (msg.SendTime!.Value.AddDays(2) < DateTime.Now) return;
+            .FirstAsync(cancellationToken);
+        if (msg.SendTime!.Value.AddDays(2) < DateTime.Now)
+        {
+            _logRepository.Add("短信回访-不处理", notification, "msg.SendTime 已经超过2天, 不处理", "OrderVisitSmsHandler", 0);
+            return;
+        }
         await _orderVisitDomainService.UpdateSmsReplyAsync(notification.NotifyDto);
     }
 }

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

@@ -75,18 +75,30 @@ public class OrderVisitDomainService : IOrderVisitDomainService, IScopeDependenc
     /// <returns></returns>
     public async Task UpdateSmsReplyAsync(MessageDto data)
     {
-        if (data.IsSmsReply == false || data.SmsReplyContent.IsNullOrEmpty()) return;
-
-        var orderVisits = await _orderVisitRepository.Queryable()
-            .Includes(m => m.Order)
-            .Where(m => m.Order.Contact == data.TelNumber)
-            .Where(m => m.VisitState == EVisitState.SMSVisiting)
-            .ToListAsync();
+        if (data.IsSmsReply == false || data.SmsReplyContent.IsNullOrEmpty())
+        {
+            _logRepository.Add("短信回访-不处理", data, "用户回复的内容为空", "UpdateSmsReplyAsync", 0);
+            return;
+        }
 
-        foreach (var orderVisit in orderVisits)
+        var query = _orderVisitRepository.Queryable()
+        .Includes(m => m.Order)
+        .Where(m => m.Order.Contact == data.TelNumber)
+        .Where(m => m.VisitState == EVisitState.SMSVisiting)
+        .OrderBy(m => m.CreationTime);
+
+#if DEBUG
+        var sql = query.ToSqlString();
+#endif
+        var orderVisit = await query.FirstAsync();
+        if (orderVisit == null)
         {
-            await UpdateSmsReplyAsync(orderVisit, data.SmsReplyContent!.Trim());
+            _logRepository.Add("短信回访-不处理", query.ToSqlString(), $"根据电话号码{data.TelNumber} 和回访状态 EVisitState.SMSVisiting, 无法查询出回访信息", "UpdateSmsReplyAsync", 0);
+            return;
         }
+
+        await UpdateSmsReplyAsync(orderVisit, data.SmsReplyContent!.Trim());
+
     }
 
     /// <summary>

+ 48 - 0
test/Hotline.Tests/Domain/PushDomainServiceTest.cs

@@ -0,0 +1,48 @@
+using Hotline.Api.Controllers;
+using Hotline.Identity.Accounts;
+using Hotline.Identity.Roles;
+using Hotline.Push.FWMessage;
+using Hotline.Settings;
+using Hotline.Share.Dtos.Push;
+using Hotline.Share.Enums.Push;
+using Hotline.ThirdAccountDomainServices;
+using Hotline.ThirdAccountDomainServices.Interfaces;
+using Hotline.Users;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.DependencyInjection;
+using SqlSugar.Extensions;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Cache;
+using XF.Domain.Repository;
+
+namespace Hotline.Tests.Domain;
+
+public class PushDomainServiceTest : TestBase
+{
+    private readonly IPushDomainService _pushDomainService;
+
+    public PushDomainServiceTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdIdentiyService, IThirdAccountRepository thirdAccountRepository, ITypedCache<SystemSetting> cacheSettingData, ThirdAccounSupplierFactory thirdAccountDomainFactory, IServiceProvider serviceProvider, IPushDomainService pushDomainService) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdIdentiyService, thirdAccountRepository, cacheSettingData, thirdAccountDomainFactory, serviceProvider)
+    {
+        _pushDomainService = pushDomainService;
+    }
+
+    [Fact]
+    public async Task PushMsgUpdateState_Test()
+    {
+        var inDto = new PushReceiveMessageDto
+        {
+            Type = "2",
+            Status = EPushStatus.Success,
+            SmsReplyContent = "5",
+            ExternalId = "08dd7cd0-3179-4697-84ed-3aeb1d5130f9",
+            IsSmsReply = true,
+            SmsReplyTime = "2025-03-19 17:14:28".ObjToDate()
+        };
+        await _pushDomainService.PushMsgUpdateStateAsync(inDto, CancellationToken.None);
+        Thread.Sleep(60 * 1000);
+    }
+}