-- ============================================
-- XL监狱综合管理平台 - 数据库初始化脚本
-- ============================================

-- 罪犯信息表
CREATE TABLE IF NOT EXISTS `prison_prisoner` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '罪犯ID',
    `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
    `prisoner_no` varchar(50) NOT NULL COMMENT '罪犯编号',
    `name` varchar(50) NOT NULL COMMENT '姓名',
    `gender` tinyint NOT NULL COMMENT '性别：1-男 2-女',
    `birthday` date DEFAULT NULL COMMENT '出生日期',
    `id_card` varchar(18) DEFAULT NULL COMMENT '身份证号',
    `ethnicity` varchar(50) DEFAULT NULL COMMENT '民族',
    `native_place` varchar(100) DEFAULT NULL COMMENT '籍贯',
    `education` tinyint DEFAULT NULL COMMENT '文化程度：1-文盲 2-小学 3-初中 4-高中 5-中专 6-大专 7-本科 8-硕士 9-博士',
    `occupation` varchar(50) DEFAULT NULL COMMENT '入狱前职业',
    `address` varchar(500) DEFAULT NULL COMMENT '家庭住址',
    `crime` varchar(200) NOT NULL COMMENT '罪名',
    `sentence_years` int DEFAULT 0 COMMENT '刑期（年）',
    `sentence_months` int DEFAULT 0 COMMENT '刑期（月）',
    `life_imprisonment` tinyint DEFAULT 0 COMMENT '是否无期：0-否 1-是',
    `death_sentence_reprieve` tinyint DEFAULT 0 COMMENT '是否死缓：0-否 1-是',
    `court_name` varchar(100) DEFAULT NULL COMMENT '判决法院',
    `judgment_date` date DEFAULT NULL COMMENT '判决日期',
    `judgment_no` varchar(50) DEFAULT NULL COMMENT '判决书编号',
    `original_sentence` varchar(100) DEFAULT NULL COMMENT '原判刑期',
    `imprisonment_date` date DEFAULT NULL COMMENT '入狱日期',
    `release_date` date DEFAULT NULL COMMENT '释放日期',
    `supervision_level` tinyint DEFAULT 2 COMMENT '监管等级：1-严管 2-普管 3-宽管',
    `risk_level` tinyint DEFAULT 1 COMMENT '风险等级：1-低风险 2-中风险 3-高风险 4-极高风险',
    `prison_area_id` bigint DEFAULT NULL COMMENT '监区ID',
    `prison_cell_id` bigint DEFAULT NULL COMMENT '监室ID',
    `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态：1-在押 2-已释放 3-已死亡 4-假释',
    `remark` varchar(500) DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_prisoner_no` (`prisoner_no`, `tenant_id`),
    KEY `idx_name` (`name`),
    KEY `idx_id_card` (`id_card`),
    KEY `idx_status` (`status`)
) ENGINE=InnoDB COMMENT='罪犯信息表';

-- 监区信息表
CREATE TABLE IF NOT EXISTS `prison_area` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '监区ID',
    `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
    `name` varchar(50) NOT NULL COMMENT '监区名称',
    `code` varchar(50) NOT NULL COMMENT '监区编码',
    `type` tinyint DEFAULT NULL COMMENT '监区类型：1-普通监区 2-严管监区 3-医院 4-禁闭室',
    `capacity` int DEFAULT NULL COMMENT '容纳人数',
    `current_count` int DEFAULT 0 COMMENT '当前人数',
    `sort` int DEFAULT 0 COMMENT '排序',
    `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态：1-启用 2-禁用',
    `remark` varchar(500) DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_code` (`code`, `tenant_id`),
    KEY `idx_sort` (`sort`)
) ENGINE=InnoDB COMMENT='监区信息表';

-- 监室信息表
CREATE TABLE IF NOT EXISTS `prison_cell` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '监室ID',
    `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
    `area_id` bigint NOT NULL COMMENT '所属监区ID',
    `name` varchar(50) NOT NULL COMMENT '监室名称',
    `code` varchar(50) NOT NULL COMMENT '监室编码',
    `capacity` int DEFAULT NULL COMMENT '床位数量',
    `current_count` int DEFAULT 0 COMMENT '当前人数',
    `sort` int DEFAULT 0 COMMENT '排序',
    `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态：1-启用 2-禁用',
    `remark` varchar(500) DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_code` (`code`, `tenant_id`),
    KEY `idx_area_id` (`area_id`)
) ENGINE=InnoDB COMMENT='监室信息表';

-- 计分考核表
CREATE TABLE IF NOT EXISTS `prison_score` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '记录ID',
    `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
    `prisoner_id` bigint NOT NULL COMMENT '罪犯ID',
    `prisoner_no` varchar(50) NOT NULL COMMENT '罪犯编号',
    `year` int NOT NULL COMMENT '考核年份',
    `month` int NOT NULL COMMENT '考核月份',
    `base_score` decimal(10,2) DEFAULT 0.00 COMMENT '基础分',
    `reward_score` decimal(10,2) DEFAULT 0.00 COMMENT '加分',
    `penalty_score` decimal(10,2) DEFAULT 0.00 COMMENT '扣分',
    `total_score` decimal(10,2) DEFAULT 0.00 COMMENT '总分',
    `level` tinyint DEFAULT NULL COMMENT '考核等级：1-优秀 2-良好 3-合格 4-不合格',
    `assessor_id` bigint DEFAULT NULL COMMENT '考核人ID',
    `assessor_name` varchar(50) DEFAULT NULL COMMENT '考核人姓名',
    `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态：1-待审核 2-已通过 3-已驳回',
    `remark` varchar(500) DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_prisoner_id` (`prisoner_id`),
    KEY `idx_year_month` (`year`, `month`)
) ENGINE=InnoDB COMMENT='计分考核表';

-- 危险评估表
CREATE TABLE IF NOT EXISTS `prison_risk_assessment` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '评估ID',
    `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
    `prisoner_id` bigint NOT NULL COMMENT '罪犯ID',
    `prisoner_no` varchar(50) NOT NULL COMMENT '罪犯编号',
    `assessment_type` tinyint NOT NULL COMMENT '评估类型：1-入狱评估 2-定期评估 3-专项评估',
    `assessment_date` date NOT NULL COMMENT '评估日期',
    `violence_score` decimal(10,2) DEFAULT 0.00 COMMENT '暴力倾向得分',
    `escape_score` decimal(10,2) DEFAULT 0.00 COMMENT '脱逃倾向得分',
    `suicide_score` decimal(10,2) DEFAULT 0.00 COMMENT '自杀倾向得分',
    `total_score` decimal(10,2) DEFAULT 0.00 COMMENT '综合得分',
    `risk_level` tinyint NOT NULL COMMENT '风险等级：1-低风险 2-中风险 3-高风险 4-极高风险',
    `risk_factors` varchar(500) DEFAULT NULL COMMENT '风险因素',
    `suggestions` varchar(500) DEFAULT NULL COMMENT '管控建议',
    `assessor_id` bigint DEFAULT NULL COMMENT '评估人ID',
    `assessor_name` varchar(50) DEFAULT NULL COMMENT '评估人姓名',
    `next_assessment_date` date DEFAULT NULL COMMENT '下次评估日期',
    `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态：1-待审核 2-已通过',
    `remark` varchar(500) DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_prisoner_id` (`prisoner_id`),
    KEY `idx_assessment_date` (`assessment_date`)
) ENGINE=InnoDB COMMENT='危险评估表';

-- 消费记录表
CREATE TABLE IF NOT EXISTS `prison_consumption` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '记录ID',
    `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
    `prisoner_id` bigint NOT NULL COMMENT '罪犯ID',
    `prisoner_no` varchar(50) NOT NULL COMMENT '罪犯编号',
    `type` tinyint NOT NULL COMMENT '类型：1-存款 2-消费 3-转账',
    `amount` decimal(12,2) NOT NULL COMMENT '金额',
    `balance` decimal(12,2) DEFAULT 0.00 COMMENT '账户余额',
    `goods_name` varchar(100) DEFAULT NULL COMMENT '商品名称',
    `goods_count` int DEFAULT 1 COMMENT '商品数量',
    `order_no` varchar(64) DEFAULT NULL COMMENT '订单号',
    `trade_time` datetime NOT NULL COMMENT '交易时间',
    `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态：1-成功 2-失败',
    `remark` varchar(500) DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_prisoner_id` (`prisoner_id`),
    KEY `idx_trade_time` (`trade_time`),
    KEY `idx_type` (`type`)
) ENGINE=InnoDB COMMENT='消费记录表';

