diff --git a/README.md b/README.md index b02b46f..7a35f5c 100644 --- a/README.md +++ b/README.md @@ -121,8 +121,8 @@ WSL 已验证:EMQX `5.8.9`、MQTTX CLI `1.13.0`、EMQX 服务 `active (running 项目已开发部分模块。具体完成度不得从 README 猜测,必须以现有代码、测试、数据库迁移、Git 历史以及 `docs/current-baseline.md`、`docs/module-status.md`、`docs/feature-status.md` 为准。 - 当前执行游标:`M08-C`(DOING);`M08-B` 的可独立工程内容已完成,真实商户、微信和硬件现场验收保持 `BLOCKED_EXTERNAL`。 -- 最近工程提交:`b70ada0` / `M08-C管理员房态运营入口`,同一小程序按角色显示授权门店、完整房态和门店订单,STAFF 只读、管理员可审计调整房态。 -- 下一工程目标:继续 M08-C,补订单筛选、订单处置和管理员代下单。 +- 最近工程提交:`566e61b` / `M08-C管理员订单处置与代下单`,授权门店订单可筛选、受控变更状态、添加备注,并由管理员为同租户有效会员代下单且完整记录操作人。 +- 下一工程目标:继续 M08-C,补会员检索/概况与员工运营入口。 ## 版本递进 diff --git a/docs/api-changelog/2026-08-10-M08-C-management.md b/docs/api-changelog/2026-08-10-M08-C-management.md index aba9257..a6f3abd 100644 --- a/docs/api-changelog/2026-08-10-M08-C-management.md +++ b/docs/api-changelog/2026-08-10-M08-C-management.md @@ -7,3 +7,14 @@ | PATCH | `/app-api/management/rooms/:id/status` | 写权限且门店在授权范围 | 调整配置状态或运营状态并写审计;STAFF 只读账号返回 403。 | 房态请求体必须包含 `storeId`、非空 `reason`,并至少包含 `configurationStatus` 或 `operationalStatus` 之一。接口继续使用统一 Bearer 会话与服务端门店范围,不信任前端隐藏按钮。 + +## 订单处置与代下单增量 + +| 方法 | 路径 | 权限 | 结果 | +|---|---|---|---| +| GET | `/app-api/orders?storeId=:storeId&status=:status` | 本人订单或 `store.operation.read` 授权门店 | `storeId` 与状态均为可选服务端筛选,继续叠加租户和订单可见范围。 | +| POST | `/app-api/management/orders/:orderId/actions` | `store.operation.write`、`tenant.manage` 或平台管理员,且订单门店在范围内 | 复用订单状态机执行受控业务动作并写历史/审计。 | +| POST | `/app-api/management/orders/:orderId/renew`、`change-room`、`adjust-time`、`note` | 同上 | 复用既有管理员调整仓储,拒绝客户端金额。 | +| POST | `/app-api/management/orders/reserve-on-behalf` | 同上 | 为同租户有效会员预占授权门店房间,服务端计算价格,状态历史与审计记录真实管理员。 | + +代下单请求体包含 `userId`、`roomId`、`startAt`、`endAt`、`pricingMode`;跨租户或失效用户返回 404,越权门店返回 403,只读 STAFF 返回 403。 diff --git a/docs/current-baseline.md b/docs/current-baseline.md index 4147798..f6dab8e 100644 --- a/docs/current-baseline.md +++ b/docs/current-baseline.md @@ -2,7 +2,7 @@ > V5.0 首次核验日期:2026-06-16 > audited_commit: `4ae9296` -> next_engineering_target: 继续 M08-C 管理员/员工小程序订单筛选、处置和代下单 +> next_engineering_target: 继续 M08-C 管理员/员工小程序会员检索、会员概况与员工运营 > 事实源:当前工作区、Git 历史、状态文档、Windows/WSL 检查脚本。 ## 总体结论 diff --git a/docs/db-changelog/2026-08-10-M08-C-management.md b/docs/db-changelog/2026-08-10-M08-C-management.md index 5dffa67..3519866 100644 --- a/docs/db-changelog/2026-08-10-M08-C-management.md +++ b/docs/db-changelog/2026-08-10-M08-C-management.md @@ -5,3 +5,11 @@ - down:只删除 STAFF 的这两项角色权限,不删除角色、用户或门店授权。 - verify:允许空 STAFF 角色集合;存在 STAFF 角色时要求每个有效角色同时拥有两项权限。 - WSL MySQL 8.4.10 已完成 `up → verify → down → up → verify`。 + +## 订单处置与代下单增量 + +- 无 schema 迁移。 +- 代下单前查询 `qipai_users.tenant_id/status`,只接受当前租户的 `ACTIVE` 用户,避免全局用户外键造成跨租户关联。 +- 管理员代下单的 `qipai_order_status_history.actor_id/source` 记录实际管理员与 `ADMIN`;`metadata.targetUserId` 记录目标会员。 +- 同事务新增 `qipai_audit_logs.action = ORDER_CREATED_ON_BEHALF`,metadata 记录目标会员、门店和房间。 +- WSL MySQL 8.4.10 已验证管理员归因、审计落库、跨租户目标会员拒绝,以及完整 `up → verify → down → up → verify` 往返。 diff --git a/docs/devlogs/2026-08-10-M08-C-管理员员工端.md b/docs/devlogs/2026-08-10-M08-C-管理员员工端.md index 0df1825..8565621 100644 --- a/docs/devlogs/2026-08-10-M08-C-管理员员工端.md +++ b/docs/devlogs/2026-08-10-M08-C-管理员员工端.md @@ -28,3 +28,30 @@ ## 状态 M08-C 保持 `DOING`。门店概况、授权房态、订单总览和最小房态操作已完成;下一工程增量继续订单筛选、订单处置和管理员代下单,不移动到 M08-D。 + +## 2026-08-10 订单处置与管理员代下单 + +- `ENGINEERING_DELTA=YES` +- 订单查询新增可选 `storeId` 服务端筛选,继续叠加租户、本人订单或管理员授权门店范围,不以小程序本地过滤代替数据权限。 +- 管理员小程序新增订单状态筛选、受控状态动作和订单备注;STAFF 只读账号仍不显示写按钮,服务端仓储继续要求 `store.operation.write`、`tenant.manage` 或平台权限。 +- 新增管理员代下单页,可选当前授权门店的启用房间、计价方式和起止时间;前端不提交金额,价格由服务端重新计算。 +- `/app-api/management/orders/*` 复用既有后台订单状态机、续时/换房/调时/备注和代下单仓储,写操作统一以 `ADMIN` 来源进入既有门店范围校验。 +- 代下单新增同租户有效用户校验,阻止仅凭全局用户 ID 关联其他租户会员;状态历史记录实际管理员,另写 `ORDER_CREATED_ON_BEHALF` 审计,metadata 保留目标会员、门店与房间。 + +### 测试证据 + +- `powershell -ExecutionPolicy Bypass -File scripts/dev/windows/test-all.ps1`:退出码 0;仓库完整性、敏感信息、后端全量、M08-C 静态验收、迁移计划与后台生产构建全部通过。 +- WSL 原生临时副本 + MySQL 8.4.10:中断清理探针通过,`up → verify → down → up → verify` 通过;136 条 up、114 条 verify、130 条 down,验证管理员历史/审计归因和跨租户目标会员拒绝。 +- 路由测试覆盖只读账号代下单 403、STORE_ADMIN 代下单 201、管理端订单动作/备注 200、订单 `storeId` 查询参数透传。 +- 已知非阻塞提示:参考目录既有 xjar 超过 100MB;Element Plus 产物 chunk 超过 500kB;本次 WSL `npm ci` 报告 7 个 high audit 项及 allow-scripts 提示,未执行破坏性自动升级。 + +### 变更影响 + +- 数据库:无 schema 迁移;新增运行时 `ORDER_CREATED_ON_BEHALF` 审计数据和订单创建历史归因。 +- API:新增小程序管理端订单动作/调整/备注/代下单别名;订单列表增加可选 `storeId`。 +- 部署:后端与小程序有变化,数据库无迁移;未自动部署生产。 +- 工程提交:`566e61b`,已推送并验证 `HEAD == origin/main`。 + +### 状态 + +M08-C 保持 `DOING`。订单筛选、处置、备注和代下单已形成授权闭环;下一工程增量继续会员检索/概况与员工运营,不移动到 M08-D。 diff --git a/docs/feature-status.md b/docs/feature-status.md index b8af644..1ed79c5 100644 --- a/docs/feature-status.md +++ b/docs/feature-status.md @@ -6,6 +6,8 @@ > 2026-08-10 M08-C 增量:工程提交 `b70ada0` 为 `AUTH-001`、`AUTH-002`、`ROOM-002`、`ADM-001` 建立管理员/员工小程序首段闭环;角色入口、授权门店、完整房态、订单总览、STAFF 只读、管理员房态写入与审计、可回滚权限迁移均已通过 Windows 全量和 WSL MySQL 8.4.10 往返。M08-C 保持 `DOING`,继续订单处置与代下单。 +> 2026-08-10 M08-C 增量:工程提交 `566e61b` 为 `ORD-001`、`AUTH-002`、`ADM-001` 补管理员订单筛选、状态处置、备注和代下单;服务端门店范围、写权限、同租户有效会员校验、管理员状态历史/审计归因及跨租户拒绝均通过 Windows 全量和 WSL MySQL 8.4.10 往返。M08-C 保持 `DOING`,继续会员与员工运营。 + | ID | 功能 | 模块子阶段 | 状态 | 最近提交 | 测试/验收证据 | 阻塞原因 | 下一步 | |---|---|---|---|---|---|---|---| | ENV-001 | 固定 Windows 工作区 | M00-A/M00-B | DONE | 远端 HEAD | 已确认 `D:\qipai`,Git 根、main 分支、固定 origin 和 push 校验通过。 | - | 后续每模块继续复检。 | @@ -63,4 +65,3 @@ | IOT-008 | 设备告警与离线 | M06/M10 | PARTIAL | `d01f771` | `/devicewill/{DeviceID}` 可更新离线状态;低电量、timeout/full/unconfirm、插座过载、过温、过流、过压/欠压、功率和温度阈值可写入开放告警;订单联动任务失败会进入异步任务重试/补偿;真实硬件烟测运行器可等待 ACK 并输出 JSON 报告。 | 缺真实硬件离线、保护断电、任务结束和弱信号事件矩阵。 | 取得实物和生产 MQTT 账号后执行硬件烟测矩阵;当前旁路进入 M07-A。 | - diff --git a/docs/module-status.md b/docs/module-status.md index f3e7e23..a0a80dc 100644 --- a/docs/module-status.md +++ b/docs/module-status.md @@ -7,11 +7,11 @@ execution_cursor: stage_status: DOING last_completed_stage: M07-D next_stage: M08-C - last_engineering_commit: `b70ada0` + last_engineering_commit: `566e61b` last_push_verified: true base_branch: main blocked_reason: "M08-A 真机合法域名、真实微信支付和实物开门验证缺微信后台/商户/硬件现场条件;M08-B 可独立工程内容已完成并补齐多次现场执行记录追溯,真实商户凭据、微信后台配置、生产小额转账和实物硬件结果保持 BLOCKED_EXTERNAL,已按规则旁路进入 M08-C。M06-G 真实硬件联调仍缺生产 MQTT 账号/ACL、DeviceID、控制箱、门锁、插座和现场配线。" - updated_at: 2026-08-10T10:08:00+08:00 + updated_at: 2026-08-10T10:20:56+08:00 ``` | 模块 | 状态 | 最近提交 | 最近开发日志 | 备注 |