Kaynağa Gözat

处理短信回访逻辑

tangjiang 1 hafta önce
ebeveyn
işleme
f21f968bf0

+ 5 - 0
src/Hotline.Share/Dtos/Push/PushReceiveMessageDto.cs

@@ -68,5 +68,10 @@ namespace Hotline.Share.Dtos.Push
         /// 发送失败原因等
         /// </summary>
         public string? Reason { get; set; }
+
+        /// <summary>
+        /// 手机号
+        /// </summary>
+        public string? TelNumber { get; set; }
     }
 }

+ 35 - 26
src/Hotline/Push/FWMessage/PushDomainService.cs

@@ -130,40 +130,49 @@ public class PushDomainService : IPushDomainService, IScopeDependency
     /// <returns></returns>
     public async Task PushMsgUpdateStateAsync(PushReceiveMessageDto dto, CancellationToken cancellation)
     {
-        var data = await _messageRepository.GetAsync(p => p.Id == dto.ExternalId, cancellation);
-        if (data != null)
+        if (dto.Type != "2")
         {
-            if (dto.Type == "0")
+            var data = await _messageRepository.GetAsync(p => p.Id == dto.ExternalId, cancellation);
+            if (data != null)
             {
-                if (dto.SendState == ESendState.Sending)
+                if (dto.Type == "0")
                 {
-                    data.SmsWaitSendingId = dto.SmsWaitSendingId;
-                    data.SendState = ESendState.Sending;
-                    data.Status = EPushStatus.Success;
+                    if (dto.SendState == ESendState.Sending)
+                    {
+                        data.SmsWaitSendingId = dto.SmsWaitSendingId;
+                        data.SendState = ESendState.Sending;
+                        data.Status = EPushStatus.Success;
+                    }
+                    else
+                        data.Status = EPushStatus.Failed;
                 }
-                else
-                    data.Status = EPushStatus.Failed;
-            }
-            else if (dto.Type == "1")
-            {
-                data.SendTime = Convert.ToDateTime(dto.SendTime);
-                data.SendState = dto.SendState;
-                data.MsgCount = dto.MsgCount;
-                data.SmsSendingCompletedId = dto.SmsSendingCompletedId;
-            }
-            else if (dto.Type == "2")
-            {
-                data.IsSmsReply = dto.IsSmsReply;
-                data.SmsReplyTime = Convert.ToDateTime(dto.SmsReplyTime);
-                data.SmsReplyContent = dto.SmsReplyContent;
+                else if (dto.Type == "1")
+                {
+                    data.SendTime = Convert.ToDateTime(dto.SendTime);
+                    data.SendState = dto.SendState;
+                    data.MsgCount = dto.MsgCount;
+                    data.SmsSendingCompletedId = dto.SmsSendingCompletedId;
+                }
+
             }
-            data.Reason = dto.Reason;
-            await _messageRepository.UpdateAsync(data, cancellation);
+        }
+        else if (dto.Type == "2")
+        {
+            var messData = await _messageRepository.Queryable()
+                .Where(p => p.TelNumber == dto.TelNumber && (p.PushBusiness == EPushBusiness.VisitSms || p.PushBusiness == EPushBusiness.SearchSms) 
+                && p.IsSmsReply == false)
+                .OrderBy(p => p.CreationTime)
+                .FirstAsync();
+            messData.IsSmsReply = dto.IsSmsReply;
+            messData.SmsReplyTime = Convert.ToDateTime(dto.SmsReplyTime);
+            messData.SmsReplyContent = dto.SmsReplyContent;
+            await _messageRepository.UpdateAsync(messData, cancellation);
 
-            var notify = data.Adapt<ReceiveMessageNotify>();
+            var notify = messData.Adapt<ReceiveMessageNotify>();
             notify.NotifyDto.Type = dto.Type;
             await _publisher.PublishAsync(notify, PublishStrategy.ParallelNoWait, cancellation);
         }
+
     }
 
     /// <summary>
@@ -190,5 +199,5 @@ public class PushDomainService : IPushDomainService, IScopeDependency
             await _messageRepository.UpdateAsync(data, cancellation);
         }
     }
-    
+
 }