重构合同文件管理逻辑,增加错误处理和日志记录 新增ContractBalance实体、Repository和VO类 完善Voable接口文档和实现规范 更新项目架构文档和数据库设计 修复SmbFileService的连接问题 移动合同相关TabSkin类到contract包 添加合同文件重建任务的WebSocket支持
265 lines
8.0 KiB
Markdown
265 lines
8.0 KiB
Markdown
# Contract-Manager 技术架构文档
|
|
|
|
## 📋 项目概述
|
|
|
|
Contract-Manager 是一个基于 Spring Boot 后端 + JavaFX 客户端的企业合同管理系统,采用模块化设计,支持多业务域的企业级应用开发。
|
|
|
|
## 🏗️ 技术栈
|
|
|
|
### 服务端 (Server Module)
|
|
- **基础框架**: Spring Boot 3.3.7
|
|
- **Java 版本**: Java 21
|
|
- **数据库访问**: Spring Data JPA 3.3.7
|
|
- **数据库**: MySQL 8.0.33
|
|
- **缓存**: Redis
|
|
- **构建工具**: Maven 3.x
|
|
- **开发工具**: Lombok 1.18.32
|
|
- **文档处理**: Apache POI 5.2.5, PDFBox 3.0.1
|
|
- **云服务集成**: 支持第三方云服务API集成
|
|
|
|
### 客户端 (Client Module)
|
|
- **UI框架**: JavaFX 21
|
|
- **Java 版本**: Java 21
|
|
- **UI组件库**: ControlsFX 11.1.2
|
|
- **开发工具**: Lombok 1.18.32
|
|
- **缓存**: Caffeine 3.1.8
|
|
- **通信**: WebSocket 与服务端通信
|
|
- **界面**: FXML 格式界面文件
|
|
|
|
### 公共模块 (Common Module)
|
|
- **Java 版本**: Java 21
|
|
- **开发工具**: Lombok 1.18.32
|
|
- **共享内容**: 常量定义、实体模型、视图对象、通用工具类
|
|
|
|
## 🏛️ 架构设计
|
|
|
|
### 整体架构图
|
|
```mermaid
|
|
graph TB
|
|
subgraph "客户端层 (Client Layer)"
|
|
A[JavaFX UI] --> B[FXML 界面]
|
|
A --> C[Controller 控制器]
|
|
A --> D[ViewModel 视图模型]
|
|
A --> E[Service 层]
|
|
end
|
|
|
|
subgraph "业务层 (Business Layer)"
|
|
C --> F[Controller API]
|
|
E --> G[Service 业务逻辑]
|
|
G --> H[Repository 数据访问]
|
|
end
|
|
|
|
subgraph "数据层 (Data Layer)"
|
|
H --> I[JPA Repository]
|
|
I --> J[MySQL 数据库]
|
|
end
|
|
|
|
subgraph "缓存层 (Cache Layer)"
|
|
G --> K[Redis 缓存]
|
|
E --> L[Caffeine 缓存]
|
|
end
|
|
|
|
subgraph "公共层 (Common Layer)"
|
|
M[Entity 实体模型]
|
|
N[VO 视图对象]
|
|
O[Constants 常量]
|
|
P[Utils 工具类]
|
|
end
|
|
|
|
H --> M
|
|
G --> N
|
|
M --> O
|
|
G --> P
|
|
|
|
subgraph "外部服务 (External Services)"
|
|
Q[云服务 API]
|
|
R[第三方集成]
|
|
end
|
|
|
|
G --> Q
|
|
G --> R
|
|
```
|
|
|
|
### 模块架构说明
|
|
|
|
#### 1. 客户端模块 (client/)
|
|
```
|
|
src/main/java/com/ecep/contract/
|
|
├── controller/ # JavaFX 控制器
|
|
│ ├── CompanyController.java
|
|
│ ├── ContractController.java
|
|
│ └── ...
|
|
├── service/ # 客户端服务层
|
|
│ ├── CompanyService.java
|
|
│ └── ...
|
|
├── task/ # 任务处理类
|
|
├── vm/ # 视图模型 (ViewModel)
|
|
├── converter/ # 类型转换器
|
|
├── serializer/ # 序列化类
|
|
└── util/ # 工具类
|
|
```
|
|
|
|
#### 2. 服务端模块 (server/)
|
|
```
|
|
src/main/java/com/ecep/contract/
|
|
├── api/ # API 接口定义
|
|
├── config/ # Spring 配置类
|
|
├── controller/ # Web 控制器
|
|
├── ds/ # 数据访问层 (按业务域组织)
|
|
│ ├── company/ # 公司相关业务
|
|
│ │ ├── model/ # 实体类
|
|
│ │ ├── repository/ # 数据访问接口
|
|
│ │ ├── service/ # 业务逻辑服务
|
|
│ │ ├── tasker/ # 任务处理器
|
|
│ │ └── controller/ # 控制器
|
|
│ ├── contract/ # 合同相关业务
|
|
│ ├── customer/ # 客户相关业务
|
|
│ ├── project/ # 项目相关业务
|
|
│ └── vendor/ # 供应商相关业务
|
|
├── service/ # 通用服务和任务处理器
|
|
├── handler/ # WebSocket 处理器
|
|
├── ui/ # UI 相关组件
|
|
└── util/ # 工具类
|
|
```
|
|
|
|
#### 3. 公共模块 (common/)
|
|
```
|
|
src/main/java/ecep/contract/
|
|
├── constant/ # 常量类 (按业务域组织)
|
|
├── model/ # 实体类 (按业务域组织)
|
|
├── vo/ # 视图对象 (按业务域组织)
|
|
└── util/ # 工具类
|
|
```
|
|
|
|
## 🎯 核心设计模式
|
|
|
|
### 1. 分层架构模式
|
|
- **表示层**: JavaFX UI + FXML
|
|
- **业务逻辑层**: Service + Task + Controller
|
|
- **数据访问层**: Repository + Entity
|
|
- **基础设施层**: 配置、缓存、工具类
|
|
|
|
### 2. 领域驱动设计 (DDD)
|
|
项目采用领域驱动设计,按业务域组织代码:
|
|
- **Company (公司域)**: 公司信息、联系人、文件管理
|
|
- **Contract (合同域)**: 合同管理、目录分类、文件处理
|
|
- **Customer (客户域)**: 客户关系、分类管理
|
|
- **Project (项目域)**: 项目管理、文件跟踪
|
|
- **Vendor (供应商域)**: 供应商管理、评价体系
|
|
|
|
### 3. 接口分离原则
|
|
服务端 Service 实现三个核心接口:
|
|
```java
|
|
public interface IEntityService<T> {
|
|
T save(T entity);
|
|
void delete(T entity);
|
|
T getById(Integer id);
|
|
Page<T> findAll(Specification<T> spec, Pageable pageable);
|
|
}
|
|
|
|
public interface QueryService<Vo> {
|
|
Vo findById(Integer id);
|
|
Page<Vo> findAll(JsonNode paramsNode, Pageable pageable);
|
|
}
|
|
|
|
public interface VoableService<M, Vo> {
|
|
void updateByVo(M model, Vo vo);
|
|
}
|
|
```
|
|
|
|
### 4. 缓存策略模式
|
|
- **多级缓存**: Caffeine (客户端) + Redis (服务端)
|
|
- **缓存键设计**: 按查询类型设计唯一键
|
|
- **缓存清理**: 数据修改时清理相关缓存
|
|
|
|
## 🔗 模块间通信
|
|
|
|
### 1. 客户端-服务端通信
|
|
- **协议**: HTTP REST API + WebSocket
|
|
- **数据格式**: JSON
|
|
- **序列化**: 统一使用 VO 对象进行数据传输
|
|
|
|
### 2. 服务端内部通信
|
|
- **依赖注入**: Spring IoC 容器管理
|
|
- **服务调用**: 延迟加载 (@Lazy) 避免循环依赖
|
|
- **事务管理**: @Transactional 确保数据一致性
|
|
|
|
### 3. 数据流转
|
|
```
|
|
Entity (数据库) ↔ Repository ↔ Service ↔ VO ↔ JSON ↔ Client
|
|
```
|
|
|
|
## 🛡️ 安全与性能
|
|
|
|
### 1. 安全设计
|
|
- **API 认证**: 基于 JWT 的身份认证机制
|
|
- **权限控制**: 基于角色的访问控制 (RBAC)
|
|
- **数据验证**: 输入参数校验和 SQL 注入防护
|
|
|
|
### 2. 性能优化
|
|
- **延迟加载**: @Lazy 避免循环依赖
|
|
- **缓存策略**: 多级缓存减少数据库访问
|
|
- **分页查询**: 大数据集分页处理
|
|
- **批量操作**: 批量保存和更新
|
|
|
|
### 3. 监控与日志
|
|
- **应用监控**: Spring Boot Actuator
|
|
- **日志管理**: SLF4J + Logback
|
|
- **性能监控**: 缓存命中率、响应时间
|
|
|
|
## 📦 依赖管理
|
|
|
|
### Maven 模块结构
|
|
```
|
|
parent
|
|
├── client # 客户端模块
|
|
├── common # 公共模块
|
|
└── server # 服务端模块
|
|
```
|
|
|
|
### 关键依赖说明
|
|
- **Spring Boot Starter**: 快速集成 Spring 生态
|
|
- **Spring Data JPA**: 简化数据访问层开发
|
|
- **Lombok**: 减少样板代码
|
|
- **Caffeine**: 高性能本地缓存
|
|
- **JavaFX**: 现代化桌面应用 UI
|
|
|
|
## 🚀 开发规范
|
|
|
|
### 1. 命名规范
|
|
- **类名**: 驼峰命名法,以业务含义命名
|
|
- **接口名**: 以 I 开头 + 业务描述
|
|
- **控制器**: 以 Controller 结尾
|
|
- **服务类**: 以 Service 结尾
|
|
- **仓储接口**: 以 Repository 结尾
|
|
|
|
### 2. 编码规范
|
|
- **注解使用**: 合理使用 Spring、Lombok 等注解
|
|
- **异常处理**: 统一异常处理机制
|
|
- **单元测试**: 核心业务逻辑必须有测试覆盖
|
|
- **代码注释**: 关键逻辑和复杂业务需要 JavaDoc
|
|
|
|
### 3. 配置管理
|
|
- **环境配置**: 多环境配置 (dev, test, prod)
|
|
- **敏感信息**: 使用 .env 文件管理 API 密钥等
|
|
- **配置分离**: 业务配置与框架配置分离
|
|
|
|
## 📊 扩展性设计
|
|
|
|
### 1. 模块化设计
|
|
- **业务域分离**: 不同业务域独立开发和部署
|
|
- **接口标准化**: 统一的 Service 接口设计
|
|
- **组件复用**: 基础组件可在多个业务域复用
|
|
|
|
### 2. 水平扩展
|
|
- **无状态设计**: Service 层无状态设计支持集群部署
|
|
- **缓存分离**: Redis 支持分布式缓存
|
|
- **数据库分离**: 支持读写分离和分库分表
|
|
|
|
### 3. 垂直扩展
|
|
- **微服务拆分**: 按业务域可拆分为微服务
|
|
- **插件化**: 支持新业务域的快速集成
|
|
|
|
---
|
|
|
|
*本文档反映了 Contract-Manager 项目的整体技术架构和设计理念,为项目开发、部署和维护提供指导。* |