xf 2 жил өмнө
parent
commit
2092177e4d

+ 2 - 1
src/Hotline.Application/Handlers/FlowEngine/NextStepHandler.cs

@@ -39,7 +39,8 @@ public class NextStepHandler : INotificationHandler<NextStepNotify>
             case WorkflowModuleConsts.OrderManage:
             case WorkflowModuleConsts.OrderManage:
                 await _orderDomainService.OrderManageAsync(EOrderStatus.WaitForSign,
                 await _orderDomainService.OrderManageAsync(EOrderStatus.WaitForSign,
                     assignMode, notification.IsCountersignEnd, notification.IsCountersignStart,
                     assignMode, notification.IsCountersignEnd, notification.IsCountersignStart,
-                    workflow.Id, workflow.CurrentStepTime, workflow.CurrentStepName, cancellationToken);
+                    workflow.Id, workflow.CurrentStepTime, workflow.CurrentStepName, workflow.ExpiredTime,
+                    cancellationToken);
                 break;
                 break;
         }
         }
     }
     }

+ 1 - 1
src/Hotline.Application/Handlers/FlowEngine/StartWorkflowHandler.cs

@@ -45,7 +45,7 @@ namespace Hotline.Application.Handlers.FlowEngine
                 case WorkflowModuleConsts.OrderManage:
                 case WorkflowModuleConsts.OrderManage:
                     await _orderDomainService.OrderManageAsync(EOrderStatus.WaitForSign, assignMode,
                     await _orderDomainService.OrderManageAsync(EOrderStatus.WaitForSign, assignMode,
                         false, notification.IsCountersignStart,
                         false, notification.IsCountersignStart,
-                        workflow.Id, workflow.CurrentStepTime, workflow.CurrentStepName, cancellationToken);
+                        workflow.Id, workflow.CurrentStepTime, workflow.CurrentStepName, workflow.ExpiredTime, cancellationToken);
                     break;
                     break;
             }
             }
         }
         }

+ 22 - 4
src/Hotline.Repository.SqlSugar/BaseRepository.cs

@@ -167,12 +167,30 @@ namespace Hotline.Repository.SqlSugar
 
 
         public UpdateNavTaskInit<TEntity, TEntity> UpdateNav(List<TEntity> entities, UpdateNavRootOptions options) => Db.UpdateNav(entities, options);
         public UpdateNavTaskInit<TEntity, TEntity> UpdateNav(List<TEntity> entities, UpdateNavRootOptions options) => Db.UpdateNav(entities, options);
 
 
-        public InsertNavTaskInit<TEntity, TEntity> AddNav(TEntity entity) => Db.InsertNav(entity);
+        public InsertNavTaskInit<TEntity, TEntity> AddNav(TEntity entity)
+        {
+            var dataPermissionManager = _dataPermissionFilterBuilder.DataPermissionManager;
+            entity.InitDatePermission(dataPermissionManager);
+            return Db.InsertNav(entity);
+        }
+
+        public InsertNavTaskInit<TEntity, TEntity> AddNav(TEntity entity, InsertNavRootOptions options)
+        {
+            entity.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager);
+            return Db.InsertNav(entity, options);
+        }
 
 
-        public InsertNavTaskInit<TEntity, TEntity> AddNav(TEntity entity, InsertNavRootOptions options) => Db.InsertNav(entity, options);
-        public InsertNavTaskInit<TEntity, TEntity> AddNav(List<TEntity> entities) => Db.InsertNav(entities);
+        public InsertNavTaskInit<TEntity, TEntity> AddNav(List<TEntity> entities)
+        {
+            entities.ForEach(d => d.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager));
+            return Db.InsertNav(entities);
+        }
 
 
-        public InsertNavTaskInit<TEntity, TEntity> AddNav(List<TEntity> entities, InsertNavRootOptions options) => Db.InsertNav(entities, options);
+        public InsertNavTaskInit<TEntity, TEntity> AddNav(List<TEntity> entities, InsertNavRootOptions options)
+        {
+            entities.ForEach(d => d.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager));
+            return Db.InsertNav(entities, options);
+        }
 
 
         public DeleteNavTaskInit<TEntity, TEntity> RemoveNav(TEntity entity) => Db.DeleteNav(entity);
         public DeleteNavTaskInit<TEntity, TEntity> RemoveNav(TEntity entity) => Db.DeleteNav(entity);
         public DeleteNavTaskInit<TEntity, TEntity> RemoveNav(List<TEntity> entities) => Db.DeleteNav(entities);
         public DeleteNavTaskInit<TEntity, TEntity> RemoveNav(List<TEntity> entities) => Db.DeleteNav(entities);

