Browse Source

Merge branch 'master' of http://110.188.24.182:10023/Fengwo/hotline

田爽 1 year ago
parent
commit
495c0f1f6c

+ 4 - 4
src/Hotline.Application/FlowEngine/WorkflowApplication.cs

@@ -673,7 +673,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                     .ToListAsync(cancellationToken);
                 break;
             case EDynamicPolicy.OrgDownCenterTop:
-                if (_sessionContext.RequiredOrgId.IsBelongCenter())
+                if (_sessionContext.OrgIsCenter)
                 {
                     items = await _organizeRepository.Queryable()
                         .Where(d => !d.IsCenter && d.Level == orgLevel)
@@ -769,7 +769,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
         var parentStep = steps.FirstOrDefault(d => d.Id == step.PrevStepId);
         if (parentStep is null)
             throw new UserFriendlyException("未查找到会签上级节点");
-        var text = parentStep.HandlerOrgId.IsBelongCenter()
+        var text = parentStep.HandlerOrgIsCenter.Value
             ? "中心汇总"
             : $"{parentStep.HandlerOrgId.CalcOrgLevel().ToChinese()}级部门汇总";
         return new NextStepOption
@@ -798,7 +798,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                 if (orgLevel <= 0) orgLevel = 1;
                 break;
             case EDynamicPolicy.OrgDownCenterTop:
-                orgLevel = _sessionContext.RequiredOrgId.IsBelongCenter()
+                orgLevel = _sessionContext.OrgIsCenter
                     ? 1
                     : _sessionContext.OrgLevel + 1;
                 break;
@@ -851,7 +851,7 @@ public class WorkflowApplication : IWorkflowApplication, IScopeDependency
                     .ToListAsync(cancellationToken);
                 break;
             case EDynamicPolicy.OrgDownCenterTop:
-                if (_sessionContext.RequiredOrgId.IsBelongCenter())
+                if (_sessionContext.OrgIsCenter)
                 {
                     orgLevel = 1;
                     items = await _organizeRepository.Queryable()

+ 1 - 1
src/Hotline.Application/Identity/IdentityAppService.cs

@@ -82,7 +82,7 @@ public class IdentityAppService : IIdentityAppService, IScopeDependency
             new(JwtClaimTypes.Scope, jwtOptions.Scope),
             new(AppClaimTypes.UserPasswordChanged, account.PasswordChanged.ToString()),
             new(AppClaimTypes.DepartmentId, user.OrgId ?? string.Empty),
-            new(AppClaimTypes.DepartmentCode, user.OrgId ?? string.Empty),
+            new(AppClaimTypes.DepartmentIsCenter, user.Organization.IsCenter.ToString()),
             new(AppClaimTypes.DepartmentName, user.Organization?.Name ?? string.Empty),
             new(AppClaimTypes.DepartmentAreaCode, user.Organization?.AreaCode ?? string.Empty),
             new(AppClaimTypes.DepartmentAreaName, user.Organization?.AreaName ?? string.Empty),

+ 4 - 1
src/Hotline/FlowEngine/Workflows/StepBasicEntity.cs

@@ -77,6 +77,8 @@ public abstract class StepBasicEntity : CreationEntity
     /// </summary>
     public string? HandlerOrgId { get; set; }
 
+    public bool? HandlerOrgIsCenter { get; set; }
+
     /// <summary>
     /// 办理人部门名称
     /// </summary>
@@ -171,7 +173,7 @@ public abstract class StepBasicEntity : CreationEntity
         string userId, string? userName,
         string orgId, string? orgName,
         string? orgAreaCode, string? orgAreaName,
-        string? opinion)
+        bool orgIsCenter, string? opinion)
     {
         if (!HasAccepted())
             Accept(userId, userName, orgId, orgName, orgAreaCode, orgAreaName);
@@ -182,6 +184,7 @@ public abstract class StepBasicEntity : CreationEntity
         HandlerOrgName = orgName;
         HandlerOrgAreaCode = orgAreaCode;
         HandlerOrgAreaName = orgAreaName;
+        HandlerOrgIsCenter = orgIsCenter;
         HandleTime = DateTime.Now;
 
         if (!string.IsNullOrEmpty(opinion))

+ 2 - 2
src/Hotline/FlowEngine/Workflows/WorkflowDomainService.cs

@@ -915,7 +915,7 @@ namespace Hotline.FlowEngine.Workflows
             step.Handle(_sessionContext.RequiredUserId, _sessionContext.UserName,
                 _sessionContext.RequiredOrgId, _sessionContext.OrgName,
                 _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
-                nextStepCode);
+                _sessionContext.OrgIsCenter, nextStepCode);
         }
 
 
