瀏覽代碼

Merge branch 'dev' of http://110.188.24.182:10023/Fengwo/hotline into dev

田爽 8 月之前
父節點
當前提交
2f062f88db

+ 7 - 20
src/Hotline.Api/Controllers/OrderController.cs

@@ -15,6 +15,7 @@ using Hotline.FlowEngine.Definitions;
 using Hotline.FlowEngine.WorkflowModules;
 using Hotline.FlowEngine.Workflows;
 using Hotline.Import;
+using Hotline.JudicialManagement.Notifies;
 using Hotline.Orders;
 using Hotline.Orders.Notifications;
 using Hotline.OrderTranspond;
@@ -54,6 +55,7 @@ using Microsoft.Extensions.Options;
 using MiniExcelLibs;
 using MongoDB.Driver;
 using SqlSugar;
+using System.Threading;
 using XF.Domain.Authentications;
 using XF.Domain.Cache;
 using XF.Domain.Entities;
@@ -1821,7 +1823,7 @@ public class OrderController : BaseController
             query = _orderScreenRepository.Queryable(isAdmin: isAdmin)
                 .WhereIF(!isAdmin, x => x.CreatorOrgId.StartsWith(_sessionContext.RequiredOrgId));
         }
-      
+
         query = query
             .Includes(d => d.Order)
             .Includes(d => d.VisitDetail)
@@ -3115,24 +3117,8 @@ public class OrderController : BaseController
             _logger.LogError($"工单开启流程失败!, {e.Message}, {e.StackTrace}");
             throw new UserFriendlyException($"工单开启流程失败!, {e.Message}, {e.StackTrace}", "工单开启流程失败");
         }
-
-        ////是否市州互转
-        //if (dto.Data.Transpond.HasValue && dto.Data.Transpond.Value)
-        //{
-        //    var order = await _orderRepository.GetAsync(id, HttpContext.RequestAborted);
-        //    var orderDto = _mapper.Map<OrderDto>(order);
-        //    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderTranspondCity, orderDto);
-        //    //保存本地数据
-        //    TranspondCityRawData cityRawData = new TranspondCityRawData
-        //    {
-        //        OrderCode = order.No,
-        //        TransferOutTime = DateTime.Now,
-        //        CityName = order.TranspondCityName,
-        //        Direction = ETranspondDirection.Out
-        //    };
-
-        //    await _transpondCityRawDataRepository.AddAsync(cityRawData, HttpContext.RequestAborted);
-        //}
+        //是否市州互转 
+        await _publisher.PublishAsync(new TranspondCityNotify(order.Id), PublishStrategy.ParallelNoWait, HttpContext.RequestAborted);
     }
 
     /// <summary>
@@ -3479,9 +3465,10 @@ public class OrderController : BaseController
         var isHandled = dto.IsHandled.HasValue && dto.IsHandled.Value;
         if (dto.EndTime.HasValue)
             dto.EndTime = dto.EndTime.Value.AddDays(1).AddSeconds(-1);
+        var isAdmin = _orderDomainService.IsCheckAdmin();
 
         var (total, items) = await _orderRepository
-            .Queryable(hasHandled: isHandled)
+            .Queryable(hasHandled: isHandled, isAdmin: isAdmin)
             .Includes(d => d.OrderSpecials)
             .Where(d => d.Status != EOrderStatus.WaitForAccept && d.Status != EOrderStatus.BackToUnAccept && d.Status != EOrderStatus.SpecialToUnAccept)
             .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)

+ 71 - 0
src/Hotline.Application/Handlers/Order/TranspondCityNotifyHandler.cs

@@ -0,0 +1,71 @@
+using DotNetCore.CAP;
+using Hotline.EventBus;
+using Hotline.Orders;
+using Hotline.Orders.Notifications;
+using Hotline.OrderTranspond;
+using Hotline.Share.Dtos.Order;
+using Hotline.Share.Enums.Order;
+using MapsterMapper;
+using MediatR;
+using XF.Domain.Repository;
+
+namespace Hotline.Application.Handlers.Order
+{
+    [HandlerInject(AppScopes = EAppScope.YiBin)]
+    public class TranspondCityNotifyHandler : INotificationHandler<TranspondCityNotify>
+    {
+        private readonly IMapper _mapper;
+        private readonly ICapPublisher _capPublisher;
+        private readonly IOrderRepository _orderRepository;
+        private readonly IRepository<TranspondCityRawData> _transpondCityRawDataRepository;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mapper"></param>
+        /// <param name="capPublisher"></param>
+        /// <param name="orderRepository"></param>
+        /// <param name="transpondCityRawDataRepository"></param>
+        public TranspondCityNotifyHandler(IMapper mapper,
+          ICapPublisher capPublisher,
+          IOrderRepository orderRepository,
+          IRepository<TranspondCityRawData> transpondCityRawDataRepository)
+        {
+            _mapper = mapper;
+            _capPublisher = capPublisher;
+            _orderRepository = orderRepository;
+            _transpondCityRawDataRepository = transpondCityRawDataRepository;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="notification"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public async Task Handle(TranspondCityNotify notification, CancellationToken cancellationToken)
+        {
+            var id = notification.Id;
+            var order = await _orderRepository.GetAsync(id, cancellationToken);
+            if (order != null)
+            {
+                //是否市州互转
+                if (order.Transpond.HasValue && order.Transpond.Value)
+                {
+                    var orderDto = _mapper.Map<OrderDto>(order);
+                    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineOrderTranspondCity, orderDto);
+                    //保存本地数据
+                    TranspondCityRawData cityRawData = new TranspondCityRawData
+                    {
+                        OrderCode = order.No,
+                        TransferOutTime = DateTime.Now,
+                        CityName = order.TranspondCityName,
+                        Direction = ETranspondDirection.Out
+                    };
+
+                    await _transpondCityRawDataRepository.AddAsync(cityRawData, cancellationToken);
+                }
+            }
+        }
+    }
+}

