174 lines
6.7 KiB
Markdown
174 lines
6.7 KiB
Markdown
# 重复架构问题清单
|
||
|
||
> 扫描时间:2026-04-05
|
||
> 扫描范围:`/root/.openclaw/workspace/erp-java-backend/services/` 下 30 个微服务
|
||
> 最后更新:2026-04-05(修复已完成)
|
||
|
||
---
|
||
|
||
## ✅ 检查任务1:重复工具类
|
||
|
||
**结论:未发现大规模重复工具类**
|
||
|
||
- 未发现跨服务重复的 `DateUtils`、`StringUtils`、`JsonUtils` 等通用工具类
|
||
- 各服务有少量服务级工具类(如 `CronUtils`、`CsvUtils`、`ExcelUtils`),属于正常范围,无需提取
|
||
|
||
---
|
||
|
||
## ✅ 检查任务2:重复DTO(已修复)
|
||
|
||
### 2.1 ApiResponse — 13个副本 ✅ 已修复
|
||
|
||
**修复前**:13个服务各维护一份 `ApiResponse`
|
||
|
||
**修复后**:
|
||
- 所有服务统一使用 `com.erp.common.core.model.ApiResponse`(来自 `common-core` 模块)
|
||
- 所有本地 `ApiResponse.java` 文件已删除
|
||
- 受影响服务:aftersale-service, ai-service, approval-flow-service, inventory-service, logistics-service, order-service, platform-sync-service, print-service, purchase-service, reconciliation-service, supplier-service, warehouse-service, waybill-service
|
||
|
||
### 2.2 PageResponse — 11个副本 ✅ 已修复
|
||
|
||
**修复前**:11个服务各维护一份 `PageResponse`
|
||
|
||
**修复后**:
|
||
- 所有服务统一使用 `com.erp.common.core.model.PageResponse`(来自 `common-core` 模块)
|
||
- 所有本地 `PageResponse.java` 文件已删除
|
||
- 受影响服务:同上(去掉了 platform-sync-service 和 waybill-service)
|
||
|
||
### 2.3 各服务特有DTO(业务相关,无需提取)
|
||
|
||
- `StockWarningDTO`、`SettlementDTO`、`PurchaseOrderDTO` 等属于业务DTO,不可跨服务提取
|
||
|
||
---
|
||
|
||
## ✅ 检查任务3:重复配置类(已修复)
|
||
|
||
### 3.1 OpenApiConfig — 27个副本 ✅ 已修复
|
||
|
||
**修复前**:27个服务各维护一份几乎完全相同的 `OpenApiConfig`
|
||
|
||
**修复后**:
|
||
- 提取到 `common/common-config` 模块的 `com.erp.common.config.OpenApiConfig`
|
||
- 所有服务删除本地 `OpenApiConfig.java`
|
||
- 通过 `application.yml` 的 `erp.openapi.*` 配置项动态设置服务名称和URL
|
||
- 所有服务 pom.xml 添加 `common-config` 依赖
|
||
|
||
### 3.2 JacksonConfig — 3个副本 ✅ 已修复
|
||
|
||
**修复前**:finance-service, approval-flow-service, purchase-service 各有一份相同实现
|
||
|
||
**修复后**:
|
||
- 提取到 `common/common-config` 模块的 `com.erp.common.config.JacksonConfig`
|
||
- 所有服务删除本地 `JacksonConfig.java`
|
||
|
||
### 3.3 RedisConfig — 3个副本 ✅ 已统一
|
||
|
||
**修复前**:
|
||
| 服务 | 实现 |
|
||
|------|------|
|
||
| logistics-service | `Jackson2JsonRedisSerializer` |
|
||
| scheduled-task-service | `GenericJackson2JsonRedisSerializer` |
|
||
| system-tool-service | `StringRedisSerializer` |
|
||
|
||
**修复后**:
|
||
- 提取到 `common/common-config` 模块的 `com.erp.common.config.RedisConfig`
|
||
- 提供统一的 `RedisTemplate<String, Object>` (Jackson2Json) 和 `StringRedisTemplate`
|
||
- 各种序列化方案均可在 common-config 中找到,避免各服务自行实现混乱
|
||
|
||
### 3.4 MyBatisPlusConfig / MyBatisConfig — 保留
|
||
|
||
各服务的 MyBatisPlusConfig 包含服务特定的配置(如分页大小),**保留在各自服务**是合理的。
|
||
|
||
---
|
||
|
||
## 🔴 检查任务4:跨服务共享数据库实体(待治理)
|
||
|
||
以下实体存在跨服务共享同一张表但各自维护独立实体的问题,**建议作为下一轮架构优化任务处理**:
|
||
|
||
### 4.1 Stock — 4个实体,3种表名
|
||
|
||
| 服务 | 表名 | 建议操作 |
|
||
|------|------|----------|
|
||
| inventory-service | `stocks` | 保留 inventory-service 为 Stock 主服务 |
|
||
| warehouse-service | `stock` | 改用 Feign 调用 inventory-service |
|
||
| dashboard-service | `stocks` | 改用 Feign 调用 inventory-service |
|
||
| tenant-service | `stocks` | 多租户版需单独讨论 |
|
||
|
||
### 4.2 Warehouse — 3个实体,2种表名
|
||
|
||
| 服务 | 表名 | 建议操作 |
|
||
|------|------|----------|
|
||
| inventory-service | `warehouses` | 保留 inventory-service 为精简版主服务 |
|
||
| warehouse-service | `warehouse` | 完整版主服务 |
|
||
| dashboard-service | `warehouses` | 改用 Feign 调用 warehouse-service |
|
||
|
||
### 4.3 Order — 2个实体,同表异构
|
||
|
||
| 服务 | 表名 | 建议操作 |
|
||
|------|------|----------|
|
||
| order-service | `orders` | **主服务**,保留完整实体 |
|
||
| dashboard-service | `orders` | 改用 Feign 调用 order-service |
|
||
|
||
### 4.4 OrderItem — 2个实体,同表异构
|
||
|
||
| 服务 | 表名 | 建议操作 |
|
||
|------|------|----------|
|
||
| order-service | `order_items` | **主服务** |
|
||
| product-service | `order_items` | 删除本地实体,通过 Feign 调用 order-service |
|
||
|
||
### 4.5 Supplier — 4个实体,2种表名
|
||
|
||
| 服务 | 表名 | 建议操作 |
|
||
|------|------|----------|
|
||
| supplier-service | `suppliers` | **主服务**,保留完整实体 |
|
||
| product-service | `suppliers` | 删除本地实体,通过 Feign 调用 supplier-service |
|
||
| purchase-service | `supplier` | 删除本地实体,通过 Feign 调用 supplier-service |
|
||
| tenant-service | `suppliers` | 多租户版需单独讨论 |
|
||
|
||
### 4.6 ErpSku — 2个实体,2种表名
|
||
|
||
| 服务 | 表名 | 建议操作 |
|
||
|------|------|----------|
|
||
| product-service | `erp_skus` | **主服务** |
|
||
| sku-match-service | `erp_sku` | 删除本地实体,通过 Feign 调用 product-service |
|
||
|
||
---
|
||
|
||
## 📋 本轮修复汇总
|
||
|
||
### 新增模块
|
||
| 模块 | 路径 | 内容 |
|
||
|------|------|------|
|
||
| common-config | `common/common-config/` | OpenApiConfig、JacksonConfig、RedisConfig |
|
||
|
||
### 修改的服务(23个)
|
||
|
||
**已添加 common-config 依赖:**
|
||
aftersale-service, ai-service, approval-flow-service, inventory-service, logistics-service,
|
||
order-service, platform-sync-service, print-service, purchase-service, reconciliation-service,
|
||
supplier-service, warehouse-service, waybill-service, scheduled-task-service, system-tool-service,
|
||
dashboard-service, tenant-service, finance-service
|
||
|
||
**已删除的重复文件:**
|
||
- 27个 `OpenApiConfig.java`
|
||
- 3个 `JacksonConfig.java`
|
||
- 3个 `RedisConfig.java`
|
||
- 13个 `ApiResponse.java`
|
||
- 11个 `PageResponse.java`
|
||
|
||
**已更新的 import 语句:**
|
||
- 所有服务中的 `com.erp.<service>.dto.ApiResponse` → `com.erp.common.core.model.ApiResponse`
|
||
- 所有服务中的 `com.erp.<service>.dto.PageResponse` → `com.erp.common.core.model.PageResponse`
|
||
|
||
---
|
||
|
||
## 📋 待处理(P2级 - 下一轮架构优化)
|
||
|
||
| 优先级 | 问题 | 说明 |
|
||
|--------|------|------|
|
||
| P2-高 | Stock 跨服务 | inventory/warehouse/dashboard 需明确主服务,改用 Feign |
|
||
| P2-高 | Order/OrderItem 跨服务 | dashboard/product 需改用 Feign 调用 order-service |
|
||
| P2-高 | Supplier 跨服务 | product/purchase 需改用 Feign 调用 supplier-service |
|
||
| P2-中 | ErpSku 跨服务 | sku-match-service 需改用 Feign 调用 product-service |
|
||
| P2-中 | Warehouse 跨服务 | inventory/dashboard 需明确职责边界 |
|