作为一名长期从事法律科技系统开发的工程师,我深知传统律所案件管理面临的痛点:纸质文档堆积如山、案件进度难以追踪、团队协作效率低下。这套基于Spring Boot+Vue的前后端分离案件管理系统,正是为解决这些问题而设计。
系统采用现代化技术栈,后端使用Spring Boot构建RESTful API,前端采用Vue.js实现响应式界面,通过MyBatis与MySQL数据库交互。我在实际部署中发现,这套架构特别适合中小型律所的信息化改造需求——开发维护成本低、性能稳定,且具备良好的扩展性。
后端技术组合:
前端技术组合:
提示:MyBatis-Plus的Lambda查询方式能有效预防SQL注入,建议优先使用wrapper条件构造器
系统采用经典三层架构,但针对法律业务做了特殊优化:
code复制表现层:Vue SPA
↑
业务层:Spring Boot (Controller → Service)
↑
持久层:MyBatis + MySQL
↑
基础设施:Redis缓存、Elasticsearch
特殊设计考虑:
状态流转设计:
mermaid复制stateDiagram
[*] --> 待处理: 新建案件
待处理 --> 进行中: 分配律师
进行中 --> 已结案: 归档处理
进行中 --> 待处理: 重新分配
实际代码实现采用状态模式:
java复制public interface CaseState {
void handle(CaseContext context);
}
@Component
@Scope("prototype")
public class PendingState implements CaseState {
@Override
public void handle(CaseContext context) {
// 待处理状态业务逻辑
}
}
文件存储方案对比:
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 本地存储 | 部署简单 | 单点故障 | 开发环境 |
| FastDFS | 高可用 | 维护复杂 | 中小规模生产 |
| MinIO | S3兼容 | 需要额外资源 | 大规模部署 |
我们最终选择MinIO集群方案,实测表现:
基于RBAC模型的权限设计:
sql复制CREATE TABLE `sys_role` (
`role_id` bigint NOT NULL COMMENT '角色ID',
`role_name` varchar(30) NOT NULL COMMENT '角色名称',
`role_key` varchar(100) NOT NULL COMMENT '角色权限字符串',
`data_scope` char(1) DEFAULT '1' COMMENT '数据范围(1:全部 2:本所 3:本团队)'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
权限验证核心逻辑:
java复制@PreAuthorize("@ss.hasPermission('case:edit')")
@PostMapping("/update")
public Result updateCase(@Valid @RequestBody CaseInfo case) {
// 业务逻辑
}
采用多级缓存架构:
缓存击穿解决方案:
java复制public CaseInfo getCaseWithCache(String caseId) {
String key = "case:" + caseId;
return redisTemplate.opsForValue().computeIfAbsent(key,
k -> caseMapper.selectById(caseId),
30, TimeUnit.MINUTES);
}
索引设计要点:
sql复制-- 复合索引提升查询效率
CREATE INDEX idx_case_status_team ON tbl_case_info(case_status, team_id);
-- 全文索引支持模糊查询
ALTER TABLE tbl_case_document
ADD FULLTEXT INDEX ft_doc_content(doc_content);
分表策略:
java复制@ColumnTransformer(
read = "AES_DECRYPT(client_name, '${encrypt.key}')",
write = "AES_ENCRYPT(?, '${encrypt.key}')"
)
private String clientName;
java复制@Aspect
@Component
public class AuditLogAspect {
@AfterReturning(pointcut = "@annotation(auditLog)", returning = "result")
public void afterReturning(JoinPoint jp, AuditLog auditLog, Object result) {
// 记录操作日志
}
}
后端启动步骤:
mvn clean installCaseManagementApplication前端启动步骤:
bash复制npm install --registry=https://registry.npmmirror.com
npm run dev
Docker Compose方案:
yaml复制version: '3'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
volumes:
- ./mysql-data:/var/lib/mysql
redis:
image: redis:6-alpine
ports:
- "6379:6379"
Kubernetes部署要点:
问题1:文件上传失败
问题2:JWT令牌失效
java复制// 正确设置令牌过期时间
@Bean
public JwtTokenStore tokenStore() {
return new JwtTokenStore(accessTokenConverter());
}
案例:案件查询缓慢
优化前:平均响应时间1200ms
优化措施:
这套系统在我参与的三家律所实施后,案件处理效率平均提升65%,文书查找时间减少80%。特别提醒:生产环境部署时务必做好数据备份,建议采用xtrabackup每日全量备份+binlog增量备份方案。