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

5.0 KiB
Raw Blame History

REV004 writtenoff formal-table 已应用到 application-dev 测试库2026-04-17

目标库

依据:

  • sw-business/sw-business-server/src/main/resources/application-dev.yaml

解析结果:

  • Host192.168.10.130
  • Port5436
  • DBsw_system
  • Usersw_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

mvn -pl sw-business/sw-business-server -DskipTests compile

结果:PASS

targeted tests

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 992005REV004-SLD-992005-20260417143622
  • sold-submit on charge 992006REV004-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 / detailidentify_value = 992005, 992006
  • biz_writtenoff_adjust / detail
  • biz_charge992005, 992006
  • biz_custREV004_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 992105approve
  • charge 992106reject
  • 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 主链路再次通过,且回写结果与预期一致。