+ 9 - 8
src/Hotline.Repository.SqlSugar/DataPermissions/DataPermissionFilterBuilder.cs

@@ -22,15 +22,16 @@ public class DataPermissionFilterBuilder : IDataPermissionFilterBuilder, IScopeD
     public Expression<Func<TEntity, bool>> Build<TEntity>() where TEntity : class, IEntity<string>, IDataPermission, new()
     public Expression<Func<TEntity, bool>> Build<TEntity>() where TEntity : class, IEntity<string>, IDataPermission, new()
     {
     {
         var userId = _sessionContext.RequiredUserId;
         var userId = _sessionContext.RequiredUserId;
-        var scheme = DataPermissionManager.GetQueryFilter<TEntity>(_sessionContext);
-        switch (scheme.QueryFilter)
+        var orgCode = _sessionContext.RequiredOrgCode;
+        var queryFilterType = DataPermissionManager.GetQueryFilter<TEntity>(_sessionContext);
+        switch (queryFilterType)
         {
         {
             case EAuthorityType.Create:
             case EAuthorityType.Create:
                 return d => d.CreatorId == userId;
                 return d => d.CreatorId == userId;
             case EAuthorityType.Org:
             case EAuthorityType.Org:
-                return d => d.CreatorOrgCode == scheme.OrgCode;
+                return d => d.CreatorOrgCode == orgCode;
             case EAuthorityType.OrgAndBelow:
             case EAuthorityType.OrgAndBelow:
-                return d => d.CreatorOrgCode.StartsWith(scheme.OrgCode);
+                return d => d.CreatorOrgCode.StartsWith(orgCode);
             case EAuthorityType.All:
             case EAuthorityType.All:
                 return d => true;
                 return d => true;
             default:
             default:
@@ -43,23 +44,23 @@ public class DataPermissionFilterBuilder : IDataPermissionFilterBuilder, IScopeD
         var userId = _sessionContext.RequiredUserId;
         var userId = _sessionContext.RequiredUserId;
         var roles = _sessionContext.Roles;
         var roles = _sessionContext.Roles;
         var orgCode = _sessionContext.RequiredOrgCode;
         var orgCode = _sessionContext.RequiredOrgCode;
-        var scheme = DataPermissionManager.GetQueryFilter<TEntity>(_sessionContext);
+        var queryFilterType = DataPermissionManager.GetQueryFilter<TEntity>(_sessionContext);
 
 
-        switch (scheme.QueryFilter)
+        switch (queryFilterType)
         {
         {
             case EAuthorityType.Create:
             case EAuthorityType.Create:
                 return d => d.CreatorId == userId
                 return d => d.CreatorId == userId
                             || d.AssignUserIds.Contains(userId)
                             || d.AssignUserIds.Contains(userId)
                             || d.AssignOrgCodes.Contains(orgCode);
                             || d.AssignOrgCodes.Contains(orgCode);
             case EAuthorityType.Org:
             case EAuthorityType.Org:
-                return d => d.CreatorOrgCode == scheme.OrgCode
+                return d => d.CreatorOrgCode == orgCode
                             || d.AssignUserIds.Contains(userId)
                             || d.AssignUserIds.Contains(userId)
                             || d.AssignOrgCodes.Contains(orgCode)
                             || d.AssignOrgCodes.Contains(orgCode)
 
 
                             //todo 扩展sqlfunc || d.AssignRoles.Intersect(roles).Any()
                             //todo 扩展sqlfunc || d.AssignRoles.Intersect(roles).Any()
                             ;
                             ;
             case EAuthorityType.OrgAndBelow:
             case EAuthorityType.OrgAndBelow:
-                return d => d.CreatorOrgCode.StartsWith(scheme.OrgCode)
+                return d => d.CreatorOrgCode.StartsWith(orgCode)
                             || d.AssignUserIds.Contains(userId)
                             || d.AssignUserIds.Contains(userId)
                             || d.AssignOrgCodes.Contains(orgCode);
                             || d.AssignOrgCodes.Contains(orgCode);
             case EAuthorityType.All:
             case EAuthorityType.All:

+ 3 - 2
src/Hotline.Repository.SqlSugar/DataPermissions/DataPermissionManager.cs

@@ -20,10 +20,11 @@ public class DataPermissionManager : IDataPermissionManager, IScopeDependency
         _sessionContext = sessionContext;
         _sessionContext = sessionContext;
     }
     }
 
 
-    public DataPermissionScheme GetQueryFilter<TEntity>(ISessionContext sessionContext) where TEntity : class, IEntity<string>, IDataPermission, new()
+    public EAuthorityType GetQueryFilter<TEntity>(ISessionContext sessionContext) where TEntity : class, IEntity<string>, IDataPermission, new()
     {
     {
         EAuthorityType queryFilter = GetCurrentQueryFilter(sessionContext.Roles, typeof(TEntity).Name);
         EAuthorityType queryFilter = GetCurrentQueryFilter(sessionContext.Roles, typeof(TEntity).Name);
-        return new DataPermissionScheme(queryFilter);
+        //return new DataPermissionScheme(queryFilter);
+        return queryFilter;
     }
     }
 
 
     public (string orgId, string orgCode, string creatorId, string? areaId) GetDataPermissionOptions()
     public (string orgId, string orgCode, string creatorId, string? areaId) GetDataPermissionOptions()

+ 3 - 2
src/Hotline.Repository.SqlSugar/DataPermissions/IDataPermissionManager.cs

@@ -1,10 +1,11 @@
-using XF.Domain.Authentications;
+using Hotline.Share.Enums.Settings;
+using XF.Domain.Authentications;
 using XF.Domain.Entities;
 using XF.Domain.Entities;
 
 
 namespace Hotline.Repository.SqlSugar.DataPermissions;
 namespace Hotline.Repository.SqlSugar.DataPermissions;
 
 
 public interface IDataPermissionManager
 public interface IDataPermissionManager
 {
 {
-    DataPermissionScheme GetQueryFilter<TEntity>(ISessionContext sessionContext) where TEntity : class, IEntity<string>, IDataPermission, new();
+    EAuthorityType GetQueryFilter<TEntity>(ISessionContext sessionContext) where TEntity : class, IEntity<string>, IDataPermission, new();
     (string orgId, string orgCode, string creatorId, string? areaId) GetDataPermissionOptions();
     (string orgId, string orgCode, string creatorId, string? areaId) GetDataPermissionOptions();
 }
 }

+ 1 - 1
src/Hotline.Repository.SqlSugar/Extensions/SqlSugarStartupExtensions.cs

@@ -169,7 +169,7 @@ namespace Hotline.Repository.SqlSugar.Extensions
             /***写AOP等方法***/
             /***写AOP等方法***/
             db.Aop.OnLogExecuting = (sql, pars) =>
             db.Aop.OnLogExecuting = (sql, pars) =>
             {
             {
-                //Log.Information(sql);
+                Log.Information(sql);
             };
             };
             db.Aop.OnError = (exp) =>//SQL报错
             db.Aop.OnError = (exp) =>//SQL报错
             {
             {

+ 32 - 0
src/Hotline.Repository.SqlSugar/Orders/OrderRepository.cs

@@ -5,15 +5,47 @@ using System.Text;
 using System.Threading.Tasks;
 using System.Threading.Tasks;
 using Hotline.Orders;
 using Hotline.Orders;
 using Hotline.Repository.SqlSugar.DataPermissions;
 using Hotline.Repository.SqlSugar.DataPermissions;
+using Hotline.Repository.SqlSugar.Extensions;
+using Hotline.Share.Enums.Order;
 using SqlSugar;
 using SqlSugar;
 using XF.Domain.Dependency;
 using XF.Domain.Dependency;
+using XF.Domain.Exceptions;
 
 
 namespace Hotline.Repository.SqlSugar.Orders
 namespace Hotline.Repository.SqlSugar.Orders
 {
 {
     public class OrderRepository : BaseRepositoryWorkflow<Order>, IOrderRepository, IScopeDependency
     public class OrderRepository : BaseRepositoryWorkflow<Order>, IOrderRepository, IScopeDependency
     {
     {
+        private readonly IDataPermissionFilterBuilder _dataPermissionFilterBuilder;
+
         public OrderRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
         public OrderRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
         {
         {
+            _dataPermissionFilterBuilder = dataPermissionFilterBuilder;
+        }
+
+        public async Task<string> AddOrderNavAsync(Order order, CancellationToken cancellationToken)
+        {
+            if (order.OrderType == EOrderType.MarketSupervisionBy12315)
+            {
+                if (order.AcceptType == EAcceptType.Complain)
+                {
+                    if (order.OrderComplain == null)
+                        throw UserFriendlyException.SameMessage("非法投诉参数");
+                    order.OrderComplain.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager);
+                    await AddNav(order).Include(d => d.OrderComplain).ExecuteCommandAsync();
+                }
+                else if (order.AcceptType == EAcceptType.Report)
+                {
+                    if (order.OrderReport == null)
+                        throw UserFriendlyException.SameMessage("非法举报参数");
+                    order.OrderReport.InitDatePermission(_dataPermissionFilterBuilder.DataPermissionManager);
+                    await AddNav(order).Include(d=>d.OrderReport).ExecuteCommandAsync();
+                }
+            }
+            else
+            {
+                await AddAsync(order, cancellationToken);
+            }
+            return order.Id;
         }
         }
     }
     }
 }
 }

+ 1 - 1
src/Hotline/Orders/IOrderDomainService.cs

@@ -22,6 +22,6 @@ namespace Hotline.Orders
         /// 工单办理(每个节点都会触发)
         /// 工单办理(每个节点都会触发)
         /// </summary>
         /// </summary>
         Task OrderManageAsync(EOrderStatus status, FlowAssignMode assignMode, bool isCountersignEnd, bool isCountersignStart,
         Task OrderManageAsync(EOrderStatus status, FlowAssignMode assignMode, bool isCountersignEnd, bool isCountersignStart,
-            string workflowId, DateTime? currentStepTime, string? CurrentStepName, CancellationToken cancellationToken);
+            string workflowId, DateTime? currentStepTime, string? CurrentStepName, DateTime expiredTime, CancellationToken cancellationToken);
     }
     }
 }
 }

+ 1 - 0
src/Hotline/Orders/IOrderRepository.cs

@@ -9,5 +9,6 @@ namespace Hotline.Orders
 {
 {
     public interface IOrderRepository : IRepositoryWorkflow<Order>
     public interface IOrderRepository : IRepositoryWorkflow<Order>
     {
     {
+        Task<string> AddOrderNavAsync(Order order, CancellationToken cancellationToken);
     }
     }
 }
 }

+ 1 - 1
src/Hotline/Orders/Order.cs

@@ -188,7 +188,7 @@ namespace Hotline.Orders
         public DateTime? ExpiredTime { get; set; }
         public DateTime? ExpiredTime { get; set; }
 
 
         /// <summary>
         /// <summary>
-        /// 过期状态
+        /// 过期状态 //todo 延迟消息更新此字段
         /// </summary>
         /// </summary>
         public EExpiredStatus ExpiredStatus { get; set; }
         public EExpiredStatus ExpiredStatus { get; set; }
 
 

+ 3 - 5
src/Hotline/Orders/OrderDomainService.cs

@@ -32,10 +32,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
         order.No = GenerateNewOrderNo();
         order.No = GenerateNewOrderNo();
         //order.ExpiredTime = Calculate();//todo 根据配置获取办理时长再计算过期时间
         //order.ExpiredTime = Calculate();//todo 根据配置获取办理时长再计算过期时间
 
 
-        await _orderRepository.AddNav(order)
-            .Include(d => d.OrderComplain)
-            .ExecuteCommandAsync();
-        return order.Id;
+        return await _orderRepository.AddOrderNavAsync(order, cancellationToken);
     }
     }
 
 
     /// <summary>
     /// <summary>
