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

@@ -28,9 +28,9 @@ func newOrder(db *gorm.DB, opts ...gen.DOOption) orderQuery {
_orderQuery.ID = field.NewInt64(tableName, "id")
_orderQuery.TenantID = field.NewInt64(tableName, "tenant_id")
_orderQuery.UserID = field.NewInt64(tableName, "user_id")
_orderQuery.Type = field.NewField(tableName, "type")
_orderQuery.Status = field.NewField(tableName, "status")
_orderQuery.Currency = field.NewField(tableName, "currency")
_orderQuery.Type = field.NewString(tableName, "type")
_orderQuery.Status = field.NewString(tableName, "status")
_orderQuery.Currency = field.NewString(tableName, "currency")
_orderQuery.AmountOriginal = field.NewInt64(tableName, "amount_original")
_orderQuery.AmountDiscount = field.NewInt64(tableName, "amount_discount")
_orderQuery.AmountPaid = field.NewInt64(tableName, "amount_paid")
@@ -43,11 +43,6 @@ func newOrder(db *gorm.DB, opts ...gen.DOOption) orderQuery {
_orderQuery.RefundReason = field.NewString(tableName, "refund_reason")
_orderQuery.CreatedAt = field.NewTime(tableName, "created_at")
_orderQuery.UpdatedAt = field.NewTime(tableName, "updated_at")
_orderQuery.Items = orderQueryHasManyItems{
db: db.Session(&gorm.Session{}),
RelationField: field.NewRelation("Items", "OrderItem"),
}
_orderQuery.fillFieldMap()
@@ -58,25 +53,24 @@ type orderQuery struct {
orderQueryDo orderQueryDo
ALL field.Asterisk
ID field.Int64 // 主键ID自增用于关联订单明细、账本流水、权益等
TenantID field.Int64 // 租户ID多租户隔离关键字段所有查询/写入必须限定 tenant_id
UserID field.Int64 // 用户ID下单用户buyer余额扣款与权益归属以该 user_id 为准
Type field.Field // 订单类型content_purchase购买内容当前默认 content_purchase
Status field.Field // 订单状态created/paid/refunding/refunded/canceled/failed状态变更需与账本/权益保持一致
Currency field.Field // 币种:当前固定 CNY金额单位为分
AmountOriginal field.Int64 // 原价金额:分;未折扣前金额(用于展示与对账)
AmountDiscount field.Int64 // 优惠金额amount_paid = amount_original - amount_discount下单时快照
AmountPaid field.Int64 // 实付金额:分;从租户内余额扣款的金额(下单时快照)
Snapshot field.JSONB // 订单快照JSON建议包含 content 标题/定价/折扣、请求来源等,避免改价影响历史展示
IdempotencyKey field.String // 幂等键:同一租户同一用户同一业务请求可用;用于防重复下单/重复扣款(建议由客户端生成)
PaidAt field.Time // 支付/扣款完成时间:余额支付在 debit_purchase 成功后写入
RefundedAt field.Time // 退款完成时间:退款落账成功后写入
RefundForced field.Bool // 是否强制退款true 表示租户管理侧绕过时间窗执行退款(需审计)
RefundOperatorUserID field.Int64 // 退款操作人用户ID租户管理员/系统;用于审计与追责
RefundReason field.String // 退款原因:后台/用户发起退款的原因说明;用于审计
CreatedAt field.Time // 创建时间:默认 now();用于审计与排序
UpdatedAt field.Time // 更新时间:默认 now();状态变更/退款写入时更新
Items orderQueryHasManyItems
ID field.Int64
TenantID field.Int64
UserID field.Int64
Type field.String
Status field.String
Currency field.String
AmountOriginal field.Int64
AmountDiscount field.Int64
AmountPaid field.Int64
Snapshot field.JSONB
IdempotencyKey field.String
PaidAt field.Time
RefundedAt field.Time
RefundForced field.Bool
RefundOperatorUserID field.Int64
RefundReason field.String
CreatedAt field.Time
UpdatedAt field.Time
fieldMap map[string]field.Expr
}
@@ -96,9 +90,9 @@ func (o *orderQuery) updateTableName(table string) *orderQuery {
o.ID = field.NewInt64(table, "id")
o.TenantID = field.NewInt64(table, "tenant_id")
o.UserID = field.NewInt64(table, "user_id")
o.Type = field.NewField(table, "type")
o.Status = field.NewField(table, "status")
o.Currency = field.NewField(table, "currency")
o.Type = field.NewString(table, "type")
o.Status = field.NewString(table, "status")
o.Currency = field.NewString(table, "currency")
o.AmountOriginal = field.NewInt64(table, "amount_original")
o.AmountDiscount = field.NewInt64(table, "amount_discount")
o.AmountPaid = field.NewInt64(table, "amount_paid")
@@ -141,7 +135,7 @@ func (o *orderQuery) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
}
func (o *orderQuery) fillFieldMap() {
o.fieldMap = make(map[string]field.Expr, 19)
o.fieldMap = make(map[string]field.Expr, 18)
o.fieldMap["id"] = o.ID
o.fieldMap["tenant_id"] = o.TenantID
o.fieldMap["user_id"] = o.UserID
@@ -160,103 +154,18 @@ func (o *orderQuery) fillFieldMap() {
o.fieldMap["refund_reason"] = o.RefundReason
o.fieldMap["created_at"] = o.CreatedAt
o.fieldMap["updated_at"] = o.UpdatedAt
}
func (o orderQuery) clone(db *gorm.DB) orderQuery {
o.orderQueryDo.ReplaceConnPool(db.Statement.ConnPool)
o.Items.db = db.Session(&gorm.Session{Initialized: true})
o.Items.db.Statement.ConnPool = db.Statement.ConnPool
return o
}
func (o orderQuery) replaceDB(db *gorm.DB) orderQuery {
o.orderQueryDo.ReplaceDB(db)
o.Items.db = db.Session(&gorm.Session{})
return o
}
type orderQueryHasManyItems struct {
db *gorm.DB
field.RelationField
}
func (a orderQueryHasManyItems) Where(conds ...field.Expr) *orderQueryHasManyItems {
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 orderQueryHasManyItems) WithContext(ctx context.Context) *orderQueryHasManyItems {
a.db = a.db.WithContext(ctx)
return &a
}
func (a orderQueryHasManyItems) Session(session *gorm.Session) *orderQueryHasManyItems {
a.db = a.db.Session(session)
return &a
}
func (a orderQueryHasManyItems) Model(m *Order) *orderQueryHasManyItemsTx {
return &orderQueryHasManyItemsTx{a.db.Model(m).Association(a.Name())}
}
func (a orderQueryHasManyItems) Unscoped() *orderQueryHasManyItems {
a.db = a.db.Unscoped()
return &a
}
type orderQueryHasManyItemsTx struct{ tx *gorm.Association }
func (a orderQueryHasManyItemsTx) Find() (result []*OrderItem, err error) {
return result, a.tx.Find(&result)
}
func (a orderQueryHasManyItemsTx) Append(values ...*OrderItem) (err error) {
targetValues := make([]interface{}, len(values))
for i, v := range values {
targetValues[i] = v
}
return a.tx.Append(targetValues...)
}
func (a orderQueryHasManyItemsTx) Replace(values ...*OrderItem) (err error) {
targetValues := make([]interface{}, len(values))
for i, v := range values {
targetValues[i] = v
}
return a.tx.Replace(targetValues...)
}
func (a orderQueryHasManyItemsTx) Delete(values ...*OrderItem) (err error) {
targetValues := make([]interface{}, len(values))
for i, v := range values {
targetValues[i] = v
}
return a.tx.Delete(targetValues...)
}
func (a orderQueryHasManyItemsTx) Clear() error {
return a.tx.Clear()
}
func (a orderQueryHasManyItemsTx) Count() int64 {
return a.tx.Count()
}
func (a orderQueryHasManyItemsTx) Unscoped() *orderQueryHasManyItemsTx {
a.tx = a.tx.Unscoped()
return &a
}
type orderQueryDo struct{ gen.DO }
func (o orderQueryDo) Debug() *orderQueryDo {