-- ============================================================
-- 资产管理系统 — 数据库初始化脚本
-- 数据库：asset_db | 字符集：utf8mb4 | 引擎：InnoDB
-- ============================================================

-- 创建数据库
CREATE DATABASE IF NOT EXISTS asset_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

USE asset_db;

-- ============================================================
-- 1. 用户表（t_user）
-- ============================================================
DROP TABLE IF EXISTS t_borrow;
DROP TABLE IF EXISTS t_disposal;
DROP TABLE IF EXISTS t_asset;
DROP TABLE IF EXISTS t_category;
DROP TABLE IF EXISTS t_user;

CREATE TABLE t_user (
    id            INT           NOT NULL AUTO_INCREMENT COMMENT '主键',
    username      VARCHAR(50)   NOT NULL                COMMENT '用户名',
    password      VARCHAR(100)  NOT NULL                COMMENT '密码（MD5加密）',
    real_name     VARCHAR(50)   NOT NULL                COMMENT '真实姓名',
    role          VARCHAR(20)   NOT NULL DEFAULT 'user' COMMENT '角色（admin/user）',
    status        TINYINT       NOT NULL DEFAULT 1      COMMENT '状态（1启用/0禁用）',
    create_time   DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time   DATETIME      DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_username (username)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

-- ============================================================
-- 2. 资产分类表（t_category）
-- ============================================================
CREATE TABLE t_category (
    id              INT           NOT NULL AUTO_INCREMENT COMMENT '主键',
    category_code   VARCHAR(20)   NOT NULL                COMMENT '分类编号',
    category_name   VARCHAR(50)   NOT NULL                COMMENT '分类名称',
    description     VARCHAR(200)  DEFAULT NULL            COMMENT '分类描述',
    create_time     DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time     DATETIME      DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_category_code (category_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='资产分类表';

-- ============================================================
-- 3. 资产表（t_asset）
-- ============================================================
CREATE TABLE t_asset (
    id            INT            NOT NULL AUTO_INCREMENT COMMENT '主键',
    asset_code    VARCHAR(30)    NOT NULL                COMMENT '资产编号',
    asset_name    VARCHAR(100)   NOT NULL                COMMENT '资产名称',
    category_id   INT            NOT NULL                COMMENT '分类ID',
    status        VARCHAR(20)    NOT NULL DEFAULT 'available' COMMENT '状态（available/borrowed/disposed）',
    value         DECIMAL(12,2)  NOT NULL                COMMENT '资产价值（元）',
    purchase_date DATE           NOT NULL                COMMENT '购入日期',
    location      VARCHAR(100)   DEFAULT NULL            COMMENT '存放位置',
    description   VARCHAR(500)   DEFAULT NULL            COMMENT '资产描述',
    create_time   DATETIME       NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time   DATETIME       DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (id),
    UNIQUE KEY uk_asset_code (asset_code),
    INDEX idx_category_id (category_id),
    INDEX idx_status (status),
    CONSTRAINT fk_asset_category FOREIGN KEY (category_id) REFERENCES t_category (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='资产表';

-- ============================================================
-- 4. 借用表（t_borrow）
-- ============================================================
CREATE TABLE t_borrow (
    id                    INT          NOT NULL AUTO_INCREMENT COMMENT '主键',
    asset_id              INT          NOT NULL                COMMENT '资产ID',
    user_id               INT          NOT NULL                COMMENT '借用人ID',
    borrow_date           DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '借用时间',
    expected_return_date  DATE         NOT NULL                COMMENT '预计归还日期',
    actual_return_date    DATETIME     DEFAULT NULL            COMMENT '实际归还日期',
    reason                VARCHAR(200) NOT NULL                COMMENT '借用原因',
    status                VARCHAR(20)  NOT NULL DEFAULT 'pending' COMMENT '状态（pending/approved/rejected/returned/overdue）',
    approver_id           INT          DEFAULT NULL            COMMENT '审批人ID',
    approve_time          DATETIME     DEFAULT NULL            COMMENT '审批时间',
    approve_remark        VARCHAR(200) DEFAULT NULL            COMMENT '审批备注',
    create_time           DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time           DATETIME     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (id),
    INDEX idx_borrow_asset (asset_id),
    INDEX idx_borrow_user (user_id),
    INDEX idx_borrow_status (status),
    CONSTRAINT fk_borrow_asset    FOREIGN KEY (asset_id)    REFERENCES t_asset (id),
    CONSTRAINT fk_borrow_user     FOREIGN KEY (user_id)     REFERENCES t_user (id),
    CONSTRAINT fk_borrow_approver FOREIGN KEY (approver_id) REFERENCES t_user (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='借用表';

-- ============================================================
-- 5. 报废表（t_disposal）
-- ============================================================
CREATE TABLE t_disposal (
    id              INT          NOT NULL AUTO_INCREMENT COMMENT '主键',
    asset_id        INT          NOT NULL                COMMENT '资产ID',
    user_id         INT          NOT NULL                COMMENT '申请人ID',
    reason          VARCHAR(200) NOT NULL                COMMENT '报废原因',
    status          VARCHAR(20)  NOT NULL DEFAULT 'pending' COMMENT '状态（pending/approved/rejected）',
    approver_id     INT          DEFAULT NULL            COMMENT '审批人ID',
    approve_time    DATETIME     DEFAULT NULL            COMMENT '审批时间',
    approve_remark  VARCHAR(200) DEFAULT NULL            COMMENT '审批备注',
    disposal_date   DATETIME     DEFAULT NULL            COMMENT '报废执行日期',
    create_time     DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time     DATETIME     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (id),
    INDEX idx_disposal_asset (asset_id),
    INDEX idx_disposal_user (user_id),
    INDEX idx_disposal_status (status),
    CONSTRAINT fk_disposal_asset    FOREIGN KEY (asset_id)    REFERENCES t_asset (id),
    CONSTRAINT fk_disposal_user     FOREIGN KEY (user_id)     REFERENCES t_user (id),
    CONSTRAINT fk_disposal_approver FOREIGN KEY (approver_id) REFERENCES t_user (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报废表';

-- ============================================================
-- 初始数据
-- ============================================================

-- 管理员用户（密码：admin123，MD5加密后：0192023a7bbd73250516f069df18b500）
INSERT INTO t_user (username, password, real_name, role, status) VALUES
('admin', '0192023a7bbd73250516f069df18b500', '管理员', 'admin', 1);

-- 4个初始分类
INSERT INTO t_category (category_code, category_name, description) VALUES
('CAT001', '办公设备', '打印机、复印机、扫描仪等办公设备'),
('CAT002', '电子设备', '电脑、显示器、投影仪等电子设备'),
('CAT003', '家具', '办公桌、椅子、文件柜等家具'),
('CAT004', '交通工具', '汽车、电动车等交通工具');

-- 6条示例资产数据（分布在不同分类下，状态各不同）
INSERT INTO t_asset (asset_code, asset_name, category_id, status, value, purchase_date, location, description) VALUES
('AST20260001', '惠普激光打印机',   1, 'available', 2999.00, '2025-03-15', 'A栋3楼打印室',   '惠普M1136激光一体机'),
('AST20260002', '联想笔记本电脑',   2, 'borrowed',  5999.00, '2025-06-20', 'B栋2楼研发部',   'ThinkPad E14 i7处理器'),
('AST20260003', '实木办公桌',       3, 'available', 1500.00, '2024-11-10', 'A栋5楼经理室',   '1.4米实木办公桌'),
('AST20260004', '爱普生投影仪',     2, 'disposed',  3500.00, '2023-08-05', 'C栋1楼会议室',   '已报废处理'),
('AST20260005', '比亚迪电动轿车',   4, 'available', 159800.00, '2025-01-18', '地下车库B2',   '秦PLUS DM-i 2025款'),
('AST20260006', '华为平板电脑',     2, 'borrowed',  3299.00, '2025-09-01', 'B栋3楼设计部',   'MatePad Pro 12.6英寸');
