Dun.Jason преди 9 месеца
родител
ревизия
b77969f82f

+ 1 - 1
src/Hotline.Api/Controllers/OrderController.cs

@@ -1205,7 +1205,7 @@ public class OrderController : BaseController
         visitApplyModel.ExaminManId = _sessionContext.RequiredUserId;
         visitApplyModel.ExaminTime = DateTime.Now;
         await _orderVisitApplyRepository.UpdateAsync(visitApplyModel, HttpContext.RequestAborted);
-        //TODO 处理通过后的业务
+        //处理通过后的业务
         if (dto.IsPass)
         {
             //处理申请单

+ 4 - 1
src/Hotline.Application/Orders/OrderApplication.cs

@@ -42,6 +42,8 @@ using PanGu.Match;
 using Hotline.Settings.Hotspots;
 using Hotline.Share.Enums.FlowEngine;
 using Hotline.Authentications;
+using MediatR;
+using Hotline.Share.Mq;
 
 namespace Hotline.Application.Orders;
 
@@ -69,7 +71,6 @@ public class OrderApplication : IOrderApplication, IScopeDependency
     private readonly IRepository<WorkflowStep> _workflowStepRepository;
 
 
-
     public OrderApplication(
         IOrderDomainService orderDomainService,
         IOrderRepository orderRepository,
@@ -130,6 +131,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
         order.TimeLimitUnit = expiredTimeConfig.TimeType;
         order.ExpiredTime = expiredTimeConfig.ExpiredTime;
         order.NearlyExpiredTime = expiredTimeConfig.NearlyExpiredTime;
+        //TODO发送即将超期和超期短信
+        //_capPublisher.PublishDelay(expiredTimeConfig.NearlyExpiredTime - DateTime.Now, EventNames.HotlineOrderNearlyExpiredTimeSms,new PublishNearlyExpiredTimeSmsDto() { OrderId= order.Id }) ;
         if (IsProDelay)
         {
             order.ExpiredTimeProvince = expiredTimeConfig.ExpiredTime;

+ 161 - 0
src/Hotline.Application/Subscribers/InternalCapSubscriber.cs

@@ -0,0 +1,161 @@
+using DotNetCore.CAP;
+using Hotline.Orders;
+using Hotline.Push.Notifies;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.Push;
+using Hotline.Share.Mq;
+using Hotline.Users;
+using MediatR;
+using Microsoft.AspNetCore.Http;
+using XF.Domain.Dependency;
+using XF.Domain.Repository;
+
+namespace Hotline.Application.Subscribers
+{
+    public class InternalCapSubscriber: ICapSubscribe, ITransientDependency
+    {
+        private readonly IOrderRepository _orderRepository;
+        private readonly IMediator _mediator;
+        private readonly IRepository<User> _userRepository;
+
+        public InternalCapSubscriber(IOrderRepository orderRepository,IMediator mediator,IRepository<User> userRepository)
+        {
+            _orderRepository = orderRepository;
+            _mediator = mediator;
+            _userRepository = userRepository;
+        }
+
+        /// <summary>
+        /// 工单即将超期短信发送(延迟消息)
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        [CapSubscribe(EventNames.HotlineOrderNearlyExpiredTimeSms)]
+        public async Task SendOrderNearlyExpiredTimeSms(PublishNearlyExpiredTimeSmsDto dto,CancellationToken cancellationToken)
+        {
+            var order = await _orderRepository.GetAsync(dto.OrderId, cancellationToken);
+            if (order!=null && order.Status< Share.Enums.Order.EOrderStatus.Filed && order.NearlyExpiredTime?.ToString("yyyy-MM-dd hh:mm") == DateTime.Now.ToString("yyyy-MM-dd hh:mm"))
+            {
+                //当前办理人不为空发短信给个人
+                if (!string.IsNullOrEmpty(order.CurrentHandlerId))
+                {
+                    //查询人员
+                    var user = await _userRepository.GetAsync(order.CurrentHandlerId, cancellationToken);
+                    if(user!=null && !string.IsNullOrEmpty(user.PhoneNo))
+                    {
+                        //发送短信
+                        var messageDto = new Share.Dtos.Push.MessageDto
+                        {
+                            PushBusiness = EPushBusiness.OrderUrge,
+                            ExternalId = order.Id,
+                            OrderId = order.Id,
+                            PushPlatform = EPushPlatform.Sms,
+                            Remark = order.Title,
+                            Name = user.Name,
+                            TemplateCode = "1001",
+                            Params = new List<string>() { order.No },
+                            TelNumber = user.PhoneNo,
+                        };
+                        await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
+                    }
+                }
+                //当前办理部门不为空,发短信给部门经办人
+                else if(!string.IsNullOrEmpty(order.CurrentHandleOrgId))
+                {
+                    //查询部门经办人
+                    var userlist = await _userRepository.Queryable().Where(x =>
+                        x.OrgId == order.CurrentHandleOrgId && !string.IsNullOrEmpty(x.PhoneNo) &&
+                        x.Roles.Any(d => d.Id == "08dae71e-0eca-4bc4-89fe-7eaefae8a98e")).ToListAsync();
+                    foreach (var user in userlist)
+                    {
+                        if (!string.IsNullOrEmpty(user.PhoneNo))
+                        {
+                            //发送短信
+                            var messageDto = new Share.Dtos.Push.MessageDto
+                            {
+                                PushBusiness = EPushBusiness.OrderUrge,
+                                ExternalId = order.Id,
+                                OrderId = order.Id,
+                                PushPlatform = EPushPlatform.Sms,
+                                Remark = order.Title,
+                                Name = user.Name,
+                                TemplateCode = "1001",
+                                Params = new List<string>() { order.No },
+                                TelNumber = user.PhoneNo,
+                            };
+                            await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
+                        }
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 工单超期短信发送(延迟消息)
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        [CapSubscribe(EventNames.HotlineOrderExpiredTimeSms)]
+        public async Task SendOrderExpiredTimeSms(PublishNearlyExpiredTimeSmsDto dto,CancellationToken cancellationToken)
+        {
+            var order = await _orderRepository.GetAsync(dto.OrderId, cancellationToken);
+            if (order != null && order.Status < Share.Enums.Order.EOrderStatus.Filed && order.NearlyExpiredTime?.ToString("yyyy-MM-dd hh:mm") == DateTime.Now.ToString("yyyy-MM-dd hh:mm"))
+            {
+                //当前办理人不为空发短信给个人
+                if (!string.IsNullOrEmpty(order.CurrentHandlerId))
+                {
+                    //查询人员
+                    var user = await _userRepository.GetAsync(order.CurrentHandlerId, cancellationToken);
+                    if (user != null && !string.IsNullOrEmpty(user.PhoneNo))
+                    {
+                        //发送短信
+                        var messageDto = new Share.Dtos.Push.MessageDto
+                        {
+                            PushBusiness = EPushBusiness.OrderUrge,
+                            ExternalId = order.Id,
+                            OrderId = order.Id,
+                            PushPlatform = EPushPlatform.Sms,
+                            Remark = order.Title,
+                            Name = user.Name,
+                            TemplateCode = "1009",
+                            Params = new List<string>() { order.No },
+                            TelNumber = user.PhoneNo,
+                        };
+                        await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
+                    }
+                }
+                //当前办理部门不为空,发短信给部门经办人
+                else if (!string.IsNullOrEmpty(order.CurrentHandleOrgId))
+                {
+                    //查询部门经办人
+                    var userlist = await _userRepository.Queryable().Where(x =>
+                        x.OrgId == order.CurrentHandleOrgId && !string.IsNullOrEmpty(x.PhoneNo) &&
+                        x.Roles.Any(d => d.Id == "08dae71e-0eca-4bc4-89fe-7eaefae8a98e")).ToListAsync();
+                    foreach (var user in userlist)
+                    {
+                        if (!string.IsNullOrEmpty(user.PhoneNo))
+                        {
+                            //发送短信
+                            var messageDto = new Share.Dtos.Push.MessageDto
+                            {
+                                PushBusiness = EPushBusiness.OrderUrge,
+                                ExternalId = order.Id,
+                                OrderId = order.Id,
+                                PushPlatform = EPushPlatform.Sms,
+                                Remark = order.Title,
+                                Name = user.Name,
+                                TemplateCode = "1009",
+                                Params = new List<string>() { order.No },
+                                TelNumber = user.PhoneNo,
+                            };
+                            await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
+                        }
+                    }
+                }
+            }
+        }
+
+    }
+}

+ 5 - 0
src/Hotline.Share/Dtos/Order/OrderDto.cs

@@ -1051,4 +1051,9 @@ namespace Hotline.Share.Dtos.Order
         public DateTime RemarkTime { get; set; }
 
     }
+
+    public class PublishNearlyExpiredTimeSmsDto
+    {
+        public string OrderId { get; set; }
+    }
 }

+ 10 - 0
src/Hotline.Share/Dtos/Order/OrderVisitDto.cs

@@ -515,6 +515,16 @@ namespace Hotline.Share.Dtos.Order
         /// 评判意见
         /// </summary>
         public string? JudgeContent { get; set; }
+
+        /// <summary>
+        /// 是否有效智能回访
+        /// </summary>
+        public bool? IsEffectiveAiVisit { get; set; }
+        /// <summary>
+        /// 是否有效智能回访
+        /// </summary>
+        public string IsEffectiveAiVisitText => IsEffectiveAiVisit == true ? "是" : IsEffectiveAiVisit == false ? "否" : "";
+
     }
 
     public class OrderVisitDetailDto

+ 15 - 0
src/Hotline.Share/Mq/EventNames.Order.cs

@@ -111,5 +111,20 @@ namespace Hotline.Share.Mq
         public const string HotlineOrderContingencyManagementState = "hotline.order.contingency.management.state";
 
         #endregion
+
+
+        #region 内部订阅
+
+        /// <summary>
+        /// 即将超期短信(延迟消息)
+        /// </summary>
+        public const string HotlineOrderNearlyExpiredTimeSms = "hotline.order.nearlyexpiredtime.sms";
+
+        /// <summary>
+        /// 超期短信(延迟消息)
+        /// </summary>
+        public const string HotlineOrderExpiredTimeSms = "hotline.order.expiredtime.sms";
+
+        #endregion
     }
 }