网站首页/ 信息中心/ 档案百科/

律师事务所档案培训报名系统搭建全流程实战指南

发布时间:2026年09月17日 06:30:30 浏览量:0

系统架构与工具选型

本系统将采用前后端分离架构,使用主流且成熟的技术栈,确保系统稳定、易于维护和扩展。我们将通过一个具体的开发实例,带你从零开始构建。

技术栈清单

以下是构建本系统所需的全部技术组件及其版本,请确保在开始前完成环境准备。

数据库设计核心表

系统核心围绕“培训”与“报名”两个实体。以下是必须创建的三张核心表结构SQL。

-- 1. 培训课程表 (training_course)
CREATE TABLE `training_course` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
`course_name` varchar(200) NOT NULL COMMENT '培训名称',
`lecturer` varchar(100) NOT NULL COMMENT '主讲人',
`start_time` datetime NOT NULL COMMENT '开始时间',
`end_time` datetime NOT NULL COMMENT '结束时间',
`location` varchar(500) NOT NULL COMMENT '培训地点',
`max_participants` int NOT NULL COMMENT '最大报名人数',
`current_participants` int DEFAULT '0' COMMENT '当前已报名人数',
`description` text COMMENT '培训详情',
`status` tinyint DEFAULT '1' COMMENT '状态:1-可报名, 0-已截止',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='培训课程表';
-- 2. 律师信息表 (lawyer_info)
CREATE TABLE `lawyer_info` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '姓名',
`lawyer_id` varchar(50) NOT NULL COMMENT '律师执业证号',
`phone` varchar(20) NOT NULL COMMENT '手机号',
`email` varchar(100) NOT NULL COMMENT '邮箱',
`firm` varchar(200) NOT NULL COMMENT '所属律所',
`department` varchar(100) DEFAULT NULL COMMENT '部门',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_lawyer_id` (`lawyer_id`),
UNIQUE KEY `uk_phone` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='律师信息表';
-- 3. 报名记录表 (registration_record)
CREATE TABLE `registration_record` (
`id` bigint NOT NULL AUTO_INCREMENT,
`course_id` bigint NOT NULL COMMENT '培训ID',
`lawyer_id` bigint NOT NULL COMMENT '律师ID',
`registration_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '报名时间',
`notes` varchar(500) DEFAULT NULL COMMENT '备注(如:饮食禁忌)',
`status` tinyint DEFAULT '1' COMMENT '状态:1-报名成功, 2-已取消',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_course_lawyer` (`course_id`,`lawyer_id`) COMMENT '同一培训同一律师只能报名一次',
KEY `idx_course_id` (`course_id`),
KEY `idx_lawyer_id` (`lawyer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报名记录表';

后端服务开发实战

后端负责提供数据接口和业务逻辑。我们将使用Spring Boot快速搭建。

项目初始化与依赖配置

使用Spring Initializr (https://start.spring.io) 生成项目,或直接在pom.xml中添加以下核心依赖。




org.springframework.boot
spring-boot-starter-web


org.springframework.boot
spring-boot-starter-validation


com.baomidou
mybatis-plus-boot-starter
3.5.4


mysql
mysql-connector-java
runtime


application.yml中配置数据库连接和MyBatis-Plus。

律师事务所档案培训报名系统搭建全流程实战指南

 application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/law_training_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: your_username
password: your_password
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  控制台打印SQL,生产环境请关闭
global-config:
db-config:
logic-delete-field: deleted  全局逻辑删除字段名(如果用到)
logic-delete-value: 1
logic-not-delete-value: 0

核心接口开发:报名业务

报名是核心业务,涉及人数校验、唯一性校验等。以下是报名接口的Controller、Service和关键逻辑实现。

// 1. Controller层:RegistrationController.java
@RestController
@RequestMapping("/api/registration")
@Slf4j
public class RegistrationController {
@Autowired
private RegistrationService registrationService;
@PostMapping("/apply")
public Result apply(@RequestBody @Valid RegistrationApplyDTO dto) {
return registrationService.apply(dto);
}
}
// 2. Service层核心方法:RegistrationServiceImpl.java
@Service
@Transactional(rollbackFor = Exception.class)
public class RegistrationServiceImpl implements RegistrationService {
@Autowired
private TrainingCourseMapper courseMapper;
@Autowired
private RegistrationRecordMapper recordMapper;
@Autowired
private LawyerInfoMapper lawyerMapper;
@Override
public Result apply(RegistrationApplyDTO dto) {
// 校验1:培训是否存在且可报名
TrainingCourse course = courseMapper.selectById(dto.getCourseId());
if (course == null) {
return Result.error("培训课程不存在");
}
if (course.getStatus() != 1) {
return Result.error("该培训已截止报名");
}
// 校验2:是否已满员
if (course.getCurrentParticipants() >= course.getMaxParticipants()) {
return Result.error("该培训报名人数已满");
}
// 校验3:律师信息是否存在(或创建)
LambdaQueryWrapper lawyerQuery = new LambdaQueryWrapper<>();
lawyerQuery.eq(LawyerInfo::getLawyerId, dto.getLawyerId());
LawyerInfo lawyer = lawyerMapper.selectOne(lawyerQuery);
if (lawyer == null) {
lawyer = new LawyerInfo();
BeanUtils.copyProperties(dto, lawyer);
lawyerMapper.insert(lawyer);
}
// 校验4:是否已报名同一课程
LambdaQueryWrapper recordQuery = new LambdaQueryWrapper<>();
recordQuery.eq(RegistrationRecord::getCourseId, dto.getCourseId())
.eq(RegistrationRecord::getLawyerId, lawyer.getId());
if (recordMapper.selectCount(recordQuery) > 0) {
return Result.error("您已报名该培训,请勿重复操作");
}
// 执行报名
RegistrationRecord record = new RegistrationRecord();
record.setCourseId(dto.getCourseId());
record.setLawyerId(lawyer.getId());
record.setNotes(dto.getNotes());
recordMapper.insert(record);
// 更新课程已报名人数
course.setCurrentParticipants(course.getCurrentParticipants() + 1);
courseMapper.updateById(course);
return Result.success("报名成功", record.getId());
}
}

关键点:整个报名过程在一个数据库事务(@Transactional)中完成,确保数据一致性。如果律师信息不存在,则自动创建,避免律师重复填写基础信息。

前端管理界面开发

前端使用Vue 3 + Element Plus,构建一个简洁高效的管理后台。

项目初始化与页面结构

使用Vite快速创建Vue项目,并安装Element Plus。

 创建项目
npm create vue@latest law-training-admin
进入项目并安装Element Plus
cd law-training-admin
npm install
npm install element-plus @element-plus/icons-vue axios

main.js中全局引入Element Plus。

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import  as ElementPlusIconsVue from '@element-plus/icons-vue'
const app = createApp(App)
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component)
}
app.use(ElementPlus)
app.mount('app')

培训课程列表与报名页面

创建TrainingList.vue组件,展示可报名的培训课程,并提供报名入口。



// TrainingList.vue 脚本部分

报名表单对话框组件

创建ApplyDialog.vue组件,收集律师信息和备注。



// ApplyDialog.vue 脚本与表单验证规则