From c5909c6266631cb0ce2c2a43c08f60726f2197ad Mon Sep 17 00:00:00 2001 From: tangweijie <877588133@qq.com> Date: Thu, 22 Jan 2026 09:29:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E5=92=8C=E5=89=8D=E7=AB=AF=E7=BC=96=E8=AF=91=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E5=8F=8ADocker=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 build.sh 脚本用于编译后端 Java 项目和前端 Vue3 项目,并生成部署包 - 新增 docker-compose.yml 文件以配置 MySQL、Redis、后端和前端服务 - 新增 application-prod.yaml 配置文件用于后端服务 - 新增 Dockerfile 用于后端服务的容器化部署 - 新增 SQL 初始化脚本 xlcp_dev.sql - 新增部署文档 DEPLOYMENT.md 详细描述部署流程和环境要求 --- build.sh | 162 +++++ deploy/config/application-prod.yaml | 150 +++++ deploy/docker-compose.yml | 126 ++++ deploy/docker/backend/Dockerfile | 31 + deploy/sql/xlcp_dev.sql | 912 ++++++++++++++++++++++++++++ docs/DEPLOYMENT.md | 756 +++++++++++++++++++++++ frontend | 2 +- 7 files changed, 2138 insertions(+), 1 deletion(-) create mode 100755 build.sh create mode 100644 deploy/config/application-prod.yaml create mode 100644 deploy/docker-compose.yml create mode 100644 deploy/docker/backend/Dockerfile create mode 100644 deploy/sql/xlcp_dev.sql create mode 100644 docs/DEPLOYMENT.md diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..e52e316 --- /dev/null +++ b/build.sh @@ -0,0 +1,162 @@ +#!/bin/bash + +# ============================================ +# XL监狱综合管理平台 - 前后端编译脚本 +# ============================================ +# 功能: +# 1. 编译后端 Java 项目 +# 2. 编译前端 Vue3 项目 +# 3. 生成部署包 +# +# 使用方法: +# 1. 修改下面的配置(可选) +# 2. 执行: bash build.sh +# +# 依赖: +# - Maven 3.8+ +# - Node.js 16+ +# - pnpm +# ============================================ + +# 配置 +PROJECT_DIR="/Volumes/Dpan/github/xlcp" +BACKEND_DIR="${PROJECT_DIR}/backend" +FRONTEND_DIR="${PROJECT_DIR}/frontend" +BACKEND_OUTPUT_DIR="${PROJECT_DIR}/deploy/backend" +FRONTEND_OUTPUT_DIR="${PROJECT_DIR}/deploy/frontend" + +# Maven 配置 +MAVEN_PROFILE="prod" +JAVA_VERSION="17" + +# 颜色输出 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +echo -e "${GREEN}========================================${NC}" +echo -e "${GREEN}XL监狱综合管理平台 - 前后端编译脚本${NC}" +echo -e "${GREEN}========================================${NC}" +echo "" + +# 检查依赖 +echo -e "${BLUE}📋 检查编译环境...${NC}" + +# 检查 Maven +if ! command -v mvn &> /dev/null; then + echo -e "${RED}❌ 错误: 未找到 Maven,请先安装 Maven${NC}" + exit 1 +fi +echo -e "${GREEN}✅ Maven 版本: $(mvn -version | head -1)${NC}" + +# 检查 Node.js +if ! command -v node &> /dev/null; then + echo -e "${RED}❌ 错误: 未找到 Node.js,请先安装 Node.js${NC}" + exit 1 +fi +echo -e "${GREEN}✅ Node.js 版本: $(node -v)${NC}" + +# 检查 pnpm +if ! command -v pnpm &> /dev/null; then + echo -e "${YELLOW}⚠️ 未找到 pnpm,尝试使用 npm...${NC}" + PACKAGE_MANAGER="npm" +else + echo -e "${GREEN}✅ pnpm 版本: $(pnpm -v)${NC}" + PACKAGE_MANAGER="pnpm" +fi + +echo "" +echo -e "${GREEN}开始编译...${NC}" +echo "" + +# ============================================ +# 第一部分:编译后端 +# ============================================ +echo -e "${BLUE}🏗️ 编译后端项目...${NC}" +echo "" + +cd "${BACKEND_DIR}" + +# 清理并编译 +echo -e "${YELLOW}📦 清理并编译后端...${NC}" +mvn clean package -DskipTests -Dmaven.javadoc.skip=true -q + +if [ $? -eq 0 ]; then + echo -e "${GREEN}✅ 后端编译成功!${NC}" + + # 查找生成的 JAR 文件 + JAR_FILE=$(find "${BACKEND_DIR}/yudao-server/target" -name "yudao-server-*.jar" 2>/dev/null | head -1) + if [ -n "$JAR_FILE" ]; then + echo -e "${GREEN}📁 生成的 JAR 文件: ${JAR_FILE}${NC}" + + # 复制到部署目录 + mkdir -p "${BACKEND_OUTPUT_DIR}" + cp "${JAR_FILE}" "${BACKEND_OUTPUT_DIR}/" + echo -e "${GREEN}📁 已复制到部署目录: ${BACKEND_OUTPUT_DIR}/$(basename $JAR_FILE)${NC}" + fi +else + echo -e "${RED}❌ 后端编译失败!${NC}" + exit 1 +fi + +echo "" + +# ============================================ +# 第二部分:编译前端 +# ============================================ +echo -e "${BLUE}🎨 编译前端项目...${NC}" +echo "" + +cd "${FRONTEND_DIR}" + +# 检查依赖是否已安装 +if [ ! -d "node_modules" ]; then + echo -e "${YELLOW}📥 安装前端依赖...${NC}" + $PACKAGE_MANAGER install + if [ $? -ne 0 ]; then + echo -e "${RED}❌ 前端依赖安装失败!${NC}" + exit 1 + fi +fi + +# 清理并编译生产版本 +echo -e "${YELLOW}📦 编译前端生产版本...${NC}" +$PACKAGE_MANAGER build:prod + +if [ $? -eq 0 ]; then + echo -e "${GREEN}✅ 前端编译成功!${NC}" + + # 复制到部署目录 + mkdir -p "${FRONTEND_OUTPUT_DIR}" + + # 复制编译产物 + if [ -d "dist" ]; then + rm -rf "${FRONTEND_OUTPUT_DIR}/dist" + cp -r "dist" "${FRONTEND_OUTPUT_DIR}/" + echo -e "${GREEN}📁 已复制到部署目录: ${FRONTEND_OUTPUT_DIR}/dist${NC}" + fi +else + echo -e "${RED}❌ 前端编译失败!${NC}" + exit 1 +fi + +echo "" + +# ============================================ +# 完成 +# ============================================ +echo -e "${GREEN}========================================${NC}" +echo -e "${GREEN}🎉 编译完成!${NC}" +echo -e "${GREEN}========================================${NC}" +echo "" +echo -e "${YELLOW}部署文件位置:${NC}" +echo -e " - 后端: ${BACKEND_OUTPUT_DIR}/" +echo -e " - 前端: ${FRONTEND_OUTPUT_DIR}/dist/" +echo "" +echo -e "${YELLOW}下一步:${NC}" +echo -e " 1. 部署后端 JAR 文件" +echo -e " 2. 部署前端静态文件" +echo -e " 3. 配置 Nginx" +echo "" diff --git a/deploy/config/application-prod.yaml b/deploy/config/application-prod.yaml new file mode 100644 index 0000000..4df6e08 --- /dev/null +++ b/deploy/config/application-prod.yaml @@ -0,0 +1,150 @@ +spring: + application: + name: xl-prison-server + + # 数据源配置(使用新建的 MySQL 容器) + datasource: + dynamic: + datasource: + master: + # 使用 Docker 服务名连接 MySQL + url: jdbc:mysql://mysql:3306/prison?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&useUnicode=true&characterEncoding=utf8 + username: root + password: Prison2024!@ + driver-class-name: com.mysql.cj.jdbc.Driver + slave: + # 从库配置(可选,如果不需要可以删除或保持与主库相同) + url: jdbc:mysql://mysql:3306/prison?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&useUnicode=true&characterEncoding=utf8 + username: root + password: Prison2024!@ + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + # 连接池配置 + maximum-pool-size: 20 + minimum-idle: 5 + idle-timeout: 600000 + connection-timeout: 30000 + max-lifetime: 1800000 + pool-name: PrisonHikariCP + # 连接健康检测 + connection-test-query: SELECT 1 + + # Redis 配置(使用新建的 Redis 容器) + data: + redis: + host: redis + port: 6379 + password: Prison2024!@ + database: 0 + timeout: 10000ms + lettuce: + pool: + max-active: 20 + max-wait: -1ms + max-idle: 10 + min-idle: 0 + shutdown-timeout: 100ms + + # 文件上传配置 + servlet: + multipart: + enabled: true + max-file-size: 100MB + max-request-size: 100MB + file-size-threshold: 2KB + + # Jackson 配置 + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + serialization: + write-dates-as-timestamps: false + +# 服务器配置 +server: + port: 48080 + servlet: + context-path: / + compression: + enabled: true + mime-types: application/json,application/xml,text/html,text/xml,text/plain + error: + include-message: always + include-binding-errors: always + +# 应用配置 +app: + name: XL监狱综合管理平台 + version: 1.0.0 + + # 验证码配置 + captcha: + enabled: true + type: math + + # 文件上传配置 + upload: + path: ./data/upload + avatar-path: ./data/upload/avatar + cache-path: ./data/upload/cache + + # XSS 过滤配置 + security: + xss: + enabled: true + exclude-urls: + - /admin/ck/uploadImage + - /admin/oss/uploadToAliCloudV2 + - /admin/oss/uploadToTencentCloudV2 + +# 日志配置 +logging: + level: + root: INFO + cn.iocoder.yudao: DEBUG + cn.iocoder.yudao.module.prison: DEBUG + file: + name: logs/yudao-server.log + logback: + rollingpolicy: + max-history: 30 + max-file-size: 100MB + total-size-cap: 3GB + +# MyBatis Plus 配置 +mybatis-plus: + mapper-locations: classpath*:mapper/**/*.xml + type-aliases-package: cn.iocoder.yudao.module.*.dal.dataobject + global-config: + db-config: + id-type: auto + logic-delete-field: deleted + logic-delete-value: 1 + logic-not-delete-value: 0 + banner: false + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + +# Actuator 监控配置 +management: + endpoints: + web: + exposure: + include: health,info,metrics,prometheus + base-path: /actuator + endpoint: + health: + show-details: always + metrics: + tags: + application: ${spring.application.name} + +# LLM 配置(用于危险评估智能分析) +llm: + local: + base-url: ${LLM_BASE_URL:http://127.0.0.1:5001/v1} + api-key: ${LLM_API_KEY:} + model: ${LLM_MODEL:} + timeout-seconds: ${LLM_TIMEOUT:120} diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml new file mode 100644 index 0000000..7026b67 --- /dev/null +++ b/deploy/docker-compose.yml @@ -0,0 +1,126 @@ +version: "3.8" + +name: xl-prison-system + +# 复用 RAGFlow 平台的 Docker 镜像创建独立的中间件服务 +# MySQL: 基于 ragflow-mysql-1 镜像 (mysql:8.0.39) +# Redis: 基于 ragflow-redis-1 镜像 (redis:6-alpine / valkey:8) + +services: + # MySQL 数据库(复用 RAGFlow 镜像) + mysql: + image: mysql:8.0.39 + container_name: xl-prison-mysql + restart: unless-stopped + environment: + MYSQL_ROOT_PASSWORD: Prison2024!@ + MYSQL_DATABASE: prison + MYSQL_CHARACTER_SET_SERVER: utf8mb4 + MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci + ports: + - "3306:3306" + volumes: + - ./data/mysql:/var/lib/mysql + - ./sql:/docker-entrypoint-initdb.d:ro + command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pPrison2024!@"] + interval: 10s + timeout: 5s + retries: 5 + networks: + - xl-prison-network + deploy: + resources: + limits: + memory: 2G + reservations: + memory: 512M + + # Redis 缓存(复用 RAGFlow 镜像) + redis: + image: redis:6-alpine + container_name: xl-prison-redis + restart: unless-stopped + ports: + - "6379:6379" + volumes: + - ./data/redis:/data + command: redis-server --requirepass Prison2024!@ --appendonly yes --maxmemory 512mb --maxmemory-policy allkeys-lru + healthcheck: + test: ["CMD", "redis-cli", "-a", "Prison2024!@", "ping"] + interval: 10s + timeout: 5s + retries: 5 + networks: + - xl-prison-network + deploy: + resources: + limits: + memory: 512M + reservations: + memory: 256M + + # 后端服务 + backend: + build: + context: ./backend + dockerfile: Dockerfile + container_name: xl-prison-backend + restart: unless-stopped + ports: + - "48080:48080" + environment: + SPRING_PROFILES_ACTIVE: prod + JAVA_OPTS: -Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/app/heapdump -Djava.security.egd=file:/dev/./urandom + volumes: + - ./backend/config:/app/config:ro + - ./logs/backend:/app/logs + depends_on: + mysql: + condition: service_healthy + redis: + condition: service_healthy + networks: + - xl-prison-network + deploy: + resources: + limits: + memory: 2G + reservations: + memory: 512M + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:48080/actuator/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 60s + + # 前端服务 + frontend: + image: nginx:alpine + container_name: xl-prison-frontend + restart: unless-stopped + ports: + - "8080:80" + volumes: + - ./frontend/dist:/usr/share/nginx/html:ro + - ./frontend/nginx.conf:/etc/nginx/nginx.conf:ro + - ./logs/nginx:/var/log/nginx + depends_on: + - backend + networks: + - xl-prison-network + deploy: + resources: + limits: + memory: 256M + reservations: + memory: 128M + +networks: + xl-prison-network: + driver: bridge + ipam: + config: + - subnet: 172.20.0.0/16 diff --git a/deploy/docker/backend/Dockerfile b/deploy/docker/backend/Dockerfile new file mode 100644 index 0000000..10eacee --- /dev/null +++ b/deploy/docker/backend/Dockerfile @@ -0,0 +1,31 @@ +# 基础镜像:使用 Eclipse Temurin JDK 17 +FROM eclipse-temurin:17-jre-alpine + +# 维护者信息 +LABEL maintainer="XL Prison System " + +# 设置时区 +ENV TZ=Asia/Shanghai +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +# 创建非 root 用户运行应用 +RUN addgroup -g 1000 app && adduser -u 1000 -G app -s /bin/sh -D app + +# 设置工作目录 +WORKDIR /app + +# 创建必要的目录 +RUN mkdir -p logs heapdump config && chown -R app:app /app + +# 切换到非 root 用户 +USER app + +# 暴露端口 +EXPOSE 48080 + +# 健康检查 +HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ + CMD curl -f http://localhost:48080/actuator/health || exit 1 + +# 启动命令 +ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/deploy/sql/xlcp_dev.sql b/deploy/sql/xlcp_dev.sql new file mode 100644 index 0000000..57a503e --- /dev/null +++ b/deploy/sql/xlcp_dev.sql @@ -0,0 +1,912 @@ +/* + Navicat Premium Data Transfer + + Source Server : 192.168.10.130 + Source Server Type : MySQL + Source Server Version : 80403 (8.4.3) + Source Host : 192.168.10.130:3306 + Source Schema : xlcp_dev + + Target Server Type : MySQL + Target Server Version : 80403 (8.4.3) + File Encoding : 65001 + + Date: 21/01/2026 16:05:49 + + Note: 本文件已根据代码实体类进行了精简,只保留代码中涉及的字段 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for prison_prisoner +-- 服刑人员信息表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_prisoner`; +CREATE TABLE `prison_prisoner` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '罪犯ID', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + `prisoner_no` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '罪犯编号', + `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '姓名', + `gender` tinyint NOT NULL COMMENT '性别:1-男 2-女', + `birthday` date DEFAULT NULL COMMENT '出生日期', + `id_card` varchar(18) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '身份证号', + `photo` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '照片URL', + `ethnicity` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '民族', + `native_place` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '籍贯', + `education` tinyint DEFAULT NULL COMMENT '文化程度:1-文盲 2-小学 3-初中 4-高中 5-中专 6-大专 7-本科 8-硕士 9-博士', + `occupation` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '入狱前职业', + `address` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '家庭住址', + `crime` varchar(200) COLLATE utf8mb4_unicode_ci 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) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '判决法院', + `judgment_date` date DEFAULT NULL COMMENT '判决日期', + `judgment_no` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '判决书编号', + `original_sentence` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '原判刑期', + `imprisonment_date` date DEFAULT NULL COMMENT '入狱日期', + `release_date` date DEFAULT NULL COMMENT '释放日期', + `release_type` tinyint DEFAULT NULL COMMENT '释放类型', + `release_reason` varchar(500) COLLATE utf8mb4_unicode_ci 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', + `sub_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) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `marital_status` tinyint DEFAULT NULL COMMENT '婚姻状态:1-未婚 2-已婚 3-离异 4-丧偶', + `crime_type` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '罪名类型', + `sentence` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '刑期', + `children` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL 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 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='罪犯信息表'; + +-- ---------------------------- +-- Table structure for prison_area +-- 监区信息表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_area`; +CREATE TABLE `prison_area` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '监区ID', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '监区名称', + `code` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '监区编码', + `parent_id` bigint NOT NULL DEFAULT '0' COMMENT '父级ID,0表示顶级监区', + `level` tinyint NOT NULL DEFAULT '1' COMMENT '级别:1-监区(大队) 2-分监区(中队)', + `type` tinyint DEFAULT NULL COMMENT '监区类型:1-普通监区 2-严管监区 3-集训监区 4-出监监区 5-医院 6-禁闭室', + `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) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci 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 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='监区信息表'; + +-- ---------------------------- +-- Table structure for prison_cell +-- 监室信息表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_cell`; +CREATE TABLE `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) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '监室名称', + `code` varchar(50) COLLATE utf8mb4_unicode_ci 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) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci 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 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='监室信息表'; + +-- ---------------------------- +-- Table structure for prison_score +-- 计分考核表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_score`; +CREATE TABLE `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) COLLATE utf8mb4_unicode_ci 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) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '考核人姓名', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1-待审核 2-已通过 3-已驳回', + `prison_area_id` bigint DEFAULT NULL COMMENT '监区ID', + `prison_cell_id` bigint DEFAULT NULL COMMENT '监室ID', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci 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`), + KEY `idx_prison_score_prison_area_id` (`prison_area_id`), + KEY `idx_prison_score_prison_cell_id` (`prison_cell_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='计分考核表'; + +-- ---------------------------- +-- Table structure for prison_score_rule +-- 考核规则配置表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_score_rule`; +CREATE TABLE `prison_score_rule` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '规则ID', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + `category` tinyint NOT NULL COMMENT '类别:1-劳动改造 2-教育改造 3-日常行为 4-卫生纪律 5-加分项 6-扣分项', + `item_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '项目名称', + `item_code` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '项目编码(唯一)', + `score` decimal(10,2) NOT NULL COMMENT '分值', + `max_daily_score` decimal(10,2) DEFAULT NULL COMMENT '日最高分限制', + `max_monthly_score` decimal(10,2) DEFAULT NULL COMMENT '月最高分限制', + `description` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '规则说明', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1-启用 2-禁用', + `sort` int DEFAULT '0' COMMENT '排序', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci 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_item_code` (`item_code`,`tenant_id`), + KEY `idx_category` (`category`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='考核规则配置表'; + +-- ---------------------------- +-- Table structure for prison_score_detail +-- 考核记录明细表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_score_detail`; +CREATE TABLE `prison_score_detail` ( + `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) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '罪犯编号', + `record_date` date NOT NULL COMMENT '记录日期', + `rule_id` bigint NOT NULL COMMENT '规则ID', + `score` decimal(10,2) NOT NULL COMMENT '得分', + `score_type` tinyint NOT NULL COMMENT '类型:1-加分 2-扣分', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `recorder_id` bigint DEFAULT NULL COMMENT '记录人ID', + `recorder_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '记录人姓名', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1-有效 2-作废', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci 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_record_date` (`record_date`), + KEY `idx_rule_id` (`rule_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='考核记录明细表'; + +-- ---------------------------- +-- Table structure for prison_risk_assessment +-- 危险评估表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_risk_assessment`; +CREATE TABLE `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) COLLATE utf8mb4_unicode_ci 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) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '风险因素', + `suggestions` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '管控建议', + `assessor_id` bigint DEFAULT NULL COMMENT '评估人ID', + `assessor_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '评估人姓名', + `next_assessment_date` date DEFAULT NULL COMMENT '下次评估日期', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1-待审核 2-已通过', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci 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 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='危险评估表'; + +-- ---------------------------- +-- Table structure for prison_risk +-- 风险评估表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_risk`; +CREATE TABLE `prison_risk` ( + `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) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '罪犯编号', + `prisoner_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '罪犯姓名', + `assessment_type` tinyint NOT NULL DEFAULT '1' COMMENT '评估类型:1-入监评估 2-定期评估 3-专项评估 4-出监评估', + `assessment_date` date NOT NULL COMMENT '评估日期', + `overall_score` decimal(5,2) DEFAULT NULL COMMENT '综合风险得分', + `risk_level` tinyint DEFAULT NULL COMMENT '风险等级:1-低风险 2-中风险 3-高风险 4-极高风险', + `mental_state` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '精神状态评估', + `escape_risk` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '脱逃风险评估', + `violence_risk` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '暴力倾向评估', + `revolt_risk` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '抗改风险评估', + `self_harm_risk` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '自杀自伤风险评估', + `recommendation` text COLLATE utf8mb4_unicode_ci COMMENT '评估建议', + `assessor` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '评估人', + `assess_method` tinyint DEFAULT NULL COMMENT '评估方式:1-心理测评 2-行为观察 3-面谈评估 4-综合评估', + `item_scores` text COLLATE utf8mb4_unicode_ci COMMENT '评估项目得分JSON', + `conclusion` text COLLATE utf8mb4_unicode_ci COMMENT '评估结论', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `risk_score` int DEFAULT NULL COMMENT '风险评分', + `risk_description` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '风险描述', + `risk_factors` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '风险因素', + `suggestions` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '建议措施', + `assessor_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '评估人姓名', + `status` tinyint DEFAULT '1' COMMENT '状态:1-待评估 2-评估中 3-已完成 4-已取消', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci 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_prison_risk_prisoner_id` (`prisoner_id`), + KEY `idx_prison_risk_assessment_type` (`assessment_type`), + KEY `idx_prison_risk_assessment_date` (`assessment_date`), + KEY `idx_prison_risk_risk_level` (`risk_level`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='风险评估表'; + +-- ---------------------------- +-- Table structure for prison_consumption +-- 消费记录表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_consumption`; +CREATE TABLE `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) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '罪犯编号', + `type` tinyint NOT NULL DEFAULT '1' COMMENT '类型:1-购物 2-餐饮 3-医疗 4-通讯 5-其他', + `total_amount` decimal(10,2) NOT NULL COMMENT '订单总金额', + `balance` decimal(12,2) DEFAULT '0.00' COMMENT '账户余额', + `order_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '订单号', + `trade_time` datetime NOT NULL COMMENT '交易时间', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1-成功 2-失败', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci 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`), + KEY `idx_prison_consumption_order_no` (`order_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='消费记录表'; + +-- ---------------------------- +-- Table structure for prison_consumption_detail +-- 消费明细表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_consumption_detail`; +CREATE TABLE `prison_consumption_detail` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '明细ID', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + `consumption_id` bigint NOT NULL COMMENT '消费订单ID', + `prisoner_id` bigint NOT NULL COMMENT '罪犯ID(冗余,便于查询)', + `goods_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品名称', + `goods_code` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商品编码', + `goods_price` decimal(10,2) NOT NULL COMMENT '商品单价', + `goods_count` int NOT NULL COMMENT '商品数量', + `subtotal` decimal(10,2) NOT NULL COMMENT '小计金额', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人', + `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除', + PRIMARY KEY (`id`), + KEY `idx_consumption_detail_consumption_id` (`consumption_id`), + KEY `idx_consumption_detail_prisoner_id` (`prisoner_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='消费明细表'; + +-- ---------------------------- +-- Table structure for prison_questionnaire +-- 问卷模板表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_questionnaire`; +CREATE TABLE `prison_questionnaire` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '问卷ID', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + `title` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '问卷标题', + `type` tinyint NOT NULL COMMENT '问卷类型:1-心理测评 2-行为评估 3-满意度调查', + `description` varchar(500) COLLATE utf8mb4_unicode_ci 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-已禁用', + `cover_image` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '封面图片URL', + `instruction` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '填写说明', + `estimated_time` int DEFAULT NULL COMMENT '预计耗时(分钟)', + `part_count` int DEFAULT NULL COMMENT '分区数量', + `allow_anonymous` tinyint(1) DEFAULT NULL COMMENT '是否允许匿名:0-否 1-是', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci 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 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='问卷模板表'; + +-- ---------------------------- +-- Table structure for prison_question +-- 问卷问题表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_question`; +CREATE TABLE `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) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '问题标题', + `type` tinyint NOT NULL COMMENT '问题类型:1-单选 2-多选 3-填空 4-评分', + `options` text COLLATE utf8mb4_unicode_ci COMMENT '选项JSON:[{label:"选项1",score:10},...]', + `score` decimal(10,2) DEFAULT '0.00' COMMENT '分值', + `sort` int DEFAULT '0' COMMENT '排序', + `part_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '分区名称', + `part_sort` int DEFAULT NULL COMMENT '分区排序', + `help_text` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '帮助说明', + `placeholder` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '占位提示', + `default_value` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '默认值', + `auto_fill_type` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '自动填充类型:NONE-无 AUTO-自动 MANUAL-手动', + `auto_fill_source` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '自动填充来源', + `display_condition` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '显示条件JSON', + `min_value` decimal(10,2) DEFAULT NULL COMMENT '最小值', + `max_value` decimal(10,2) DEFAULT NULL COMMENT '最大值', + `is_required` bit(1) DEFAULT b'1' COMMENT '是否必答', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci 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 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='问卷问题表'; + +-- ---------------------------- +-- Table structure for prison_questionnaire_record +-- 问卷答题记录表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_questionnaire_record`; +CREATE TABLE `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', + `questionnaire_name` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '问卷名称', + `prisoner_id` bigint NOT NULL COMMENT '罪犯ID', + `prisoner_no` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '罪犯编号', + `prisoner_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '罪犯姓名', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1-待测评 2-测评中 3-已完成 4-已过期', + `start_time` datetime DEFAULT NULL COMMENT '开始时间', + `end_time` datetime DEFAULT 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 '答题时间', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `deadline` datetime DEFAULT NULL COMMENT '截止日期', + `objective_score` decimal(10,2) DEFAULT '0.00' COMMENT '客观题得分', + `subjective_score` decimal(10,2) DEFAULT '0.00' COMMENT '主观题得分', + `pass_score` decimal(10,2) DEFAULT NULL COMMENT '及格分数', + `risk_level` tinyint DEFAULT NULL COMMENT '风险等级:1-高风险 2-中风险 3-低风险', + `evaluator_id` bigint DEFAULT NULL COMMENT '评阅人ID', + `evaluator_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '评阅人姓名', + `evaluate_time` datetime DEFAULT NULL COMMENT '评阅时间', + `participant_count` int DEFAULT '0' COMMENT '参与人数', + `completed_count` int DEFAULT '0' COMMENT '完成人数', + `duration` int DEFAULT NULL COMMENT '答题用时(秒)', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`), + KEY `idx_questionnaire_id` (`questionnaire_id`), + KEY `idx_prisoner_id` (`prisoner_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='问卷答题记录表'; + +-- ---------------------------- +-- Table structure for prison_answer +-- 问卷答题详情表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_answer`; +CREATE TABLE `prison_answer` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '答题记录ID', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + `assessment_record_id` bigint NOT NULL COMMENT '测评记录ID', + `question_id` bigint NOT NULL COMMENT '问题ID', + `questionnaire_id` bigint DEFAULT NULL COMMENT '问卷ID(冗余)', + `prisoner_id` bigint NOT NULL COMMENT '罪犯ID', + `question_type` tinyint NOT NULL DEFAULT '1' COMMENT '问题类型:1-单选 2-多选 3-填空 4-评分 5-日期 6-数字', + `answer_text` text COLLATE utf8mb4_unicode_ci COMMENT '答案内容(填空题、评分题等)', + `option_ids` text COLLATE utf8mb4_unicode_ci COMMENT '选项ID列表(JSON数组,如 [1,2,3])', + `score` decimal(10,2) DEFAULT NULL COMMENT '得分', + `is_correct` tinyint(1) DEFAULT NULL COMMENT '是否正确:null-未评分 false-错误 true-正确', + `duration` int DEFAULT NULL COMMENT '答题时间(秒)', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci 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_prison_answer_assessment_record_id` (`assessment_record_id`), + KEY `idx_prison_answer_question_id` (`question_id`), + KEY `idx_prison_answer_prisoner_id` (`prisoner_id`), + KEY `idx_prison_answer_questionnaire_id` (`questionnaire_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='问卷答题记录表'; + +-- ---------------------------- +-- Table structure for prison_prisoner_area_log +-- 罪犯监区变动记录表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_prisoner_area_log`; +CREATE TABLE `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_sub_area_id` bigint DEFAULT NULL COMMENT '原分监区ID', + `from_cell_id` bigint DEFAULT NULL COMMENT '原监室ID', + `to_area_id` bigint NOT NULL COMMENT '新监区ID', + `to_sub_area_id` bigint DEFAULT NULL COMMENT '新分监区ID', + `to_cell_id` bigint NOT NULL COMMENT '新监室ID', + `change_type` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '变动类型:调监区、调监室、入监、出监', + `reason` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '变动原因', + `approve_no` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '批准文号', + `operate_by` bigint NOT NULL COMMENT '操作人ID', + `operate_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人姓名', + `operate_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `prisoner_no` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '罪犯编号', + PRIMARY KEY (`id`), + KEY `idx_prisoner_id` (`prisoner_id`), + KEY `idx_operate_time` (`operate_time`), + KEY `idx_operate_time_change_type` (`operate_time`,`change_type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='罪犯监区变动记录表'; + +-- ---------------------------- +-- Table structure for prison_warning +-- 预警管理表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_warning`; +CREATE TABLE `prison_warning` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '预警ID', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + `title` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '预警标题', + `content` text COLLATE utf8mb4_unicode_ci COMMENT '预警内容', + `type` tinyint NOT NULL DEFAULT '1' COMMENT '预警类型:1-安全预警 2-监管预警 3-改造预警 4-生产预警 5-生活卫生预警 6-其他', + `level` tinyint NOT NULL DEFAULT '1' COMMENT '预警等级:1-一般 2-重要 3-紧急 4-严重', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '预警状态:1-待核实 2-已核实 3-已处置 4-已解除', + `source` tinyint NOT NULL DEFAULT '1' COMMENT '预警来源:1-民警报告 2-监控系统 3-举报 4-罪犯自首 5-智能分析 6-其他', + `situation_id` bigint DEFAULT NULL COMMENT '关联狱情ID', + `area_id` bigint DEFAULT NULL COMMENT '关联监区ID', + `cell_id` bigint DEFAULT NULL COMMENT '关联监室ID', + `alert_time` datetime DEFAULT NULL COMMENT '预警时间', + `verify_time` datetime DEFAULT NULL COMMENT '核实时间', + `verifier` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '核实人', + `verify_result` text COLLATE utf8mb4_unicode_ci COMMENT '核实结果', + `handle_time` datetime DEFAULT NULL COMMENT '处置时间', + `handler` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '处置人', + `handle_method` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '处置方式', + `handle_result` text COLLATE utf8mb4_unicode_ci COMMENT '处置结果', + `release_time` datetime DEFAULT NULL COMMENT '解除时间', + `releaser` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '解除人', + `release_reason` text COLLATE utf8mb4_unicode_ci COMMENT '解除原因', + `occur_time` datetime DEFAULT NULL COMMENT '发生时间', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `prisoner_id` bigint DEFAULT NULL COMMENT '关联罪犯ID', + PRIMARY KEY (`id`), + KEY `idx_prison_warning_status` (`status`), + KEY `idx_prison_warning_level` (`level`), + KEY `idx_prison_warning_type` (`type`), + KEY `idx_prison_warning_situation_id` (`situation_id`), + KEY `idx_prison_warning_area_id` (`area_id`), + KEY `idx_prison_warning_cell_id` (`cell_id`), + KEY `idx_prison_warning_alert_time` (`alert_time`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预警管理表'; + +-- ---------------------------- +-- Table structure for prison_situation +-- 狱情收集表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_situation`; +CREATE TABLE `prison_situation` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '狱情ID', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + `title` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '标题', + `content` text COLLATE utf8mb4_unicode_ci COMMENT '详情内容', + `category` tinyint NOT NULL DEFAULT '1' COMMENT '分类:1-监管安全 2-教育改造 3-生活卫生 4-生产安全 5-狱内案件 6-其他', + `level` tinyint NOT NULL DEFAULT '1' COMMENT '等级:1-一般 2-重要 3-紧急', + `source` tinyint NOT NULL DEFAULT '1' COMMENT '来源:1-民警报告 2-监控系统 3-举报 4-罪犯自首 5-其他', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1-待处理 2-处理中 3-已处理', + `area_id` bigint DEFAULT NULL COMMENT '关联监区ID', + `cell_id` bigint DEFAULT NULL COMMENT '关联监室ID', + `reporter` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '报告人', + `handler` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '处理人', + `handle_time` datetime DEFAULT NULL COMMENT '处理时间', + `handle_result` text COLLATE utf8mb4_unicode_ci COMMENT '处理结果', + `occur_time` datetime DEFAULT NULL COMMENT '发生时间', + `location` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地点', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `type` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '类型', + PRIMARY KEY (`id`), + KEY `idx_prison_situation_status` (`status`), + KEY `idx_prison_situation_category` (`category`), + KEY `idx_prison_situation_level` (`level`), + KEY `idx_prison_situation_area_id` (`area_id`), + KEY `idx_prison_situation_cell_id` (`cell_id`), + KEY `idx_prison_situation_occur_time` (`occur_time`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='狱情收集表'; + +-- ---------------------------- +-- Table structure for prison_evaluation_dimension +-- 评估维度配置表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_evaluation_dimension`; +CREATE TABLE `prison_evaluation_dimension` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '维度ID', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + `template_id` bigint NOT NULL COMMENT '所属模板ID', + `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '维度名称', + `code` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '维度编码', + `description` text COLLATE utf8mb4_unicode_ci COMMENT '维度描述', + `dimension_type` int DEFAULT NULL COMMENT '维度类型:1-基本信息 2-犯罪情况 3-服刑表现 4-心理评估 5-风险评估 6-消费行为 7-劳动表现 8-家庭帮教 9-综合分析 10-管教意见', + `weight` decimal(5,2) DEFAULT NULL COMMENT '权重(百分比)', + `score_rule` int DEFAULT NULL COMMENT '评分规则:1-分值越高越好 2-分值越低越好 3-区间评分', + `max_score` decimal(10,2) DEFAULT NULL COMMENT '最大分值', + `min_score` decimal(10,2) DEFAULT NULL COMMENT '最小分值', + `pass_score` decimal(10,2) DEFAULT NULL COMMENT '及格分值', + `evaluation_method` int DEFAULT NULL COMMENT '评估方式:1-问卷测评 2-量表评分 3-行为观察 4-AI分析 5-综合评定', + `output_format` tinyint DEFAULT '1' COMMENT '输出格式:1-文本 2-段落 3-列表 4-评分 5-富文本', + `editor_type` tinyint DEFAULT '1' COMMENT '编辑器类型:1-文本框 2-富文本 3-下拉选择 4-评分组件', + `ai_enabled` tinyint(1) DEFAULT '0' COMMENT '是否AI生成:0-否 1-是', + `ai_prompt` text COLLATE utf8mb4_unicode_ci COMMENT 'AI提示词,用于指导AI生成该维度的内容', + `questions` text COLLATE utf8mb4_unicode_ci COMMENT '问题列表(JSON格式)', + `status` int DEFAULT '1' COMMENT '是否启用:1-启用 2-禁用', + `data_sources` text COLLATE utf8mb4_unicode_ci COMMENT '数据源绑定', + `is_required` tinyint(1) DEFAULT '1' COMMENT '是否必填:0-否 1-是', + `sort` int DEFAULT '0' COMMENT '排序', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `deleted` bit(1) DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`), + KEY `idx_prison_evaluation_dimension_template` (`template_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='评估维度配置表'; + +-- ---------------------------- +-- Table structure for prison_evaluation_dimension_data +-- 报告维度数据表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_evaluation_dimension_data`; +CREATE TABLE `prison_evaluation_dimension_data` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '数据ID', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + `report_id` bigint NOT NULL COMMENT '报告ID', + `dimension_id` bigint NOT NULL COMMENT '维度配置ID', + `dimension_code` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '维度编码', + `dimension_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '维度名称', + `dimension_type` int DEFAULT NULL COMMENT '维度类型:1-心理测评 2-行为表现 3-教育改造 4-劳动表现 5-人际交往 6-自评/他评', + `score` decimal(10,2) DEFAULT NULL COMMENT '得分', + `full_score` decimal(10,2) DEFAULT NULL COMMENT '满分', + `weighted_score` decimal(10,2) DEFAULT NULL COMMENT '权重得分', + `level` int DEFAULT NULL COMMENT '评级:1-优秀 2-良好 3-一般 4-较差', + `conclusion` text COLLATE utf8mb4_unicode_ci COMMENT '维度结论', + `comment` text COLLATE utf8mb4_unicode_ci COMMENT '维度评语', + `ai_analysis` text COLLATE utf8mb4_unicode_ci COMMENT 'AI分析内容', + `answer_details` text COLLATE utf8mb4_unicode_ci COMMENT '回答详情(JSON格式)', + `sort` int DEFAULT NULL COMMENT '排序', + `content` text COLLATE utf8mb4_unicode_ci COMMENT '填充内容', + `is_ai_generated` tinyint(1) DEFAULT '0' COMMENT '是否AI生成:0-否 1-是', + `is_modified` tinyint(1) DEFAULT '0' COMMENT '是否人工修改:0-否 1-是', + `modified_by` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '修改人', + `modified_time` datetime DEFAULT NULL COMMENT '修改时间', + `data_source` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '数据来源', + `raw_data` text COLLATE utf8mb4_unicode_ci COMMENT '原始数据JSON', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `deleted` bit(1) DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`), + KEY `idx_prison_evaluation_dimension_data_report` (`report_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='报告维度数据表'; + +-- ---------------------------- +-- Table structure for prison_evaluation_report +-- 评估报告表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_evaluation_report`; +CREATE TABLE `prison_evaluation_report` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '报告ID', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + `report_no` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报告编号', + `prisoner_id` bigint NOT NULL COMMENT '罪犯ID', + `prisoner_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '罪犯姓名', + `prisoner_no` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '罪犯编号', + `template_id` bigint NOT NULL COMMENT '模板ID', + `template_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '模板名称', + `evaluation_type` tinyint DEFAULT NULL COMMENT '评估类型:1-心理评估 2-危险性评估 3-改造表现评估 4-综合评估', + `evaluation_cycle` tinyint DEFAULT NULL COMMENT '评估周期:1-月评 2-季评 3-半年评 4-年终评 5-入监评估 6-出监评估', + `evaluation_date` date DEFAULT NULL COMMENT '评估日期', + `risk_level` tinyint DEFAULT NULL COMMENT '风险等级:1-低风险 2-中风险 3-高风险', + `conclusion` text COLLATE utf8mb4_unicode_ci COMMENT '综合结论', + `suggestions` text COLLATE utf8mb4_unicode_ci COMMENT '改造建议', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1-草稿 2-待审核 3-已通过 4-已退回 5-已归档', + `ai_status` tinyint NOT NULL DEFAULT '0' COMMENT 'AI生成状态:0-未生成 1-生成中 2-生成完成 3-生成失败', + `auditor_id` bigint DEFAULT NULL COMMENT '审核人ID', + `auditor_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核人姓名', + `audit_time` datetime DEFAULT NULL COMMENT '审核时间', + `audit_opinion` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核意见', + `evaluator_id` bigint DEFAULT NULL COMMENT '评估人员ID', + `evaluator_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '评估人员姓名', + `area_id` bigint DEFAULT NULL COMMENT '监区ID', + `area_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '监区名称', + `total_score` decimal(10,2) DEFAULT NULL COMMENT '总分', + `level` tinyint DEFAULT NULL COMMENT '评级:1-优秀 2-良好 3-一般 4-较差 5-危险', + `risk_score` decimal(10,2) DEFAULT NULL COMMENT '风险得分', + `ai_content` text COLLATE utf8mb4_unicode_ci COMMENT 'AI生成内容', + `ai_report_content` text COLLATE utf8mb4_unicode_ci COMMENT 'AI生成报告内容', + `pdf_path` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '报告PDF路径', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `deleted` bit(1) DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_prison_evaluation_report_no` (`report_no`), + KEY `idx_prison_evaluation_report_prisoner` (`prisoner_id`), + KEY `idx_prison_evaluation_report_template` (`template_id`), + KEY `idx_prison_evaluation_report_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='评估报告表'; + +-- ---------------------------- +-- Table structure for prison_evaluation_template +-- 评估报告模板表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_evaluation_template`; +CREATE TABLE `prison_evaluation_template` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '模板ID', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板名称', + `code` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '模板编码', + `type` tinyint NOT NULL COMMENT '模板类型:1-入监综合评估 2-定期考核报告 3-出监评估 4-减刑假释建议 5-专项评估', + `title_format` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '报告标题格式', + `description` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '模板描述', + `applicable_crowd` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '适用人群', + `evaluation_cycle` tinyint DEFAULT NULL COMMENT '评估周期类型', + `ai_enabled` tinyint(1) DEFAULT '0' COMMENT '是否允许AI生成', + `ai_prompt` text COLLATE utf8mb4_unicode_ci COMMENT 'AI提示词配置', + `cover_image` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '报告封面图', + `sort` int DEFAULT '0' COMMENT '排序', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `style_config` text COLLATE utf8mb4_unicode_ci COMMENT '样式配置JSON', + `is_default` tinyint(1) DEFAULT '0' COMMENT '是否默认模板:0-否 1-是', + `status` tinyint(1) DEFAULT '1' COMMENT '状态:0-停用 1-启用', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `deleted` bit(1) DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`), + KEY `idx_prison_evaluation_template_type` (`type`), + KEY `idx_prison_evaluation_template_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='评估报告模板表'; + +-- ---------------------------- +-- Table structure for prison_report +-- 评估报告表(通用) +-- ---------------------------- +DROP TABLE IF EXISTS `prison_report`; +CREATE TABLE `prison_report` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '报告ID', + `report_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报告编号', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + `prisoner_id` bigint NOT NULL COMMENT '罪犯ID', + `prisoner_no` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '罪犯编号', + `prisoner_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '罪犯姓名', + `template_id` bigint NOT NULL COMMENT '模板ID', + `template_name` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '模板名称', + `title` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报告标题', + `report_date` date NOT NULL COMMENT '报告日期', + `dimensions` text COLLATE utf8mb4_unicode_ci COMMENT '维度内容,JSON格式', + `conclusion` text COLLATE utf8mb4_unicode_ci COMMENT '综合结论', + `suggestions` text COLLATE utf8mb4_unicode_ci COMMENT '改造建议', + `risk_level` tinyint DEFAULT NULL COMMENT '风险等级:1-低风险 2-中风险 3-高风险 4-极高风险', + `attachments` text COLLATE utf8mb4_unicode_ci COMMENT '附件列表,JSON格式', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1-草稿 2-待审核 3-已通过 4-已退回', + `version` int NOT NULL DEFAULT '1' COMMENT '版本号', + `signature` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '数字签名', + `fingerprint` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '报告指纹', + `submitter_id` bigint DEFAULT NULL COMMENT '提交人ID', + `submitter_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '提交人姓名', + `submit_time` datetime DEFAULT NULL COMMENT '提交时间', + `reviewer_id` bigint DEFAULT NULL COMMENT '审核人ID', + `reviewer_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核人姓名', + `review_time` datetime DEFAULT NULL COMMENT '审核时间', + `review_comment` text COLLATE utf8mb4_unicode_ci COMMENT '审核意见', + `archived` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否已归档', + `archived_time` datetime DEFAULT NULL COMMENT '归档时间', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci 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_report_no` (`report_no`), + KEY `idx_prison_report_prisoner_id` (`prisoner_id`), + KEY `idx_prison_report_template_id` (`template_id`), + KEY `idx_prison_report_status` (`status`), + KEY `idx_prison_report_report_date` (`report_date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='评估报告表'; + +-- ---------------------------- +-- Table structure for prison_report_template +-- 评估报告模板表(通用) +-- ---------------------------- +DROP TABLE IF EXISTS `prison_report_template`; +CREATE TABLE `prison_report_template` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '模板ID', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + `name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板名称', + `type` tinyint NOT NULL DEFAULT '1' COMMENT '模板类型:1-入监综合评估 2-定期考核报告 3-出监评估 4-减刑假释建议 5-专项评估', + `title_format` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报告标题格式', + `dimensions` text COLLATE utf8mb4_unicode_ci COMMENT '评估维度配置,JSON格式', + `ai_prompt_config` text COLLATE utf8mb4_unicode_ci COMMENT 'AI提示词配置,JSON格式', + `style_config` text COLLATE utf8mb4_unicode_ci COMMENT '样式配置,JSON格式', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:0-停用 1-启用', + `is_default` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否默认', + `version` int NOT NULL DEFAULT '1' COMMENT '版本号', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci 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_prison_report_template_type` (`type`), + KEY `idx_prison_report_template_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='评估报告模板表'; + +-- ---------------------------- +-- Table structure for prison_report_comment +-- 快捷评语表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_report_comment`; +CREATE TABLE `prison_report_comment` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '评语ID', + `content` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '评语内容', + `comment_type` tinyint NOT NULL DEFAULT '1' COMMENT '评语类型:1-心理评语 2-行为表现评语 3-教育改造评语 4-劳动表现评语 5-综合评语 6-风险提示 7-建议措施', + `dimension_id` bigint DEFAULT NULL COMMENT '适用维度(关联维度表)', + `dimension_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '维度名称', + `level` tinyint DEFAULT NULL COMMENT '评级等级:1-优秀 2-良好 3-一般 4-较差 5-危险', + `tags` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '标签(逗号分隔)', + `use_count` int DEFAULT '0' COMMENT '使用次数', + `sort` int DEFAULT '0' COMMENT '排序', + `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `dimension` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '适用维度', + `is_builtin` tinyint(1) DEFAULT '0' COMMENT '是否内置:0-否 1-是', + `status` tinyint(1) DEFAULT '1' COMMENT '状态:0-停用 1-启用', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `deleted` bit(1) DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint DEFAULT '0' COMMENT '租户编号', + PRIMARY KEY (`id`), + KEY `idx_prison_report_comment_dimension` (`dimension`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='快捷评语表'; + +-- ---------------------------- +-- Table structure for prison_quick_comment +-- 快捷评语表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_quick_comment`; +CREATE TABLE `prison_quick_comment` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '评语ID', + `category_id` bigint NOT NULL COMMENT '分类ID', + `content` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '评语内容', + `usage_count` int NOT NULL DEFAULT '0' COMMENT '使用次数', + `sort` int NOT NULL DEFAULT '0' COMMENT '排序', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:0-停用 1-启用', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + PRIMARY KEY (`id`), + KEY `idx_prison_quick_comment_category_id` (`category_id`), + KEY `idx_prison_quick_comment_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='快捷评语表'; + +-- ---------------------------- +-- Table structure for prison_comment_category +-- 快捷评语分类表 +-- ---------------------------- +DROP TABLE IF EXISTS `prison_comment_category`; +CREATE TABLE `prison_comment_category` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '分类ID', + `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '分类名称', + `type` tinyint NOT NULL DEFAULT '1' COMMENT '评估类型:1-入监 2-定期 3-出监 4-减刑 5-专项', + `sort` int NOT NULL DEFAULT '0' COMMENT '排序', + `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:0-停用 1-启用', + `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', + PRIMARY KEY (`id`), + KEY `idx_prison_comment_category_type` (`type`), + KEY `idx_prison_comment_category_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='快捷评语分类表'; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/docs/DEPLOYMENT.md b/docs/DEPLOYMENT.md new file mode 100644 index 0000000..07b593e --- /dev/null +++ b/docs/DEPLOYMENT.md @@ -0,0 +1,756 @@ +# XL 监狱综合管理平台部署文档 + +## 1. 文档概述 + +本文档详细描述 XL 监狱综合管理平台在服务器 `root@192.168.10.150` 上的部署流程。该平台采用 Docker 容器化部署方式,包含 MySQL 数据库、Redis 缓存、Spring Boot 后端服务和 Nginx 前端服务。 + +### 1.1 系统架构 + +``` +┌─────────────────────────────────────────────────────────────────────┐ +│ 服务器 192.168.10.150 │ +├─────────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌───────────────────────────────────────────────────────────────┐ │ +│ │ Docker 网络 (xl-prison-network) │ │ +│ │ │ │ +│ │ ┌─────────────┐ ┌─────────────┐ ┌────────────────────────┐ │ │ +│ │ │ MySQL 8 │ │ Redis 6 │ │ 后端服务 (Java) │ │ │ +│ │ │ 端口:3306 │ │ 端口:6379 │ │ 端口:48080 │ │ │ +│ │ │ │ │ │ │ │ │ │ +│ │ └──────┬──────┘ └──────┬──────┘ └───────────┬────────────┘ │ │ +│ │ │ │ │ │ │ +│ │ └────────────────┼──────────────────────┘ │ │ +│ │ │ │ │ +│ │ ┌──────┴──────┐ │ │ +│ │ │ Nginx │ │ │ +│ │ │ 端口:8080 │ │ │ +│ │ └──────┬──────┘ │ │ +│ │ │ │ │ +│ └──────────────────────────┼─────────────────────────────────────┘ │ +│ │ │ +│ ▼ │ +│ 外部用户访问入口 │ +│ http://192.168.10.150:8080 │ +│ │ +└─────────────────────────────────────────────────────────────────────┘ +``` + +### 1.2 端口分配 + +| 服务 | 端口 | 说明 | +|------|------|------| +| Nginx 前端 | 8080 | Web 访问入口 | +| Spring Boot 后端 | 48080 | API 服务端口 | +| MySQL | 3306 | 数据库服务 | +| Redis | 6379 | 缓存服务 | + +### 1.3 环境要求 + +在开始部署之前,请确保目标服务器满足以下最低要求: + +- **操作系统**: CentOS 7+ / Ubuntu 18+ / Rocky Linux 8+ / Debian 10+ +- **CPU**: 最低 2 核,推荐 4 核或更多 +- **内存**: 最低 4GB,推荐 8GB 或更多 +- **硬盘**: 最低 50GB 可用空间,推荐 100GB SSD +- **网络**: 具备互联网访问能力,用于下载 Docker 镜像 + +## 2. 服务器环境准备 + +### 2.1 安装 Docker + +以下是在 CentOS/Rocky Linux 系统上安装 Docker 的步骤。如果您的服务器已安装 Docker,请跳过此步骤。 + +```bash +# 1. 安装必要依赖 +sudo yum install -y yum-utils device-mapper-persistent-data lvm2 + +# 2. 添加 Docker 官方仓库 +sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo + +# 3. 安装 Docker 引擎 +sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin + +# 4. 启动 Docker 服务 +sudo systemctl start docker + +# 5. 设置开机自启动 +sudo systemctl enable docker + +# 6. 验证安装 +docker --version +docker compose version +``` + +对于 Ubuntu/Debian 系统,请使用以下命令: + +```bash +# 1. 更新软件包索引 +sudo apt-get update + +# 2. 安装必要依赖 +sudo apt-get install -y ca-certificates curl gnupg lsb-release + +# 3. 添加 Docker 官方 GPG 密钥 +sudo mkdir -p /etc/apt/keyrings +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + +# 4. 设置 Docker 仓库 +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +# 5. 安装 Docker +sudo apt-get update +sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin + +# 6. 启动并设置开机自启动 +sudo systemctl start docker +sudo systemctl enable docker +``` + +### 2.2 配置 Docker 镜像加速 + +为了加速 Docker 镜像的下载,建议配置国内镜像加速器。 + +```bash +# 创建 Docker 配置目录 +sudo mkdir -p /etc/docker + +# 配置镜像加速器 +sudo tee /etc/docker/daemon.json <<-EOF +{ + "registry-mirrors": [ + "https://docker.mirrors.ustc.edu.cn", + "https://hub-mirror.c.163.com", + "https://registry.docker-cn.com" + ], + "log-driver": "json-file", + "log-opts": { + "max-size": "100m", + "max-file": "3" + }, + "storage-driver": "overlay2" +} +EOF + +# 重启 Docker 服务 +sudo systemctl daemon-reload +sudo systemctl restart docker + +# 验证配置 +docker info | grep "Registry Mirrors" +``` + +### 2.3 安装 Git(用于拉取代码) + +```bash +# CentOS/Rocky Linux +sudo yum install -y git + +# Ubuntu/Debian +sudo apt-get install -y git +``` + +## 3. 项目部署 + +### 3.1 创建部署目录结构 + +在服务器上创建项目部署目录: + +```bash +# 创建项目根目录 +sudo mkdir -p /work/projects/xl-prison +sudo mkdir -p /work/projects/xl-prison/{backend,frontend,data/{mysql,redis},logs,sql} + +# 设置目录所有者(请将 username 替换为实际用户名) +sudo chown -R $USER:$USER /work/projects/xl-prison + +# 进入项目目录 +cd /work/projects/xl-prison +``` + +目录结构说明: + +``` +/work/projects/xl-prison/ +├── backend/ # 后端服务目录 +│ ├── config/ # 配置文件目录 +│ └── Dockerfile # Docker 构建文件 +├── frontend/ # 前端服务目录 +│ ├── dist/ # 前端构建产物 +│ └── nginx.conf # Nginx 配置文件 +├── data/ # 数据持久化目录 +│ ├── mysql/ # MySQL 数据文件 +│ └── redis/ # Redis 数据文件 +├── logs/ # 日志目录 +│ ├── backend/ # 后端日志 +│ └── nginx/ # Nginx 日志 +├── sql/ # SQL 初始化脚本 +├── docker-compose.yml # Docker Compose 配置 +└── README.md # 部署文档 +``` + +### 3.2 获取项目代码 + +您可以通过以下两种方式之一获取项目代码: + +**方式一:从 Git 仓库克隆** + +```bash +cd /work/projects/xl-prison +git clone ./source +``` + +**方式二:从本地复制** + +在您的开发机器上执行以下命令,将项目复制到服务器: + +```bash +# 复制整个项目到服务器 +scp -r /Volumes/Dpan/github/xlcp root@192.168.10.150:/work/projects/xl-prison/source + +# 或者只复制必要文件 +scp -r /Volumes/Dpan/github/xlcp/backend root@192.168.10.150:/work/projects/xl-prison/ +scp -r /Volumes/Dpan/github/xlcp/frontend/dist root@192.168.10.150:/work/projects/xl-prison/frontend/ +scp -r /Volumes/Dpan/github/xlcp/backend/sql/mysql/*.sql root@192.168.10.150:/work/projects/xl-prison/sql/ +``` + +### 3.3 复制配置文件 + +将预先准备好的配置文件复制到服务器: + +```bash +# 复制 Docker Compose 配置 +cp deploy/docker-compose.yml /work/projects/xl-prison/ + +# 复制后端配置 +cp deploy/config/application-prod.yaml /work/projects/xl-prison/backend/config/ + +# 复制后端 Dockerfile +cp deploy/docker/backend/Dockerfile /work/projects/xl-prison/backend/ + +# 复制前端 Nginx 配置 +cp deploy/docker/frontend/nginx.conf /work/projects/xl-prison/frontend/ + +# 复制 SQL 初始化脚本 +cp backend/sql/mysql/*.sql /work/projects/xl-prison/sql/ +``` + +### 3.4 编译后端项目 + +在有 Maven 环境的机器上编译后端项目: + +```bash +cd /Volumes/Dpan/github/xlcp/backend + +# 清理并打包(跳过测试) +mvn clean package -DskipTests -Dmaven.javadoc.skip=true + +# 构建完成后,jar 包位于以下位置 +ls -lh yudao-server/target/yudao-server.jar +``` + +将编译好的 jar 包复制到服务器: + +```bash +scp yudao-server/target/yudao-server.jar root@192.168.10.150:/work/projects/xl-prison/backend/ +``` + +### 3.5 构建前端项目 + +在有 Node.js 环境的机器上构建前端: + +```bash +cd /Volumes/Dpan/github/xlcp/frontend + +# 安装依赖 +pnpm install + +# 生产环境构建 +pnpm build:prod + +# 构建完成后,构建产物在 dist 目录 +ls -lh dist/ +``` + +将构建产物复制到服务器: + +```bash +scp -r dist/* root@192.168.10.150:/work/projects/xl-prison/frontend/ +``` + +## 4. 配置文件说明 + +### 4.1 Docker Compose 配置 + +主要配置项说明: + +```yaml +version: "3.8" + +services: + # MySQL 数据库服务 + mysql: + image: mysql:8.0 # 使用 MySQL 8.0 镜像 + container_name: xl-prison-mysql # 容器名称 + restart: unless-stopped # 异常退出后自动重启 + environment: + MYSQL_ROOT_PASSWORD: Prison2024!@ # root 用户密码 + MYSQL_DATABASE: prison # 数据库名称 + volumes: + - ./data/mysql:/var/lib/mysql # 数据持久化 + - ./sql:/docker-entrypoint-initdb.d:ro # 初始化脚本 + ports: + - "3306:3306" # 端口映射 + deploy: + resources: + limits: + memory: 2G # 内存限制 + + # Redis 缓存服务 + redis: + image: redis:6.2-alpine + container_name: xl-prison-redis + command: redis-server --requirepass Redis2024!@ # 设置密码 + volumes: + - ./data/redis:/data + deploy: + resources: + limits: + memory: 512M + + # 后端服务 + backend: + build: + context: ./backend + dockerfile: Dockerfile + container_name: xl-prison-backend + environment: + SPRING_PROFILES_ACTIVE: prod # 生产环境配置 + JAVA_OPTS: -Xms512m -Xmx1024m # JVM 内存配置 + volumes: + - ./backend/config:/app/config:ro # 配置文件挂载 + - ./logs/backend:/app/logs # 日志目录挂载 + depends_on: + mysql: + condition: service_healthy # 等待 MySQL 健康检查通过 + redis: + condition: service_healthy # 等待 Redis 健康检查通过 + + # 前端服务 + frontend: + image: nginx:alpine + container_name: xl-prison-frontend + volumes: + - ./frontend/dist:/usr/share/nginx/html:ro # 前端静态文件 + - ./frontend/nginx.conf:/etc/nginx/nginx.conf:ro + - ./logs/nginx:/var/log/nginx # Nginx 日志 +``` + +### 4.2 后端生产配置 + +配置文件位置:`backend/config/application-prod.yaml` + +主要配置项: + +```yaml +spring: + datasource: + dynamic: + datasource: + master: + url: jdbc:mysql://mysql:3306/prison?useSSL=false&serverTimezone=Asia/Shanghai... + username: root + password: Prison2024!@ + data: + redis: + host: redis # 使用 Docker 网络中的服务名 + port: 6379 + password: Redis2024!@ + +server: + port: 48080 # 后端服务端口 + +logging: + level: + cn.iocoder.yudao: DEBUG +``` + +**重要说明**:在 Docker 环境中,使用 Docker Compose 定义的服务名(如 `mysql`、`redis`)作为主机名,而非 IP 地址。 + +### 4.3 Nginx 配置 + +配置文件位置:`frontend/nginx.conf` + +主要功能: + +- 静态文件服务 +- API 请求代理到后端服务 +- Gzip 压缩 +- 缓存配置 +- 安全头配置 + +```nginx +upstream backend { + server backend:48080; # 后端服务地址 + keepalive 32; +} + +server { + listen 80; + + # 前端路由支持 + location / { + try_files $uri $uri/ /index.html; + } + + # API 代理 + location /prod-api/ { + proxy_pass http://backend; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } +} +``` + +## 5. 部署执行 + +### 5.1 启动服务 + +```bash +cd /work/projects/xl-prison + +# 启动所有服务(后台运行) +docker compose up -d + +# 查看启动状态 +docker compose ps + +# 查看服务日志 +docker compose logs -f +``` + +### 5.2 验证部署 + +执行以下命令验证各服务是否正常运行: + +```bash +# 1. 检查 MySQL +docker exec -it xl-prison-mysql mysql -uroot -pPrison2024!@ -e "SHOW DATABASES;" + +# 预期输出应包含 prison 数据库 + +# 2. 检查 Redis +docker exec -it xl-prison-redis redis-cli -a Redis2024!@ ping + +# 预期输出:PONG + +# 3. 检查后端健康状态 +curl http://localhost:48080/actuator/health/ + +# 预期输出:{"status":"UP"} + +# 4. 检查前端访问 +curl -I http://localhost:8080/ + +# 预期输出:HTTP/1.1 200 OK +``` + +### 5.3 查看日志 + +```bash +# 查看后端日志 +docker logs xl-prison-backend +tail -f /work/projects/xl-prison/logs/backend/yudao-server.log + +# 查看 Nginx 日志 +docker logs xl-prison-frontend +tail -f /work/projects/xl-prison/logs/nginx/access.log +tail -f /work/projects/xl-prison/logs/nginx/error.log +``` + +## 6. 访问地址 + +部署完成后,系统可通过以下地址访问: + +| 服务 | 地址 | 说明 | +|------|------|------| +| 前端页面 | http://192.168.10.150:8080 | 监狱管理系统 Web 界面 | +| 后端 API | http://192.168.10.150:48080 | 后端服务接口 | +| 健康检查 | http://192.168.10.150:48080/actuator/health | 服务健康状态 | +| MySQL | 192.168.10.150:3306 | 数据库连接 | +| Redis | 192.168.10.150:6379 | 缓存服务 | + +## 7. 运维管理 + +### 7.1 服务管理命令 + +```bash +# 启动所有服务 +docker compose start + +# 停止所有服务 +docker compose stop + +# 重启所有服务 +docker compose restart + +# 重启单个服务 +docker compose restart backend +docker compose restart frontend + +# 查看服务状态 +docker compose ps + +# 查看服务资源使用 +docker stats + +# 进入容器内部 +docker exec -it xl-prison-backend /bin/sh +docker exec -it xl-prison-mysql mysql -uroot -pPrison2024!@ +docker exec -it xl-prison-redis redis-cli -a Redis2024!@ +``` + +### 7.2 日志管理 + +```bash +# 查看所有服务日志 +docker compose logs + +# 查看指定服务日志 +docker compose logs backend +docker compose logs frontend +docker compose logs mysql +docker compose logs redis + +# 实时查看日志 +docker compose logs -f + +# 查看最近 100 行日志 +docker logs --tail 100 xl-prison-backend +``` + +### 7.3 数据备份 + +```bash +# 备份 MySQL 数据库 +BACKUP_DIR=/work/projects/xl-prison/backup +mkdir -p $BACKUP_DIR +BACKUP_DATE=$(date +%Y%m%d_%H%M%S) + +docker exec xl-prison-mysql mysqldump -uroot -pPrison2024!@ prison > $BACKUP_DIR/prison_$BACKUP_DATE.sql + +# 压缩备份文件 +gzip $BACKUP_DIR/prison_$BACKUP_DATE.sql + +# 查看备份文件 +ls -lh $BACKUP_DIR/ + +# 备份 Redis 数据 +docker exec xl-prison-redis redis-cli -a Redis2024!@ BGSAVE +docker cp xl-prison-redis:/data/dump.rdb $BACKUP_DIR/redis_$BACKUP_DATE.rdb +``` + +### 7.4 版本更新 + +```bash +# 1. 停止当前服务 +cd /work/projects/xl-prison +docker compose down + +# 2. 备份重要数据 +cp -r data data.backup.$(date +%Y%m%d) + +# 3. 更新代码 +cd source +git pull + +# 4. 重新编译 +cd ../backend +mvn clean package -DskipTests +cd ../frontend +pnpm install && pnpm build:prod + +# 5. 更新构建产物 +cp -r dist/* ../frontend/ +cp target/*.jar ../backend/ + +# 6. 重新构建镜像并启动 +cd .. +docker compose build --no-cache +docker compose up -d + +# 7. 验证部署 +curl http://localhost:48080/actuator/health/ +``` + +## 8. 常见问题排查 + +### 8.1 后端无法连接数据库 + +```bash +# 检查 MySQL 容器状态 +docker ps | grep mysql + +# 检查 MySQL 日志 +docker logs xl-prison-mysql + +# 检查 MySQL 健康状态 +docker exec xl-prison-mysql mysqladmin -uroot -pPrison2024!@ ping + +# 检查网络连接 +docker exec xl-prison-backend ping mysql + +# 常见原因及解决方案: +# 1. MySQL 容器未启动 → docker compose restart mysql +# 2. 密码错误 → 检查 application-prod.yaml 配置 +# 3. 网络问题 → 检查 Docker 网络状态 +``` + +### 8.2 前端 502 错误 + +```bash +# 检查后端服务状态 +docker ps | grep backend + +# 检查后端健康状态 +curl http://localhost:48080/actuator/health/ + +# 检查后端日志 +docker logs xl-prison-backend + +# 检查 Nginx 配置 +docker exec xl-prison-frontend cat /etc/nginx/nginx.conf + +# 测试后端连通性 +docker exec xl-prison-frontend curl http://backend:48080/actuator/health/ +``` + +### 8.3 内存不足 + +```bash +# 检查容器资源使用情况 +docker stats + +# 调整 JVM 内存配置,编辑 docker-compose.yml +environment: + JAVA_OPTS: -Xms256m -Xmx512m + +# 重新启动服务 +docker compose restart backend +``` + +### 8.4 端口冲突 + +```bash +# 检查端口占用 +netstat -tlnp | grep 8080 +netstat -tlnp | grep 48080 + +# 如果端口被占用,可以修改 docker-compose.yml 中的端口映射 +ports: + - "8081:80" # 改为 8081 端口 +``` + +### 8.5 数据丢失 + +```bash +# 检查数据卷挂载 +docker volume ls + +# 检查数据目录权限 +ls -la /work/projects/xl-prison/data/ + +# 恢复数据(从备份) +gunzip -k /work/projects/xl-prison/backup/prison_20240115.sql.gz +docker exec -i xl-prison-mysql mysql -uroot -pPrison2024!@ prison < /work/projects/xl-prison/backup/prison_20240115.sql +``` + +## 9. 安全加固建议 + +### 9.1 修改默认密码 + +生产环境中,请务必修改默认密码: + +```yaml +# MySQL +MYSQL_ROOT_PASSWORD: YourStrongPassword123!@ + +# Redis +command: redis-server --requirepass YourStrongRedisPassword456!@ + +# 修改 application-prod.yaml 中的数据库密码 +password: YourStrongPassword123!@ +``` + +### 9.2 配置防火墙 + +```bash +# 只开放必要端口(CentOS) +firewall-cmd --permanent --add-port=8080/tcp +firewall-cmd --permanent --add-port=48080/tcp +firewall-cmd --reload + +# 只开放必要端口(Ubuntu) +sudo ufw allow 8080/tcp +sudo ufw allow 48080/tcp +sudo ufw enable +``` + +### 9.3 启用 HTTPS(推荐) + +建议使用 Nginx 反向代理并配置 SSL 证书: + +```nginx +server { + listen 443 ssl http2; + server_name your-domain.com; + + ssl_certificate /etc/nginx/ssl/cert.pem; + ssl_certificate_key /etc/nginx/ssl/key.pem; + ssl_protocols TLSv1.2 TLSv1.3; + + # 其他配置... +} + +server { + listen 80; + server_name your-domain.com; + return 301 https://$server_name$request_uri; +} +``` + +### 9.4 定期安全更新 + +```bash +# 更新系统软件包 +sudo yum update -y # CentOS +sudo apt-get update && sudo apt-get upgrade -y # Ubuntu + +# 更新 Docker +sudo yum update docker-ce # CentOS +sudo apt-get update && sudo apt-get install docker-ce # Ubuntu +``` + +### 9.5 监控与告警 + +建议配置以下监控: + +- **服务监控**: 使用 Prometheus + Grafana 监控容器状态 +- **日志监控**: 使用 ELK Stack 收集和分析日志 +- **告警通知**: 配置邮件或企业微信告警通知 + +## 10. 联系与支持 + +如果在部署过程中遇到问题,请: + +1. 查看本文档的常见问题排查章节 +2. 检查各服务的日志文件 +3. 联系系统管理员获取支持 + +--- + +**文档版本**: 1.0.0 +**最后更新**: 2026年1月21日 +**适用系统**: XL 监狱综合管理平台 v1.0 diff --git a/frontend b/frontend index 3c24350..f2764b3 160000 --- a/frontend +++ b/frontend @@ -1 +1 @@ -Subproject commit 3c24350bede07f5d56fc19b27720991b9648b6c3 +Subproject commit f2764b396116fb1e994c3639f74d4d0b135ad3a3