@@ -1098,7 +1098,7 @@ namespace Hotline.FlowEngine.Workflows
                 _sessionContext.RequiredUserId, _sessionContext.UserName,
                 _sessionContext.RequiredOrgId, _sessionContext.OrgName,
                 _sessionContext.OrgAreaCode, _sessionContext.OrgAreaName,
-                opinion);
+                _sessionContext.OrgIsCenter, opinion);
         }
 
         private async Task RecallTraceAsync(string workflowId, string opinion, CancellationToken cancellationToken)

+ 2 - 2
src/Hotline/FlowEngine/Workflows/WorkflowStep.cs

@@ -207,9 +207,9 @@ public class WorkflowStep : StepBasicEntity
         string userId, string? userName,
         string orgId, string? orgName,
         string? orgAreaCode, string? orgAreaName,
-        string nextStepCode)
+        bool orgIsCenter, string nextStepCode)
     {
-        base.Handle(userId, userName, orgId, orgName, orgAreaCode, orgAreaName, null);
+        base.Handle(userId, userName, orgId, orgName, orgAreaCode, orgAreaName, orgIsCenter, null);
         Status = EWorkflowStepStatus.Handled;
 
         if (StepType is not EStepType.End)

+ 18 - 18
src/Hotline/Settings/SystemOrganize.cs

@@ -92,20 +92,20 @@ public static class OrgExtensions
         orgLevel == CalcOrgLevel(orgCode);
 
     /// <summary>
-    /// 根据orgCode获取该部门所属对应级别的上级部门code
+    /// 根据orgCode获取该部门所属对应级别的上级部门code(中心直属下级部门无效)
     /// </summary>
-    /// <param name="orgCode"></param>
+    /// <param name="orgId"></param>
     /// <param name="orgLevel">默认获取一级部门</param>
     /// <returns></returns>
-    public static string GetHigherOrgCode(this string orgCode, int orgLevel = 1)
+    public static string GetHigherOrgCode(this string orgId, int orgLevel = 1)
     {
-        if (string.IsNullOrEmpty(orgCode))
+        if (string.IsNullOrEmpty(orgId))
             throw UserFriendlyException.SameMessage("无效部门编码");
-        ////中心算做一级部门
-        //if (orgLevel == 1 && orgCode == OrgSeedData.CenterCode) return orgCode;
+        //中心算做一级部门
+        if (orgLevel == 1 && orgId.IsCenter()) return orgId;
 
-        // return orgCode.Substring(0, 3 * (orgLevel + 1));
-        return orgCode.Substring(0, 3 * orgLevel);
+        return orgId.Substring(0, 3 * (orgLevel + 1));
+        //return orgId.Substring(0, 3 * orgLevel);
     }
 
     /// <summary>
@@ -118,18 +118,18 @@ public static class OrgExtensions
         return orgCode.Substring(orgCode.Length - 3, 3);
     }
 
-    public static bool IsCenter(this string orgCode)
+    public static bool IsCenter(this string orgId)
     {
-        if (string.IsNullOrEmpty(orgCode))
+        if (string.IsNullOrEmpty(orgId))
             throw UserFriendlyException.SameMessage("无效部门编码");
-        return orgCode == OrgSeedData.CenterId;
+        return orgId == OrgSeedData.CenterId;
     }
 