+ 14 - 1
src/Hotline.Application/Subscribers/InternalCapSubscriber.cs

@@ -9,6 +9,7 @@ using Hotline.Share.Mq;
 using Hotline.Users;
 using MediatR;
 using Microsoft.AspNetCore.Http;
+using StackExchange.Redis;
 using XF.Domain.Dependency;
 using XF.Domain.Repository;
 
@@ -179,7 +180,19 @@ namespace Hotline.Application.Subscribers
                 .Where(x=> x.Id == dto.TaskId).FirstAsync();
             if (task != null && task.SmsTaskState == ESmsTaskState.WaitDo && task.PlanSendTime.ToString("yyyy-MM-dd hh:mm") == DateTime.Now.ToString("yyyy-MM-dd hh:mm"))
             {
-
+                foreach (var item in task.BatchSmsTaskDetails)
+                {
+                    //发送短信
+                    var messageDto = new Share.Dtos.Push.MessageDto
+                    {
+                        PushBusiness = EPushBusiness.BatchSms,
+                        PushPlatform = EPushPlatform.Sms,
+                        Name = item.Name,
+                        TelNumber = item.PhoneNum,
+                        Content = task.Content
+                    };
+                    await _mediator.Publish(new PushMessageNotify(messageDto), cancellationToken);
+                }
             }
         }
     }

+ 5 - 2
src/Hotline.Repository.SqlSugar/BaseRepositoryWorkflow.cs

@@ -17,7 +17,7 @@ public class BaseRepositoryWorkflow<TEntity> : BaseRepository<TEntity>, IReposit
         _dataPermissionFilterBuilder = dataPermissionFilterBuilder;
     }
 
-    public ISugarQueryable<TEntity> Queryable(bool permissionVerify = false, bool includeDeleted = false, bool canView = true, bool? hasHandled = null, bool? isAdmin=false)
+    public ISugarQueryable<TEntity> Queryable(bool permissionVerify = false, bool includeDeleted = false, bool canView = true, bool? hasHandled = null, bool? isAdmin = false)
     {
         if (includeDeleted)
             Db.QueryFilter.Clear();
@@ -29,8 +29,11 @@ public class BaseRepositoryWorkflow<TEntity> : BaseRepository<TEntity>, IReposit
         if (canView && isAdmin != true)
             query = query.WorkflowViewFiltering(_dataPermissionFilterBuilder);
 
+        if (canView && isAdmin == true)
+            query = query.WorkflowViewFilteringAdmin();
+
         if (hasHandled.HasValue)
-            query = query.WorkflowHandleFiltering(_dataPermissionFilterBuilder, hasHandled.Value,isAdmin);
+            query = query.WorkflowHandleFiltering(_dataPermissionFilterBuilder, hasHandled.Value, isAdmin);
 
         return query.Clone();
     }

+ 8 - 0
src/Hotline.Repository.SqlSugar/Extensions/DataPermissionExtensions.cs

@@ -37,6 +37,14 @@ namespace Hotline.Repository.SqlSugar.Extensions
             //return queryable.Where(dataPermissionFilterBuilder.BuildWithFlowViewFilter<TEntity>());
         }
 
+        public static ISugarQueryable<TEntity> WorkflowViewFilteringAdmin<TEntity>(this ISugarQueryable<TEntity> queryable)
+           where TEntity : class, IEntity<string>, IDataPermission, IWorkflow, new()
+        {
+            return queryable.Where(d => SqlFunc.Subqueryable<WorkflowTrace>()
+                    .Where(step => step.ExternalId == d.Id)
+                    .Any());
+        }
+
         public static ISugarQueryable<TEntity> WorkflowHandleFiltering<TEntity>(this ISugarQueryable<TEntity> queryable,
             IDataPermissionFilterBuilder dataPermissionFilterBuilder, bool hasHandled, bool? isAdmin = false)
             where TEntity : class, IEntity<string>, IDataPermission, IWorkflow, new()

+ 5 - 0
src/Hotline.Share/Enums/Push/EPushBusiness.cs

@@ -49,4 +49,9 @@ public enum EPushBusiness
     [Description("工单督办")]
     OrderSupervise = 6,
 
+    /// <summary>
+    /// 批量短信
+    /// </summary>
+    [Description("批量短信")]
+    BatchSms = 7,
 }

+ 7 - 0
src/Hotline/Orders/Notifications/TranspondCityNotify.cs

@@ -0,0 +1,7 @@
+using MediatR;
+
+namespace Hotline.Orders.Notifications
+{
+    public record TranspondCityNotify(string Id) : INotification;
+
+}