# 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 属于环境验收,不阻塞代码实现完成;发布前仍必须执行。