今天有空更新博客才发现快一年没有写博客了,不得不感叹时间过得真快。过去的一年确实也挺忙的,在此祝各位博友们新的一年工作顺利。权限模型在过去一年进行了不少的升级,主要集成了公文流转系统、多家手机短信接口的集成、CMS动态路由的实现、以及Hangfire消息队列与任务调度组件的集成等,本章主要对公文流转系统进行总体的介绍,感兴趣的可进一步交流或访问http://pjdemo.yellbuy.com。
公文流转系统是国内企事业单位的普遍需求,具有很强的中国特色。通常其核心需求如下:
- 具备公文流程审批,流程支持多人并批(有时需要考虑审批人的权重)、打回当前审批人之前任意人(包括起草人)
- 有权限的审批人能在审批过程中能前插、后插审批人进行审批,审批人可提前浏览本人将审批的公文。
- 每个公文流程可设置传阅人,传阅人只能看流程的公文信息,不参与审批
- 公司(子公司)可分别创建不同的审批流程,根据公司(子公司)、公文类别来确定流程
- 公文起草和审批时能上传多个附件
- 菜单中有起草公文、已发公文、送阅公文、待办公文、已批公文、公文一览等。
权限模型以组织机构为中心,更加符合国内实际情况,也非常适合公文流转系统的开发。在权限模型框架的基础之上,能对模块、按钮、数据权限进行全方位的控制,可对各个组织不同类型的权限进行授权和管理。使用权限模型,就需要根据权限模型的开发规范对数据库进行建模,其中需要进行数据权限控制的业务功能模块需要具有(:DeleteStatus,CreatedFID和CreatedFName三个默认的字段)。如下为公文流转系统的数据库设计表结构:
WorkflowTemplate - 公文流程模板
表名 | WorkflowTemplate | 描述 | 公文流程模板 | |||||
序号 | 列名 | 字段类型 | 长度 | 可空 | 主键 | 外键 | 描述 | |
1 | ID | nvarchar | 36 | 否 | 是 |
| 标识 | |
2 | Code | nvarchar | 255 | 是 |
|
| 编码 | |
3 | Name | nvarchar | 255 | 否 |
|
| 名称 | |
4 | WorkflowType | nvarchar | 255 | 是 |
|
| 类型 | |
5 | Value | nvarchar | -1 | 是 |
|
| 值 | |
6 | FormTemplate | nvarchar | -1 | 是 |
|
| 表单模板 | |
7 | LargeImage | nvarchar | -1 | 是 |
|
| 保留 | |
8 | SmallImage | nvarchar | -1 | 是 |
|
| 保留 | |
9 | Description | nvarchar | -1 | 是 |
|
| 描述 | |
10 | Comment | nvarchar | -1 | 是 |
|
| 备注 | |
11 | QuanPin | nvarchar | -1 | 是 |
|
| 保留 | |
12 | JianPin | nvarchar | 255 | 是 |
|
| 保留 | |
13 | ExtensionDataType | nvarchar | 255 | 是 |
|
| 扩展数据类型的名称 | |
14 | ExtensionData | nvarchar | -1 | 是 |
|
| 扩展数据类型存储值 | |
15 | Status | int |
| 否 |
|
| 状态(无效,有效,预定义) | |
16 | DisplayOrder | decimal |
| 否 |
|
| 显示顺序 | |
17 | CreatedFID | nvarchar | 2048 | 是 |
|
| 创建者完整标识路径 | |
18 | CreatedFName | nvarchar | 2048 | 是 |
|
| 创建者完整名称路径 | |
19 | CreatedDate | datetime |
| 否 |
|
| 创建时间 | |
20 | LastUpdatedFID | nvarchar | 2048 | 是 |
|
| 最后修改人完整标识路径 | |
21 | LastUpdatedFName | nvarchar | 2048 | 是 |
|
| 最后修改人完整名称路径 | |
22 | LastUpdatedDate | datetime |
| 是 |
|
| 最后修改时间 | |
23 | DeleteStatus | int |
| 否 |
|
| 删除状态 | |
24 | Owner | nvarchar | 255 | 是 |
|
| Owner | |
25 | ApplicationName | nvarchar | 255 | 是 |
|
| ApplicationName | |
WorkflowCreator - 流程所允许发起的组织
表名 | WorkflowCreator | 描述 | 流程所允许发起的组织 | |||||
序号 | 列名 | 字段类型 | 长度 | 可空 | 主键 | 外键 | 描述 | |
1 | ID | nvarchar | 36 | 否 | 是 |
| 标识 | |
2 | WorkflowId | nvarchar | 36 | 是 |
| 是 | 流程模板标识 | |
3 | OrgFID | nvarchar | 2048 | 否 |
|
| 可发起人组织标识全路径 | |
4 | OrgFName | nvarchar | 2048 | 是 |
|
| 可发起人组织名称全路径 | |
5 | CreatedFID | nvarchar | 2048 | 是 |
|
| 创建人组织标识全路径 | |
6 | CreatedFName | nvarchar | 2048 | 是 |
|
| 创建人组织名称全路径 | |
7 | Version | int |
| 否 |
|
| 版本号 | |
8 | ApplicationName | nvarchar | 64 | 是 |
|
| 应用程序标识 | |
ActivityTemplate - 活动模板
表名 | ActivityTemplate | 描述 | 活动模板 | |||||
序号 | 列名 | 字段类型 | 长度 | 可空 | 主键 | 外键 | 描述 | |
1 | ID | nvarchar | 36 | 否 | 是 |
| ID | |
2 | WorkflowId | nvarchar | 36 | 否 |
| 是 | 所属公文流程模板标识 | |
3 | Code | nvarchar | 255 | 是 |
|
| 活动编码 | |
4 | Name | nvarchar | 255 | 否 |
|
| 活动名称 | |
5 | Value | nvarchar | -1 | 是 |
|
| 值 | |
6 | ActivityKind | int |
| 否 |
|
| 活动类型 | |
7 | TopValue | int |
| 否 |
|
| Y坐标 | |
8 | LeftValue | int |
| 否 |
|
| X坐标 | |
9 | WidthValue | int |
| 否 |
|
| 宽度 | |
10 | HeightValue | int |
| 否 |
|
| 高度 | |
11 | IsStartActivity | bit |
| 否 |
|
| 是否开始活动 | |
12 | IsFinishActivity | bit |
| 否 |
|
| 是否结束活动 | |
13 | ExpirationTime | int |
| 否 |
|
| 默认过期时间 | |
14 | Description | nvarchar | -1 | 是 |
|
| 描述 | |
15 | Comment | nvarchar | -1 | 是 |
|
| 备注 | |
16 | QuanPin | nvarchar | -1 | 是 |
|
| 保留 | |
17 | JianPin | nvarchar | 255 | 是 |
|
| 保留 | |
18 | DisplayOrder | decimal |
| 否 |
|
| 显示顺序 | |
19 | LargeImage | nvarchar | -1 | 是 |
|
| 保留 | |
20 | SmallImage | nvarchar | -1 | 是 |
|
| 保留 | |
21 | ExtensionDataType | nvarchar | 255 | 是 |
|
| 扩展数据类型名 | |
22 | ExtensionData | nvarchar | -1 | 是 |
|
| 扩展数据值 | |
23 | EntryExecuteTypeName | nvarchar | 255 | 是 |
|
| 入口点执行外部方法类的信息 | |
24 | EntryExecuteMethodName | nvarchar | 255 | 是 |
|
| 入口点执行外部方法的方法名 | |
25 | ExitExecuteTypeName | nvarchar | 255 | 是 |
|
| 出口点执行外部方法类的信息 | |
26 | ExitExecuteMethodName | nvarchar | 255 | 是 |
|
| 出口点执行外部方法的方法名 | |
27 | DeleteStatus | int |
| 否 |
|
| 删除状态 | |
28 | CreatedFID | nvarchar | 2048 | 是 |
|
| CreatedFID | |
29 | CreatedFName | nvarchar | 2048 | 是 |
|
| CreatedFName | |
30 | CreatedDate | datetime |
| 否 |
|
| CreatedDate | |
31 | LastUpdatedFID | nvarchar | 2048 | 是 |
|
| LastUpdatedFID | |
32 | LastUpdatedFName | nvarchar | 2048 | 是 |
|
| LastUpdatedFName | |
33 | LastUpdatedDate | datetime |
| 是 |
|
| LastUpdatedDate | |
34 | Owner | nvarchar | 255 | 是 |
|
| Owner | |
35 | ApplicationName | nvarchar | 255 | 是 |
|
| ApplicationName | |
ActivityAuditor -活动步骤模板所允许审批的组织
表名 | ActivityAuditor | 描述 | 活动步骤模板所允许审批的组织 | |||||
序号 | 列名 | 字段类型 | 长度 | 可空 | 主键 | 外键 | 描述 | |
1 | ID | nvarchar | 36 | 否 |
|
| 标识 | |
2 | ActivityId | nvarchar | 36 | 否 |
| 是 | 活动模板标识 | |
3 | AuditingFID | nvarchar | 2048 | 否 |
|
| 审批人完整标识路径 | |
4 | AuditingFName | nvarchar | 2048 | 否 |
|
| 审批人完整名称路径 | |
5 | Weight | decimal |
| 否 |
|
| 默认审批权重 | |
6 | ExperitionTime | int |
| 否 |
|
| 默认过期时间,小时 | |
7 | Comment | ntext | 1073741823 | 是 |
|
| 备注 | |
WorkflowInstance - 公文实例
表名 | WorkflowInstance | 描述 | 公文实例(每个流程发起的实例) | |||||
序号 | 列名 | 字段类型 | 长度 | 可空 | 主键 | 外键 | 描述 | |
1 | ID | nvarchar | 36 | 否 | 是 |
| 标识 | |
2 | WorkflowId | nvarchar | 36 | 否 |
| 是 | 所属公文流程模板标识 | |
3 | WorkflowName | ntext | 1073741823 | 否 |
|
| 所属公文流程模板名称 | |
4 | No | nvarchar | 255 | 是 |
|
| 文号 | |
5 | Subject | nvarchar | 255 | 否 |
|
| 标题 | |
6 | Kind | nvarchar | 255 | 是 |
|
| 类型 | |
7 | Abstract | nvarchar | 1024 | 是 |
|
| 摘要 | |
8 | Body | ntext | 1073741823 | 是 |
|
| 内容 | |
9 | SafeLevel | int |
| 否 |
|
| 密级 | |
10 | UrgencyDegree | int |
| 否 |
|
| 紧急程度 | |
10 | DeleteStatus | bit |
| 否 |
|
| 逻辑删除状态 | |
11 | DocStatus | int |
| 否 |
|
| 当前状态,0开始 1运行 2结束 | |
12 | AuditedStatus | int |
| 否 |
|
| 当前审核状态 0:未通过 1:已通过 | |
13 | SourceActivityId | nvarchar | 36 | 是 |
|
| 当前已执行活动标识 | |
14 | SourceActivityName | nvarchar | 50 | 是 |
|
| 当前已执行活动名称 | |
15 | TargetActivityId | nvarchar | 36 | 是 |
|
| 当前待执行活动标识 | |
16 | TargetActivityName | nvarchar | 50 | 是 |
|
| 当前待执行活动名称 | |
17 | Version | int |
| 否 |
|
| 版本号 | |
18 | ExtensionDataType | nvarchar | 255 | 是 |
|
| 扩展数据类型 | |
19 | ExtensionData | ntext | 1073741823 | 是 |
|
| 扩展数据 | |
20 | CreatedFID | nvarchar | 2048 | 否 |
|
| 起草人完整标识路径 | |
21 | CreatedFName | nvarchar | 2048 | 否 |
|
| 起草人完整名称路径 | |
22 | CreatedDate | datetime |
| 否 |
|
| 起草时间 | |
23 | LastUpdatedFID | nvarchar | 2048 | 是 |
|
| 最后修改人完整路径标识 | |
24 | LastUpdatedFName | nvarchar | 2048 | 是 |
|
| 最后修改人完整名称描述 | |
25 | LastUpdatedDate | datetime |
| 是 |
|
| 最后修改时间 | |
Attachment - 公文附件
表名 | Attachment | 描述 | 公文附件 | |||||
序号 | 列名 | 字段类型 | 长度 | 可空 | 主键 | 外键 | 描述 | |
1 | ID | nvarchar | 36 | 否 | 是 |
| 标识 | |
2 | No | nvarchar | 50 | 是 |
|
| 文号 | |
3 | Title | nvarchar | 256 | 否 |
|
| 标题 | |
4 | FileName | nvarchar | 256 | 是 |
|
| 文件名 | |
5 | FilePath | nvarchar | 256 | 是 |
|
| 文件路径 | |
6 | ExtensionName | nvarchar | 10 | 是 |
|
| 文件扩展名 | |
7 | Kind | int |
| 否 |
|
| 附件类别 | |
8 | Type | nvarchar | 256 | 否 |
|
| 类型 | |
9 | Abstract | nvarchar | 1024 | 是 |
|
| 摘要 | |
10 | Body | ntext | 1073741823 | 是 |
|
| 正文 | |
11 | Keyword | nvarchar | 256 | 是 |
|
| 关键字 | |
12 | Tag | nvarchar | 256 | 是 |
|
| 标记 | |
13 | Comment | ntext | 1073741823 | 是 |
|
| 备注 | |
14 | FileContent | varbinary | -1 | 是 |
|
| 附件内容 | |
15 | PublishDate | datetime |
| 是 |
|
| 发布日期 | |
16 | DeleteStatus | int |
| 否 |
|
| 删除状态 | |
17 | CreatedFID | nvarchar | 2048 | 否 |
|
| 创建人标识路径 | |
18 | CreatedFName | nvarchar | 2048 | 否 |
|
| 创建人名称路径 | |
19 | CreatedDate | datetime |
| 否 |
|
| 创建时间 | |
20 | LastUpdatedFID | nvarchar | 2048 | 是 |
|
| 最后修改人标识路径 | |
21 | LastUpdatedFName | nvarchar | 2048 | 是 |
|
| 最后修改人名称路径 | |
22 | LastUpdatedDate | datetime |
| 是 |
|
| 最后修改时间 | |
23 | DisplayOrder | decimal |
| 否 |
|
| 显示顺序 | |
24 | Version | int |
| 否 |
|
| 版本号 | |
25 | ObjectId | nvarchar | 255 | 是 |
|
| 所属记录标识 | |
ActivityInstance - 活动步骤实例
表名 | ActivityInstance | 描述 | 活动步骤实例 | |||||
序号 | 列名 | 字段类型 | 长度 | 可空 | 主键 | 外键 | 描述 | |
1 | ID | nvarchar | 36 | 否 | 是 |
| 标识 | |
2 | WorkflowId | nvarchar | 36 | 否 |
|
| 所属公文流程模板标识 | |
3 | WorkflowName | nvarchar | 255 | 否 |
|
| 所属公文流程模板标识 | |
4 | WorkflowInstanceId | nvarchar | 36 | 否 |
| 是 | WorkflowInstanceId | |
5 | WorkflowInstanceSubject | nvarchar | 255 | 否 |
|
| WorkflowInstanceSubject | |
6 | Code | nvarchar | 255 | 是 |
|
| 编码 | |
7 | Name | nvarchar | 255 | 否 |
|
| 名称 | |
8 | Value | nvarchar | -1 | 是 |
|
| 值 | |
9 | Status | int |
| 否 |
|
| 活动状态,未执行,未通过,已通过 | |
10 | ActivityKind | int |
| 否 |
|
| 活动类型,保留 | |
11 | TopValue | int |
| 否 |
|
| Y坐标 | |
12 | LeftValue | int |
| 否 |
|
| X坐标 | |
13 | WidthValue | int |
| 否 |
|
| 宽度值 | |
14 | HeightValue | int |
| 否 |
|
| 高度值 | |
15 | IsStartActivity | bit |
| 否 |
|
| 是否开始活动 | |
16 | IsFinishActivity | bit |
| 否 |
|
| 是否结束活动 | |
17 | ExpirationTime | int |
| 否 |
|
| 过期时间 | |
18 | Description | nvarchar | -1 | 是 |
|
| 描述 | |
19 | Comment | nvarchar | -1 | 是 |
|
| 备注 | |
20 | QuanPin | nvarchar | -1 | 是 |
|
| 保留 | |
21 | JianPin | nvarchar | 255 | 是 |
|
| 保留 | |
22 | DisplayOrder | decimal |
| 否 |
|
| 显示顺序 | |
23 | LargeImage | nvarchar | -1 | 是 |
|
| 保留 | |
24 | SmallImage | nvarchar | -1 | 是 |
|
| 保留 | |
25 | ExtensionDataType | nvarchar | 255 | 是 |
|
| 扩展数据类型名 | |
26 | ExtensionData | nvarchar | -1 | 是 |
|
| 扩展数据值 | |
27 | EntryExecuteTypeName | nvarchar | 255 | 是 |
|
| 入口点执行外部方法类的信息 | |
28 | EntryExecuteMethodName | nvarchar | 255 | 是 |
|
| 入口点执行外部方法的方法名 | |
29 | ExitExecuteTypeName | nvarchar | 255 | 是 |
|
| 出口点执行外部方法类的信息 | |
30 | ExitExecuteMethodName | nvarchar | 255 | 是 |
|
| 出口点执行外部方法的方法名 | |
31 | DeleteStatus | int |
| 否 |
|
| 删除状态 | |
32 | CreatedFID | nvarchar | 2048 | 是 |
|
| CreatedFID | |
33 | CreatedFName | nvarchar | 2048 | 是 |
|
| CreatedFName | |
34 | CreatedDate | datetime |
| 否 |
|
| CreatedDate | |
35 | LastUpdatedFID | nvarchar | 2048 | 是 |
|
| LastUpdatedFID | |
36 | LastUpdatedFName | nvarchar | 2048 | 是 |
|
| LastUpdatedFName | |
37 | LastUpdatedDate | datetime |
| 是 |
|
| LastUpdatedDate | |
38 | Owner | nvarchar | 255 | 是 |
|
| Owner | |
39 | ApplicationName | nvarchar | 255 | 是 |
|
| ApplicationName | |
ActivityInstanceAuditor - 活动步骤实例对应的审批人
表名 | ActivityInstanceAuditor | 描述 | 活动步骤实例对应的审批人(多个审批人则为并行模式,通过权重判断是否审批通过) | |||||
序号 | 列名 | 字段类型 | 长度 | 可空 | 主键 | 外键 | 描述 | |
1 | ID | nvarchar | 36 | 否 |
|
| 标识 | |
2 | ActivityInstanceId | nvarchar | 36 | 否 |
| 是 | 所属活动步骤实例标识 | |
3 | ActivityInstanceName | nvarchar | 255 | 是 |
|
| 所属活动步骤实例名称 | |
4 | AuditingFID | nvarchar | 2048 | 否 |
|
| 活动审批人完整标识 | |
5 | AuditingFName | nvarchar | 2048 | 否 |
|
| 审核人完整名称路径 | |
6 | ExperiationTime | int |
| 否 |
|
| 过期时间(小时) | |
7 | ExperiationResult | int |
| 否 |
|
| 超时时自动执行的结果(是否通过) | |
8 | Weight | decimal |
| 否 |
|
| 权重 | |
9 | AuditedResult | int |
| 否 |
|
| 审核结果(未审核,审核未通过,审核通过) | |
10 | AuditedOpinion | ntext | 1073741823 | 是 |
|
| 审核意见 | |
11 | AuditedFID | nvarchar | 2048 | 是 |
|
| 审核人完整标识 | |
12 | AuditedFName | nvarchar | 2048 | 是 |
|
| AuditedFName | |
13 | AuditedDate | datetime |
| 是 |
|
| AuditedDate | |
14 | AuditedKind | int |
| 否 |
|
| 人工审批,超时自动审批 | |
15 | Comment | ntext | 1073741823 | 是 |
|
| 备注 | |
ActivityLogs - 活动日志
表名 | ActivityLogs | 描述 | 活动审批日志信息 | |||||
序号 | 列名 | 字段类型 | 长度 | 可空 | 主键 | 外键 | 描述 | |
1 | ID | nvarchar | 36 | 否 | 是 |
| ID | |
2 | WorkflowInstanceId | nvarchar | 36 | 否 |
| 是 | 所属公文流程实例标识 | |
3 | WorkflowInstanceSubject | nvarchar | 255 | 否 |
|
| 所属公文流程实例主题 | |
4 | WorkflowId | nvarchar | 36 | 否 |
|
| 所属公文流程模板标识 | |
5 | WorkflowName | nvarchar | 255 | 否 |
|
| 所属公文流程模板名称 | |
6 | SourceActivityInstanceId | nvarchar | 36 | 是 |
|
| 执行的活动实例标识 | |
7 | SourceActivityInstanceName | nvarchar | 255 | 是 |
|
| 执行的活动实例名称 | |
8 | SourceActivityInstanceKind | int |
| 是 |
|
| 执行的活动实例类型 | |
9 | TargetActivityInstanceId | nvarchar | 36 | 是 |
|
| 待执行的活动实例标识 | |
10 | TargetActivityInstanceName | nvarchar | 255 | 是 |
|
| 待执行的活动实例名称 | |
11 | TargetActivityInstanceKind | int |
| 是 |
|
| 待执行的活动实例类型 | |
12 | AuditedWeight | decimal |
| 是 |
|
| 审核的权重结果 | |
13 | AuditedOpinion | nvarchar | -1 | 是 |
|
| 审核的意见 | |
14 | AuditedFID | nvarchar | -1 | 是 |
|
| 审核人完整标识路径 | |
15 | AuditedFName | nvarchar | -1 | 是 |
|
| 审核人完整名称路径 | |
16 | AuditedDate | datetime |
| 是 |
|
| 审核日期 | |
17 | AuditedResult | int |
| 否 |
|
| 审核的结果(未通过,正在并行审批,已通过) | |
18 | AuditedKind | int |
| 否 |
|
| 审核类别(人工审核,超时自动审核等) | |
19 | Comment | nvarchar | -1 | 是 |
|
| 备注 | |
20 | CreatedFID | nvarchar | 2048 | 否 |
|
| 起草人完整标识路径 | |
21 | CreatedFName | nvarchar | 2048 | 是 |
|
| 起草人完整名称路径 | |
22 | CreatedDate | datetime |
| 否 |
|
| 起草日期 | |
最终实现的界面效果如下:
下一章:MVC中实现动态自定义路由