Files
yunzerwebsiteallinone/go/models/approval.go
T
2026-10-07 22:56:35 +08:00

269 lines
14 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"
}