一、开发环境与工具准备
在开始构建大理白族自治州档案管理系统之前,必须先配置好基础运行环境。以下命令基于CentOS 7.x/8.x环境,其他系统请对应调整包管理器。
1. 安装JDK 17与Maven
系统后端采用Spring Boot 3.x,强制要求JDK 17及以上版本。执行以下命令完成安装:
```bash
安装JDK 17
yum install -y java-17-openjdk java-17-openjdk-devel
验证版本
java -version
安装Maven
wget https://archive.apache.org/dist/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
tar -zxvf apache-maven-3.8.6-bin.tar.gz -C /usr/local/
export PATH=/usr/local/apache-maven-3.8.6/bin:$PATH
echo 'export PATH=/usr/local/apache-maven-3.8.6/bin:$PATH' >> /etc/profile
source /etc/profile
```
2. 安装Node.js 18与MySQL 8.0
前端采用Vue 3,数据库选用MySQL 8.0以支持更好的JSON检索功能。
```bash
安装Node.js 18
curl -fsSL https://rpm.nodesource.com/setup_18.x | bash -
yum install -y nodejs
安装MySQL 8.0
yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
yum install -y mysql-server
systemctl start mysqld
systemctl enable mysqld
获取MySQL临时密码并修改
grep 'temporary password' /var/log/mysqld.log
mysql -u root -p
在MySQL Shell中执行(替换YourNewPassword123!):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword123!';
FLUSH PRIVILEGES;
```
二、数据库结构设计与初始化
创建专用数据库并设计核心档案表。为了满足档案管理的通用需求,设计包含基础信息、存储路径、元数据标签等字段。
1. 建库与建表
直接执行以下SQL脚本完成数据结构构建:
```sql
CREATE DATABASE IF NOT EXISTS dali_archive_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE dali_archive_db;
-- 档案主表
CREATE TABLE t_archive (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
archive_code VARCHAR(64) NOT NULL UNIQUE COMMENT '档案编号,唯一标识',
title VARCHAR(255) NOT NULL COMMENT '档案标题',
category VARCHAR(50) NOT NULL COMMENT '档案分类:文书、科技、会计等',
file_path VARCHAR(500) COMMENT '物理文件存储路径',
file_size BIGINT DEFAULT 0 COMMENT '文件大小(字节)',
status TINYINT DEFAULT 1 COMMENT '状态:1-归档,2-借出,3-销毁',
security_level TINYINT DEFAULT 1 COMMENT '密级:1-公开,2-内部,3-机密',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
creator VARCHAR(50) DEFAULT 'admin' COMMENT '创建人',
INDEX idx_category (category),
INDEX idx_code (archive_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='大理州档案管理主表';
-- 初始化插入测试数据
INSERT INTO t_archive (archive_code, title, category, security_level) VALUES
('DL20230001', '大理州2023年度水利工程建设规划', '文书', 2),
('DL20230002', '白族自治州非物质文化遗产名录申报材料', '科技', 1);
```
三、后端核心代码实现
后端使用Spring Boot 3 + MyBatis Plus构建。首先通过Spring Initializr生成项目,或者直接在目录下构建。
1. 项目依赖配置
在pom.xml中添加必要的依赖坐标,确保版本兼容性:
```xml
org.springframework.boot
spring-boot-starter-web
com.baomidou
mybatis-plus-boot-starter
3.5.3.1
mysql
mysql-connector-java
8.0.33
org.projectlombok
lombok
true
```
2. 数据源与配置文件
编辑src/main/resources/application.yml,配置数据库连接及端口:
```yaml
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/dali_archive_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: YourNewPassword123!
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
logic-delete-field: deleted
logic-delete-value: 1
logic-not-delete-value: 0
```
3. 实体类与Mapper
创建com.dali.archive.entity.TArchive实体类:
```java
package com.dali.archive.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@TableName("t_archive")
public class TArchive {
@TableId(type = IdType.AUTO)
private Long id;
private String archiveCode;
private String title;
private String category;
private String filePath;
private Long fileSize;
private Integer status;
private Integer securityLevel;
private LocalDateTime createTime;
private LocalDateTime updateTime;
private String creator;
}
```
创建com.dali.archive.mapper.ArchiveMapper接口:
```java
package com.dali.archive.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dali.archive.entity.TArchive;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ArchiveMapper extends BaseMapper
{
}
```
4. 业务层与控制层

