# Tasks: 平台订单状态受控调整

**Feature**: `018-order-status-admin`
**Implementation status**: 代码与自动化验证完成；真实数据库、真实 OMG 网关和预发布 UI 手工验收未在本地执行。

## 1. Backend contract and lifecycle

- [x] T001 新增仅包含四状态快照和原因的管理端请求 DTO，并校验范围、空白原因和 200 字上限。
- [x] T002 新增服务端状态上下文，统一返回允许的订单/配送目标及支付操作能力。
- [x] T003 实现订单状态 `0→1→2→3`、未支付取消和配送 `NULL→0→1→2→3` 白名单。
- [x] T004 使用订单、配送、支付、售后四字段旧快照执行 CAS，冲突时不产生日志、账单或积分副作用。
- [x] T005 将管理员送达与骑手送达收敛到统一完成逻辑，同步 `state=3`、`deliveryStatus=3`、`sdTime` 和幂等账单。
- [x] T006 实现线下收款及线下退款专用操作；退款同步订单三状态并复用幂等积分返还。
- [x] T007 加固旧 `PUT /system/order`，禁止写订单、配送、支付、售后和送达时间字段。
- [x] T008 为 7 个管理接口统一添加 `system:order:edit` 权限、请求频控和专用 DTO。

## 2. OMG payment and refund

- [x] T009 管理端补单复用 OMG 查询结果，仅在真实支付校验成功后同步订单支付状态。
- [x] T010 自动退款先 CAS 支付流水，成功后再同步 `state=4/payStatus=2/afterSaleStatus=3`。
- [x] T011 网关结果未知时保持退款中并禁止重复调用；明确失败恢复已支付。
- [x] T012 不支持退款 API 的支付方式只创建一个人工待办，确认前订单保持已支付。
- [x] T013 人工退款二次确认通过支付流水 `1→4→3` 收口，并支持流水已完成后的本地状态补偿重试。
- [x] T014 网关成功但本地同步失败时写高优先级审计；异常日志只记录异常类型，不输出凭证或网关异常详情。

## 3. Admin frontend

- [x] T015 新增状态上下文、受控状态、线下收退款、OMG 补单/退款/人工确认 API 封装。
- [x] T016 将订单修改弹窗改为服务端白名单驱动，支付和售后状态保持只读。
- [x] T017 所有支付业务动作要求原因；退款及人工退款确认提供不可逆二次确认和加载态。
- [x] T018 列表、搜索、详情和弹窗接入 `zh_CN`、`zh_TW`、`en_US`、`vi` 四语言文本。

## 4. Automated verification

- [x] T019 `OrderLifecycleServiceTest`、`PosOrderAdminStatusControllerTest`、`OmgPayControllerTest`：22 个用例通过。
- [x] T020 原有 `PosOrderOmgPaymentServiceImplTest`、`PosOrderOmgRefundServiceImplTest`：5 个回归用例通过。
- [x] T021 Maven 聚焦测试过程完成全部依赖模块及 `ruoyi-admin` 编译，构建成功。
- [x] T022 管理后台 `npm run build:prod` 成功；仅保留两个既有 `*.vue~` 文件及包体积警告。
- [x] T023 ESLint 全库脚本因既有 `.eslintignore` 把 `src` 全部排除而不可运行；`--no-ignore` 对修改的两个业务文件核对为 317 项，基线为 339 项，未增加历史问题总数。
- [x] T024 服务端和管理端 `git diff --check` 通过；敏感字段日志模式扫描无命中。

## 5. Staging acceptance (requires environment and test data)

- [ ] T025 在预发布环境用可恢复测试订单执行 `quickstart.md` 的 10 项手工场景。
- [ ] T026 逐一切换四种语言，核对列表、详情、弹窗、确认框及错误提示无原始 key。
- [ ] T027 使用只读 SQL 核对订单、操作日志、OMG 支付流水和退款流水；不得调用真实生产退款。

未完成的 T025～T027 属于环境验收，不阻塞代码实现完成；发布前仍必须执行。
