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 // 条件分支(预留) ) // 审批人类型 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"` 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 // 已超时 ) // 任务动作 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" }