# 重复架构问题清单

> 扫描时间：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 需明确职责边界 |