-    public static bool IsBelongCenter(this string orgCode)
-    {
-        if (string.IsNullOrEmpty(orgCode))
-            throw UserFriendlyException.SameMessage("无效部门编码");
-        var upperOrg = orgCode.GetHigherOrgCode();
-        return IsCenter(upperOrg);
-    }
+    //public static bool IsBelongCenter(this string orgCode)
+    //{
+    //    if (string.IsNullOrEmpty(orgCode))
+    //        throw UserFriendlyException.SameMessage("无效部门编码");
+    //    var upperOrg = orgCode.GetHigherOrgCode();
+    //    return IsCenter(upperOrg);
+    //}
 }

+ 1 - 1
src/XF.Domain/Authentications/AppClaimTypes.cs

@@ -5,7 +5,7 @@
         public const string UserDisplayName = "user_display_name";
         public const string UserPasswordChanged = "user_password_changed";
         public const string DepartmentId = "department_id";
-        public const string DepartmentCode = "department_code";
+        public const string DepartmentIsCenter = "department_is_center";
         public const string DepartmentName = "department_name";
         public const string DepartmentLevel = "department_level";
         public const string DepartmentAreaCode = "department_areacode";

+ 10 - 2
src/XF.Domain/Authentications/DefaultSessionContext.cs

@@ -29,6 +29,7 @@ namespace XF.Domain.Authentications
             OrgLevel = user.FindIntValue(AppClaimTypes.DepartmentLevel);
             OrgAreaCode = user.FindFirstValue(AppClaimTypes.DepartmentAreaCode);
             OrgAreaName = user.FindFirstValue(AppClaimTypes.DepartmentAreaName);
+            OrgIsCenter = user.FindBoolValue(AppClaimTypes.DepartmentIsCenter);
             AreaId = user.FindFirstValue(AppClaimTypes.AreaId);
             ClientId = user.FindFirstValue(JwtClaimTypes.ClientId);
             StaffNo = user.FindFirstValue(AppClaimTypes.StaffNo);
@@ -60,6 +61,7 @@ namespace XF.Domain.Authentications
 
         public int OrgLevel { get; set; }
         public string? OrgAreaCode { get; set; }
+        public bool OrgIsCenter { get; set; }
 
         /// <summary>
         /// 部门行政区划名称
@@ -67,9 +69,9 @@ namespace XF.Domain.Authentications
         public string? OrgAreaName { get; set; }
 
         public string? AreaId { get; set; }
-        
+
         public string RequiredOrgId => OrgId ?? throw new ArgumentNullException();
-        
+
         public string RequiredOrgCode => OrgCode ?? throw new ArgumentNullException();
         public string? ClientId { get; }
 
@@ -86,5 +88,11 @@ namespace XF.Domain.Authentications
             var value = claims.FindFirstValue(claimType);
             return int.TryParse(value, out int result) ? result : default;
         }
+
+        public static bool FindBoolValue(this ClaimsPrincipal claims, string claimType)
+        {
+            var value = claims.FindFirstValue(claimType);
+            return bool.TryParse(value, out bool result) ? result : default;
+        }
     }
 }

+ 2 - 4
src/XF.Domain/Authentications/ISessionContext.cs

@@ -25,11 +25,12 @@ public interface ISessionContext
     string[] Roles { get; }
 
     string? OrgId { get; set; }
+    string RequiredOrgId { get; }
 
-    // string? OrgCode { get; set; }
     string? OrgName { get; set; }
     int OrgLevel { get; set; }
     string? OrgAreaCode { get; set; }
+    bool OrgIsCenter { get; set; }
 
     /// <summary>
     /// 部门行政区划名称
@@ -37,9 +38,6 @@ public interface ISessionContext
     string? OrgAreaName { get; set; }
 
     string? AreaId { get; }
-    
-    string RequiredOrgId { get; }
-    // string RequiredOrgCode { get; }
 
     string? ClientId { get; }