docs: 80 PR 代码规范循环审查 Phase 1 批量修复 (5 PR 合并)
- 工单 #1510 / PR #1511-1515 合并到 dev - 修复 48 处低成本违规 (C4 字段注入/C19 success(null)/C-MAPPER-SQL 注解 SQL/C5 事务内 Feign/C3 缺 @Valid 等) - 唯一对前端有影响: PR #1515 mp 服务 4 处 Feign Fallback 行为变更 (success(null)→error),仅熔断场景生效 - 6 个业务服务全量重新部署 (因 hl-common 改动) - 余 336 违规留 Phase 2/3 独立任务跟踪
这个提交包含在:
父节点
e67553f107
当前提交
be992e4bb6
@ -0,0 +1,87 @@
|
||||
# 重构:80 PR 代码规范循环审查 Phase 1 批量修复(5 PR)
|
||||
|
||||
**类型**: 内部重构(对前端基本零影响 + 1 处 Feign Fallback 行为变更)
|
||||
**关联**: 工单 #1510 / PR #1511 #1512 #1513 #1514 #1515
|
||||
**日期**: 2026-04-27
|
||||
**影响范围**: 6 个后端服务全量(common/user/resource/order-v2/product-v2/mp),全部需重新部署
|
||||
|
||||
---
|
||||
|
||||
## 背景
|
||||
|
||||
派 6 个 /@cr 并行审查 wx 最近 80 个已合并业务 PR (#1345 ~ #1505) 涉及的 437 个 Java 文件,对照 `docs/CODE_RULES.md` 找出违反规范的代码。Round 1 共发现 **384 处违规** (P0=225 / P1=72 / P2=62)。
|
||||
|
||||
本批 Phase 1 修复 **48 处低成本违规** (剩 336 处分 Phase 2/3 独立任务跟踪)。
|
||||
|
||||
## 5 个修复 PR
|
||||
|
||||
| PR | 模块 | 修/总 | 主修内容 | 合并 commit |
|
||||
|----|------|------|----------|-----------|
|
||||
| #1511 | hl-common | 5/5 | GlobalExceptionHandler 4 处 @Autowired 字段注入改构造器(ObjectProvider 包装可选依赖) + Result.success() 重构(避免传 null) | 9c6d167e |
|
||||
| #1512 | hl-user-service | 13/19 | 4 个 Mapper @Select/@Update 注解 SQL 改 default+QueryWrapper 聚合方法 + 3 处字段注入构造器化 + 2 处缺失 @Valid 补全 + 4 处 success(null)→success() | 063475a6 |
|
||||
| #1513 | hl-resource-service | 11/12 | 9 个资源 service 的通知类 monitorFeign 调用从 @Transactional 内移到 afterCommit(register + 非事务兜底 + effectively final) + 1 处 @Valid 补全 | 5a1cb159 |
|
||||
| #1514 | hl-order-service-v2 | 10/14 | 2 处 @Autowired 字段→构造器 + 3 处 new ObjectMapper→注入 + 2 处 @Valid 补全 + 2 处 BeanUtil 后显式 set 防 enum→String 字段吞 + TierInfoResolver static 工具类改 @Component(4 个 caller 同步) | d5c4df29 |
|
||||
| #1515 | hl-product-service-v2 + hl-mp-service | 9/9 | 6 处 success(null)→success() + 2 处 ObjectMapper/RestTemplate 改注入(新增 RestTemplateConfig @Bean) + 1 处字段注入构造器化 + **2 个 Feign Fallback 行为变更** | 877f22b5 |
|
||||
|
||||
## ⚠️ 唯一对前端有影响的变更:Feign Fallback 行为
|
||||
|
||||
PR #1515 调整了 mp 服务的 2 个 Feign Fallback Factory 共 4 处:
|
||||
|
||||
### 改前
|
||||
```java
|
||||
// MpProductFeignFallbackFactory.getEarliestBookingDate
|
||||
@Override
|
||||
public Result<EarliestBookingDateVO> getEarliestBookingDate(Long productId) {
|
||||
return Result.success(null); // 静默"伪装成功"返回 null data
|
||||
}
|
||||
```
|
||||
|
||||
### 改后
|
||||
```java
|
||||
@Override
|
||||
public Result<EarliestBookingDateVO> getEarliestBookingDate(Long productId) {
|
||||
return Result.error("产品服务不可用,请稍后重试"); // 显式失败
|
||||
}
|
||||
```
|
||||
|
||||
### 受影响的接口(4 处)
|
||||
|
||||
| Fallback Factory | 方法 | 原行为 | 新行为 |
|
||||
|-----------------|------|------|------|
|
||||
| MpProductFeignFallbackFactory | getEarliestBookingDate | `code=200, data=null` | `code≠200, message="产品服务不可用,请稍后重试"` |
|
||||
| MpOrderFeignFallbackFactory | getPreTripChecklist | `code=200, data=null` | `code≠200, message="订单服务不可用,请稍后重试"` |
|
||||
| MpOrderFeignFallbackFactory | matchEarlyBird | `code=200, data=null` | `code≠200, message="订单服务不可用,请稍后重试"` |
|
||||
| MpOrderFeignFallbackFactory | validateEarlyBirdPlan | `code=200, data=null` | `code≠200, message="订单服务不可用,请稍后重试"` |
|
||||
|
||||
### 触发条件
|
||||
仅当上游服务(product-v2 / order-v2)**完全不可达 + 本地熔断打开**时才触发 Fallback。正常请求/业务异常等都仍按原 code 返回,未受影响。
|
||||
|
||||
### 前端处理建议
|
||||
|
||||
1. 这 4 个接口的 mp 端调用方,**必须判 `result.code` 决定走业务分支还是降级 UI**:
|
||||
- `result.code === 200 && result.data` → 业务正常渲染
|
||||
- `result.code !== 200` → 显示降级提示(按 result.message 文案 + toast/弹窗,**不要再当成 success-空数据**展示)
|
||||
2. **正常业务逻辑不需要改**(本变更只在熔断场景生效,日常 99.9%+ 场景行为完全等价)
|
||||
|
||||
## 其余 4 PR 对前端影响
|
||||
|
||||
**零影响**。全部是后端内部重构,对外 API 行为完全等价:
|
||||
- 字段注入改构造器注入 → JVM 内部 bean 装配方式变化,接口调用方无感知
|
||||
- @Valid 补全 → 接口校验更严,本来该被前端校验拦住的非法请求,现在后端也兜住,前端无须改
|
||||
- success(null) → success() → JSON 返回 `{"code":200,"message":"成功","data":null}`,字节级等价
|
||||
- Mapper @Select 改 default+WrapperX → SQL 输出等价,接口数据完全一致
|
||||
- afterCommit 改造 → 通知类 Feign 异步执行时机微调(事务提交后才发 monitor 日志),接口响应时间略有缩短,接口数据完全一致
|
||||
- BeanUtil 后显式 set → 防 enum→String 字段值丢失(原来是 BUG 修复变更前可能 null),前端拿到的值是真实值,**这是正面修复**
|
||||
|
||||
## 后端编译/部署
|
||||
|
||||
- ✅ 5 个 PR 各自 `mvn compile -pl <module> -am` 单独编译通过
|
||||
- ⏭️ 部署: 因 hl-common 改动,**需全量重新部署 6 个业务服务** (gateway/user/resource/product-v2/order-v2/mp)
|
||||
- 测试服部署后请优先回归 mp 端 4 个 Fallback 接口熔断场景(可暂停 product-v2/order-v2 触发熔断验证 Fallback 不再返 success-null)
|
||||
|
||||
## 留 Phase 2/3 (后续独立任务)
|
||||
|
||||
- **Phase 2 中等成本** (估 ~120 P0): C2 Service 构造 Wrapper 下沉 / C27 Map 传数据→VO / C29 Service 接收 ReqVO / C1 Controller 业务下沉
|
||||
- **Phase 3 架构级重构** (估 ~120 处): C-ONE-MAPPER 拆 Service (40 P0) / C-SIZE 类体积超 300 (58 处, HotelService 952 / ScenicSpotService 937 等) / C17 状态机 if-else / C-DI-LIMIT Service 依赖>7
|
||||
|
||||
详见 `docs/tasks/20260427_审查_最近80个PR循环审查.md` 与 `test/cr-audit-data/round1/AGGREGATE-report.md`。
|
||||
正在加载...
x
在新工单中引用
屏蔽一个用户