fix: 修复会签节点审批

This commit is contained in:
yubaolee
2025-04-18 17:33:36 +08:00
parent 3eb94d7f21
commit d5249d8cb3
2 changed files with 74 additions and 58 deletions

View File

@@ -40,7 +40,7 @@ namespace OpenAuth.App.Flow
flowInstanceId = instance.Id; flowInstanceId = instance.Id;
//网关开始节点和流程结束节点没有下一步 //网关开始节点和流程结束节点没有下一步
if (GetCurrentNodeType() == Define.NODE_TYPE_FORK if (GetCurrentNodeType() == Define.NODE_TYPE_FORK
|| GetCurrentNodeType() == Define.NODE_TYPE_END) || GetCurrentNodeType() == Define.NODE_TYPE_END)
{ {
nextNodeId = "-1"; nextNodeId = "-1";
@@ -118,9 +118,9 @@ namespace OpenAuth.App.Flow
{ {
throw new Exception("无法寻找到下一个节点"); throw new Exception("无法寻找到下一个节点");
} }
//URL表单暂时不支持URL表单 //URL表单暂时不支持URL表单
if(flowInstance.FrmType == Define.FORM_TYPE_URL) return lines[0].to; if (flowInstance.FrmType == Define.FORM_TYPE_URL) return lines[0].to;
if (FrmData == "" || FrmData == "{}") return lines[0].to; if (FrmData == "" || FrmData == "{}") return lines[0].to;
@@ -141,11 +141,11 @@ namespace OpenAuth.App.Flow
#endregion #endregion
#region #region
/// <summary> /// <summary>
/// 判断流程是否完成 /// 判断流程是否完成
/// </summary> /// </summary>
public bool IsFinish() public bool IsFinish()
{ {
return GetNextNodeType() == Define.NODE_TYPE_END; return GetNextNodeType() == Define.NODE_TYPE_END;
} }
@@ -379,7 +379,7 @@ namespace OpenAuth.App.Flow
} }
flowInstance.SchemeContent = JsonHelper.Instance.Serialize(ToSchemeObj()); flowInstance.SchemeContent = JsonHelper.Instance.Serialize(ToSchemeObj());
var sugarClient = AutofacContainerModule.GetService<ISqlSugarClient>(); var sugarClient = AutofacContainerModule.GetService<ISqlSugarClient>();
sugarClient.Updateable(flowInstance).ExecuteCommand(); sugarClient.Updateable(flowInstance).ExecuteCommand();
@@ -398,7 +398,7 @@ namespace OpenAuth.App.Flow
{ {
item.Value.setInfo = null; item.Value.setInfo = null;
} }
flowInstance.IsFinish = FlowInstanceStatus.Draft; flowInstance.IsFinish = FlowInstanceStatus.Draft;
flowInstance.PreviousId = flowInstance.ActivityId; flowInstance.PreviousId = flowInstance.ActivityId;
flowInstance.ActivityId = startNodeId; flowInstance.ActivityId = startNodeId;
@@ -409,9 +409,9 @@ namespace OpenAuth.App.Flow
var sugarClient = AutofacContainerModule.GetService<ISqlSugarClient>(); var sugarClient = AutofacContainerModule.GetService<ISqlSugarClient>();
sugarClient.Updateable(flowInstance).ExecuteCommand(); sugarClient.Updateable(flowInstance).ExecuteCommand();
SaveOperationHis($"【撤回】备注:{request.Description}"); SaveOperationHis($"【撤回】备注:{request.Description}");
sugarClient.Ado.CommitTran(); sugarClient.Ado.CommitTran();
} }
@@ -553,14 +553,14 @@ namespace OpenAuth.App.Flow
/// </summary> /// </summary>
public void UndoVerification() public void UndoVerification()
{ {
// 已结束的流程不能撤销 // 已结束的流程不能撤销
if (flowInstance.IsFinish == FlowInstanceStatus.Finished if (flowInstance.IsFinish == FlowInstanceStatus.Finished
|| flowInstance.IsFinish == FlowInstanceStatus.Rejected) || flowInstance.IsFinish == FlowInstanceStatus.Rejected)
{ {
throw new Exception("流程已结束,不能撤销"); throw new Exception("流程已结束,不能撤销");
} }
if(Nodes[previousId].type == Define.NODE_TYPE_START) if (Nodes[previousId].type == Define.NODE_TYPE_START)
{ {
throw new Exception("没有任何审批,不能撤销!你可以删除或召回这个流程"); throw new Exception("没有任何审批,不能撤销!你可以删除或召回这个流程");
} }
@@ -572,7 +572,7 @@ namespace OpenAuth.App.Flow
//向前查找ActivityId的前一个结点即连线指向ActivityId的节点 //向前查找ActivityId的前一个结点即连线指向ActivityId的节点
flowInstance.PreviousId = GetPreNode().id; flowInstance.PreviousId = GetPreNode().id;
flowInstance.MakerList = GetNodeMarkers(Nodes[currentNodeId]); flowInstance.MakerList = GetNodeMarkers(Nodes[currentNodeId]);
// 清除当前节点的审批状态 // 清除当前节点的审批状态
currentNode.setInfo.Taged = null; currentNode.setInfo.Taged = null;
currentNode.setInfo.UserId = ""; currentNode.setInfo.UserId = "";
@@ -710,56 +710,66 @@ namespace OpenAuth.App.Flow
/// <returns></returns> /// <returns></returns>
private string GetMultiInstanceNodeMakers(string nodeId) private string GetMultiInstanceNodeMakers(string nodeId)
{ {
if(GetNodeType(nodeId) != Define.NODE_TYPE_MULTI_INSTANCE) if (GetNodeType(nodeId) != Define.NODE_TYPE_MULTI_INSTANCE)
{ {
throw new Exception("当前节点不是会签节点,请联系管理员"); throw new Exception("当前节点不是会签节点,请联系管理员");
} }
var node = Nodes[nodeId]; var node = Nodes[nodeId];
string[] makerList = Array.Empty<string>(); // 执行人列表 string[] makerList = Array.Empty<string>(); // 执行人列表
var sugarClient = AutofacContainerModule.GetService<ISqlSugarClient>(); var sugarClient = AutofacContainerModule.GetService<ISqlSugarClient>();
if (node.setInfo.NodeDesignate == Define.SPECIAL_USER) //指定成员 if (node.setInfo.NodeDesignate == Define.SPECIAL_USER) //指定用户
{ {
makerList = node.setInfo.NodeDesignateData.datas; makerList = node.setInfo.NodeDesignateData.datas;
} }
else if (node.setInfo.NodeDesignate == Define.SPECIAL_ROLE) //指定角色 else if (node.setInfo.NodeDesignate == Define.SPECIAL_ROLE) //指定角色
{ {
var revelanceApp = AutofacContainerModule.GetService<RevelanceManagerApp>(); var revelanceApp = AutofacContainerModule.GetService<RevelanceManagerApp>();
makerList = revelanceApp.Get(Define.USERROLE, false, node.setInfo.NodeDesignateData.datas).ToArray(); makerList = revelanceApp.Get(Define.USERROLE, false, node.setInfo.NodeDesignateData.datas).ToArray();
} }
else if (node.setInfo.NodeDesignate == Define.SPECIAL_SQL) //指定SQL else if (node.setInfo.NodeDesignate == Define.SPECIAL_SQL) //指定SQL
{ {
//如果是指定SQL则需要执行SQL并返回结果 //如果是指定SQL则需要执行SQL并返回结果
var sql = ReplaceSql(node.setInfo.NodeDesignateData.datas[0]); var sql = ReplaceSql(node.setInfo.NodeDesignateData.datas[0]);
makerList = sugarClient.Ado.SqlQuery<string>(sql).ToArray();
}
else
{
throw new Exception("会签节点,不支持该类型,请重新设计流程模板");
}
//写入到FlowApprover makerList = sugarClient.Ado.SqlQuery<string>(sql).ToArray();
var users = sugarClient.Queryable<SysUser>().Where(u => makerList.Contains(u.Id)).ToList(); }
int order = 1; else
foreach (var user in users) {
throw new Exception("会签节点,不支持该类型,请重新设计流程模板");
}
//将所有的会签人员写入到FlowApprover后续审批的时候按加签的逻辑处理
var users = sugarClient.Queryable<SysUser>()
.Where(u => makerList.Contains(u.Id))
.ToList()
.OrderBy(u => Array.IndexOf(makerList, u.Id))
.ToList();
int order = 1;
foreach (var user in users)
{
var flowApprover = new FlowApprover
{ {
var flowApprover = new FlowApprover InstanceId = flowInstanceId,
{ ActivityId = nodeId,
InstanceId = flowInstanceId, ApproverId = user.Id,
ActivityId = nodeId, ApproverName = user.Name,
ApproverId = user.Id, OrderNo = order++,
ApproverName = user.Name, ApproveType = node.setInfo.NodeConfluenceType,
OrderNo = order++, ReturnToSignNode = false,
ApproveType = node.setInfo.NodeConfluenceType, Reason = "",
ReturnToSignNode = false, CreateDate = DateTime.Now
Reason = "", };
CreateDate = DateTime.Now sugarClient.Insertable(flowApprover).ExecuteCommand();
}; }
sugarClient.Insertable(flowApprover).ExecuteCommand(); //如果是顺序执行,取第一个人
} if (node.setInfo.NodeConfluenceType == Define.APPROVE_TYPE_SEQUENTIAL)
return GenericHelpers.ArrayToString(makerList, ""); {
return makerList[0];
}
//否则并行且/并行或都是返回所有加签人
return GenericHelpers.ArrayToString(makerList, "");
} }
/// <summary> /// <summary>
@@ -822,7 +832,8 @@ namespace OpenAuth.App.Flow
/// </summary> /// </summary>
/// <param name="sql"></param> /// <param name="sql"></param>
/// <returns></returns> /// <returns></returns>
private string ReplaceSql(string sql){ private string ReplaceSql(string sql)
{
var loginUser = AutofacContainerModule.GetService<IAuth>().GetCurrentUser(); var loginUser = AutofacContainerModule.GetService<IAuth>().GetCurrentUser();
var res = sql.Replace(Define.DATAPRIVILEGE_LOGINUSER, $"'{loginUser.User.Id}'"); var res = sql.Replace(Define.DATAPRIVILEGE_LOGINUSER, $"'{loginUser.User.Id}'");
res = res.Replace(Define.DATAPRIVILEGE_LOGINROLE, string.Join(',', loginUser.Roles.Select(u => $"'{u.Id}'"))); res = res.Replace(Define.DATAPRIVILEGE_LOGINROLE, string.Join(',', loginUser.Roles.Select(u => $"'{u.Id}'")));
@@ -942,7 +953,7 @@ namespace OpenAuth.App.Flow
/// 上一个节点 /// 上一个节点
/// </summary> /// </summary>
private string previousId { get; set; } private string previousId { get; set; }
/// <summary> /// <summary>
/// 实例节点集合 /// 实例节点集合
/// </summary> /// </summary>
@@ -962,7 +973,7 @@ namespace OpenAuth.App.Flow
/// 到达节点的线段集合 /// 到达节点的线段集合
/// </summary> /// </summary>
private Dictionary<string, List<FlowLine>> ToNodeLines { get; set; } private Dictionary<string, List<FlowLine>> ToNodeLines { get; set; }
/// <summary> /// <summary>
/// 表单数据 /// 表单数据
/// </summary> /// </summary>

View File

@@ -2,7 +2,7 @@
* @Author: yubaolee <yubaolee@163.com> | ahfu~ <954478625@qq.com> * @Author: yubaolee <yubaolee@163.com> | ahfu~ <954478625@qq.com>
* @Date: 2024-12-13 16:55:17 * @Date: 2024-12-13 16:55:17
* @Description: 工作流实例表操作 * @Description: 工作流实例表操作
* @LastEditTime: 2025-04-17 21:37:03 * @LastEditTime: 2025-04-18 17:30:07
* Copyright (c) 2024 by yubaolee | ahfu~ , All Rights Reserved. * Copyright (c) 2024 by yubaolee | ahfu~ , All Rights Reserved.
*/ */
@@ -460,6 +460,11 @@ namespace OpenAuth.App
if (!isfinish) //如果没有完成,不能到下一步 if (!isfinish) //如果没有完成,不能到下一步
{ {
canNext = false; canNext = false;
flowInstance.MakerList = GenericHelpers.ArrayToString(_flowApproverApp.GetApproverIds(new QueryApproverReq()
{
FlowInstanceId = flowInstance.Id,
ActivityId = flowInstance.ActivityId
}), "");
} }
else if (approverInfo.ReturnToSignNode == null || !approverInfo.ReturnToSignNode.Value) else if (approverInfo.ReturnToSignNode == null || !approverInfo.ReturnToSignNode.Value)
{ {