CREATE TABLE IF NOT EXISTS sample_info
(
    id                  BIGINT       NOT NULL PRIMARY KEY COMMENT '主键',
    project_name        VARCHAR(255) NULL COMMENT '项目名称',
    project_no          VARCHAR(255) NULL COMMENT '项目编号',
    type                VARCHAR(30)  NOT NULL COMMENT '类型：病理pathological 动物样本检测animal 动物影像检测animalImage',
    status              VARCHAR(5)   NOT NULL COMMENT '状态',

    applicant_id        bigint       NULL COMMENT '申请人id',
    applicant_name      varchar(255) NULL COMMENT '申请人名称',
    applicant_phone     varchar(255) NULL COMMENT '申请人电话',
    applicant_email     varchar(100) NULL COMMENT '申请人邮箱',
    apply_time          DATETIME     NULL COMMENT '申请时间',
    inspector           JSON         NULL COMMENT '检测人员',
    remark              TEXT         NULL COMMENT '备注',

    depart_leader_id    BIGINT       NULL COMMENT '部门负责人Id',
    depart_leader_name  varchar(255) NULL COMMENT '部门负责人姓名',
    project_manage_id   BIGINT       NULL COMMENT '项目管理部审核人',
    project_manage_name varchar(255) NULL COMMENT '项目管理部审核人姓名',

    approval_no         VARCHAR(255) NULL COMMENT '批准编号',
    revision_no         VARCHAR(255) NULL COMMENT '修订号',
    receipt_date        VARCHAR(30)         NULL COMMENT '收件日期',
    approval_date       VARCHAR(30)         NULL COMMENT '批准日期',
    expire_date         VARCHAR(30)         NULL COMMENT '失效日期',
    ky_id               BIGINT       NULL COMMENT '科研Id',

    deleted             char(1)      NOT null default '0' COMMENT '是否被删除',
    create_by           varchar(255) COMMENT '创建人',
    create_time         DATETIME     NULL COMMENT '创建时间',
    update_by           varchar(255) COMMENT '更新人',
    update_time         DATETIME     NULL COMMENT '更新时间',
    tenant_id           bigint COMMENT '租户ID',
    dept_id             bigint COMMENT '部门ID',
    version             int          NOT NULL DEFAULT '1' COMMENT '提交版本号'
) COMMENT '样本送检流程信息';


CREATE TABLE IF NOT EXISTS sample_animal
(
    id                           BIGINT       NOT NULL PRIMARY KEY COMMENT '主键',
    sample_id                    BIGINT       not null COMMENT '样本ID',
    apply_type                   VARCHAR(100) NOT NULL COMMENT '申请检测：小动物检测 大动物检测 特殊检测',

    pi_id                        bigint       NULL COMMENT '项目负责人id',
    pi_name                      varchar(50)  NULL COMMENT '项目负责人名称',
    pi_phone                     varchar(20)  NULL COMMENT '项目负责人电话',
    pi_email                     varchar(100) NULL COMMENT '项目负责人邮箱',
    pi_office                    varchar(255) NULL COMMENT '项目负责人办公室',

    preliminary_notes            TEXT         NULL COMMENT '前期实验结果补充说明',
    detection_parameters         TEXT         NULL COMMENT '检测指标及样本数',
    special_detection_parameters TEXT         NULL COMMENT '特殊检测指标及样本数',

    sample_check_num             varchar(255) NULL COMMENT '送检样本总数量',
    check_item_num               varchar(255) NULL COMMENT '检测指标数',
    sample_volume                varchar(255) NULL COMMENT '送样体积',
    animal_species               varchar(255) NULL COMMENT '动物种属',
    animal_species_other         varchar(255) NULL COMMENT '动物种属（其他）',
    sample_num                   text         NULL COMMENT '样本编号信息',
    handover_remark              varchar(255) NULL COMMENT '交接备注信息',

    pathogen_sample_type         varchar(255) NULL COMMENT '病原样本类型',
    scientific_sample_type       varchar(255) NULL COMMENT '科研项目送检样本类型',

    deleted                      char(1)      NOT null default '0' COMMENT '是否被删除',
    create_by                    varchar(255) COMMENT '创建人',
    create_time                  DATETIME     NULL COMMENT '创建时间',
    update_by                    varchar(255) COMMENT '更新人',
    update_time                  DATETIME     NULL COMMENT '更新时间',
    tenant_id                    bigint COMMENT '租户ID',
    dept_id                      bigint COMMENT '部门ID'
) COMMENT '动物样本送检';

