9.1 KiB
schema, ticket, title, consumer, author, change_type, backend_status, gateway_status, frontend_status, frontend_owner, frontend_ref, target_release, verified_at, status_note, updated_at, base
| schema | ticket | title | consumer | author | change_type | backend_status | gateway_status | frontend_status | frontend_owner | frontend_ref | target_release | verified_at | status_note | updated_at | base |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| hl-changelog/v2 | 8533 | 团期详情(A2)出参 advanceAmount(已预支)改为与财务 Tab advanceApproved 同源——不再读 #7154 起已停写的旧列 | admin | jw(GIT) | 修改接口 | deployed | verified | not_required | A2 团期详情的 advanceAmount(已预支金额·累计)原先直读 order_group_batch.advance_amount。该列自 #7154(团期预支改为 order_advance 逐笔台账 + 实时聚合)起已无写入点:新团期永远 0;#7154 之前就有预支的老团期停在 V20260906_004 期初结转那一刻;且旧列只累加团期级、从不含子订单级。于是同一团期 A2 与财务 Tab(GB-ADM-040)advanceApproved 可以是两个数。本次 A2 改为与财务 Tab 调同一对方法(GroupBatchAdvanceQueryService.listActiveSubOrderIds + sumApproved),两位小数,字符串逐字一致。路径、入参、出参字段名与类型零变化;变的是 advanceAmount 的取值口径(旧列快照 → 团期级 ∪ 子订单级 APPROVED 实时聚合),属「语义取值」变化,按 jw 2026-09-18 口径推送。已合并 dev-v3(PR #8539,merge commit 27409a3f1)并部署测试服。hl-ui v2.1 团期详情页未渲染 advanceAmount(已预支卡在 FinanceTab 读 advanceApproved),前端零改动,frontend_status 记 not_required。PAID 不计入是 g-081 的既有口径(09-28 定暂不处理),本次只对齐来源、不改口径。 | 2026-09-30 | dev-v3 |
团期详情(A2)已预支改为与财务 Tab 同源(管理后台)
服务: hl-order-service-v3(端口 8086/8186)
一、接口背景
团期详情(A2)的 advanceAmount「已预支金额(累计)」与财务 Tab(GB-ADM-040)的 advanceApproved「已预支」本应是同一个数,
但两者读的来源不同:A2 直读 order_group_batch.advance_amount 列,财务 Tab 实时汇总 order_advance。
advance_amount 列从 #7154 起就没有写入点了(团期预支改为逐笔台账,唯一写入点 addAdvance 已删除)。
所以新团期的 A2 永远返回 0.00,老团期停在期初结转那一刻,而且旧列从来不含子订单级预支。
本次 A2 改为与财务 Tab 调同一对方法取数,两个接口对同一团期必然同值。
二、变更接口清单
| # | 接口 | 方法 | 路径 | 变更类型 | 说明 |
|---|---|---|---|---|---|
| 1 | A2 团期详情 | GET | /v3/admin/order/group-batch/{groupBatchId} |
修改接口 | 出参 advanceAmount 取值口径改为与 GB-ADM-040 advanceApproved 同源;字段名、类型与其余字段零变化 |
三、接口详情
1. A2 团期详情 GET /v3/admin/order/group-batch/{groupBatchId}
VO: GroupBatchDetailRespVO
使用场景
团期详情页进入时拉取整团概览。本次只改其中 advanceAmount 的取值来源;需要「已预支 / 待审批 / 可支取」三个数时,
仍以财务 Tab GET /v3/admin/order/group-batch/{groupBatchId}/finance 为准。
入参
| 字段 | 位置 | 类型 | 必填 | 约束 | 说明 |
|---|---|---|---|---|---|
| groupBatchId | path | Long | 是 | 正整数,团期聚合主键 | 团期 ID,不存在返 589501 |
出参
| 字段 | 类型 | 说明 |
|---|---|---|
| advanceAmount | BigDecimal(字符串序列化) | 本次改口径。已预支 = Σ 本团期 status=APPROVED 且未软删的预支,范围是团期级(group_batch_id = 本团期)∪ 子订单级(order_id ∈ 本团活跃子订单);两位小数。与 GB-ADM-040 advanceApproved 同一方法、同一格式,逐字一致。SUBMITTED、REJECTED、已撤回、PAID 均不计入 |
| receivableAmount | BigDecimal | 整团应收(既有字段,本次未改) |
| receivedAmount | BigDecimal | 整团已收(既有字段,本次未改) |
| unpaidAmount | BigDecimal | 整团待收(既有字段,本次未改) |
请求示例
GET /v3/admin/order/group-batch/2104885714862899201 HTTP/1.1
Host: api.test.1814.love
Authorization: Bearer <admin token>
响应示例
{
"code": 200,
"message": "成功",
"data": {
"groupBatchId": "2104885714862899201",
"batchStatus": "RECRUITING",
"advanceAmount": "1450.00",
"receivableAmount": "5960.00",
"receivedAmount": "0.00",
"unpaidAmount": "5960.00"
}
}
空数据 / 降级响应
团期没有任何 APPROVED 预支时返回 "0.00",不返回 null、不缺字段,与财务 Tab 一致。
{
"code": 200,
"message": "成功",
"data": {
"groupBatchId": "2104885713021587458",
"advanceAmount": "0.00"
}
}
错误响应
{
"code": 589501,
"message": "团期不存在",
"data": null
}
| 错误码 | 触发条件 |
|---|---|
| 589501 | groupBatchId 不存在或已软删 |
| 589507 | 缺 group-batch:view 权限码 |
业务边界
- 取数与财务 Tab 共用
GroupBatchAdvanceQueryService.listActiveSubOrderIds+sumApproved,不另写 SQL。 - 子订单全部退团后,团期级预支仍然计入(子订单集为空时照样按
group_batch_id汇总)。 - PAID 不计入是 g-081 的既有口径,本次未改;若日后
sumApproved改口径,A2 与财务 Tab 会一起变。 order_group_batch.advance_amount列保留不删,只是 A2 不再读它。
四、契约约束与正确调用方式
- 页面展示「已预支」请继续取财务 Tab 的
advanceApproved;A2 的advanceAmount现在与它同值,可作为详情页概览的冗余读数。 - 不要把
advanceAmount与「待审批」「可支取」相加或互推,三个数请都取财务 Tab。
五、数据库行为
零数据库变更。本次不新增表、列或索引,不写任何数据。advanceAmount 改为只读聚合 order_advance(与财务 Tab 同一查询),
详情装配多两次只读查询(取本团活跃子订单 ID + 一次金额聚合),单团期无 N+1,落在既有 @Transactional(readOnly = true) 段内,不涉及 Feign。
六、边界行为
- 团期不存在 → 589501。
- 团期无任何预支 →
"0.00"。 - 只有 SUBMITTED / REJECTED / 已撤回的预支 →
"0.00"(与财务 Tab 一致)。
六.6、修改前后对比
| 项 | 修改前 | 修改后 |
|---|---|---|
advanceAmount 来源 |
order_group_batch.advance_amount(#7154 起停写) |
order_advance 实时聚合,与 GB-ADM-040 advanceApproved 同一方法 |
| 新团期 | 永远 0.00 |
实际通过的预支合计 |
| 子订单级预支 | 不含 | 含 |
| 字段名 / 类型 / 其余出参 | — | 逐字未变 |
| 路径 / 入参 / 权限码 | — | 逐字未变 |
六.7、影响评估
- 兼容性:字段名与类型不变;数值会从 0 或过期值变为实际值。hl-ui v2.1 团期详情页未渲染该字段,界面无变化。
- 性能:单团期多两次只读查询,无 N+1。
- 回滚:撤销 PR #8539 的合并提交后重新部署 order-v3,无数据与配置残留。
七、不影响范围
- 财务 Tab(GB-ADM-040)、预支记录(GB-ADM-043)、预支上限校验:口径与字段零改动。
- 团期列表、看板:不含
advanceAmount,未涉及。 - 网关:路径未变、无新增路由与权限码。
- 小程序端:本接口仅管理后台使用。
八、测试环境已验证
2026-09-29 18:44–19:17 测试服(api.test.1814.love),部署 dev-v3 @ 27409a3f1(order-v3 双实例 8086/8186)。
自建两个团期、真实订单与主报账人后造预支;每组同一时刻读 A2 与 GB-ADM-040,并用 SQL 按同一口径算期望值作第三方对照。
旧列 order_group_batch.advance_amount 在全部读数时刻都是 0.00,证明新值不来自旧列。
| 场景 | 造数 | A2 advanceAmount |
GB-ADM-040 advanceApproved |
SQL 期望 |
|---|---|---|---|---|
| 无预支(自建 2 团 + 现存 17 团只读) | 无 | "0.00" |
"0.00" |
0.00 |
| 只有团期级 APPROVED | 团期级 APPROVED 1200 + 待审 350 + 驳回 480 + 撤回 260 | "1200.00" |
"1200.00"(advancePending="350.00") |
1200.00 |
| 团期级 + 子订单级 | 团期级 APPROVED 800 + 子订单级 APPROVED 650 + 子订单级待审 420 | "1450.00" |
"1450.00"(advancePending="420.00") |
1450.00 |
- 部署身份:在「只有团期级 APPROVED」团期上经网关连打 A2 8 次,全是
"1200.00"(旧代码会返回"0.00");直连 8086、8186 两实例各读,同为新值。 - 验收造数已全部回收,回读零残留。
单元测试:定向 35 类 487 例 0 失败(含新增 4 条,经 surefire XML 核实真执行);团期整包 + 全部 ArchTest 3118 例中 11 例红,基底 dfb5db832 同样复现,属既有失败。
十、相关文档
- 工单 #8533、PR #8539(merge commit
27409a3f1) - 团期预支改为逐笔台账 + 实时聚合:#7154
- 同写法先例(详情字段与兄弟接口同源回填):#8215
- PAID 口径遗留:台账 g-081(09-28 定暂不处理)
关联 / 联系人
- 后端:jw
- 前端:不涉及(
frontend_status: not_required)