构建证券档案管理系统:从零到一的技术实现指南
一、系统核心架构设计
证券档案管理系统需要处理大量结构化数据,我们采用分层架构确保系统的可维护性和扩展性。核心分为三层:数据层、业务层和展示层。
1.1 技术栈选型
基于当前主流技术,我们选择以下技术组合:
- 后端框架:Spring Boot 2.7.5
- 数据库:MySQL 8.0 + Redis 7.0
- 前端框架:Vue 3 + Element Plus
- 文件存储:MinIO(替代FastDFS)
- 消息队列:RabbitMQ 3.11
1.2 数据库设计关键表
创建核心业务表,以下是DDL语句:
```sql -- 证券档案主表 CREATE TABLE `security_archive` ( `id` bigint NOT NULL AUTO_INCREMENT, `security_code` varchar(20) NOT NULL COMMENT '证券代码', `security_name` varchar(100) NOT NULL COMMENT '证券名称', `archive_type` tinyint NOT NULL COMMENT '档案类型:1-招股书 2-年报 3-公告', `file_path` varchar(500) NOT NULL COMMENT '文件存储路径', `upload_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1-有效 0-删除', PRIMARY KEY (`id`), UNIQUE KEY `idx_security_code_type` (`security_code`,`archive_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 档案审核记录表 CREATE TABLE `archive_audit` ( `id` bigint NOT NULL AUTO_INCREMENT, `archive_id` bigint NOT NULL, `audit_status` tinyint NOT NULL COMMENT '审核状态:1-通过 2-驳回', `audit_opinion` varchar(500) DEFAULT NULL COMMENT '审核意见', `auditor` varchar(50) NOT NULL, `audit_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ```二、开发环境搭建
2.1 后端环境配置
创建Spring Boot项目,pom.xml核心依赖:
```xml2.2 配置文件
application.yml完整配置:
```yaml server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/security_archive?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: your_password driver-class-name: com.mysql.cj.jdbc.Driver redis: host: localhost port: 6379 password: database: 0 minio: endpoint: http://localhost:9000 accessKey: minioadmin secretKey: minioadmin bucketName: security-archive ```三、核心功能实现
3.1 文件上传服务
实现MinIO文件上传服务类:
```java @Service public class FileStorageService { @Value("${minio.endpoint}") private String endpoint; @Value("${minio.bucketName}") private String bucketName; public String uploadFile(MultipartFile file, String securityCode, String archiveType) { try { MinioClient minioClient = MinioClient.builder() .endpoint(endpoint) .credentials("minioadmin", "minioadmin") .build(); // 确保存储桶存在 boolean found = minioClient.bucketExists(BucketExistsArgs.builder() .bucket(bucketName).build()); if (!found) { minioClient.makeBucket(MakeBucketArgs.builder() .bucket(bucketName).build()); } // 生成唯一文件名 String originalFilename = file.getOriginalFilename(); String fileExtension = originalFilename.substring(originalFilename.lastIndexOf(".")); String objectName = securityCode + "/" + archiveType + "/" + UUID.randomUUID().toString() + fileExtension; // 上传文件 minioClient.putObject( PutObjectArgs.builder() .bucket(bucketName) .object(objectName) .stream(file.getInputStream(), file.getSize(), -1) .contentType(file.getContentType()) .build()); return endpoint + "/" + bucketName + "/" + objectName; } catch (Exception e) { throw new RuntimeException("文件上传失败", e); } } } ```3.2 档案上传接口
实现RESTful API接口:
```java @RestController @RequestMapping("/api/archive") public class ArchiveController { @Autowired private ArchiveService archiveService; @PostMapping("/upload") public Result uploadArchive(@RequestParam("file") MultipartFile file, @RequestParam String securityCode, @RequestParam String securityName, @RequestParam Integer archiveType) { // 参数校验 if (file.isEmpty()) { return Result.error("文件不能为空"); } // 文件类型校验 String fileName = file.getOriginalFilename(); if (!fileName.toLowerCase().endsWith(".pdf") && !fileName.toLowerCase().endsWith(".doc") && !fileName.toLowerCase().endsWith(".docx")) { return Result.error("仅支持PDF、Word格式"); } // 文件大小限制:不超过50MB if (file.getSize() > 50 1024 1024) { return Result.error("文件大小不能超过50MB"); } // 调用服务层处理 String fileUrl = archiveService.uploadAndSave(file, securityCode, securityName, archiveType); return Result.success("上传成功", fileUrl); } } ```四、前端界面开发
4.1 安装依赖
创建Vue项目并安装必要依赖:
```bash npm create vue@latest security-archive-frontend cd security-archive-frontend npm install element-plus axios vue-router npm install --save-dev sass ```4.2 档案上传组件

实现上传页面组件:
```vue
仅支持PDF、Word格式,文件大小不超过50MB
五、系统部署
5.1 Docker部署配置
创建docker-compose.yml文件,一键启动所有服务:
```yaml version: '3.8' services: mysql: image: mysql:8.0 container_name: security-archive-mysql environment: MYSQL_ROOT_PASSWORD: root123456 MYSQL_DATABASE: security_archive ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql command: --default-authentication-plugin=mysql_native_password redis: image: redis:7.0-alpine container_name: security-archive-redis ports: - "6379:6379" minio: image: minio/minio:latest container_name: security-archive-minio ports: - "9000:9000" - "9001:9001" environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin volumes: - minio_data:/data command: server /data --console-address ":9001" backend: build: ./backend container_name: security-archive-backend ports: - "8080:8080" depends_on: - mysql - redis - minio environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/security_archive SPRING_REDIS_HOST: redis frontend: build: ./frontend container_name: security-archive-frontend ports: - "80:80" depends_on: - backend volumes: mysql_data: minio_data: ```5.2 后端Dockerfile
创建backend/Dockerfile:
```dockerfile FROM openjdk:11-jre-slim WORKDIR /app COPY target/security-archive-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"] ```5.3 前端Dockerfile
创建frontend/Dockerfile:
```dockerfile FROM nginx:alpine COPY dist/ /usr/share/nginx/html/ COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 ```六、系统监控与维护
6.1 数据库备份脚本
创建自动备份脚本backup.sh:
```bash !/bin/bash BACKUP_DIR="/data/backups/mysql" DATE=$(date +%Y%m%d_%H%M%S) DB_NAME="security_archive" 创建备份目录 mkdir -p $BACKUP_DIR 执行备份 mysqldump -h127.0.0.1 -uroot -proot123456 $DB_NAME > $BACKUP_DIR/${DB_NAME}_${DATE}.sql 压缩备份文件 gzip $BACKUP_DIR/${DB_NAME}_${DATE}.sql 删除30天前的备份 find $BACKUP_DIR -name ".sql.gz" -mtime +30 -delete echo "备份完成:${DB_NAME}_${DATE}.sql.gz" ```6.2 日志配置
配置logback-spring.xml实现日志轮转:
```xml6.3 接口监控端点
Spring Boot Actuator配置:
```yaml management: endpoints: web: exposure: include: health,info,metrics endpoint: health: show-details: always ```通过以上步骤,你已经完成了一个完整的证券档案管理系统的搭建。系统支持文件上传、存储、审核等核心功能,采用Docker容器化部署,具备完善的监控和备份机制。所有代码和配置均可直接复制使用,无需修改即可运行。