269 lines
14 KiB
Go
269 lines
14 KiB
Go
package models
|
||
|
||
import "time"
|
||
|
||
// =============================================================
|
||
// 自定义审批流(配置侧)
|
||
//
|
||
// 设计要点:
|
||
// - 租户侧与平台侧配置分表隔离:平台账号不归属租户,其流程不带 tid;
|
||
// - 节点表用 prev_keys / next_keys / condition_expr 承载连线与条件,
|
||
// 当期顺序链只按 sort 流转,后续上拖拽图与条件分支无需改表。
|
||
// =============================================================
|
||
|
||
// 审批适用范围:租户侧 / 平台侧
|
||
const (
|
||
ApprovalScopeTenant = 1 // 租户侧(backend / uniapp)
|
||
ApprovalScopePlatform = 2 // 平台侧(platform,跨租户管控)
|
||
)
|
||
|
||
// 节点类型
|
||
const (
|
||
ApprovalNodeStart = 1 // 开始
|
||
ApprovalNodeApproval = 2 // 审批
|
||
ApprovalNodeEnd = 3 // 结束
|
||
ApprovalNodeCondition = 4 // 判断节点
|
||
ApprovalNodeNotify = 5 // 通知节点
|
||
)
|
||
|
||
// 审批人类型
|
||
const (
|
||
ApprovalApproverUser = 1 // 指定用户
|
||
ApprovalApproverRole = 2 // 指定角色
|
||
ApprovalApproverOrgLeader = 3 // 部门主管
|
||
ApprovalApproverPosition = 4 // 指定职位
|
||
ApprovalApproverInitiator = 5 // 发起人本人
|
||
ApprovalApproverInitLeader = 6 // 发起人所在部门主管
|
||
)
|
||
|
||
// 多人审批方式
|
||
const (
|
||
ApprovalMultiAny = 1 // 或签:任一通过即通过
|
||
ApprovalMultiAll = 2 // 会签:全部通过才通过
|
||
)
|
||
|
||
// 单据类型
|
||
const (
|
||
ApprovalBizReimburse = "reimburse" // OA 报销单
|
||
ApprovalBizBid = "bid" // CRM 投标立项
|
||
ApprovalBizDomain = "domain" // 域名申请(平台侧审批)
|
||
)
|
||
|
||
// ---------------- 租户侧配置 ----------------
|
||
|
||
// TenantApprovalFlow 租户侧审批流程 yz_backend_approval_flow
|
||
type TenantApprovalFlow struct {
|
||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||
Tid uint64 `orm:"column(tid)" json:"tid"`
|
||
ModuleCode string `orm:"column(module_code);size(50);default()" json:"module_code"`
|
||
BizType string `orm:"column(biz_type);size(50);default()" json:"biz_type"`
|
||
FlowCode string `orm:"column(flow_code);size(64);default()" json:"flow_code"`
|
||
ApplyDeptIDs string `orm:"column(apply_dept_ids);size(500);default()" json:"apply_dept_ids"`
|
||
FlowName string `orm:"column(flow_name);size(100);default()" json:"flow_name"`
|
||
Description string `orm:"column(description);size(500);default()" json:"description"`
|
||
IsDefault int8 `orm:"column(is_default);default(0)" json:"is_default"`
|
||
Status int8 `orm:"column(status);default(1)" json:"status"`
|
||
IsDeleted int8 `orm:"column(is_deleted);default(0)" json:"is_deleted"`
|
||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||
UpdateTime *time.Time `orm:"column(update_time);type(datetime);null" json:"update_time"`
|
||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||
}
|
||
|
||
func (m *TenantApprovalFlow) TableName() string {
|
||
return "yz_backend_approval_flow"
|
||
}
|
||
|
||
// TenantApprovalNode 租户侧审批节点 yz_backend_approval_node
|
||
type TenantApprovalNode struct {
|
||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||
FlowID uint64 `orm:"column(flow_id)" json:"flow_id"`
|
||
Tid uint64 `orm:"column(tid);default(0)" json:"tid"`
|
||
NodeKey string `orm:"column(node_key);size(50);default()" json:"node_key"`
|
||
NodeName string `orm:"column(node_name);size(100);default()" json:"node_name"`
|
||
NodeType int8 `orm:"column(node_type);default(2)" json:"node_type"`
|
||
ApproverType int8 `orm:"column(approver_type);default(1)" json:"approver_type"`
|
||
ApproverIDs string `orm:"column(approver_ids);size(500);default()" json:"approver_ids"`
|
||
MultiMode int8 `orm:"column(multi_mode);default(1)" json:"multi_mode"`
|
||
AllowReturn int8 `orm:"column(allow_return);default(0)" json:"allow_return"`
|
||
TimeoutHours int `orm:"column(timeout_hours);default(48)" json:"timeout_hours"`
|
||
PrevKeys string `orm:"column(prev_keys);size(500);default()" json:"prev_keys"`
|
||
NextKeys string `orm:"column(next_keys);size(500);default()" json:"next_keys"`
|
||
ConditionExpr string `orm:"column(condition_expr);size(500);default()" json:"condition_expr"`
|
||
Sort int `orm:"column(sort);default(0)" json:"sort"`
|
||
PosX int `orm:"column(pos_x);default(0)" json:"pos_x"`
|
||
PosY int `orm:"column(pos_y);default(0)" json:"pos_y"`
|
||
IsDeleted int8 `orm:"column(is_deleted);default(0)" json:"is_deleted"`
|
||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||
UpdateTime *time.Time `orm:"column(update_time);type(datetime);null" json:"update_time"`
|
||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||
}
|
||
|
||
func (m *TenantApprovalNode) TableName() string {
|
||
return "yz_backend_approval_node"
|
||
}
|
||
|
||
// ---------------- 平台侧配置 ----------------
|
||
|
||
// PlatformApprovalFlow 平台侧审批流程 yz_platform_approval_flow
|
||
// 平台账号不归属租户,因此无 tid 字段。
|
||
type PlatformApprovalFlow struct {
|
||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||
ModuleCode string `orm:"column(module_code);size(50);default()" json:"module_code"`
|
||
BizType string `orm:"column(biz_type);size(50);default()" json:"biz_type"`
|
||
FlowCode string `orm:"column(flow_code);size(64);default()" json:"flow_code"`
|
||
FlowName string `orm:"column(flow_name);size(100);default()" json:"flow_name"`
|
||
Description string `orm:"column(description);size(500);default()" json:"description"`
|
||
IsDefault int8 `orm:"column(is_default);default(0)" json:"is_default"`
|
||
Status int8 `orm:"column(status);default(1)" json:"status"`
|
||
IsDeleted int8 `orm:"column(is_deleted);default(0)" json:"is_deleted"`
|
||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||
UpdateTime *time.Time `orm:"column(update_time);type(datetime);null" json:"update_time"`
|
||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||
}
|
||
|
||
func (m *PlatformApprovalFlow) TableName() string {
|
||
return "yz_platform_approval_flow"
|
||
}
|
||
|
||
// PlatformApprovalNode 平台侧审批节点 yz_platform_approval_node
|
||
// approver_ids 存平台主体:user=AdminUser.id / role=AdminRole.id
|
||
type PlatformApprovalNode struct {
|
||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||
FlowID uint64 `orm:"column(flow_id)" json:"flow_id"`
|
||
NodeKey string `orm:"column(node_key);size(50);default()" json:"node_key"`
|
||
NodeName string `orm:"column(node_name);size(100);default()" json:"node_name"`
|
||
NodeType int8 `orm:"column(node_type);default(2)" json:"node_type"`
|
||
ApproverType int8 `orm:"column(approver_type);default(1)" json:"approver_type"`
|
||
ApproverIDs string `orm:"column(approver_ids);size(500);default()" json:"approver_ids"`
|
||
MultiMode int8 `orm:"column(multi_mode);default(1)" json:"multi_mode"`
|
||
AllowReturn int8 `orm:"column(allow_return);default(0)" json:"allow_return"`
|
||
TimeoutHours int `orm:"column(timeout_hours);default(48)" json:"timeout_hours"`
|
||
PrevKeys string `orm:"column(prev_keys);size(500);default()" json:"prev_keys"`
|
||
NextKeys string `orm:"column(next_keys);size(500);default()" json:"next_keys"`
|
||
ConditionExpr string `orm:"column(condition_expr);size(500);default()" json:"condition_expr"`
|
||
Sort int `orm:"column(sort);default(0)" json:"sort"`
|
||
PosX int `orm:"column(pos_x);default(0)" json:"pos_x"`
|
||
PosY int `orm:"column(pos_y);default(0)" json:"pos_y"`
|
||
IsDeleted int8 `orm:"column(is_deleted);default(0)" json:"is_deleted"`
|
||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||
UpdateTime *time.Time `orm:"column(update_time);type(datetime);null" json:"update_time"`
|
||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||
}
|
||
|
||
func (m *PlatformApprovalNode) TableName() string {
|
||
return "yz_platform_approval_node"
|
||
}
|
||
|
||
// ---------------- 运行时(租户侧与平台侧共用) ----------------
|
||
|
||
// 实例状态
|
||
const (
|
||
ApprovalInstanceDraft = 0 // 草稿
|
||
ApprovalInstanceRunning = 1 // 审批中
|
||
ApprovalInstanceApproved = 2 // 已通过
|
||
ApprovalInstanceRejected = 3 // 已驳回
|
||
ApprovalInstanceWithdrawn = 4 // 已撤回
|
||
ApprovalInstanceCanceled = 5 // 已取消
|
||
)
|
||
|
||
// 任务状态
|
||
const (
|
||
ApprovalTaskPending = 0 // 待审批
|
||
ApprovalTaskApproved = 1 // 已通过
|
||
ApprovalTaskRejected = 2 // 已驳回
|
||
ApprovalTaskReturned = 3 // 已退回
|
||
ApprovalTaskSkipped = 4 // 已跳过
|
||
ApprovalTaskTimeout = 5 // 已超时
|
||
ApprovalTaskNotified = 6 // 已通知
|
||
)
|
||
|
||
// 任务动作
|
||
const (
|
||
ApprovalActionSubmit = 1 // 提交
|
||
ApprovalActionApprove = 2 // 通过
|
||
ApprovalActionReject = 3 // 驳回
|
||
ApprovalActionReturn = 4 // 退回
|
||
ApprovalActionWithdraw = 5 // 撤回
|
||
ApprovalActionAutoPass = 6 // 超时自动通过
|
||
)
|
||
|
||
// ApprovalInstance 审批实例 yz_approval_instance
|
||
//
|
||
// scope 区分租户侧/平台侧。平台侧实例的 biz_tid 标记申请来源租户,
|
||
// 使平台端能按租户筛选并代租户操作。
|
||
type ApprovalInstance struct {
|
||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||
Scope int8 `orm:"column(scope);default(1)" json:"scope"`
|
||
Tid uint64 `orm:"column(tid);default(0)" json:"tid"`
|
||
BizTid uint64 `orm:"column(biz_tid);default(0)" json:"biz_tid"`
|
||
FlowID uint64 `orm:"column(flow_id);default(0)" json:"flow_id"`
|
||
BizType string `orm:"column(biz_type);size(50);default()" json:"biz_type"`
|
||
BizID uint64 `orm:"column(biz_id);default(0)" json:"biz_id"`
|
||
BizTitle string `orm:"column(biz_title);size(200);default()" json:"biz_title"`
|
||
SubmitUserID uint64 `orm:"column(submit_user_id);default(0)" json:"submit_user_id"`
|
||
SubmitUserName string `orm:"column(submit_user_name);size(64);default()" json:"submit_user_name"`
|
||
SubmitDeptID uint64 `orm:"column(submit_dept_id);default(0)" json:"submit_dept_id"`
|
||
FormData *string `orm:"column(form_data);type(text);null" json:"form_data"`
|
||
CurrentNode string `orm:"column(current_node);size(50);default()" json:"current_node"`
|
||
Status int8 `orm:"column(status);default(1)" json:"status"`
|
||
SubmitTime *time.Time `orm:"column(submit_time);type(datetime);null" json:"submit_time"`
|
||
FinishTime *time.Time `orm:"column(finish_time);type(datetime);null" json:"finish_time"`
|
||
IsDeleted int8 `orm:"column(is_deleted);default(0)" json:"is_deleted"`
|
||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||
UpdateTime *time.Time `orm:"column(update_time);type(datetime);null" json:"update_time"`
|
||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||
}
|
||
|
||
func (m *ApprovalInstance) TableName() string {
|
||
return "yz_approval_instance"
|
||
}
|
||
|
||
// ApprovalTask 审批任务 yz_approval_task
|
||
// 节点级待办:一个节点可展开多条任务(会签时每个审批人一条)。
|
||
type ApprovalTask struct {
|
||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||
InstanceID uint64 `orm:"column(instance_id)" json:"instance_id"`
|
||
Scope int8 `orm:"column(scope);default(1)" json:"scope"`
|
||
Tid uint64 `orm:"column(tid);default(0)" json:"tid"`
|
||
BizType string `orm:"column(biz_type);size(50);default()" json:"biz_type"`
|
||
BizID uint64 `orm:"column(biz_id);default(0)" json:"biz_id"`
|
||
NodeKey string `orm:"column(node_key);size(50);default()" json:"node_key"`
|
||
NodeName string `orm:"column(node_name);size(100);default()" json:"node_name"`
|
||
Sort int `orm:"column(sort);default(0)" json:"sort"`
|
||
ApproverID uint64 `orm:"column(approver_id);default(0)" json:"approver_id"`
|
||
ApproverName string `orm:"column(approver_name);size(64);default()" json:"approver_name"`
|
||
MultiMode int8 `orm:"column(multi_mode);default(1)" json:"multi_mode"`
|
||
Status int8 `orm:"column(status);default(0)" json:"status"`
|
||
Action int8 `orm:"column(action);default(0)" json:"action"`
|
||
Comment string `orm:"column(comment);size(500);default()" json:"comment"`
|
||
Deadline *time.Time `orm:"column(deadline);type(datetime);null" json:"deadline"`
|
||
FinishTime *time.Time `orm:"column(finish_time);type(datetime);null" json:"finish_time"`
|
||
IsDeleted int8 `orm:"column(is_deleted);default(0)" json:"is_deleted"`
|
||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||
UpdateTime *time.Time `orm:"column(update_time);type(datetime);null" json:"update_time"`
|
||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||
}
|
||
|
||
func (m *ApprovalTask) TableName() string {
|
||
return "yz_approval_task"
|
||
}
|
||
|
||
// ApprovalBinding 审批流功能绑定 yz_approval_binding
|
||
// 纯关联表:一个 biz_type 可绑多条流程;条件分支在流程内部(条件网关)实现,本表不包含条件字段。
|
||
type ApprovalBinding struct {
|
||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||
Scope int8 `orm:"column(scope);default(1)" json:"scope"`
|
||
Tid uint64 `orm:"column(tid);default(0)" json:"tid"`
|
||
BizType string `orm:"column(biz_type);size(50);default()" json:"biz_type"`
|
||
FlowID uint64 `orm:"column(flow_id);default(0)" json:"flow_id"`
|
||
FlowCode string `orm:"column(flow_code);size(64);default()" json:"flow_code"`
|
||
Remark string `orm:"column(remark);size(200);default()" json:"remark"`
|
||
IsDeleted int8 `orm:"column(is_deleted);default(0)" json:"is_deleted"`
|
||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||
UpdateTime *time.Time `orm:"column(update_time);type(datetime);null" json:"update_time"`
|
||
}
|
||
|
||
func (m *ApprovalBinding) TableName() string {
|
||
return "yz_approval_binding"
|
||
}
|