diff --git a/README.md b/README.md index 9e14dda..f0fe860 100644 --- a/README.md +++ b/README.md @@ -120,9 +120,9 @@ 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` 为准。 -- 当前执行游标:`M04-C` -- 最近工程提交:`40c891f`,完成 M04-B 受控订单状态机、幂等迁移历史和审计联动。 -- 下一工程目标:M04-C 续费、取消规则、换房和管理员调整。 +- 当前执行游标:`M04-D` +- 最近工程提交:`089d348`,完成 M04-C 续费、取消规则、事务换房和管理员调整。 +- 下一工程目标:M04-D 短期、可撤销、最小权限的订单分享令牌。 ## 版本递进 diff --git a/docs/current-baseline.md b/docs/current-baseline.md index 7c06779..0f35753 100644 --- a/docs/current-baseline.md +++ b/docs/current-baseline.md @@ -1,8 +1,8 @@ # 当前开发成果基线 > V5.0 首次核验日期:2026-06-16 -> audited_commit: `40c891f` -> next_engineering_target: M04-C 实现续费、取消规则、换房和管理员调整 +> audited_commit: `089d348` +> next_engineering_target: M04-D 实现短期、可撤销、最小权限的订单分享令牌 > 事实源:当前工作区、Git 历史、状态文档、Windows/WSL 检查脚本。 ## 总体结论 diff --git a/docs/devlogs/2026-06-20-M04-C-续费取消换房.md b/docs/devlogs/2026-06-20-M04-C-续费取消换房.md new file mode 100644 index 0000000..fca6cc3 --- /dev/null +++ b/docs/devlogs/2026-06-20-M04-C-续费取消换房.md @@ -0,0 +1,26 @@ +# M04-C 续费、取消、换房和管理员调整 + +- 日期:2026-06-20 +- 起始 commit:`4122db4` +- 工程 commit:`089d348` +- ENGINEERING_DELTA=YES +- 子阶段状态:DONE,已 push 且 `HEAD == origin/main` + +## 工程增量 + +- 续费支持当前价和原锁定单价,重新检查禁用时段与后续重叠预占。 +- 门店可配置取消提前量和取消费率;取消接口返回服务端取消费及可退金额,退款执行留给 M05/M07。 +- 换房在单事务中锁定旧房与新房、检查冲突、迁移预占并形成房价差额。 +- 管理员可增减时长、代下单和记录备注,所有金额由服务端计算。 +- 人工调整记录前后值、差额、操作者、来源、原因、traceId 和审计日志;重复 trace 幂等。 + +## 验证 + +- Windows 后端全量测试和仓库门禁通过。 +- WSL MySQL 8.4.9 临时库执行 `up → verify → down → up → verify` 通过。 +- 迁移语句:up 64、verify 46、down 60。 +- 实测续费冲突不改变原结束时间、换房冲突整笔回滚、成功换房差价、管理员调时/备注、取消费规则和门店范围外代下单拒绝。 + +## 后续 + +M04-D 实现短期、可撤销、最小权限的订单分享令牌。 diff --git a/docs/feature-status.md b/docs/feature-status.md index 6b4a7d4..04f371f 100644 --- a/docs/feature-status.md +++ b/docs/feature-status.md @@ -31,5 +31,5 @@ | UI-001 | 门店装修和多套模板 | M03-B/M08 | PARTIAL | `f746242` | 已实现装修草稿版本、Schema 版本、组件白名单、发布和旧版本归档。 | 可视化编辑器及小程序模板渲染待 M08。 | M08 实现编辑器与渲染组件。 | | MAP-001 | 地图选店和最近门店 | M03-C/M08 | PARTIAL | `df373fa` | 已实现 AppID/tenant 隔离门店发现、城市/营业筛选、按门店时区判断营业中、后端 Haversine 距离排序;小程序支持定位和手工城市降级。 | 地图 SDK 可视化和真机定位授权尚未验收。 | M08 接入地图界面并完成真机验证。 | | QR-001 | 门店/房间场景码与 NFC | M03-D/M08 | PARTIAL | `d563078` | 已实现场景码生成、重建失效、撤销、扫码统计和二维码/NFC 统一页面解析;返回权限固定为空,旧码失效已在 MySQL 8.4.9 实测。 | 真实微信小程序码图片生成依赖可用 AppSecret 与真机环境。 | M08 接入微信小程序码接口并完成真机扫描验收。 | -| WIFI-001 | 受控 Wi-Fi 凭据 | M03-D/M04 | PARTIAL | `40c891f` | 管理员按门店范围、顾客按有效订单授权和时间窗返回 Wi-Fi;正式订单创建写入授权,取消/退款完成/关闭撤销现场权限,关闭后订单历史仍可查看;MySQL 8.4.9 全生命周期实测通过。 | 真实开门与设备权限将在 M06 联动,M04-C 换房还需同步迁移授权。 | M04-C 验证换房授权迁移,M06 接入真实设备权限。 | -| ORD-001 | 预约下单与多方式支付 | M04/M05 | PARTIAL | `40c891f` | 已实现可信服务端定价、不可变快照、并发预占,以及 DRAFT 至 CLOSED 的受控状态机;每次迁移记录操作者/来源/原因/traceId,相同 trace 幂等,非法迁移拒绝;MySQL 8.4.9 全生命周期实测通过。 | 续费、取消规则、换房、支付方式、优惠/套餐权益校验和真实支付回调尚未完成。 | M04-C 实现续费/取消/换房/管理员调整,M05 接入可信支付与权益抵扣。 | +| WIFI-001 | 受控 Wi-Fi 凭据 | M03-D/M04 | PARTIAL | `089d348` | 正式订单创建写入授权,取消/退款完成/关闭撤销现场权限;换房在同一订单下事务迁移房间预占,授权归属保持一致;MySQL 8.4.9 回滚实测通过。 | 真实开门与设备权限将在 M06 联动,分享开门权限将在 M04-D 接入。 | M04-D 接入最小分享权限,M06 接入真实设备权限。 | +| ORD-001 | 预约下单与多方式支付 | M04/M05 | PARTIAL | `089d348` | 已实现可信定价、并发预占、完整状态机、当前价/锁定价续费、门店取消费规则、事务换房、管理员调时/备注和门店范围内代下单;冲突回滚与调整幂等已在 MySQL 8.4.9 实测。 | 订单分享、支付方式、优惠/套餐权益校验和真实支付回调尚未完成。 | M04-D 完成订单分享,M05 接入可信支付与权益抵扣。 | diff --git a/docs/module-status.md b/docs/module-status.md index 57897de..bc5afb4 100644 --- a/docs/module-status.md +++ b/docs/module-status.md @@ -3,15 +3,15 @@ ```yaml execution_cursor: current_module: M04 - current_stage: M04-C + current_stage: M04-D stage_status: TODO - last_completed_stage: M04-B - next_stage: M04-C - last_engineering_commit: 40c891f + last_completed_stage: M04-C + next_stage: M04-D + last_engineering_commit: 089d348 last_push_verified: true base_branch: main blocked_reason: "" - updated_at: 2026-06-20T13:54:04+08:00 + updated_at: 2026-06-20T14:05:41+08:00 ``` | 模块 | 状态 | 最近提交 | 最近开发日志 | 备注 | @@ -20,7 +20,7 @@ execution_cursor: | M01 后端 API 基础工程 | DONE | `2b90d1f` | docs/devlogs/2026-06-18-M01-C-轻量异步任务基础.md | 已完成 Fastify 后端骨架、数据库迁移兼容层,以及 MySQL outbox、幂等任务、租约领取、失败重试、人工补偿状态和独立 PM2 worker;WSL MySQL 8.4.9 往返迁移与 worker 重启持久性验证通过。 | | M02 登录、租户、权限 | DONE | `5a300a8` | docs/devlogs/2026-06-18-M02-D-用户与员工管理.md | M02-A/B/C/D 已完成租户、身份、可撤销会话、RBAC、门店数据范围、员工管理、禁用、会话重置和审计;Windows 全量测试与 WSL MySQL 8.4.9 往返迁移通过。 | | M03 门店、房间、价格、营业时间 | DONE | `d563078` | docs/devlogs/2026-06-18-M03-D-场景码NFC与WiFi.md | M03-A/B/C/D 已完成门店房间、装修广告、媒体、地图选店、场景码/NFC 页面导航和受控 Wi-Fi;真实微信小程序码图片生成留待 M08 真机联调。 | -| M04 订单、时段锁定、支付闭环 | PARTIAL | `40c891f` | docs/devlogs/2026-06-20-M04-B-订单状态机.md | M04-A/B 已完成定价预占、完整订单状态机、幂等迁移历史、审计以及预占/现场授权联动;下一阶段 M04-C 续费、取消、换房和管理员调整。 | +| M04 订单、时段锁定、支付闭环 | PARTIAL | `089d348` | docs/devlogs/2026-06-20-M04-C-续费取消换房.md | M04-A/B/C 已完成定价预占、状态机、续费、取消规则、换房、管理员调整、代下单和事务回滚;下一阶段 M04-D 订单分享。 | | M05 会员、余额、套餐、优惠券 | TODO | - | - | - | | M06 设备、MQTT 与真实硬件联动 | TODO | - | - | - | | M07 保洁、通知、任务和语音播报 | TODO | - | - | - |