CREATE TABLE IF NOT EXISTS inspection_commission
(
    id               BIGINT       NOT NULL AUTO_INCREMENT PRIMARY KEY,
    sample_animal_id BIGINT       NOT NULL comment '动物样本送检id',
    detect_type      VARCHAR(255) NOT NULL comment '检测类型：猪 猴 犬',
    submit_unit      VARCHAR(255) NULL comment '送检单位',
    submit_user_id   BIGINT       NULL comment '送检人id',
    submit_user_name VARCHAR(50)  NULL comment '送检人姓名',
    submit_phone     VARCHAR(20)  NULL comment '联系电话',
    submit_email     VARCHAR(100) NULL comment '邮箱',
    report_address   VARCHAR(200) NULL comment '报告邮寄地址',
    submit_date      DATE         NULL comment '送检日期',
    ext              json         NULL COMMENT '扩展字段'
) comment '检测委托表';

CREATE TABLE IF NOT EXISTS commission_detail
(
    id                       INT         NOT NULL AUTO_INCREMENT PRIMARY KEY,
    inspection_commission_id BIGINT      NOT NULL comment '检测委托表id',
    sample_type              VARCHAR(50) NOT NULL comment '样本类型：血清、血浆',
    sample_quantity          VARCHAR(10) NULL comment '样本数量',
    sample_code              VARCHAR(50) NULL comment '样本编号'
) comment '检测样本详情';

ALTER TABLE commission_detail
    ADD CONSTRAINT commission_detail_unique UNIQUE KEY (inspection_commission_id, sample_type);


CREATE TABLE IF NOT EXISTS `sample_check_order`
(
    `id`                bigint       NOT NULL PRIMARY KEY,
    `sample_animal_id`  bigint       NULL COMMENT '动物样本送检id',
    `apply_type`        varchar(255) NULL COMMENT '申请单类型',
    `order_code`        varchar(255) NULL COMMENT '送检单编号',
    `apply_user_id`     bigint       NULL COMMENT '申请人id',
    `apply_user_name`   varchar(255) NULL COMMENT '申请人姓名',
    `apply_user_mobile` varchar(255) NULL COMMENT '申请人电话',
    `apply_user_email`  varchar(255) NULL COMMENT '申请人邮箱',
    `apply_date`        datetime     NULL COMMENT '申请日期',
    `send_user_id`      bigint       NULL COMMENT '样本送检人id',
    send_user_name      varchar(255) NULL COMMENT '样本送检人姓名',
    `receive_user_id`   bigint       NULL COMMENT '样本接收人id',
    receive_user_name   varchar(255) NULL COMMENT '样本接收人姓名',

    `create_by`         varchar(64)  NOT NULL COMMENT '创建人',
    `update_by`         varchar(64)  NULL COMMENT '修改人',
    `create_time`       datetime     NULL COMMENT '创建时间',
    `update_time`       datetime     NULL COMMENT '修改时间',
    `deleted`           char(1)      NOT NULL DEFAULT '0' COMMENT '删除标记，0未删除，1已删除',
    `tenant_id`         bigint       NULL COMMENT '所属租户',
    `dept_id`           bigint       NULL COMMENT '所属部门ID'
) COMMENT '样本送检申请单';