创建com.dali.archive.controller.ArchiveController,实现基础的增删改查接口:
```java
package com.dali.archive.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dali.archive.entity.TArchive;
import com.dali.archive.mapper.ArchiveMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.;
import java.util.List;
@RestController
@RequestMapping("/api/archives")
public class ArchiveController {
@Autowired
private ArchiveMapper archiveMapper;
// 新增档案
@PostMapping
public String save(@RequestBody TArchive archive) {
archiveMapper.insert(archive);
return "success";
}
// 分页查询档案
@GetMapping
public Page list(@RequestParam(defaultValue = "1") int current,
@RequestParam(defaultValue = "10") int size,
@RequestParam(required = false) String title) {
Page page = new Page<>(current, size);
QueryWrapper wrapper = new QueryWrapper<>();
if (title != null && !title.isEmpty()) {
wrapper.like("title", title);
}
return archiveMapper.selectPage(page, wrapper);
}
// 更新档案
@PutMapping("/{id}")
public String update(@PathVariable Long id, @RequestBody TArchive archive) {
archive.setId(id);
archiveMapper.updateById(archive);
return "success";
}
// 删除档案
@DeleteMapping("/{id}")
public String delete(@PathVariable Long id) {
archiveMapper.deleteById(id);
return "success";
}
}
```
四、前端管理界面开发
前端使用Vue 3配合Element Plus组件库,实现档案的列表展示与弹窗编辑功能。
1. 项目初始化
```bash
npm create vite@latest dali-archive-ui -- --template vue
cd dali-archive-ui
npm install element-plus axios
npm run dev
```
2. 主页面代码
修改src/App.vue,替换为以下完整代码,实现表格展示、分页、新增、编辑、删除功能:
```vue
大理白族自治州档案管理系统
查询
新增档案
公开
内部
机密
编辑
删除
公开
内部
机密
取消
确定
```
五、Docker容器化部署
为了确保系统在任意Linux服务器上零门槛运行,编写Dockerfile和docker-compose.yml进行编排。
1. 后端Dockerfile
在项目根目录创建Dockerfile:
```dockerfile
FROM maven:3.8.6-openjdk-17 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests
FROM openjdk:17-slim
WORKDIR /app
COPY --from=build /app/target/.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
```
2. 前端Nginx配置
在前端项目根目录创建Dockerfile及nginx.conf:
```dockerfile
前端 Dockerfile
FROM node:18-alpine as build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
```
创建nginx.conf解决跨域问题:
```nginx
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://backend:8080/api/;
}
}
```
3. 一键启动编排
在服务器根目录创建docker-compose.yml,将MySQL、后端、前端串联:
```yaml
version: '3.8'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: YourNewPassword123!
MYSQL_DATABASE: dali_archive_db
volumes:
- ./data:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "3306:3306"
backend:
build: ./dali-archive-system
ports:
- "8080:8080"
depends_on:
- db
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/dali_archive_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
frontend:
build: ./dali-archive-ui
ports:
- "80:80"
depends_on:
- backend
```
4. 启动与验证
将上述SQL脚本保存为init.sql,并按以下目录结构放置文件:
- docker-compose.yml
- init.sql
- dali-archive-system/ (包含后端代码及Dockerfile)
- dali-archive-ui/ (包含前端代码及Dockerfile)
执行启动命令:
```bash
docker-compose up -d --build
```
启动成功后,直接访问服务器IP地址即可看到大理白族自治州档案管理系统主界面,并可进行档案的录入与管理操作。