
常见的审核状态待审核 已通过已拒绝。要有一个不可变的最终状态要有一个不可变的最终状态比如“已拒绝”或已通过。如果最终状态可变那状态有可能一直在变来变去。可以设计成支持重新发起重新生成一条新的审核单而不是去修改历史“已拒绝”的单子。历史单子的终态保持不变。状态变化最好有状态记录表这样才知道状态是什么时候变化旧状态是什么新状态是什么是谁审核的。数据表设计审核表CREATE TABLE t_audit ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT 主键ID, user_id BIGINT NOT NULL COMMENT 申请人ID, title VARCHAR(128) NOT NULL COMMENT 标题, content MEDIUMTEXT DEFAULT NULL COMMENT 详细申请数据, status TINYINT NOT NULL DEFAULT 0 COMMENT 审核状态: 0-草稿, 1-待审核, 2-已通过, 3-已拒绝, audit_remark VARCHAR(255) DEFAULT NULL COMMENT 审核意见/拒绝原因, auditor_id BIGINT DEFAULT NULL COMMENT 最后审核人ID, audit_time DATETIME DEFAULT NULL COMMENT 最后审核时间, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, PRIMARY KEY (id), KEY idx_user_status (user_id, status), KEY idx_status_created (status, created_at) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT审核表;状态记录表CREATE TABLE t_audit_log ( id BIGINT NOT NULL AUTO_INCREMENT COMMENT 主键ID, audit_id BIGINT NOT NULL COMMENT 申请单ID, old_status TINYINT NOT NULL COMMENT 变更前状态 (1-待审核...), new_status TINYINT NOT NULL COMMENT 变更后状态 (2-已通过3已拒绝), operator_id BIGINT NOT NULL COMMENT 操作人ID (用户或管理员), operator_type TINYINT NOT NULL DEFAULT 1 COMMENT 操作人类型: 1-用户自操作, 2-后台管理员, audit_remark VARCHAR(255) DEFAULT NULL COMMENT 备注, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, PRIMARY KEY (id), KEY idx_audit_id (audit_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT审核状态变更记录表;