From 71f1c6f1411a7bf0d0f5909fbf836fa569760b50 Mon Sep 17 00:00:00 2001 From: luorijun Date: Fri, 20 Mar 2026 14:37:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=85=B3=E8=81=94=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E5=8F=B7=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/handlers/batch.go | 9 +- web/handlers/bill.go | 9 +- web/handlers/channel.go | 9 +- web/handlers/resource.go | 16 ++- web/handlers/trade.go | 9 +- web/models/logs_user_usage.go | 2 + web/models/trade.go | 2 + web/queries/bill.gen.go | 9 ++ web/queries/logs_user_usage.gen.go | 180 ++++++++++++++++++++++++++++- web/queries/trade.gen.go | 180 ++++++++++++++++++++++++++++- 10 files changed, 417 insertions(+), 8 deletions(-) diff --git a/web/handlers/batch.go b/web/handlers/batch.go index 3133a4e..ebeb8c3 100644 --- a/web/handlers/batch.go +++ b/web/handlers/batch.go @@ -68,7 +68,14 @@ func PageBatchByAdmin(c *fiber.Ctx) error { return err } - list, total, err := q.LogsUserUsage.FindByPage(req.GetOffset(), req.GetLimit()) + list, total, err := q.LogsUserUsage. + Joins(q.LogsUserUsage.User). + Select( + q.LogsUserUsage.ALL, + q.User.As("User").Phone.As("User__phone"), + q.User.As("User").Name.As("User__name"), + ). + FindByPage(req.GetOffset(), req.GetLimit()) return c.JSON(core.PageResp{ List: list, diff --git a/web/handlers/bill.go b/web/handlers/bill.go index dc9e6c9..e0a4f68 100644 --- a/web/handlers/bill.go +++ b/web/handlers/bill.go @@ -25,7 +25,14 @@ func PageBillByAdmin(c *fiber.Ctx) error { } // 查询用户列表 - list, total, err := q.Bill.FindByPage(req.GetOffset(), req.GetLimit()) + list, total, err := q.Bill. + Joins(q.Bill.User). + Select( + q.Bill.ALL, + q.User.As("User").Phone.As("User__phone"), + q.User.As("User").Name.As("User__name"), + ). + FindByPage(req.GetOffset(), req.GetLimit()) if err != nil { return err } diff --git a/web/handlers/channel.go b/web/handlers/channel.go index 64a5547..ba3ca23 100644 --- a/web/handlers/channel.go +++ b/web/handlers/channel.go @@ -29,7 +29,14 @@ func PageChannelsByAdmin(c *fiber.Ctx) error { } // 查询通道列表 - list, total, err := q.Channel.FindByPage(req.GetOffset(), req.GetLimit()) + list, total, err := q.Channel. + Joins(q.Channel.User). + Select( + q.Channel.ALL, + q.User.As("User").Phone.As("User__phone"), + q.User.As("User").Name.As("User__name"), + ). + FindByPage(req.GetOffset(), req.GetLimit()) if err != nil { return err } diff --git a/web/handlers/resource.go b/web/handlers/resource.go index da539ea..535901d 100644 --- a/web/handlers/resource.go +++ b/web/handlers/resource.go @@ -220,7 +220,13 @@ func PageResourceShortByAdmin(c *fiber.Ctx) error { } list, total, err := q.Resource. - LeftJoin(q.ResourceShort, q.ResourceShort.ResourceID.EqCol(q.Resource.ID)). + Joins(q.Resource.User, q.Resource.Short). + Select( + q.Resource.ALL, + q.ResourceShort.As("Short").ALL, + q.User.As("User").Phone.As("User__phone"), + q.User.As("User").Name.As("User__name"), + ). Where(q.Resource.Type.Eq(int(m.ResourceTypeShort))). FindByPage(req.GetOffset(), req.GetLimit()) @@ -245,7 +251,13 @@ func PageResourceLongByAdmin(c *fiber.Ctx) error { } list, total, err := q.Resource. - LeftJoin(q.ResourceLong, q.ResourceLong.ResourceID.EqCol(q.Resource.ID)). + Joins(q.Resource.User, q.Resource.Long). + Select( + q.Resource.ALL, + q.ResourceLong.As("Long").ALL, + q.User.As("User").Phone.As("User__phone"), + q.User.As("User").Name.As("User__name"), + ). Where(q.Resource.Type.Eq(int(m.ResourceTypeLong))). FindByPage(req.GetOffset(), req.GetLimit()) diff --git a/web/handlers/trade.go b/web/handlers/trade.go index ea33c11..e011722 100644 --- a/web/handlers/trade.go +++ b/web/handlers/trade.go @@ -32,7 +32,14 @@ func PageTradeByAdmin(c *fiber.Ctx) error { } // 查询用户列表 - list, total, err := q.Trade.FindByPage(req.GetOffset(), req.GetLimit()) + list, total, err := q.Trade. + Joins(q.Trade.User). + Select( + q.Trade.ALL, + q.User.As("User").Phone.As("User__phone"), + q.User.As("User").Name.As("User__name"), + ). + FindByPage(req.GetOffset(), req.GetLimit()) if err != nil { return err } diff --git a/web/models/logs_user_usage.go b/web/models/logs_user_usage.go index bac63e0..572a0ba 100644 --- a/web/models/logs_user_usage.go +++ b/web/models/logs_user_usage.go @@ -17,4 +17,6 @@ type LogsUserUsage struct { ISP *string `json:"isp,omitempty" gorm:"column:isp"` // 运营商 IP orm.Inet `json:"ip" gorm:"column:ip"` // IP地址 Time time.Time `json:"time" gorm:"column:time"` // 提取时间 + + User *User `json:"user,omitempty" gorm:"foreignKey:UserID"` } diff --git a/web/models/trade.go b/web/models/trade.go index 7892177..0ec015a 100644 --- a/web/models/trade.go +++ b/web/models/trade.go @@ -26,6 +26,8 @@ type Trade struct { PaymentURL *string `json:"payment_url,omitempty" gorm:"column:payment_url"` // 支付链接 CompletedAt *time.Time `json:"completed_at,omitempty" gorm:"column:completed_at"` // 支付时间 CanceledAt *time.Time `json:"canceled_at,omitempty" gorm:"column:canceled_at"` // 取消时间 + + User *User `json:"user,omitempty" gorm:"foreignKey:UserID"` } // TradeType 订单类型枚举 diff --git a/web/queries/bill.gen.go b/web/queries/bill.gen.go index 40e9d5f..62e5f2e 100644 --- a/web/queries/bill.gen.go +++ b/web/queries/bill.gen.go @@ -114,6 +114,11 @@ func newBill(db *gorm.DB, opts ...gen.DOOption) bill { db: db.Session(&gorm.Session{}), RelationField: field.NewRelation("Trade", "models.Trade"), + User: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Trade.User", "models.User"), + }, } _bill.Resource = billBelongsToResource{ @@ -360,6 +365,10 @@ type billBelongsToTrade struct { db *gorm.DB field.RelationField + + User struct { + field.RelationField + } } func (a billBelongsToTrade) Where(conds ...field.Expr) *billBelongsToTrade { diff --git a/web/queries/logs_user_usage.gen.go b/web/queries/logs_user_usage.gen.go index a429280..66e9c19 100644 --- a/web/queries/logs_user_usage.gen.go +++ b/web/queries/logs_user_usage.gen.go @@ -37,6 +37,76 @@ func newLogsUserUsage(db *gorm.DB, opts ...gen.DOOption) logsUserUsage { _logsUserUsage.ISP = field.NewString(tableName, "isp") _logsUserUsage.IP = field.NewField(tableName, "ip") _logsUserUsage.Time = field.NewTime(tableName, "time") + _logsUserUsage.User = logsUserUsageBelongsToUser{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("User", "models.User"), + Admin: struct { + field.RelationField + Roles struct { + field.RelationField + Permissions struct { + field.RelationField + Parent struct { + field.RelationField + } + Children struct { + field.RelationField + } + } + } + }{ + RelationField: field.NewRelation("User.Admin", "models.Admin"), + Roles: struct { + field.RelationField + Permissions struct { + field.RelationField + Parent struct { + field.RelationField + } + Children struct { + field.RelationField + } + } + }{ + RelationField: field.NewRelation("User.Admin.Roles", "models.AdminRole"), + Permissions: struct { + field.RelationField + Parent struct { + field.RelationField + } + Children struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Admin.Roles.Permissions", "models.Permission"), + Parent: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Admin.Roles.Permissions.Parent", "models.Permission"), + }, + Children: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Admin.Roles.Permissions.Children", "models.Permission"), + }, + }, + }, + }, + Roles: struct { + field.RelationField + Permissions struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Roles", "models.UserRole"), + Permissions: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.Permissions", "models.Permission"), + }, + }, + } _logsUserUsage.fillFieldMap() @@ -57,6 +127,7 @@ type logsUserUsage struct { ISP field.String IP field.Field Time field.Time + User logsUserUsageBelongsToUser fieldMap map[string]field.Expr } @@ -99,7 +170,7 @@ func (l *logsUserUsage) GetFieldByName(fieldName string) (field.OrderExpr, bool) } func (l *logsUserUsage) fillFieldMap() { - l.fieldMap = make(map[string]field.Expr, 10) + l.fieldMap = make(map[string]field.Expr, 11) l.fieldMap["id"] = l.ID l.fieldMap["user_id"] = l.UserID l.fieldMap["resource_id"] = l.ResourceID @@ -110,18 +181,125 @@ func (l *logsUserUsage) fillFieldMap() { l.fieldMap["isp"] = l.ISP l.fieldMap["ip"] = l.IP l.fieldMap["time"] = l.Time + } func (l logsUserUsage) clone(db *gorm.DB) logsUserUsage { l.logsUserUsageDo.ReplaceConnPool(db.Statement.ConnPool) + l.User.db = db.Session(&gorm.Session{Initialized: true}) + l.User.db.Statement.ConnPool = db.Statement.ConnPool return l } func (l logsUserUsage) replaceDB(db *gorm.DB) logsUserUsage { l.logsUserUsageDo.ReplaceDB(db) + l.User.db = db.Session(&gorm.Session{}) return l } +type logsUserUsageBelongsToUser struct { + db *gorm.DB + + field.RelationField + + Admin struct { + field.RelationField + Roles struct { + field.RelationField + Permissions struct { + field.RelationField + Parent struct { + field.RelationField + } + Children struct { + field.RelationField + } + } + } + } + Roles struct { + field.RelationField + Permissions struct { + field.RelationField + } + } +} + +func (a logsUserUsageBelongsToUser) Where(conds ...field.Expr) *logsUserUsageBelongsToUser { + 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 logsUserUsageBelongsToUser) WithContext(ctx context.Context) *logsUserUsageBelongsToUser { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a logsUserUsageBelongsToUser) Session(session *gorm.Session) *logsUserUsageBelongsToUser { + a.db = a.db.Session(session) + return &a +} + +func (a logsUserUsageBelongsToUser) Model(m *models.LogsUserUsage) *logsUserUsageBelongsToUserTx { + return &logsUserUsageBelongsToUserTx{a.db.Model(m).Association(a.Name())} +} + +func (a logsUserUsageBelongsToUser) Unscoped() *logsUserUsageBelongsToUser { + a.db = a.db.Unscoped() + return &a +} + +type logsUserUsageBelongsToUserTx struct{ tx *gorm.Association } + +func (a logsUserUsageBelongsToUserTx) Find() (result *models.User, err error) { + return result, a.tx.Find(&result) +} + +func (a logsUserUsageBelongsToUserTx) Append(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a logsUserUsageBelongsToUserTx) Replace(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a logsUserUsageBelongsToUserTx) Delete(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a logsUserUsageBelongsToUserTx) Clear() error { + return a.tx.Clear() +} + +func (a logsUserUsageBelongsToUserTx) Count() int64 { + return a.tx.Count() +} + +func (a logsUserUsageBelongsToUserTx) Unscoped() *logsUserUsageBelongsToUserTx { + a.tx = a.tx.Unscoped() + return &a +} + type logsUserUsageDo struct{ gen.DO } func (l logsUserUsageDo) Debug() *logsUserUsageDo { diff --git a/web/queries/trade.gen.go b/web/queries/trade.gen.go index a30ebef..31b7bb6 100644 --- a/web/queries/trade.gen.go +++ b/web/queries/trade.gen.go @@ -47,6 +47,76 @@ func newTrade(db *gorm.DB, opts ...gen.DOOption) trade { _trade.PaymentURL = field.NewString(tableName, "payment_url") _trade.CompletedAt = field.NewTime(tableName, "completed_at") _trade.CanceledAt = field.NewTime(tableName, "canceled_at") + _trade.User = tradeBelongsToUser{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("User", "models.User"), + Admin: struct { + field.RelationField + Roles struct { + field.RelationField + Permissions struct { + field.RelationField + Parent struct { + field.RelationField + } + Children struct { + field.RelationField + } + } + } + }{ + RelationField: field.NewRelation("User.Admin", "models.Admin"), + Roles: struct { + field.RelationField + Permissions struct { + field.RelationField + Parent struct { + field.RelationField + } + Children struct { + field.RelationField + } + } + }{ + RelationField: field.NewRelation("User.Admin.Roles", "models.AdminRole"), + Permissions: struct { + field.RelationField + Parent struct { + field.RelationField + } + Children struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Admin.Roles.Permissions", "models.Permission"), + Parent: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Admin.Roles.Permissions.Parent", "models.Permission"), + }, + Children: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Admin.Roles.Permissions.Children", "models.Permission"), + }, + }, + }, + }, + Roles: struct { + field.RelationField + Permissions struct { + field.RelationField + } + }{ + RelationField: field.NewRelation("User.Roles", "models.UserRole"), + Permissions: struct { + field.RelationField + }{ + RelationField: field.NewRelation("User.Roles.Permissions", "models.Permission"), + }, + }, + } _trade.fillFieldMap() @@ -77,6 +147,7 @@ type trade struct { PaymentURL field.String CompletedAt field.Time CanceledAt field.Time + User tradeBelongsToUser fieldMap map[string]field.Expr } @@ -129,7 +200,7 @@ func (t *trade) GetFieldByName(fieldName string) (field.OrderExpr, bool) { } func (t *trade) fillFieldMap() { - t.fieldMap = make(map[string]field.Expr, 20) + t.fieldMap = make(map[string]field.Expr, 21) t.fieldMap["id"] = t.ID t.fieldMap["created_at"] = t.CreatedAt t.fieldMap["updated_at"] = t.UpdatedAt @@ -150,18 +221,125 @@ func (t *trade) fillFieldMap() { t.fieldMap["payment_url"] = t.PaymentURL t.fieldMap["completed_at"] = t.CompletedAt t.fieldMap["canceled_at"] = t.CanceledAt + } func (t trade) clone(db *gorm.DB) trade { t.tradeDo.ReplaceConnPool(db.Statement.ConnPool) + t.User.db = db.Session(&gorm.Session{Initialized: true}) + t.User.db.Statement.ConnPool = db.Statement.ConnPool return t } func (t trade) replaceDB(db *gorm.DB) trade { t.tradeDo.ReplaceDB(db) + t.User.db = db.Session(&gorm.Session{}) return t } +type tradeBelongsToUser struct { + db *gorm.DB + + field.RelationField + + Admin struct { + field.RelationField + Roles struct { + field.RelationField + Permissions struct { + field.RelationField + Parent struct { + field.RelationField + } + Children struct { + field.RelationField + } + } + } + } + Roles struct { + field.RelationField + Permissions struct { + field.RelationField + } + } +} + +func (a tradeBelongsToUser) Where(conds ...field.Expr) *tradeBelongsToUser { + 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 tradeBelongsToUser) WithContext(ctx context.Context) *tradeBelongsToUser { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a tradeBelongsToUser) Session(session *gorm.Session) *tradeBelongsToUser { + a.db = a.db.Session(session) + return &a +} + +func (a tradeBelongsToUser) Model(m *models.Trade) *tradeBelongsToUserTx { + return &tradeBelongsToUserTx{a.db.Model(m).Association(a.Name())} +} + +func (a tradeBelongsToUser) Unscoped() *tradeBelongsToUser { + a.db = a.db.Unscoped() + return &a +} + +type tradeBelongsToUserTx struct{ tx *gorm.Association } + +func (a tradeBelongsToUserTx) Find() (result *models.User, err error) { + return result, a.tx.Find(&result) +} + +func (a tradeBelongsToUserTx) Append(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a tradeBelongsToUserTx) Replace(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a tradeBelongsToUserTx) Delete(values ...*models.User) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a tradeBelongsToUserTx) Clear() error { + return a.tx.Clear() +} + +func (a tradeBelongsToUserTx) Count() int64 { + return a.tx.Count() +} + +func (a tradeBelongsToUserTx) Unscoped() *tradeBelongsToUserTx { + a.tx = a.tx.Unscoped() + return &a +} + type tradeDo struct{ gen.DO } func (t tradeDo) Debug() *tradeDo {