fujian_water_biz_doc/docs/evidence/rev004-redink-formal-table-dev-db-apply-2026-04-17.md

6.5 KiB
Raw Blame History

REV004 redink 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_redink_formal_tables_deploy.sql

DDL 执行结果

结果:PASS

已确认存在:

  • biz_redink_record
  • biz_redink_record_detail
  • biz_redink_record_seq
  • biz_redink_record_detail_seq

已确认幂等重放通过:

  • second apply 输出 existing/skip 结果
  • 本轮顺手把 sequence 创建方式从 CREATE SEQUENCE IF NOT EXISTS 收口为显式 pg_class 检查,规避 replay 时 sequence 级重复键异常

代码验证

compile

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

结果:PASS

targeted tests

mvn -pl sw-business/sw-business-server -Dtest=ChargeServiceAccountingAdjustTest,AccountingAdjustQueryServiceImplTest,RedinkFormalizationServiceTest test

结果:PASS

  • Tests run: 34
  • Failures: 0
  • Errors: 0

fresh query smokefresh jar, port 48096

health

  • GET /actuator/health -> {"status":"UP"}

smoke 方式说明

REDINK_RECORD 当前依赖原交易定位 / bank follow-up 逻辑;本轮先采用:

  1. application-dev 手工 seed 一条 redink formal 主表/明细表记录;
  2. fresh jar 验证 get/page 是否已 formal-first 命中;
  3. 不在本轮直接伪造 live bank follow-up 交易。

seed 记录

  • adjustmentNo = REV004-RI-992305-SEED
  • chargeId = 992305
  • formal 主表状态:
    • approvalStatus = NOT_REQUIRED
    • executeStatus = UPDATED
    • resultStatus = SUCCESS
  • bank follow-up 样例:BK-992305

get / page

  • GET /admin-api/business/accounting-adjust/get?adjustmentNo=REV004-RI-992305-SEED
    • 返回:
      • objectType = REDINK_RECORD
      • resultStatus = SUCCESS
      • approvalStatus = NOT_REQUIRED
      • writeBackStatus = UPDATED
      • originalTranSeq = T-992305
      • originalSysTranSeq = SYS-992305
      • detail 中包含:
        • bankTranSeq
        • redinkAmount
        • payStateBefore
        • payStateAfter
  • GET /admin-api/business/accounting-adjust/page?...objectType=REDINK_RECORD
    • 返回 1 条 formal-first 记录
    • reasonCodeLabel 已能解析为字典文本(如 收费错误

当前结论

本轮 redink formal-table 已达到:

  1. DDL 可落库且可幂等重放;
  2. 结果型 formal-table 主从表已建模;
  3. query detail/page 对 REDINK_RECORD 已能返回 formal-first
  4. compile / targeted tests 通过;
  5. fresh jar query smoke 已验证 formal-first 查询链路可用。

当前仍未完全覆盖

  • 尚未完成“真实 redink 执行成功后自动落 formal 结果”的 live HTTP smoke
  • 原因是当前红冲依赖原交易与 bank follow-up 外部链路,需要在下一轮补真实可复现数据后再做完整 execute smoke。

测试数据清理

已删除:

  • biz_redink_record / detail
  • biz_charge
  • biz_cust

回读结果:

  • redink_main_left=0
  • redink_detail_left=0
  • charge_left=0
  • cust_left=0

运行态清理

用于 fresh-jar query smoke 的临时实例:

  • port 48096

已停止,当前无残留 LISTEN 进程。

live execute smoke 阻塞证据2026-04-17 16:50 +08:00

本轮额外尝试了真实 redink 执行链路:

  • fresh jar48097
  • 请求:POST /admin-api/business/charge/accounting-adjust
  • objectType = REDINK_RECORD
  • chargeId = 992306
  • originalTranSeq = T-REDINK-NOPE

接口响应:

{"code":500,"data":null,"msg":"系统异常"}

从应用日志定位到的精确异常:

  • FeignException$ServiceUnavailable: [503]
  • Load balancer does not contain an instance for the service business-bank-server
  • 失败位置:TransactionApi#getTransactionByTranSeq(...)

结论:

  • 当前 live execute smoke 未能完成的直接原因是 外部依赖 business-bank-server 在当前环境无可用实例
  • 这不是 redink formal-table 本身的 DDL / 查询接线问题。

因此本批已完成:

  • compile
  • targeted tests
  • DDL apply / replay
  • fresh query smoke

但“真实 redink 执行成功后自动落 formal”的端到端 smoke 仍需在 business-bank-server 可用时补跑。

live execute smoke 成功补证2026-04-17 17:51 +08:00

在本轮额外启动本地 business-bank-serverdev profile, port 48092)并向测试库预置原交易后,重新完成了 REDINK_RECORD 的真实端到端执行 smoke。

前置

  • 本地启动 business-bank-server,并成功注册到 Nacos devbusiness-bank-server 192.168.9.109:48092 register finished
  • bk_transaction seed 原交易:
    • tran_seq = T-REDINK-NOPE
    • sys_tran_seq = SYS-REDINK-NOPE
    • tran_type = PAY
    • status = SUCCESS
    • contract_no = 992306
    • amount = 12000
  • 准备已收费营业账:chargeId = 992306

execute 请求

POST /admin-api/business/charge/accounting-adjust

{
  "chargeId": 992306,
  "objectType": "REDINK_RECORD",
  "reasonCode": "1",
  "reason": "redink execute smoke",
  "originalTranSeq": "T-REDINK-NOPE"
}

execute 响应

结果:PASS

返回:

  • adjustmentNo = REV004-992306-20260417175109
  • objectType = REDINK_RECORD
  • resultStatus = SUCCESS
  • approvalStatus = NOT_REQUIRED
  • writeBackStatus = UPDATED
  • message = 冲正处理成功bank流水号=RV9923062026041717511073C805

DB 回读

biz_redink_record

  • adjustment_no = REV004-992306-20260417175109
  • approval_status = NOT_REQUIRED
  • execute_status = UPDATED
  • result_status = SUCCESS
  • bank_tran_seq = RV9923062026041717511073C805
  • original_tran_seq = T-REDINK-NOPE

biz_redink_record_detail

  • detail_status = SUCCESS
  • proc_type = EXECUTE
  • pay_state_before = 1
  • pay_state_after = 0
  • redink_amount = 120.00

biz_charge

  • pay_state = 0
  • 支付信息已清空为红冲后的未收费态

bk_transaction

  • 原交易 T-REDINK-NOPE 状态变为 REVERSED
  • 新增 follow-up
    • tran_seq = RV9923062026041717511073C805
    • tran_type = PAY_INVALID
    • status = SUCCESS
    • original_tran_seq = T-REDINK-NOPE

查询回读

  • GET /admin-api/business/accounting-adjust/get?adjustmentNo=REV004-992306-20260417175109 -> formal-first 返回成功
  • GET /admin-api/business/accounting-adjust/page?...objectType=REDINK_RECORD -> formal-first 返回成功

说明至此REDINK_RECORD 已补齐“真实执行 -> 自动落 formal -> formal-first 查询”的完整闭环证据。