修复订单发布与核销并发状态覆盖

This commit is contained in:
yml2213
2026-09-01 14:13:10 +08:00
parent d47360f484
commit c6dd6a8b7c
8 changed files with 667 additions and 57 deletions
+35
View File
@@ -0,0 +1,35 @@
发布与核销解耦原子修复验证
改变分支/字段:
- apps/backend/src/services/worker-platform/admin-work-order-management-service.ts:发布先完成,随后尽力核销;核销失败仅记录 publish_voucher_consume_failed,不改变已发布状态。
- apps/backend/src/repositories/worker-platform/work-order-management-repo.ts:新增 publishUnassignedWorkOrder,使用 status='unassigned' AND assigned_worker_id IS NULL 的原子条件迁移,并在同一事务写 published 事件。
- apps/frontend/src/pages/admin/panels/WorkOrdersPanel.tsx:发布后核销提示。
- apps/frontend/src/components/WorkOrderEventTimeline.tsx:核销失败文案改为“订单已发布,但电子凭证核销未完成”。
四个工件:
- MODIFIED_FILE: /Users/yml/codes/order_site/publish-atomic-artifacts/MODIFIED_FILE
- DIFF_FILE: /Users/yml/codes/order_site/publish-atomic-artifacts/DIFF_FILE.patch
- VERIFICATION.txt: /Users/yml/codes/order_site/publish-atomic-artifacts/VERIFICATION.txt
- ROLLBACK.sh: /Users/yml/codes/order_site/publish-atomic-artifacts/ROLLBACK.sh
原始文件哈希:
- git HEAD work-order-management-repo.ts blob: 40937f3a95998868a217a5c3da78389f6c799224
- 修改副本 sha256: a7e256197ff04b4682a4b2817da30e7344ac0cda66818ecc9fe5711042957a85
BASELINE
- 命令:cd /Users/yml/codes/order_site/apps/backend && npm test
- 输入:HEAD 基线工作树
- 字面结果:tests 379pass 377fail 0cancelled 0skipped 2exit 0
- 状态:通过
MODIFIED
- 命令:cd /Users/yml/codes/order_site/apps/backend && npm test
- 输入:当前修改工作树
- 字面结果:tests 379pass 377fail 0cancelled 0skipped 2exit 0
- 状态:通过
ROLLBACK
- 命令:cp /Users/yml/codes/order_site/publish-atomic-artifacts/MODIFIED_FILE /tmp/publish-atomic-rollback-test.ts && /Users/yml/codes/order_site/publish-atomic-artifacts/ROLLBACK.sh /tmp/publish-atomic-rollback-test.ts && cmp /tmp/publish-atomic-rollback-test.ts <(git -C /Users/yml/codes/order_site show HEAD:apps/backend/src/repositories/worker-platform/work-order-management-repo.ts)
- 输入:修改副本 /tmp/publish-atomic-rollback-test.ts
- 字面结果:rollback restored HEAD contentcmp exit 0ROLLBACK.sh exit 0
- 恢复状态:另一份副本恢复为 HEAD 内容,MODIFIED_FILE 保持修改内容。