# 修复：产品上架/下架切换接口 500

> **服务**: hl-product-service-v2 (端口 8083)
> **PR**: #726
> **Issue**: #725
> **日期**: 2026-04-17
> **影响范围**: 管理端产品上架/下架操作

---

## 现象（前端感知）

点击产品「上架」/「下架」按钮后，后端返回 `{"code":500, "message":"服务器内部错误"}`，操作失败。

## 根因

`ProductStatusService.togglePublish` 内部调用 `this.doTogglePublishInTx(...)` 是 Spring AOP 自调用，绕过代理，`@Transactional` 注解失效 → 方法内的 `registerAfterCommit` 拿不到事务上下文，抛 `IllegalStateException: Transaction synchronization is not active`。

## 修复

- `@Lazy` setter 注入自身代理 `self`
- `togglePublish` 改用 `self.doTogglePublishInTx(...)` 走 AOP 代理，`@Transactional` 生效

## 接口契约

**无变化**。仅修复原本应该 200 却误返 500 的 bug，接口路径/参数/响应结构未变动。

| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/admin/product/item/{id}/toggle-publish` | 上架/下架切换（修复后正常 200） |

## 前端适配

**无需改动**。原本的调用代码现在能正常工作。

## 重启提示

需要重启 `hl-product-service-v2`（端口 8083）—— 通过 Deploy Panel 重新部署最新 jar。
