SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- 1. 物品主数据表:增加 company_id DROP TABLE IF EXISTS inv_item; CREATE TABLE inv_item ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', company_id BIGINT(20) UNSIGNED DEFAULT NULL COMMENT '物品所属公司ID', item_code VARCHAR(64) NOT NULL COMMENT '物品编号(公司内部编码)', item_name VARCHAR(128) NOT NULL COMMENT '物品名称', category_id BIGINT(20) UNSIGNED DEFAULT NULL COMMENT '物品分类ID(可选,指向分类表)', spec_model VARCHAR(128) DEFAULT NULL COMMENT '规格型号', unit VARCHAR(32) DEFAULT '件' COMMENT '计量单位,如 件/盒/包', is_consumable TINYINT(1) DEFAULT 1 COMMENT '是否耗材:1耗材(不需归还),0非耗材(需归还)', stock_qty INT(11) DEFAULT 0 COMMENT '当前库存数量', manage_user_id BIGINT(20) UNSIGNED DEFAULT NULL COMMENT '物品管理员用户ID', location VARCHAR(255) DEFAULT NULL COMMENT '存放位置说明', remark VARCHAR(255) DEFAULT NULL COMMENT '备注', created_at INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间时间戳', updated_at INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间时间戳', PRIMARY KEY (id), UNIQUE KEY uk_item_code (item_code), KEY idx_company (company_id), KEY idx_category (category_id), KEY idx_manage_user (manage_user_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物品主数据表'; -- 2. 物品领用/借用申请单(主表) DROP TABLE IF EXISTS inv_requisition; CREATE TABLE inv_requisition ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', order_no VARCHAR(64) NOT NULL COMMENT '申请单号', applicant_company_id BIGINT(20) UNSIGNED DEFAULT NULL COMMENT '申请人所在公司ID(可选)', dept_id BIGINT(20) UNSIGNED DEFAULT NULL COMMENT '申请人部门ID', applicant_id BIGINT(20) UNSIGNED NOT NULL COMMENT '申请人用户ID', applicant_name VARCHAR(64) DEFAULT NULL COMMENT '申请人姓名快照', leader_id BIGINT(20) UNSIGNED DEFAULT NULL COMMENT '直属上级用户ID', manager_id BIGINT(20) UNSIGNED DEFAULT NULL COMMENT '物品管理员用户ID(主负责人)', borrow_reason VARCHAR(255) NOT NULL COMMENT '领用/借用事由', use_start_date DATE NOT NULL COMMENT '借用/预计使用开始日期', use_end_date DATE DEFAULT NULL COMMENT '预计归还日期(耗材可为空)', -- 0草稿 10待直属上级审批 20直属上级通过待物品管理员审批 -- 30全部通过 40已驳回 50已取消 status TINYINT(3) NOT NULL DEFAULT 10 COMMENT '审批状态', is_returned TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否已全部归还(针对需要归还的物品):0否 1是', remark VARCHAR(255) DEFAULT NULL COMMENT '备注', created_at INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间时间戳', updated_at INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间时间戳', PRIMARY KEY (id), UNIQUE KEY uk_order_no (order_no), KEY idx_applicant (applicant_id), KEY idx_status (status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物品领用/借用申请单'; -- 3. 申请单明细表:支持部分、多次归还 DROP TABLE IF EXISTS inv_requisition_item; CREATE TABLE inv_requisition_item ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', requisition_id BIGINT(20) UNSIGNED NOT NULL COMMENT '申请单ID', item_id BIGINT(20) UNSIGNED NOT NULL COMMENT '物品ID', item_name_snap VARCHAR(128) DEFAULT NULL COMMENT '物品名称快照', spec_model_snap VARCHAR(128) DEFAULT NULL COMMENT '规格型号快照', unit_snap VARCHAR(32) DEFAULT NULL COMMENT '单位快照', is_consumable_snap TINYINT(1) DEFAULT NULL COMMENT '是否耗材快照:1耗材 0非耗材', request_qty INT(11) NOT NULL DEFAULT 1 COMMENT '申请数量', approved_qty INT(11) DEFAULT NULL COMMENT '实批数量(可与申请数量不同)', returned_qty INT(11) NOT NULL DEFAULT 0 COMMENT '已归还数量(累加)', -- 对于非耗材:returned_qty >= approved_qty 时置为1 is_finished TINYINT(1) NOT NULL DEFAULT 0 COMMENT '该物品是否已完成归还:0否 1是', remark VARCHAR(255) DEFAULT NULL COMMENT '行备注', created_at INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间时间戳', updated_at INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间时间戳', PRIMARY KEY (id), KEY idx_req (requisition_id), KEY idx_item (item_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物品领用申请明细表'; -- 4. 审批记录表(同上一版,略微无改动) DROP TABLE IF EXISTS inv_requisition_approve; CREATE TABLE inv_requisition_approve ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', requisition_id BIGINT(20) UNSIGNED NOT NULL COMMENT '申请单ID', node_type VARCHAR(32) NOT NULL COMMENT '审批节点类型:leader=直属上级,manager=物品管理员,other=其他', approver_id BIGINT(20) UNSIGNED NOT NULL COMMENT '审批人用户ID', approver_name VARCHAR(64) DEFAULT NULL COMMENT '审批人姓名快照', action TINYINT(3) NOT NULL COMMENT '审批动作:1通过 2驳回', comment VARCHAR(255) DEFAULT NULL COMMENT '审批意见', action_at INT(11) NOT NULL DEFAULT 0 COMMENT '审批时间时间戳', created_at INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间时间戳', updated_at INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间时间戳', PRIMARY KEY (id), KEY idx_req (requisition_id), KEY idx_node (node_type), KEY idx_approver (approver_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物品领用申请审批记录表'; -- 5. 申请单附件表(申请时上传) DROP TABLE IF EXISTS inv_requisition_attachment; CREATE TABLE inv_requisition_attachment ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', requisition_id BIGINT(20) UNSIGNED NOT NULL COMMENT '申请单ID', file_name VARCHAR(255) NOT NULL COMMENT '文件原始名称', file_path VARCHAR(255) NOT NULL COMMENT '文件存储路径/URL', file_size INT(11) DEFAULT NULL COMMENT '文件大小(字节)', created_at INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间时间戳', updated_at INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间时间戳', PRIMARY KEY (id), KEY idx_req (requisition_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物品领用申请附件表'; /* ================= 归 还 相 关 表 ================= */ -- 6. 归还记录表:一次归还动作(可归还一个明细的一部分) DROP TABLE IF EXISTS inv_requisition_item_return; CREATE TABLE inv_requisition_item_return ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', requisition_id BIGINT(20) UNSIGNED NOT NULL COMMENT '申请单ID', requisition_item_id BIGINT(20) UNSIGNED NOT NULL COMMENT '申请单明细ID', item_id BIGINT(20) UNSIGNED NOT NULL COMMENT '物品ID', return_qty INT(11) NOT NULL DEFAULT 0 COMMENT '本次归还数量', handler_id BIGINT(20) UNSIGNED NOT NULL COMMENT '办理归还的人(通常是物品管理员)', handler_name VARCHAR(64) DEFAULT NULL COMMENT '办理人姓名快照', return_status TINYINT(3) NOT NULL DEFAULT 1 COMMENT '归还状态:1正常归还 2损坏 3其他', remark VARCHAR(255) DEFAULT NULL COMMENT '归还备注', return_at INT(11) NOT NULL DEFAULT 0 COMMENT '归还时间时间戳', created_at INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间时间戳', updated_at INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间时间戳', PRIMARY KEY (id), KEY idx_req (requisition_id), KEY idx_req_item (requisition_item_id), KEY idx_item (item_id), KEY idx_handler (handler_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物品归还记录表(支持多次、部分归还)'; -- 7. 归还附件表:归还时拍照留底 DROP TABLE IF EXISTS inv_requisition_item_return_attachment; CREATE TABLE inv_requisition_item_return_attachment ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', return_id BIGINT(20) UNSIGNED NOT NULL COMMENT '归还记录ID', file_name VARCHAR(255) NOT NULL COMMENT '文件原始名称', file_path VARCHAR(255) NOT NULL COMMENT '文件存储路径/URL(通常为照片)', file_size INT(11) DEFAULT NULL COMMENT '文件大小(字节)', created_at INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间时间戳', updated_at INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间时间戳', PRIMARY KEY (id), KEY idx_return (return_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物品归还记录附件表(归还拍照留底)'; SET FOREIGN_KEY_CHECKS = 1;