213 lines
6.5 KiB
Markdown
213 lines
6.5 KiB
Markdown
# REV004 redink 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_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
|
||
```bash
|
||
mvn -pl sw-business/sw-business-server -DskipTests compile
|
||
```
|
||
结果:**PASS**
|
||
|
||
### targeted tests
|
||
```bash
|
||
mvn -pl sw-business/sw-business-server -Dtest=ChargeServiceAccountingAdjustTest,AccountingAdjustQueryServiceImplTest,RedinkFormalizationServiceTest test
|
||
```
|
||
结果:**PASS**
|
||
- Tests run: 34
|
||
- Failures: 0
|
||
- Errors: 0
|
||
|
||
## fresh query smoke(fresh 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 jar:`48097`
|
||
- 请求:`POST /admin-api/business/charge/accounting-adjust`
|
||
- `objectType = REDINK_RECORD`
|
||
- `chargeId = 992306`
|
||
- `originalTranSeq = T-REDINK-NOPE`
|
||
|
||
接口响应:
|
||
```json
|
||
{"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-server`(dev profile, port `48092`)并向测试库预置原交易后,重新完成了 REDINK_RECORD 的真实端到端执行 smoke。
|
||
|
||
### 前置
|
||
- 本地启动 `business-bank-server`,并成功注册到 Nacos dev:`business-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`
|
||
```json
|
||
{
|
||
"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 查询”的完整闭环证据。
|