feat: #IBYEGX 业务系统增加送审功能

This commit is contained in:
wintel
2025-04-06 02:02:30 +08:00
parent c9c738d6e3
commit 2d7e63ebad
11 changed files with 96 additions and 59 deletions

View File

@@ -12,6 +12,7 @@
public const string ROLEMODULE = "RoleModule"; //角色模块关联KEY
public const string ROLEDATAPROPERTY = "RoleDataProperty"; //角色数据字段权限
public const string MODULEPRINTERPLAN = "ModulePrinterPlan"; //模块配置打印方案
public const string MODULE_FLOWSCHEME = "ModuleFlowScheme"; //模块挂载流程模板
public const string DBTYPE_SQLSERVER = "SqlServer"; //sql server
public const string DBTYPE_MYSQL = "MySql"; //mysql

View File

@@ -2,7 +2,7 @@
* @Author: yubaolee <yubaolee@163.com> | ahfu~ <954478625@qq.com>
* @Date: 2024-12-13 16:55:17
* @Description: 工作流实例表操作
* @LastEditTime: 2025-04-04 23:30:39
* @LastEditTime: 2025-04-05 15:22:30
* Copyright (c) 2024 by yubaolee | ahfu~ , All Rights Reserved.
*/
@@ -49,7 +49,7 @@ namespace OpenAuth.App
/// 创建一个实例
/// </summary>
/// <returns></returns>
public bool CreateInstance(AddFlowInstanceReq addFlowInstanceReq)
public string CreateInstance(AddFlowInstanceReq addFlowInstanceReq)
{
CheckNodeDesignate(addFlowInstanceReq);
FlowScheme scheme = null;
@@ -91,7 +91,6 @@ namespace OpenAuth.App
var user = _auth.GetCurrentUser();
#region
flowInstance.ActivityId = wfruntime.nextNodeId;
flowInstance.ActivityType = wfruntime.GetNextNodeType();
flowInstance.ActivityName = wfruntime.nextNode.name;
@@ -203,7 +202,7 @@ namespace OpenAuth.App
wfruntime.SaveTransitionHis();
SugarClient.Ado.CommitTran();
return true;
return flowInstance.Id;
}
/// <summary>

View File

@@ -119,5 +119,12 @@ namespace OpenAuth.App.Request
/// </summary>
[Description("知会的用户或角色ID列表")]
public List<string> NoticeIds { get; set; }
/// <summary>
/// 业务ID
/// 当流程实例与业务单据关联时记录关联的业务ID
/// </summary>
[Description("业务ID")]
public string BusinessId { get; set; }
}
}

View File

@@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Infrastructure;
using Microsoft.EntityFrameworkCore;
using OpenAuth.App.Interface;
using OpenAuth.App.Request;
@@ -40,6 +42,7 @@ namespace OpenAuth.App
UnitWork.Update<FlowScheme>(u => u.Id == flowScheme.Id, u => new FlowScheme
{
FrmUrlTemplate = flowScheme.FrmUrlTemplate,
SchemeContent = flowScheme.SchemeContent,
SchemeName = flowScheme.SchemeName,
ModifyDate = DateTime.Now,
@@ -51,6 +54,19 @@ namespace OpenAuth.App
});
}
/// <summary>
/// 加载所有流程表单为URL表单的流程模板
/// <para>
/// 目前业务系统只挂载URL表单后期优化挂载其他表单类型
/// </para>
/// </summary>
/// <returns></returns>
public List<FlowScheme> LoadUrlFormFlowScheme()
{
return Repository.Find(u => u.FrmType == Define.FORM_TYPE_URL).ToList();
}
public async Task<TableData> Load(QueryFlowSchemeListReq request)
{
var result = new TableData();

View File

@@ -92,6 +92,18 @@ namespace OpenAuth.App
return query;
}
/// <summary>
/// 获取模块的流程模板列表
/// </summary>
/// <param name="moduleId">模块id</param>
/// <returns></returns>
public IEnumerable<FlowScheme> LoadFlowSchemes(string moduleId)
{
var planids = _revelanceApp.Get(Define.MODULE_FLOWSCHEME, true, moduleId);
var query = UnitWork.Find<FlowScheme>(u => planids.Contains(u.Id));
return query;
}
#region

View File

@@ -84,6 +84,12 @@ namespace OpenAuth.Repository.Domain
/// </summary>
[Description("表单类型")]
public int FrmType { get; set; }
/// <summary>
/// URL表单模板
/// </summary>
[Description("URL表单模板")]
public string FrmUrlTemplate { get; set; }
/// <summary>
/// 模板权限类型0完全公开,1指定部门/人员
/// </summary>
@@ -104,6 +110,7 @@ namespace OpenAuth.Repository.Domain
/// </summary>
[Description("有效")]
public int Disabled { get; set; }
/// <summary>
/// 备注
/// </summary>

View File

