feat(server): 委派回收并发防重 + 最小门禁闸门
- delegationRevokeJob 改用 FOR UPDATE SKIP LOCKED + UPDATE RETURNING 原子认领 - regression-workflow-actions 新增 RUN_DELEGATION_CONCURRENCY_CHECK 并发校验开关 - README 补充最小门禁与并发语义说明
这个提交包含在:
+18
@@ -43,6 +43,16 @@ cd /home/shunli/Projects/hyb-oa/server
|
||||
./scripts/smoke-test.sh
|
||||
```
|
||||
|
||||
### 2.6 本地最小门禁(P1-b)
|
||||
```bash
|
||||
cd /home/shunli/Projects/hyb-oa
|
||||
./scripts/check-minimal.sh
|
||||
```
|
||||
|
||||
说明:
|
||||
- 该脚本只做静态/构建级门禁,不启动服务与数据库。
|
||||
- 全量回归仍通过 `server/scripts/regression-all.sh` 执行。
|
||||
|
||||
## 3. 1 分钟快速验证
|
||||
```bash
|
||||
cd /home/shunli/Projects/hyb-oa/server
|
||||
@@ -72,6 +82,12 @@ cd /home/shunli/Projects/hyb-oa/server
|
||||
./scripts/regression-workflow-actions.sh
|
||||
```
|
||||
|
||||
可选并发校验:
|
||||
```bash
|
||||
cd /home/shunli/Projects/hyb-oa/server
|
||||
RUN_DELEGATION_CONCURRENCY_CHECK=1 ./scripts/regression-workflow-actions.sh
|
||||
```
|
||||
|
||||
覆盖场景:
|
||||
- `reject`:实例=`rejected`,报销=`rejected`
|
||||
- `return`:实例=`terminated`,报销=`draft`
|
||||
@@ -93,6 +109,7 @@ cd /home/shunli/Projects/hyb-oa/server
|
||||
- `pay` 幂等冲突:已付款后提交冲突凭证字段返回 `409 VALID_001`(`already_paid_conflict`)
|
||||
- `delegation`:有效期内可代办并在 history 写入 delegation 证据
|
||||
- `delegation` 过期:代理人返回 `PERM_002`,自动回收任务可撤销过期委派
|
||||
- `delegation` 并发回收(可选):`RUN_DELEGATION_CONCURRENCY_CHECK=1` 时双并发只回收一次并仅写一条自动回收审计
|
||||
|
||||
### 4.4 一键全量回归
|
||||
```bash
|
||||
@@ -145,6 +162,7 @@ npm run dev
|
||||
- `GET /api/delegations/mine`:查看我发起/我接收的委派
|
||||
- `POST /api/delegations/:id/revoke`:撤销委派
|
||||
- 委派仅作用于 `assignee_id` 任务,不改写 `assignee_role` 语义。
|
||||
- 自动回收实现采用 `FOR UPDATE SKIP LOCKED + UPDATE ... RETURNING`,多实例并发下确保同一委派仅回收一次。
|
||||
|
||||
### 5.3 OCR 异步状态查询
|
||||
- 上传发票在 OCR 开启且 `ocr_type=vat` 时会进入 `pending_ocr`。
|
||||
|
||||
在新工单中引用
屏蔽一个用户