@@ -55,7 +52,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
     /// </summary>
     /// </summary>
     public async Task OrderManageAsync(EOrderStatus status, FlowAssignMode assignMode,
     public async Task OrderManageAsync(EOrderStatus status, FlowAssignMode assignMode,
         bool isCountersignEnd, bool isCountersignStart,
         bool isCountersignEnd, bool isCountersignStart,
-        string workflowId, DateTime? currentStepTime, string? CurrentStepName,
+        string workflowId, DateTime? currentStepTime, string? CurrentStepName, DateTime expiredTime,
         CancellationToken cancellationToken)
         CancellationToken cancellationToken)
     {
     {
         var order = await _orderRepository.GetAsync(d => d.WorkflowId == workflowId, cancellationToken);
         var order = await _orderRepository.GetAsync(d => d.WorkflowId == workflowId, cancellationToken);
@@ -78,6 +75,7 @@ public class OrderDomainService : IOrderDomainService, IScopeDependency
 
 
         order.CurrentStepTime = currentStepTime;
         order.CurrentStepTime = currentStepTime;
         order.CurrentStepName = CurrentStepName;
         order.CurrentStepName = CurrentStepName;
+        order.ExpiredTime = expiredTime;
         order.Status = status;
         order.Status = status;
 
 
         await _orderRepository.UpdateAsync(order, cancellationToken);
         await _orderRepository.UpdateAsync(order, cancellationToken);

+ 7 - 0
src/XF.Domain.Repository/IRepositorySqlSugar.cs

@@ -64,8 +64,15 @@ namespace XF.Domain.Repository
         UpdateNavTaskInit<TEntity, TEntity> UpdateNav(List<TEntity> entities);
         UpdateNavTaskInit<TEntity, TEntity> UpdateNav(List<TEntity> entities);
         UpdateNavTaskInit<TEntity, TEntity> UpdateNav(List<TEntity> entities, UpdateNavRootOptions options);
         UpdateNavTaskInit<TEntity, TEntity> UpdateNav(List<TEntity> entities, UpdateNavRootOptions options);
 
 
+        /// <summary>
+        /// 未实现统一为子表赋值creatorId, creatorOrg等字段,插入前需手动赋值
+        /// </summary>
         InsertNavTaskInit<TEntity, TEntity> AddNav(TEntity entity);
         InsertNavTaskInit<TEntity, TEntity> AddNav(TEntity entity);
         InsertNavTaskInit<TEntity, TEntity> AddNav(TEntity entity, InsertNavRootOptions options);
         InsertNavTaskInit<TEntity, TEntity> AddNav(TEntity entity, InsertNavRootOptions options);
+
+        /// <summary>
+        /// 未实现统一为子表赋值creatorId, creatorOrg等字段,插入前需手动赋值
+        /// </summary>
         InsertNavTaskInit<TEntity, TEntity> AddNav(List<TEntity> entities);
         InsertNavTaskInit<TEntity, TEntity> AddNav(List<TEntity> entities);
         InsertNavTaskInit<TEntity, TEntity> AddNav(List<TEntity> entities, InsertNavRootOptions options);
         InsertNavTaskInit<TEntity, TEntity> AddNav(List<TEntity> entities, InsertNavRootOptions options);