@@ -68,12 +68,12 @@ namespace OpenAuth.WebApi.Controllers
/// <summary>创建一个新的流程实例</summary>
/// <remarks> www.cnblogs.com/yubaolee, 2019-03-06. </remarks>
[HttpPost]
public Response Add([FromBody]AddFlowInstanceReq obj)
public Response<string> Add([FromBody]AddFlowInstanceReq obj)
{
var result = new Response();
var result = new Response<string>();
try
{
_app.CreateInstance(obj);
result.Result = _app.CreateInstance(obj);
}
catch (Exception ex)
{
@@ -197,6 +197,7 @@ namespace OpenAuth.WebApi.Controllers
return await _app.Load(request);
}
[HttpPost]
public Response Delete([FromBody]string[] ids)
{

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Infrastructure;
using Microsoft.AspNetCore.Mvc;
@@ -83,6 +84,17 @@ namespace OpenAuth.WebApi.Controllers
return await _app.Load(request);
}
/// <summary>
/// 加载URL表单的流程模板
/// </summary>
[HttpGet]
public Response<List<FlowScheme>> LoadUrlFormFlowScheme()
{
var result = new Response<List<FlowScheme>>();
result.Result = _app.LoadUrlFormFlowScheme();
return result;
}
[HttpPost]
public Response Delete([FromBody]string[] ids)
{

View File

@@ -269,5 +269,25 @@ namespace OpenAuth.WebApi.Controllers
return result;
}
/// <summary>
/// 获取模块的流程模板列表
/// </summary>
[HttpGet]
public Response<List<FlowScheme>> LoadFlowSchemes(string moduleId)
{
var result = new Response<List<FlowScheme>>();
try
{
result.Result = _app.LoadFlowSchemes(moduleId).ToList();
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
}
}

View File

@@ -1,7 +1,7 @@
/*
* @Author: yubaolee <yubaolee@163.com> | ahfu~ <954478625@qq.com>
* @Date: 2023-08-12 10:48:24
* @LastEditTime: 2025-03-31 10:24:25
* @LastEditTime: 2025-04-06 00:45:14
* @Description:
* @
* @Copyright (c) 2023 by yubaolee | ahfu~ , All Rights Reserved.
@@ -104,7 +104,7 @@ module.exports = {
title: '工作流', // 必要的
sidebarDepth: 1, // 可选的, 默认值是 1
collapsable: false,
children: ['flowinstance', 'flowinstancestatus', 'thirdparty'],
children: ['flowinstance','flowinstanceconcept', 'flowinstancestatus', 'thirdparty'],
},
{
title: '前端开发', // 必要的

View File

@@ -1,59 +1,21 @@
# 概念
# 工作流介绍
## 会签
OpenAuth.Net工作流基于国际标准的BPMN2.0规范,并在此基础上做了一些扩展,以满足国内各种需求。系统工作流分为两个大类:
会签又称为联名签署,指需要得到两个或多个相关参与者的签名批准。目前支持两种模式:全部通过和至少一个通过,在【会签开始】节点进行配置。如下:
![20240417112438](http://img.openauth.net.cn/20240417112438.png)
1. 无业务关联流程,如请假、报销等。
全部通过:会签中的所有人员都通过,节点审批通过
2. 有业务关联流程,如采购、销售等
至少一个通过:会签中任何一个人通过,节点即审批通过。
这两种流程的差异有以下几点:
具体的会签人员或角色需要在【会签开始】和【会签结束】之间的节点配置如上图中的admin、test。
| 对比维度 | 无业务关联流程 | 有业务关联流程 |
|---------|--------------|--------------|
| 适用场景 | 请假、报销等日常办公 | 采购、销售、入库等业务操作 |
| 发起方式 | 流程中心 -> 我的流程 -> 新的申请 | 直接在业务模块中发起(如:仓储中心 -> 入库订单 -> 送审) |
| 表单类型 | 简单表单,适用拖拽表单设计器 | 复杂表单需要自定义表单或URL表单 |
| 审批结束处理 | 仅更新流程状态 | 需要修改业务数据状态 |
::: warning 特别注意
【会签开始】【会签结束】执行权限配置为所有人
会签不能在分支上加判断条件
:::
## 加签
有时需要在原有审批流程中**临时**增加一个或多个审批节点,这时就需要用到加签的功能。它通常有以下特性:
* 临时性:加签是在流程执行过程中临时增加的,并非流程设计时就已经固定的审批节点。
* 发起主体:加签通常由当前审批人发起,他们认为需要额外的人员进行审核或批准。
* 新增审批节点:加签会在当前审批节点之后,插入一个或多个新的审批节点,这些节点需要审批通过后,原流程才能继续执行。
* 不改变流程结构:加签不会改变原有流程的整体逻辑或终点,只是插入临时节点,完成后流程继续按原定路径执行。
#### 与会签的区别:
* 加签:在已有审批流程上临时添加审批人,原审批人仍有审批权。
* 会签:多个审批人同时审批,所有会签人均需审批,才能通过节点。
加签功能常用在遇到不明确的情况时,需要其他人协助处理。
![2024-10-22-15-24-08](http://img.openauth.net.cn/2024-10-22-15-24-08.png)
## 条件分支
有时需要根据提交数据不同(如报销金额、请假天数等)流程转向不同的审批者。这时需要在连线上面配置分支条件,如下图:
![20240417114340](http://img.openauth.net.cn/20240417114340.png)
## 知会
知会指的是在流程执行过程中,将审批结果通知给指定人员,但这些人员不参与实际审批或决策过程。知会的目的是确保相关人员知晓流程的进展或结果,但他们不会影响流程的走向。如下图:
![2024-10-22-15-42-49](http://img.openauth.net.cn/2024-10-22-15-42-49.png)
表中提到的表单类型差异可以查看:[表单设计](./form.md)
# 基本操作