-- 问卷模板表
CREATE TABLE IF NOT EXISTS `prison_questionnaire` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '问卷ID',
    `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
    `title` varchar(200) NOT NULL COMMENT '问卷标题',
    `type` tinyint NOT NULL COMMENT '问卷类型：1-心理测评 2-行为评估 3-满意度调查',
    `description` varchar(500) DEFAULT NULL COMMENT '问卷说明',
    `total_score` decimal(10,2) DEFAULT 100.00 COMMENT '总分',
    `pass_score` decimal(10,2) DEFAULT 60.00 COMMENT '及格分',
    `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态：1-草稿 2-已发布 3-已禁用',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_type` (`type`),
    KEY `idx_status` (`status`)
) ENGINE=InnoDB COMMENT='问卷模板表';

-- 问卷问题表
CREATE TABLE IF NOT EXISTS `prison_question` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '问题ID',
    `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
    `questionnaire_id` bigint NOT NULL COMMENT '所属问卷ID',
    `title` varchar(500) NOT NULL COMMENT '问题标题',
    `type` tinyint NOT NULL COMMENT '问题类型：1-单选 2-多选 3-填空 4-评分',
    `options` text COMMENT '选项JSON：[{label:"选项1",score:10},...]',
    `score` decimal(10,2) DEFAULT 0.00 COMMENT '分值',
    `sort` int DEFAULT 0 COMMENT '排序',
    `is_required` bit(1) DEFAULT b'1' COMMENT '是否必答',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_questionnaire_id` (`questionnaire_id`)
) ENGINE=InnoDB COMMENT='问卷问题表';

-- 问卷答题记录表
CREATE TABLE IF NOT EXISTS `prison_questionnaire_record` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '记录ID',
    `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
    `questionnaire_id` bigint NOT NULL COMMENT '问卷ID',
    `prisoner_id` bigint NOT NULL COMMENT '罪犯ID',
    `prisoner_no` varchar(50) NOT NULL COMMENT '罪犯编号',
    `total_score` decimal(10,2) DEFAULT 0.00 COMMENT '得分',
    `pass_status` tinyint DEFAULT NULL COMMENT '是否及格：1-及格 2-不及格',
    `answer_time` datetime NOT NULL COMMENT '答题时间',
    `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态：1-已完成 2-已过期',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_questionnaire_id` (`questionnaire_id`),
    KEY `idx_prisoner_id` (`prisoner_id`)
) ENGINE=InnoDB COMMENT='问卷答题记录表';

-- 罪犯监区变动记录表
CREATE TABLE IF NOT EXISTS `prison_prisoner_area_log` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
    `prisoner_id` bigint NOT NULL COMMENT '罪犯ID',
    `from_area_id` bigint DEFAULT NULL COMMENT '原监区ID',
    `from_cell_id` bigint DEFAULT NULL COMMENT '原监室ID',
    `to_area_id` bigint NOT NULL COMMENT '新监区ID',
    `to_cell_id` bigint NOT NULL COMMENT '新监室ID',
    `change_type` varchar(20) NOT NULL COMMENT '变动类型：调监区、调监室、入监、出监',
    `reason` varchar(500) DEFAULT NULL COMMENT '变动原因',
    `approve_no` varchar(50) DEFAULT NULL COMMENT '批准文号',
    `operate_by` bigint NOT NULL COMMENT '操作人ID',
    `operate_name` varchar(50) DEFAULT NULL COMMENT '操作人姓名',
    `operate_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_prisoner_id` (`prisoner_id`),
    KEY `idx_operate_time` (`operate_time`)
) ENGINE=InnoDB COMMENT='罪犯监区变动记录表';