CREATE TABLE IF NOT EXISTS `sample_check_item`
(
    `id`             int          NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `check_order_id` bigint       NOT NULL COMMENT '送检申请单id',

    `code`           varchar(255) NULL COMMENT '样本编号',
    `animal_species` varchar(255) NULL COMMENT '动物种属',
    `name`           varchar(255) NULL COMMENT '检测项目',
    `target`         varchar(255) NULL COMMENT '检测指标',
    `num`            varchar(255) NULL COMMENT '样本数量',
    `volume`         varchar(255) NULL COMMENT '送检样本体积',
    `send_date`      varchar(255) NULL COMMENT '送检日期',
    `quick_check`    varchar(255) NULL COMMENT '24h急检',
    `need_back`      varchar(255) NULL COMMENT '样本需返还',
    `remark`         TEXT         NULL COMMENT '备注或其他需求',

    `create_by`      varchar(64)  NOT NULL COMMENT '创建人',
    `update_by`      varchar(64)  NULL COMMENT '修改人',
    `create_time`    datetime     NULL COMMENT '创建时间',
    `update_time`    datetime     NULL COMMENT '修改时间',
    `deleted`        char(1)      NOT NULL DEFAULT '0' COMMENT '删除标记，0未删除，1已删除',
    `tenant_id`      bigint       NULL COMMENT '所属租户ID',
    `dept_id`        bigint       NULL COMMENT '所属部门ID'
) COMMENT '样本送检申请单详情';



CREATE TABLE IF NOT EXISTS sample_pathological
(
    id                   BIGINT       not null PRIMARY KEY COMMENT '主键',
    sample_id            BIGINT       not null COMMENT '样本ID',
    subject_name         VARCHAR(255) COMMENT '课题名称',
    subject_leader_id    BIGINT COMMENT '课题负责人',
    subject_leader_name  VARCHAR(50) COMMENT '课题负责人姓名',

    qcfs                 VARCHAR(50) COMMENT '取材方式',
    gdy                  VARCHAR(50) COMMENT '固定液类型',
    gdy_qt               VARCHAR(255) COMMENT '固定液类型-其他',

    xkts                 INT          not null default '-1' COMMENT '修块脱水样本数量',
    slbm                 INT          not null default '-1' COMMENT '石蜡包埋样本数量',

    sllk                 INT          not null default '-1' COMMENT '石蜡切片-蜡块数量',
    slqp                 INT          not null default '-1' COMMENT '石蜡切片-切片数量',
    bdyb                 INT          not null default '-1' COMMENT '冰冻切片-样本数量',
    bdqp                 INT          not null default '-1' COMMENT '冰冻切片-切片数量',

    he                   INT          not null default '-1' COMMENT 'HE染色切片数量',
    masson               INT          not null default '-1' COMMENT 'MASSON染色切片数量',
    psr                  INT          not null default '-1' COMMENT 'PSR染色切片数量',
    pas                  INT          not null default '-1' COMMENT 'PAS染色切片数量',
    yho                  INT          not null default '-1' COMMENT '油红O染色切片数量',
    fjb                  INT          not null default '-1' COMMENT 'FJB染色切片数量',
    evg                  INT          not null default '-1' COMMENT 'EVG染色切片数量',
    tunel                INT          not null default '-1' COMMENT 'TUNEL染色切片数量',
    wga                  INT          not null default '-1' COMMENT 'WGA染色切片数量',
    qtqp                 INT          not null default '-1' COMMENT '其他染色切片数量',

    myzhqp               INT          not null default '-1' COMMENT '免疫组化染色切片数量',
    myzhzb               VARCHAR(255) null COMMENT '免疫组化具体指标',
    myygqp               INT          not null default '-1' COMMENT '免疫荧光染色切片数量',
    myygzb               VARCHAR(255) null COMMENT '免疫荧光具体指标',
    qpsmqp               INT          not null default '-1' COMMENT '切片扫描切片数量',
    qpsmrs               VARCHAR(255) null COMMENT '切片扫描染色类型',
    ypqp                 INT          not null default '-1' COMMENT '阅片切片数量',
    yprs                 VARCHAR(255) null COMMENT '阅片切片染色类型',
    ypsm                 VARCHAR(255) null COMMENT '阅片说明',

    jczs                 VARCHAR(50) COMMENT '检测种属（动物）',
    jczs_qt              VARCHAR(255) COMMENT '检测种属（其他）',
    jcff                 VARCHAR(50) COMMENT '检测方法（IF）',
    jcff_qt              VARCHAR(255) COMMENT '检测方法（其他）',

    special_requirements VARCHAR(255) COMMENT '特殊要求：加急，重复',
    pre_experiment       TINYINT(1)   NOT NULL DEFAULT 0 COMMENT '预实验',
    pre_subject_name     VARCHAR(255) COMMENT '预实验课题名称',
    pre_applicant_id     BIGINT COMMENT '预实验申请人id',
    pre_applicant_name   VARCHAR(100) COMMENT '预实验申请人姓名',
    pre_applicant_leader_id     BIGINT COMMENT '预实验申请人负责人id',
    pre_applicant_leader_name   VARCHAR(100) COMMENT '预实验申请人负责人姓名',
    pre_content          VARCHAR(255) COMMENT '预实验的内容',
    pre_conclusion       TEXT COMMENT '预实验的结论',
    pre_date             VARCHAR(30) COMMENT '预实验的实验日期',
    pre_people           JSON COMMENT '预实验的实验人员',

    deleted              char(1)      NOT null default '0' COMMENT '是否被删除',
    create_by            varchar(255) COMMENT '创建人',
    create_time          DATETIME     NULL COMMENT '创建时间',
    update_by            varchar(255) COMMENT '更新人',
    update_time          DATETIME     NULL COMMENT '更新时间',
    tenant_id            bigint COMMENT '租户ID',
    dept_id              bigint COMMENT '部门ID'
) COMMENT '病理计划申请表';


