feat: add operator and business reference fields to tenant ledgers

- Added `operator_user_id`, `biz_ref_type`, and `biz_ref_id` fields to the TenantLedger model for enhanced auditing and traceability.
- Updated the tenant ledgers query generation to include new fields.
- Introduced new API endpoint for retrieving tenant ledger records with filtering options based on the new fields.
- Enhanced Swagger documentation to reflect the new endpoint and its parameters.
- Created DTOs for admin ledger filtering and item representation.
- Implemented the admin ledger retrieval logic in the tenant service.
- Added database migration scripts to introduce new fields and indexes for efficient querying.
This commit is contained in:
2025-12-22 21:35:10 +08:00
parent 3cb2a6f586
commit 5dc0f89ac0
17 changed files with 983 additions and 171 deletions

View File

@@ -257,6 +257,16 @@ definitions:
description: UserID 目标用户ID。
type: integer
type: object
dto.AdminLedgerItem:
properties:
ledger:
allOf:
- $ref: '#/definitions/models.TenantLedger'
description: Ledger 流水记录(租户内隔离)。
type_description:
description: TypeDescription 流水类型中文说明(用于前端展示)。
type: string
type: object
dto.AdminMediaAssetUploadCompleteForm:
properties:
content_type:
@@ -1054,10 +1064,9 @@ definitions:
description: 退款完成时间:退款落账成功后写入
type: string
snapshot:
allOf:
- $ref: '#/definitions/types.JSONType-fields_OrdersSnapshot'
description: 订单快照JSON建议包含 content 标题/定价/折扣、请求来源等,避免改价影响历史展示
items:
type: integer
type: array
status:
allOf:
- $ref: '#/definitions/consts.OrderStatus'
@@ -1101,10 +1110,9 @@ definitions:
description: 订单ID关联 orders.id用于聚合订单明细
type: integer
snapshot:
allOf:
- $ref: '#/definitions/types.JSONType-fields_OrderItemsSnapshot'
description: 内容快照JSON建议包含 title/price/discount 等,用于历史展示与审计
items:
type: integer
type: array
tenant_id:
description: 租户ID多租户隔离关键字段必须与 orders.tenant_id 一致
type: integer
@@ -1232,6 +1240,12 @@ definitions:
balance_before:
description: 变更前可用余额:用于审计与对账回放
type: integer
biz_ref_id:
description: 业务引用ID与 biz_ref_type 配合使用(例如 orders.id用于对账与审计
type: integer
biz_ref_type:
description: 业务引用类型order/refund/topup/etc与 biz_ref_id 组成可选的结构化幂等/追溯键
type: string
created_at:
description: 创建时间:默认 now()
type: string
@@ -1247,6 +1261,9 @@ definitions:
idempotency_key:
description: 幂等键:同一租户同一用户同一业务操作固定;用于防止重复落账(建议由业务层生成)
type: string
operator_user_id:
description: 操作者用户ID谁触发该流水admin/buyer/system用于审计与追责可为空历史数据或无法识别时
type: integer
order:
$ref: '#/definitions/models.Order'
order_id:
@@ -1350,6 +1367,10 @@ definitions:
paging).
type: integer
type: object
types.JSONType-fields_OrderItemsSnapshot:
type: object
types.JSONType-fields_OrdersSnapshot:
type: object
externalDocs:
description: OpenAPI
url: https://swagger.io/resources/open-api/
@@ -1967,6 +1988,92 @@ paths:
summary: 拒绝加入申请(租户管理)
tags:
- Tenant
/t/{tenantCode}/v1/admin/ledgers:
get:
consumes:
- application/json
parameters:
- description: Tenant Code
in: path
name: tenantCode
required: true
type: string
- description: BizRefID 按业务引用ID过滤可选
in: query
name: biz_ref_id
type: integer
- description: |-
BizRefType 按业务引用类型过滤(可选)。
约定:当前业务写入为 "order";未来可扩展为 refund/topup 等。
in: query
name: biz_ref_type
type: string
- description: CreatedAtFrom 创建时间起(可选)。
in: query
name: created_at_from
type: string
- description: CreatedAtTo 创建时间止(可选)。
in: query
name: created_at_to
type: string
- description: Limit is page size; only values in {10,20,50,100} are accepted
(otherwise defaults to 10).
in: query
name: limit
type: integer
- description: |-
OperatorUserID 按操作者用户ID过滤可选
典型场景:后台检索“某个管理员发起的充值/退款”等敏感操作流水。
in: query
name: operator_user_id
type: integer
- description: OrderID 按关联订单过滤(可选)。
in: query
name: order_id
type: integer
- description: Page is 1-based page index; values <= 0 are normalized to 1.
in: query
name: page
type: integer
- description: Type 按流水类型过滤(可选)。
enum:
- credit_topup
- debit_purchase
- credit_refund
- freeze
- unfreeze
- adjustment
in: query
name: type
type: string
x-enum-varnames:
- TenantLedgerTypeCreditTopup
- TenantLedgerTypeDebitPurchase
- TenantLedgerTypeCreditRefund
- TenantLedgerTypeFreeze
- TenantLedgerTypeUnfreeze
- TenantLedgerTypeAdjustment
- description: |-
UserID 按余额账户归属用户ID过滤可选
典型场景:查看某个租户成员的资金变化全链路。
in: query
name: user_id
type: integer
produces:
- application/json
responses:
"200":
description: OK
schema:
allOf:
- $ref: '#/definitions/requests.Pager'
- properties:
items:
$ref: '#/definitions/dto.AdminLedgerItem'
type: object
summary: 余额流水列表(租户管理/审计)
tags:
- Tenant
/t/{tenantCode}/v1/admin/media_assets:
get:
consumes: