From 55f3ee5b0ab31ff5733e4a97144ea68474573573 Mon Sep 17 00:00:00 2001 From: yubaolee Date: Sun, 29 Sep 2024 21:34:42 +0800 Subject: [PATCH] =?UTF-8?q?fix=20#I9J6WS=20=E5=8A=A0=E7=AD=BE=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E5=A2=9E=E5=8A=A0=E5=8A=A0=E7=AD=BE=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E5=AE=A1=E6=89=B9=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FlowApproverApp/FlowApproverApp.cs | 5 +++ OpenAuth.App/FlowInstance/FlowInstanceApp.cs | 38 +++++++++++++------ OpenAuth.Repository/Domain/FlowApprover.cs | 7 ++++ 数据库脚本/MySql.sql | 1 + 数据库脚本/Oracle.sql | 2 + 数据库脚本/SqlServer.sql | 2 + 数据库脚本/postgreSql.sql | 2 + 7 files changed, 46 insertions(+), 11 deletions(-) diff --git a/OpenAuth.App/FlowApproverApp/FlowApproverApp.cs b/OpenAuth.App/FlowApproverApp/FlowApproverApp.cs index 01b2fe77..d830f118 100644 --- a/OpenAuth.App/FlowApproverApp/FlowApproverApp.cs +++ b/OpenAuth.App/FlowApproverApp/FlowApproverApp.cs @@ -87,6 +87,11 @@ namespace OpenAuth.App return approvers.Select(u => u.ApproverId).ToArray(); } + /// + /// 获取当前可以审批的加签人列表 + /// 如果是顺序执行,取第一个人 + /// 否则并行且/并行或都是返回所有加签人 + /// public FlowApprover[] GetApprovers(QueryApproverReq req) { var query= Repository.AsQueryable() diff --git a/OpenAuth.App/FlowInstance/FlowInstanceApp.cs b/OpenAuth.App/FlowInstance/FlowInstanceApp.cs index dcc535dc..66b32a4e 100644 --- a/OpenAuth.App/FlowInstance/FlowInstanceApp.cs +++ b/OpenAuth.App/FlowInstance/FlowInstanceApp.cs @@ -1,24 +1,19 @@ - using Infrastructure; using OpenAuth.App.Flow; using OpenAuth.App.Interface; using OpenAuth.App.Request; using OpenAuth.App.Response; using OpenAuth.Repository.Domain; -using OpenAuth.Repository.Interface; using System; using System.Collections.Generic; using System.Linq; -using System.Linq.Expressions; using System.Net.Http; using System.Threading.Tasks; using Castle.Core.Internal; using Infrastructure.Const; using Infrastructure.Extensions; using Infrastructure.Helpers; -using Microsoft.EntityFrameworkCore; using Newtonsoft.Json.Linq; -using OpenAuth.Repository; using SqlSugar; using Yitter.IdGenerator; @@ -39,6 +34,7 @@ namespace OpenAuth.App private UserManagerApp _userManagerApp; private OrgManagerApp _orgManagerApp; private FlowApproverApp _flowApproverApp; + private RevelanceManagerApp _revelanceManagerApp; #region 流程处理API @@ -429,23 +425,41 @@ namespace OpenAuth.App bool isfinish = _flowApproverApp.Verify(new VerifyApproverReq() { Id = approverInfo.Id, - Status = (int)TagState.Ok, + Status = (int)TagState.Ok, VerifyComment = tag.Description }); if (!isfinish) //如果没有完成,不能到下一步 { canNext = false; } + else if (approverInfo.ReturnToSignNode == null || !approverInfo.ReturnToSignNode.Value) + { + //加签完成后,不需要返回原节点,则直接审批加签的节点 + tag.UserId = approverInfo.CreateUserId; + tag.UserName = approverInfo.CreateUserName; + //把当前审批人变成加签人,从而可以自动审批 + wfruntime.MakeTagNode(wfruntime.currentNodeId, tag); + } } - + if (wfruntime.currentNode.setInfo.NodeDesignate == Setinfo.RUNTIME_MANY_PARENTS) { - var roles = _auth.GetCurrentUser().Roles; + List roles; + if (user.Id != tag.UserId) + { + //最后一个执行加签的用户,tag.UserId就是加签人id,需要找他的角色 + roles = _revelanceManagerApp.Get(Define.USERROLE, true, tag.UserId); + } + else + { + roles = _auth.GetCurrentUser().Roles.Select(u => u.Id).ToList(); + } + //如果是连续多级直属上级且还没到指定的角色,只改变执行人,不到下一个节点 - if (!wfruntime.currentNode.setInfo.NodeDesignateData.roles.Intersect(roles.Select(u => u.Id)).Any()) + if (!wfruntime.currentNode.setInfo.NodeDesignateData.roles.Intersect(roles).Any()) { canNext = false; - var parentId = _userManagerApp.GetParent(user.Id); + var parentId = _userManagerApp.GetParent(tag.UserId); flowInstance.MakerList = parentId; } } @@ -1036,7 +1050,8 @@ namespace OpenAuth.App public FlowInstanceApp(ISqlSugarClient client, IAuth auth, RevelanceManagerApp revelanceApp, FlowSchemeApp flowSchemeApp, FormApp formApp, IHttpClientFactory httpClientFactory, SysMessageApp messageApp, UserManagerApp userManagerApp, OrgManagerApp orgManagerApp, - IServiceProvider serviceProvider, FlowApproverApp flowApproverApp) : base(client, auth) + IServiceProvider serviceProvider, FlowApproverApp flowApproverApp, + RevelanceManagerApp revelanceManagerApp) : base(client, auth) { _revelanceApp = revelanceApp; _flowSchemeApp = flowSchemeApp; @@ -1047,6 +1062,7 @@ namespace OpenAuth.App _orgManagerApp = orgManagerApp; _serviceProvider = serviceProvider; _flowApproverApp = flowApproverApp; + _revelanceManagerApp = revelanceManagerApp; } } } \ No newline at end of file diff --git a/OpenAuth.Repository/Domain/FlowApprover.cs b/OpenAuth.Repository/Domain/FlowApprover.cs index 03af5eca..41555bc8 100644 --- a/OpenAuth.Repository/Domain/FlowApprover.cs +++ b/OpenAuth.Repository/Domain/FlowApprover.cs @@ -116,5 +116,12 @@ namespace OpenAuth.Repository.Domain /// [Description("加签人Id")] public string CreateUserId { get; set; } + + /// + ///是否回到加签节点 + /// 如果不需要,则加签完成后自动审批完成,否则还需要当前节点审批 + /// + [Description("是否回到加签节点")] + public bool? ReturnToSignNode { get; set; } } } \ No newline at end of file diff --git a/数据库脚本/MySql.sql b/数据库脚本/MySql.sql index 1fb636ec..224b3864 100644 --- a/数据库脚本/MySql.sql +++ b/数据库脚本/MySql.sql @@ -386,6 +386,7 @@ CREATE TABLE flowapprover( `ParentId` VARCHAR(50) COMMENT '父节点ID,应对多次加签' , `ParentName` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '父节点名称,应对多次加签结构' , `Name` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '加签节点名称,应对多次加签结构' , + `ReturnToSignNode` tinyint(4) COMMENT '是否回到加签节点', PRIMARY KEY (Id) ) COMMENT = '工作流加签'; diff --git a/数据库脚本/Oracle.sql b/数据库脚本/Oracle.sql index ce2c811a..5b135073 100644 --- a/数据库脚本/Oracle.sql +++ b/数据库脚本/Oracle.sql @@ -62,6 +62,7 @@ CREATE TABLE FlowApprover( ParentId VARCHAR2(50), ParentName VARCHAR2(100), Name VARCHAR2(100), + ReturnToSignNode NUMBER(4,0) PRIMARY KEY (Id) ); @@ -84,6 +85,7 @@ COMMENT ON COLUMN FlowApprover.CascadeId IS '层级ID,应对多次加签'; COMMENT ON COLUMN FlowApprover.ParentId IS '父节点ID,应对多次加签'; COMMENT ON COLUMN FlowApprover.ParentName IS '父节点名称,应对多次加签结构'; COMMENT ON COLUMN FlowApprover.Name IS '加签节点名称,应对多次加签结构'; +COMMENT ON COLUMN FlowApprover.ReturnToSignNode IS '是否回到加签节点'; diff --git a/数据库脚本/SqlServer.sql b/数据库脚本/SqlServer.sql index 7594c666..60b379f2 100644 --- a/数据库脚本/SqlServer.sql +++ b/数据库脚本/SqlServer.sql @@ -117,6 +117,7 @@ CREATE TABLE [dbo].[FlowApprover]( CascadeId VARCHAR(100) NOT NULL, ParentId VARCHAR(50), ParentName VARCHAR(100), + ReturnToSignNode bit DEFAULT 1 NOT NULL, Name VARCHAR(100), PRIMARY KEY (Id) ); @@ -140,6 +141,7 @@ EXEC sp_addextendedproperty 'MS_Description', '层级ID,应对多次加签', ' EXEC sp_addextendedproperty 'MS_Description', '父节点ID,应对多次加签', 'SCHEMA', dbo, 'table', FlowApprover, 'column', ParentId; EXEC sp_addextendedproperty 'MS_Description', '父节点名称,应对多次加签结构', 'SCHEMA', dbo, 'table', FlowApprover, 'column', ParentName; EXEC sp_addextendedproperty 'MS_Description', '加签节点名称,应对多次加签结构', 'SCHEMA', dbo, 'table', FlowApprover, 'column', Name; +EXEC sp_addextendedproperty 'MS_Description', '是否回到加签节点', 'SCHEMA', dbo, 'table', FlowApprover, 'column', ReturnToSignNode; diff --git a/数据库脚本/postgreSql.sql b/数据库脚本/postgreSql.sql index 53cc8521..ea44d5e4 100644 --- a/数据库脚本/postgreSql.sql +++ b/数据库脚本/postgreSql.sql @@ -51,6 +51,7 @@ CREATE TABLE FlowApprover( ParentId VARCHAR(50), ParentName VARCHAR(100), Name VARCHAR(100), + ReturnToSignNode int2, PRIMARY KEY (Id) ); @@ -73,6 +74,7 @@ COMMENT ON COLUMN FlowApprover.CascadeId IS '层级ID,应对多次加签'; COMMENT ON COLUMN FlowApprover.ParentId IS '父节点ID,应对多次加签'; COMMENT ON COLUMN FlowApprover.ParentName IS '父节点名称,应对多次加签结构'; COMMENT ON COLUMN FlowApprover.Name IS '加签节点名称,应对多次加签结构'; +COMMENT ON COLUMN FlowApprover.ReturnToSignNode IS '是否回到加签节点'; -- ----------------------------