feat: implement new structure

This commit is contained in:
2025-12-29 09:30:49 +08:00
parent 503b15aab7
commit ad52371028
116 changed files with 17579 additions and 1213 deletions

View File

@@ -29,7 +29,7 @@ func newTenantLedger(db *gorm.DB, opts ...gen.DOOption) tenantLedgerQuery {
_tenantLedgerQuery.TenantID = field.NewInt64(tableName, "tenant_id")
_tenantLedgerQuery.UserID = field.NewInt64(tableName, "user_id")
_tenantLedgerQuery.OrderID = field.NewInt64(tableName, "order_id")
_tenantLedgerQuery.Type = field.NewField(tableName, "type")
_tenantLedgerQuery.Type = field.NewString(tableName, "type")
_tenantLedgerQuery.Amount = field.NewInt64(tableName, "amount")
_tenantLedgerQuery.BalanceBefore = field.NewInt64(tableName, "balance_before")
_tenantLedgerQuery.BalanceAfter = field.NewInt64(tableName, "balance_after")
@@ -37,16 +37,11 @@ func newTenantLedger(db *gorm.DB, opts ...gen.DOOption) tenantLedgerQuery {
_tenantLedgerQuery.FrozenAfter = field.NewInt64(tableName, "frozen_after")
_tenantLedgerQuery.IdempotencyKey = field.NewString(tableName, "idempotency_key")
_tenantLedgerQuery.Remark = field.NewString(tableName, "remark")
_tenantLedgerQuery.CreatedAt = field.NewTime(tableName, "created_at")
_tenantLedgerQuery.UpdatedAt = field.NewTime(tableName, "updated_at")
_tenantLedgerQuery.OperatorUserID = field.NewInt64(tableName, "operator_user_id")
_tenantLedgerQuery.BizRefType = field.NewString(tableName, "biz_ref_type")
_tenantLedgerQuery.BizRefID = field.NewInt64(tableName, "biz_ref_id")
_tenantLedgerQuery.Order = tenantLedgerQueryBelongsToOrder{
db: db.Session(&gorm.Session{}),
RelationField: field.NewRelation("Order", "Order"),
}
_tenantLedgerQuery.CreatedAt = field.NewTime(tableName, "created_at")
_tenantLedgerQuery.UpdatedAt = field.NewTime(tableName, "updated_at")
_tenantLedgerQuery.fillFieldMap()
@@ -57,24 +52,23 @@ type tenantLedgerQuery struct {
tenantLedgerQueryDo tenantLedgerQueryDo
ALL field.Asterisk
ID field.Int64 // 主键ID自增
TenantID field.Int64 // 租户ID多租户隔离关键字段必须与 tenant_users.tenant_id 一致
UserID field.Int64 // 用户ID余额账户归属用户对应 tenant_users.user_id
OrderID field.Int64 // 关联订单ID购买/退款类流水应关联 orders.id非订单类可为空
Type field.Field // 流水类型debit_purchase/credit_refund/freeze/unfreeze/adjustment不同类型决定余额/冻结余额的变更方向
Amount field.Int64 // 流水金额:分/最小货币单位;通常为正数,方向由 type 决定(由业务层约束)
BalanceBefore field.Int64 // 变更前可用余额:用于审计与对账回放
BalanceAfter field.Int64 // 变更后可用余额:用于审计与对账回放
FrozenBefore field.Int64 // 变更前冻结余额:用于审计与对账回放
FrozenAfter field.Int64 // 变更后冻结余额:用于审计与对账回放
IdempotencyKey field.String // 幂等键:同一租户同一用户同一业务操作固定;用于防止重复落账(建议由业务层生成)
Remark field.String // 备注:业务说明/后台操作原因等;用于审计
CreatedAt field.Time // 创建时间:默认 now()
UpdatedAt field.Time // 更新时间:默认 now()
OperatorUserID field.Int64 // 操作者用户ID谁触发该流水admin/buyer/system用于审计与追责可为空历史数据或无法识别时
BizRefType field.String // 业务引用类型order/refund/etc与 biz_ref_id 组成可选的结构化幂等/追溯键
BizRefID field.Int64 // 业务引用ID与 biz_ref_type 配合使用(例如 orders.id用于对账与审计
Order tenantLedgerQueryBelongsToOrder
ID field.Int64
TenantID field.Int64
UserID field.Int64
OrderID field.Int64
Type field.String
Amount field.Int64
BalanceBefore field.Int64
BalanceAfter field.Int64
FrozenBefore field.Int64
FrozenAfter field.Int64
IdempotencyKey field.String
Remark field.String
OperatorUserID field.Int64
BizRefType field.String
BizRefID field.Int64
CreatedAt field.Time
UpdatedAt field.Time
fieldMap map[string]field.Expr
}
@@ -95,7 +89,7 @@ func (t *tenantLedgerQuery) updateTableName(table string) *tenantLedgerQuery {
t.TenantID = field.NewInt64(table, "tenant_id")
t.UserID = field.NewInt64(table, "user_id")
t.OrderID = field.NewInt64(table, "order_id")
t.Type = field.NewField(table, "type")
t.Type = field.NewString(table, "type")
t.Amount = field.NewInt64(table, "amount")
t.BalanceBefore = field.NewInt64(table, "balance_before")
t.BalanceAfter = field.NewInt64(table, "balance_after")
@@ -103,11 +97,11 @@ func (t *tenantLedgerQuery) updateTableName(table string) *tenantLedgerQuery {
t.FrozenAfter = field.NewInt64(table, "frozen_after")
t.IdempotencyKey = field.NewString(table, "idempotency_key")
t.Remark = field.NewString(table, "remark")
t.CreatedAt = field.NewTime(table, "created_at")
t.UpdatedAt = field.NewTime(table, "updated_at")
t.OperatorUserID = field.NewInt64(table, "operator_user_id")
t.BizRefType = field.NewString(table, "biz_ref_type")
t.BizRefID = field.NewInt64(table, "biz_ref_id")
t.CreatedAt = field.NewTime(table, "created_at")
t.UpdatedAt = field.NewTime(table, "updated_at")
t.fillFieldMap()
@@ -140,7 +134,7 @@ func (t *tenantLedgerQuery) GetFieldByName(fieldName string) (field.OrderExpr, b
}
func (t *tenantLedgerQuery) fillFieldMap() {
t.fieldMap = make(map[string]field.Expr, 18)
t.fieldMap = make(map[string]field.Expr, 17)
t.fieldMap["id"] = t.ID
t.fieldMap["tenant_id"] = t.TenantID
t.fieldMap["user_id"] = t.UserID
@@ -153,108 +147,23 @@ func (t *tenantLedgerQuery) fillFieldMap() {
t.fieldMap["frozen_after"] = t.FrozenAfter
t.fieldMap["idempotency_key"] = t.IdempotencyKey
t.fieldMap["remark"] = t.Remark
t.fieldMap["created_at"] = t.CreatedAt
t.fieldMap["updated_at"] = t.UpdatedAt
t.fieldMap["operator_user_id"] = t.OperatorUserID
t.fieldMap["biz_ref_type"] = t.BizRefType
t.fieldMap["biz_ref_id"] = t.BizRefID
t.fieldMap["created_at"] = t.CreatedAt
t.fieldMap["updated_at"] = t.UpdatedAt
}
func (t tenantLedgerQuery) clone(db *gorm.DB) tenantLedgerQuery {
t.tenantLedgerQueryDo.ReplaceConnPool(db.Statement.ConnPool)
t.Order.db = db.Session(&gorm.Session{Initialized: true})
t.Order.db.Statement.ConnPool = db.Statement.ConnPool
return t
}
func (t tenantLedgerQuery) replaceDB(db *gorm.DB) tenantLedgerQuery {
t.tenantLedgerQueryDo.ReplaceDB(db)
t.Order.db = db.Session(&gorm.Session{})
return t
}
type tenantLedgerQueryBelongsToOrder struct {
db *gorm.DB
field.RelationField
}
func (a tenantLedgerQueryBelongsToOrder) Where(conds ...field.Expr) *tenantLedgerQueryBelongsToOrder {
if len(conds) == 0 {
return &a
}
exprs := make([]clause.Expression, 0, len(conds))
for _, cond := range conds {
exprs = append(exprs, cond.BeCond().(clause.Expression))
}
a.db = a.db.Clauses(clause.Where{Exprs: exprs})
return &a
}
func (a tenantLedgerQueryBelongsToOrder) WithContext(ctx context.Context) *tenantLedgerQueryBelongsToOrder {
a.db = a.db.WithContext(ctx)
return &a
}
func (a tenantLedgerQueryBelongsToOrder) Session(session *gorm.Session) *tenantLedgerQueryBelongsToOrder {
a.db = a.db.Session(session)
return &a
}
func (a tenantLedgerQueryBelongsToOrder) Model(m *TenantLedger) *tenantLedgerQueryBelongsToOrderTx {
return &tenantLedgerQueryBelongsToOrderTx{a.db.Model(m).Association(a.Name())}
}
func (a tenantLedgerQueryBelongsToOrder) Unscoped() *tenantLedgerQueryBelongsToOrder {
a.db = a.db.Unscoped()
return &a
}
type tenantLedgerQueryBelongsToOrderTx struct{ tx *gorm.Association }
func (a tenantLedgerQueryBelongsToOrderTx) Find() (result *Order, err error) {
return result, a.tx.Find(&result)
}
func (a tenantLedgerQueryBelongsToOrderTx) Append(values ...*Order) (err error) {
targetValues := make([]interface{}, len(values))
for i, v := range values {
targetValues[i] = v
}
return a.tx.Append(targetValues...)
}
func (a tenantLedgerQueryBelongsToOrderTx) Replace(values ...*Order) (err error) {
targetValues := make([]interface{}, len(values))
for i, v := range values {
targetValues[i] = v
}
return a.tx.Replace(targetValues...)
}
func (a tenantLedgerQueryBelongsToOrderTx) Delete(values ...*Order) (err error) {
targetValues := make([]interface{}, len(values))
for i, v := range values {
targetValues[i] = v
}
return a.tx.Delete(targetValues...)
}
func (a tenantLedgerQueryBelongsToOrderTx) Clear() error {
return a.tx.Clear()
}
func (a tenantLedgerQueryBelongsToOrderTx) Count() int64 {
return a.tx.Count()
}
func (a tenantLedgerQueryBelongsToOrderTx) Unscoped() *tenantLedgerQueryBelongsToOrderTx {
a.tx = a.tx.Unscoped()
return &a
}
type tenantLedgerQueryDo struct{ gen.DO }
func (t tenantLedgerQueryDo) Debug() *tenantLedgerQueryDo {