CREATE TABLE IF NOT EXISTS pathological_pre_experiment
(
    id              BIGINT not null PRIMARY KEY auto_increment COMMENT '主键',
    pathological_id BIGINT not null COMMENT '病理ID',
    detect_method   VARCHAR(30) COMMENT '检测方法  IF IHC',

    qplx            VARCHAR(255) COMMENT '切片类型',
    fblx            VARCHAR(255) COMMENT '封闭类型',
    xftj            VARCHAR(500) COMMENT '修复条件',
    ktxx            VARCHAR(255) COMMENT '抗体信息',
    zzbh            VARCHAR(255) COMMENT '组织编号',
    syjg            TEXT COMMENT '实验结果'
) COMMENT '病理预实验表';

CREATE TABLE `sys_error_log`
(
    `id`          bigint       NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `error_id`    varchar(50)  NULL COMMENT '错误id',
    `uri`         varchar(255) NULL COMMENT '地址',
    `type`        varchar(255) NULL COMMENT '错误类型',
    `msg`         text         NULL COMMENT '错误说明',
    `detail`      longtext     NULL COMMENT '具体描述',
    `create_time` timestamp    NULL NULL COMMENT '创建时间',
    `create_by`   bigint       NULL COMMENT '创建人'
) comment '系统异常记录';

CREATE TABLE sample_animal_imaging
(
    id                 BIGINT PRIMARY KEY COMMENT 'ID',
    sample_id          BIGINT   not null COMMENT '样本ID',
    research_group     VARCHAR(100) COMMENT '课题组',
    requirements       VARCHAR(255) COMMENT '需求说明',
    experiment_purpose TEXT COMMENT '实验目的',
    experiment_period  VARCHAR(100) COMMENT '实验周期',
    contrast            VARCHAR(300) COMMENT '对比方法',
    -- 动物信息
    animal_type        VARCHAR(255) COMMENT '动物类型',
    animal_type_other  VARCHAR(255) COMMENT '动物类型-其他',
    animal_strain      VARCHAR(100) COMMENT '品系',
    animal_quantity    INT COMMENT '数量',
    animal_gender      VARCHAR(50) COMMENT '性别',
    animal_age         VARCHAR(50) COMMENT '周/月龄',
    model_info         TEXT COMMENT '建模信息及分组',
    expected_result    TEXT COMMENT '预期结果',
    has_prior_imaging  TEXT COMMENT '是否已有该类型成像的动物影像',
    prior_publications TEXT COMMENT '前期发表论文',
    demand             VARCHAR(300) COMMENT '需求说明',
    reference          VARCHAR(300) COMMENT '参考文献',

    deleted            char(1)  NOT null default '0' COMMENT '是否被删除',
    create_by          varchar(255) COMMENT '创建人',
    create_time        DATETIME NULL COMMENT '创建时间',
    update_by          varchar(255) COMMENT '更新人',
    update_time        DATETIME NULL COMMENT '更新时间',
    tenant_id          bigint COMMENT '租户ID',
    dept_id            bigint COMMENT '部门ID'
) COMMENT '动物影像检测分析申请表';

-- 子表1：活体成像检测专用信息
CREATE TABLE live_imaging_detail
(
    id                    INT PRIMARY KEY AUTO_INCREMENT COMMENT '活体成像记录ID',
    imaging_id            bigint NOT NULL COMMENT '动物影像ID',
    imaging_type          VARCHAR(100) COMMENT '活体成像类型',
    fluorophore           VARCHAR(100) COMMENT '荧光基团/荧光染料',
    excitation_wavelength VARCHAR(20) COMMENT '激发光波长（单位：mm）',
    emission_wavelength   VARCHAR(20) COMMENT '发射光波长（单位：mm）',
    luciferase            VARCHAR(100) COMMENT '荧光素酶',
    luciferin_substrate   VARCHAR(100) COMMENT '荧光素底物',
    specific_requirements TEXT COMMENT '具体需求指标'
) COMMENT '活体成像检测详情表';

-- 子表2：超声检测专用信息
CREATE TABLE ultrasound_detail
(
    id                 INT PRIMARY KEY AUTO_INCREMENT COMMENT '超声检测记录ID',
    imaging_id         bigint NOT NULL COMMENT '动物影像ID',
    heart_area         VARCHAR(255) COMMENT '心脏区域',
    heart_area_other   VARCHAR(255) COMMENT '心脏区域-其他',
    vessel_area        VARCHAR(255) COMMENT '血管区域',
    vessel_area_other  VARCHAR(255) COMMENT '血管区域-其他',
    abdomen_area       VARCHAR(255) COMMENT '腹部区域',
    abdomen_area_other VARCHAR(255) COMMENT '腹部区域-其他',
    heart_data         VARCHAR(255) COMMENT '心超数据',
    other_data         VARCHAR(255) COMMENT '其他数据',
    image_requirements TEXT COMMENT '图片要求'
) COMMENT '超声检测详情表';

-- 子表3：Micro-CT检测专用信息
CREATE TABLE micro_ct_detail
(
    id                          INT PRIMARY KEY AUTO_INCREMENT COMMENT 'Micro-CT检测记录ID',
    imaging_id                  bigint NOT NULL COMMENT '动物影像ID',
    bone_area                   VARCHAR(255) COMMENT '骨骼目标区域',
    bone_area_other             VARCHAR(255) COMMENT '骨骼目标区域-其他',
    bone_implant_position       VARCHAR(255) COMMENT '骨植入位置',
    bone_implant_position_other VARCHAR(255) COMMENT '骨植入位置-其他',
    trepanning_diameter         VARCHAR(20) COMMENT '开孔直径（单位：mm）',
    trepanning_depth            VARCHAR(20) COMMENT '开孔深度（单位：mm）',
    preprocess                  VARCHAR(255) COMMENT '材料预处理',
    preprocess_other            VARCHAR(255) COMMENT '材料预处理-其他',
    material_properties         VARCHAR(255) COMMENT '材料性质',
    material_properties_other   VARCHAR(255) COMMENT '材料性质-其他',
    data_requirements           VARCHAR(255) COMMENT '数据要求',
    data_requirements_other     VARCHAR(255) COMMENT '数据要求-其他',
    image_requirements          TEXT COMMENT '图片要求',
    roi_form                    TEXT COMMENT 'roi形态',
    roi_other1                  TEXT COMMENT 'roi-其他（重点观察缺损区内部）',
    roi_other2                  TEXT COMMENT 'roi-其他要求'
) COMMENT 'Micro-CT检测详情表';