feat: 添加后端和前端编译脚本及Docker配置

- 新增 build.sh 脚本用于编译后端 Java 项目和前端 Vue3 项目,并生成部署包
- 新增 docker-compose.yml 文件以配置 MySQL、Redis、后端和前端服务
- 新增 application-prod.yaml 配置文件用于后端服务
- 新增 Dockerfile 用于后端服务的容器化部署
- 新增 SQL 初始化脚本 xlcp_dev.sql
- 新增部署文档 DEPLOYMENT.md 详细描述部署流程和环境要求
This commit is contained in:
tangweijie 2026-01-22 09:29:17 +08:00
parent 153ddeff8a
commit c5909c6266
7 changed files with 2138 additions and 1 deletions

162
build.sh Executable file
View File

@ -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 ""

View File

@ -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}

126
deploy/docker-compose.yml Normal file
View File

@ -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

View File

@ -0,0 +1,31 @@
# 基础镜像:使用 Eclipse Temurin JDK 17
FROM eclipse-temurin:17-jre-alpine
# 维护者信息
LABEL maintainer="XL Prison System <admin@xlprison.com>"
# 设置时区
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"]

912
deploy/sql/xlcp_dev.sql Normal file
View File

@ -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 '父级ID0表示顶级监区',
`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;

756
docs/DEPLOYMENT.md Normal file
View File

@ -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 <your-repository-url> ./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

@ -1 +1 @@
Subproject commit 3c24350bede07f5d56fc19b27720991b9648b6c3
Subproject commit f2764b396116fb1e994c3639f74d4d0b135ad3a3