fujian_water_biz_doc/docs/evidence/rev004-writtenoff-formal-table-dev-db-apply-2026-04-17.md
tangweijie 29e2ae36a2 Refresh writtenoff formal-table smoke evidence after reliability patch
This updates the REV004 writtenoff evidence with a fresh post-patch smoke run
covering submit, detail/page query, approve/reject, DB writeback, cleanup,
and runtime shutdown on port 48094.

Constraint: Evidence must reflect the final backend patch set actually pushed for PR #77
Rejected: Leave the earlier pre-patch smoke as the last evidence point | weaker proof for the final transaction/fail-fast tightening
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: If writtenoff smoke is rerun again, append a new dated subsection instead of overwriting this verification trail
Tested: Fresh jar smoke on 48094 plus direct psql cleanup/readback verification on 2026-04-17
Not-tested: No separate document export/render pipeline run for this evidence refresh
2026-04-17 14:58:44 +08:00

143 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# REV004 writtenoff formal-table 已应用到 application-dev 测试库2026-04-17
## 目标库
依据:
- `sw-business/sw-business-server/src/main/resources/application-dev.yaml`
解析结果:
- Host`192.168.10.130`
- Port`5436`
- DB`sw_system`
- User`sw_system`
## 已执行脚本
- `sql/rev004/REV004_writtenoff_formal_tables_deploy.sql`
## DDL 执行结果
结果:**PASS**
已确认存在:
- `biz_writtenoff_adjust`
- `biz_writtenoff_adjust_detail`
- `biz_writtenoff_adjust_seq`
- `biz_writtenoff_adjust_detail_seq`
已确认幂等重放通过:
- second apply 输出 `already exists, skipping`
- 无重复约束/重复索引异常
## 代码验证
### compile
```bash
mvn -pl sw-business/sw-business-server -DskipTests compile
```
结果:**PASS**
### targeted tests
```bash
mvn -pl sw-business/sw-business-server \
-Dtest=AccountingAdjustSoldProcessServiceImplTest,AccountingAdjustActionServiceImplTest,AccountingAdjustProcessServiceImplTest,AccountingAdjustQueryServiceImplTest,WrittenoffFormalizationServiceTest test
```
结果:**PASS**
- Tests run: 41
- Failures: 0
- Errors: 0
## HTTP smokefresh jar, port 48093
### submit
- `sold-submit` on charge `992005``REV004-SLD-992005-20260417143622`
- `sold-submit` on charge `992006``REV004-SLD-992006-20260417143623`
- 返回统一为:
- `objectType = WRITTENOFF_ADJUST`
- `approvalStatus = PENDING_APPROVAL`
- `resultStatus = PENDING_APPROVAL`
- `writeBackStatus = PENDING`
### DB 回读
`biz_writtenoff_adjust_detail`
- submit 后 detail 进入 `PENDING_APPROVAL / SUBMIT`
### query
- `GET /admin-api/business/accounting-adjust/get?adjustmentNo=...` 对 writtenoff 已返回 formal detail
- `GET /admin-api/business/accounting-adjust/page?...objectType=WRITTENOFF_ADJUST` 已返回 formal-first 列表
### approve / reject
- approve`/admin-api/business/accounting-adjust/approve`
- 返回 `APPROVED/SUCCESS/UPDATED`
- 账单 `extended_amount` 归零、`discount_money` 累加、`pay_state=SETTLED(2)`
- reject`/admin-api/business/accounting-adjust/reject`
- 返回 `REJECTED/FAIL/SKIPPED`
- 账单保持原值,不执行核销回写
## 测试数据清理
smoke 完成后已删除:
- `biz_operat_log / detail`identify_value = `992005`, `992006`
- `biz_writtenoff_adjust / detail`
- `biz_charge``992005`, `992006`
- `biz_cust``REV004_WO_SMOKE_A`, `REV004_WO_SMOKE_B`
回读结果:
- `writtenoff_main_left=0`
- `operat_log_left=0`
- `charge_left=0`
- `cust_left=0`
## 运行态清理
用于 fresh-jar HTTP smoke 的临时实例:
- port `48093`
已停止,当前无残留 LISTEN 进程。
## 当前结论
本轮 writtenoff formal-table 已达到:
1. DDL 可落库且可幂等重放;
2. sold submit 能落 pending formal main/detail
3. approve/reject 会同步 formal 状态;
4. detail/page 对 `WRITTENOFF_ADJUST` 已能返回 formal-first 结果;
5. sold submit 已补事务边界,避免 operat_log 与 formal-table 半成功;
6. 审批/驳回缺失 formal 主记录时将显式报错,避免静默漏更新。
## 当前未完成
- writtenoff formal-first 目前仍是最小实现,后续仍可优化 page 查询性能(避免 listAll + getView N+1
- 若需要更细的 charge_detail 差异映射到 formal 明细,可在后续补强。
## 最终补丁后复核2026-04-17 14:57 +08:00
针对本轮补加的两个可靠性修正再次执行 fresh-jar smoke
1. `createSoldAction(...)``@Transactional`,确保 synthetic `operat_log` 与 formal pending 记录同事务提交;
2. writtenoff approve/reject 缺失 formal 主记录时改为显式报错,避免静默跳过 formal 状态更新。
### fresh jar
- 端口:`48094`
- 启动方式:`/usr/bin/java -jar sw-business/sw-business-server/target/sw-business-server.jar --spring.profiles.active=dev --server.port=48094`
- `GET /actuator/health` 返回:`{"status":"UP"}`
### smoke 数据
- charge `992105`approve
- charge `992106`reject
- submit 返回调整单:
- `REV004-SLD-992105-20260417145725`
- `REV004-SLD-992106-20260417145726`
### HTTP 结果
- `sold-submit`:两笔均返回 `PENDING_APPROVAL / PENDING`
- `get?adjustmentNo=REV004-SLD-992105-20260417145725`:可返回 formal detail核销金额、账务年月等
- `page?objectType=WRITTENOFF_ADJUST`:可返回两笔 fresh smoke formal 记录
- `approve`:返回 `APPROVED / SUCCESS / UPDATED`
- `reject`:返回 `REJECTED / FAIL / SKIPPED`
### DB 回读
`biz_writtenoff_adjust`
- `REV004-SLD-992105-20260417145725 -> APPROVED | UPDATED | SUCCESS`
- `REV004-SLD-992106-20260417145726 -> REJECTED | SKIPPED | FAIL`
`biz_writtenoff_adjust_detail`
- approve 明细:`SUCCESS | APPROVE_EXECUTE | approve final smoke`
- reject 明细:`REJECTED | REJECT | reject final smoke`
`biz_charge`
- `992105 -> pay_state=2, extended_amount=0, discount_money=120, original_money=120`
- `992106 -> pay_state=1, extended_amount=88, discount_money=0, original_money=88`
说明最终补丁后writtenoff submit / get / page / approve / reject 主链路再次通过,且回写结果与预期一致。