
-- 密码设备
CREATE TABLE sp_device (
    id                    BIGINT NOT NULL   COMMENT 'id',
    name                  VARCHAR(255) COMMENT '名称',
    device_number         VARCHAR(255) COMMENT '编号',
    manufacturer          VARCHAR(255) COMMENT '制造厂商',
    manufacturer_model    VARCHAR(255) COMMENT '制造厂商型号',
    service_ip            VARCHAR(30) COMMENT '服务ip',
    service_port          INT COMMENT '服务端口',
    manage_ip             VARCHAR(30) COMMENT '管理ip',
    manage_port           INT COMMENT '管理端口',
    access_credentials    VARCHAR(1000) COMMENT '访问凭证',
    status                VARCHAR(25) DEFAULT '' COMMENT '设备状态',
    group_id              BIGINT NOT NULL DEFAULT 0  COMMENT '设备组id',
    group_name            VARCHAR(255) NOT NULL DEFAULT ''  COMMENT '设备组名称',
    weight                INT DEFAULT 1 COMMENT '负载时权重',
    remark            VARCHAR(500) NOT NULL DEFAULT ''  COMMENT '备注',
    update_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    create_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    PRIMARY KEY (id)
);

CREATE TABLE sp_device_group (
    id                BIGINT NOT NULL  COMMENT 'id',
    name              VARCHAR(255) NOT NULL DEFAULT '' COMMENT '服务名称',
    remark            VARCHAR(500) NOT NULL DEFAULT ''  COMMENT '备注',
    update_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    create_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    PRIMARY KEY (id)
);

-- 密码服务
CREATE TABLE sp_crypto_service (
    id                BIGINT NOT NULL  COMMENT 'id',
    name              VARCHAR(255) NOT NULL DEFAULT '' COMMENT '服务名称',
    device_group_id   BIGINT NOT NULL DEFAULT 0  COMMENT '设备组id',
    device_group_name VARCHAR(255) NOT NULL DEFAULT ''  COMMENT '设备组名称',
    status            VARCHAR(50) NOT NULL DEFAULT '' COMMENT '状态',
    creator_id        BIGINT  COMMENT '创建者id',
    remark            VARCHAR(500) NOT NULL DEFAULT ''  COMMENT '备注',
    update_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    create_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    PRIMARY KEY (id)
);

-- 密码服务api
CREATE TABLE sp_crypto_service_api (
    id                BIGINT NOT NULL  COMMENT 'id',
    crypto_service_id BIGINT NOT NULL  COMMENT '密码服务id',
    api_group         VARCHAR(255) NOT NULL DEFAULT ''  COMMENT 'API分组',
    api_code          VARCHAR(255) NOT NULL DEFAULT ''  COMMENT 'API标识',
    api_name          VARCHAR(255) NOT NULL DEFAULT ''  COMMENT 'API名称',
    remark            VARCHAR(500) NOT NULL DEFAULT ''  COMMENT '备注',
    update_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    create_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    PRIMARY KEY (id)
);

-- 业务应用
CREATE TABLE sp_application (
    id                BIGINT NOT NULL  COMMENT 'id',
    name              VARCHAR(255) NOT NULL DEFAULT '' COMMENT '应用名称',
    bind_service      VARCHAR(1020)   NOT NULL DEFAULT '' COMMENT '密码服务 ,分隔',
    app_key           VARCHAR(100) NOT NULL DEFAULT '' COMMENT 'app_key',
    app_secret        VARCHAR(100) NOT NULL DEFAULT '' COMMENT 'app_secret',
    status            VARCHAR(50) NOT NULL DEFAULT '' COMMENT '状态',
    creator_id        BIGINT  COMMENT '创建者id',
    remark            VARCHAR(500) NOT NULL DEFAULT ''  COMMENT '备注',
    update_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    create_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    PRIMARY KEY (id)
);

-- 密钥模版
CREATE TABLE sp_key_template (
    id                BIGINT NOT NULL  COMMENT 'id',
    code              VARCHAR(100) NOT NULL DEFAULT ''  COMMENT '编号',
    name              VARCHAR(255) NOT NULL DEFAULT ''  COMMENT '名称',
    key_type          VARCHAR(30)  NOT NULL DEFAULT ''  COMMENT '密钥类型',
    key_alg           VARCHAR(30)  NOT NULL DEFAULT ''  COMMENT '密钥算法',
    key_length        INT NOT NULL DEFAULT 0  COMMENT '密钥长度',
    key_usage         INT NOT NULL DEFAULT 0  COMMENT '密钥用途',
    check_alg         VARCHAR(30)  NOT NULL DEFAULT ''  COMMENT '校验算法',
    check_value       VARCHAR(255)  NOT NULL DEFAULT ''  COMMENT '校验值',
    valid_time        INT NOT NULL DEFAULT 0  COMMENT '有效期',
    valid_unit        VARCHAR(30)  NOT NULL DEFAULT ''  COMMENT '有效期时间单位',
    start_after_create_time   INT NOT NULL DEFAULT 0  COMMENT '创建后多长时间生效',
    start_after_create_unit   VARCHAR(30)  NOT NULL DEFAULT ''  COMMENT '创建后多长时间生效时间单位',
    remark             VARCHAR(500) NOT NULL DEFAULT ''  COMMENT '备注',
    update_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    create_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    PRIMARY KEY (id)
);

-- 密钥信息
CREATE TABLE sp_key_info (
    id                BIGINT NOT NULL  COMMENT 'id',
    application_id    BIGINT NOT NULL  COMMENT '应用id',
    key_template_id   BIGINT NOT NULL  COMMENT '模版id',
    code              VARCHAR(100) NOT NULL DEFAULT ''  COMMENT '编号',
    key_type          VARCHAR(30)  NOT NULL DEFAULT ''  COMMENT '密钥分类',
    key_alg           VARCHAR(30)  NOT NULL DEFAULT ''  COMMENT '密钥算法',
    key_length        INT NOT NULL DEFAULT 0  COMMENT '密钥长度',
    key_usage         INT NOT NULL DEFAULT 0  COMMENT '密钥用途',
    status            VARCHAR(30)  NOT NULL DEFAULT ''  COMMENT '密钥状态',
    check_alg         VARCHAR(30)  NOT NULL DEFAULT ''  COMMENT '校验算法',
    check_value       VARCHAR(255)  NOT NULL DEFAULT ''  COMMENT '校验值',
    effective_time    TIMESTAMP  COMMENT '启用时间',
    expired_time      TIMESTAMP  COMMENT '停用时间',
    remark            VARCHAR(500) NOT NULL DEFAULT ''  COMMENT '备注',
    deleted           TINYINT      NOT NULL DEFAULT 0,
    update_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    create_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    delete_time       TIMESTAMP,
    PRIMARY KEY (id)
);

-- 密钥记录
CREATE TABLE sp_key_record (
    id                BIGINT NOT NULL  COMMENT 'id',
    key_id            BIGINT NOT NULL  COMMENT '密钥id',
    key_index         VARCHAR(100) NOT NULL DEFAULT ''  COMMENT '密钥索引',
    key_data          VARCHAR(255)  NOT NULL DEFAULT ''  COMMENT '密钥密文',
    pub_key           VARCHAR(400)  NOT NULL DEFAULT ''  COMMENT '公钥',
    check_alg         VARCHAR(30)  NOT NULL DEFAULT ''  COMMENT '校验算法',
    check_value       VARCHAR(255)  NOT NULL DEFAULT ''  COMMENT '校验值',
    effective_time    TIMESTAMP  COMMENT '生效时间',
    expired_time         TIMESTAMP  COMMENT '过期时间',
    remark             VARCHAR(500) NOT NULL DEFAULT ''  COMMENT '备注',
    update_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    create_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    PRIMARY KEY (id)
);

-- 证书请求记录
CREATE TABLE sp_key_csr (
    id                BIGINT NOT NULL  COMMENT 'id',
    application_id    BIGINT NOT NULL  COMMENT '应用id',
    key_id            BIGINT NOT NULL  COMMENT '密钥id',
    key_record_id     BIGINT NOT NULL  COMMENT '密钥记录id',
    subject           VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'DN',
    key_data          VARCHAR(255)  NOT NULL DEFAULT ''  COMMENT '密钥密文',
    pub_key           VARCHAR(400)  NOT NULL DEFAULT ''  COMMENT '公钥',
    csr_txt           VARCHAR(2000) COMMENT '证书',
    remark             VARCHAR(500) NOT NULL DEFAULT ''  COMMENT '备注',
    update_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    create_time       TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    PRIMARY KEY (id)
);