刑事案件数字档案馆系统搭建与实操全流程指南
一、基础环境快速构建
本系统基于Spring Boot 2.7 + Vue 3 + MySQL 8.0架构构建,首先需要在Linux服务器(推荐Ubuntu 20.04 LTS)上配置基础运行环境。请依次执行以下命令安装JDK、MySQL、Redis及Node.js。
1. 安装JDK 11
执行以下命令安装OpenJDK 11并配置环境变量:
```bash sudo apt update sudo apt install openjdk-11-jdk -y java -version ```2. 安装MySQL 8.0并设置初始密码
```bash sudo apt install mysql-server -y sudo mysql_secure_installation 按提示操作,设置root密码为:Criminal@2024 其他选项选择 Y (Remove anonymous users, Disallow root login remotely等) ```3. 安装Redis及Node.js
```bash sudo apt install redis-server -y curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt install nodejs -y node -v && npm -v ```二、数据库设计与初始化
创建数据库核心表结构。我们需要建立案件主表与电子证据附件表,确保证据链的完整性。登录MySQL并执行以下脚本:
```sql CREATE DATABASE IF NOT EXISTS criminal_archive DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; USE criminal_archive; -- 案件基本信息表 CREATE TABLE t_case_info ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', case_number VARCHAR(50) NOT NULL UNIQUE COMMENT '案件编号,如(2024)京01刑初1号', case_name VARCHAR(200) NOT NULL COMMENT '案件名称', suspect_name VARCHAR(100) COMMENT '嫌疑人姓名', case_type TINYINT DEFAULT 1 COMMENT '案件类型:1-公诉,2-自诉', status TINYINT DEFAULT 0 COMMENT '状态:0-归档中,1-已归档,2-已借阅', create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', INDEX idx_case_number (case_number) ) ENGINE=InnoDB COMMENT='刑事案件信息表'; -- 电子证据附件表 CREATE TABLE t_evidence_file ( id BIGINT AUTO_INCREMENT PRIMARY KEY, case_id BIGINT NOT NULL COMMENT '关联案件ID', file_name VARCHAR(255) NOT NULL COMMENT '文件原名', file_path VARCHAR(500) NOT NULL COMMENT '存储路径', file_size BIGINT COMMENT '文件大小(字节)', file_hash VARCHAR(64) NOT NULL COMMENT 'SHA-256校验值,防止篡改', uploader VARCHAR(50) DEFAULT 'admin' COMMENT '上传人', upload_time DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (case_id) REFERENCES t_case_info(id) ON DELETE CASCADE ) ENGINE=InnoDB COMMENT='电子证据附件表'; ```三、后端核心代码实现
使用Spring Initializr创建项目,依赖选择:Web, MyBatis Framework, MySQL Driver, Lombok。以下是核心配置与代码实现。
1. 配置文件
修改 src/main/resources/application.yml,完整配置如下:
```yaml server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/criminal_archive?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: Criminal@2024 driver-class-name: com.mysql.cj.jdbc.Driver servlet: multipart: max-file-size: 500MB max-request-size: 500MB mybatis: mapper-locations: classpath:mapper/.xml configuration: map-underscore-to-camel-case: true ```2. 实体类与Mapper
创建 CaseInfo.java 和 EvidenceFile.java(Lombok注解省略,请自行添加@Data, @Entity等)。重点展示文件上传Service层的SHA-256校验逻辑。
在 src/main/java/com/example/archive/service/EvidenceService.java 中写入:
```java @Service public class EvidenceService { @Autowired private EvidenceMapper evidenceMapper; // 保存文件并计算Hash public void saveEvidence(MultipartFile file, Long caseId) throws Exception { String fileName = file.getOriginalFilename(); String filePath = "/data/archive/" + caseId + "/" + fileName; File dest = new File(filePath); if (!dest.getParentFile().exists()) dest.getParentFile().mkdirs(); file.transferTo(dest); // 计算SHA-256确保证据完整性 String hash = DigestUtils.sha256Hex(new FileInputStream(dest)); EvidenceFile evidence = new EvidenceFile(); evidence.setCaseId(caseId); evidence.setFileName(fileName); evidence.setFilePath(filePath); evidence.setFileSize(file.getSize()); evidence.setFileHash(hash); evidenceMapper.insert(evidence); } } ```3. 控制层接口

创建 CaseController.java 提供案件录入与证据上传接口:
```java @RestController @RequestMapping("/api/case") public class CaseController { @Autowired private CaseInfoMapper caseMapper; @Autowired private EvidenceService evidenceService; @PostMapping("/create") public Map四、前端界面开发
使用Vue 3 CLI构建前端,安装Element Plus组件库用于快速搭建管理界面。
1. 项目初始化
```bash npm install -g @vue/cli vue create criminal-archive-web 选择 Default (Vue 3) cd criminal-archive-web npm install element-plus axios ```2. 案件录入与上传组件
修改 src/App.vue,实现案件创建及拖拽上传功能:
```vue刑事案件数字档案管理
五、Docker容器化部署
为了确保系统在任何环境中零门槛运行,我们编写Dockerfile和docker-compose.yml进行一键部署。
1. 后端 Dockerfile (在项目根目录创建)
```dockerfile FROM openjdk:11-jre-slim WORKDIR /app COPY target/archive-system.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"] ```2. 前端 Nginx 配置与打包
执行 npm run build 生成dist目录。创建 default.conf:
3. Docker Compose 编排
在项目根目录创建 docker-compose.yml,实现全栈一键启动:
```yaml version: '3.8' services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: Criminal@2024 MYSQL_DATABASE: criminal_archive volumes: - ./init.sql:/docker-entrypoint-initdb.d/init.sql ports: - "3306:3306" backend: build: . ports: - "8080:8080" depends_on: - mysql environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/criminal_archive frontend: image: nginx:alpine volumes: - ./dist:/usr/share/nginx/html - ./default.conf:/etc/nginx/conf.d/default.conf ports: - "80:80" depends_on: - backend ```执行启动命令:
```bash 1. 打包后端 mvn clean package -DskipTests 2. 打包前端 npm run build 3. 启动所有服务 docker-compose up -d ```访问 http://服务器IP 即可看到刑事案件数字档案馆系统界面。此时上传的文件会自动计算SHA-256哈希值存入数据库,满足司法存证对数据完整性的严苛要求。