From 636bdcdb87342854cb93b6ef1fba67d08ad7c766 Mon Sep 17 00:00:00 2001 From: luorijun Date: Fri, 11 Apr 2025 17:36:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=20orm=20=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90=E9=80=BB=E8=BE=91=EF=BC=8C=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=20bill=20=E6=8E=A5=E5=8F=A3=EF=BC=8C=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=AD=97=E6=AE=B5=E6=A3=80=E6=9F=A5=E4=B8=8E?= =?UTF-8?q?=20list=20total=20=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 32 +-- cmd/gen/main.go | 98 ++++++-- cmd/playground/main.go | 9 +- scripts/sql/init.sql | 51 ++-- web/handlers/bill.go | 95 +++++++ web/handlers/resource.go | 58 +++-- web/handlers/whitelist.go | 45 ++-- web/models/admin.gen.go | 4 +- web/models/admin_role.gen.go | 8 +- web/models/admin_role_link.gen.go | 8 +- web/models/admin_role_permission_link.gen.go | 8 +- web/models/bill.gen.go | 12 +- web/models/channel.gen.go | 38 ++- web/models/client.gen.go | 8 +- web/models/client_permission_link.gen.go | 8 +- web/models/node.gen.go | 8 +- web/models/permission.gen.go | 8 +- web/models/product.gen.go | 8 +- web/models/proxy.gen.go | 8 +- web/models/refund.gen.go | 8 +- web/models/resource.gen.go | 20 +- web/models/resource_pps.gen.go | 8 +- web/models/resource_psr.gen.go | 4 +- web/models/resource_pss.gen.go | 9 +- web/models/trade.gen.go | 9 +- web/models/user.gen.go | 4 +- web/models/user_role.gen.go | 8 +- web/models/user_role_link.gen.go | 8 +- web/models/user_role_permission_link.gen.go | 8 +- web/models/whitelist.gen.go | 8 +- web/queries/bill.gen.go | 251 ++++++++++++++++++- web/queries/resource.gen.go | 98 +++++++- web/queries/resource_pss.gen.go | 12 +- web/queries/trade.gen.go | 12 +- web/router.go | 4 + web/services/channel.go | 2 +- 36 files changed, 794 insertions(+), 193 deletions(-) diff --git a/README.md b/README.md index 939060e..bec252f 100644 --- a/README.md +++ b/README.md @@ -3,15 +3,20 @@ 核心流程: - [x] 注册与登录 - - [ ] 对接短信接口 - - [ ] 人机风险分级验证 - - [ ] jwt 签发 + - [ ] 对接接口 + - [ ] 人机风险分级验证 + - [ ] jwt 签发 - [x] 鉴权 -- [ ] 实名认证 -- [ ] 充值余额 -- [ ] 选择套餐 -- [X] 提取 IP - - [ ] 长效提取 +- [x] 实名认证 + - [ ] 对接接口 +- [x] 充值余额 + - [ ] 对接接口 +- [x] 选择套餐 + - [ ] 对接接口 + - [ ] 提取记录 +- [ ] 提取 IP + - [ ] 长效提取 + - [ ] 使用记录 - [ ] 连接 中间件: @@ -20,6 +25,11 @@ - [ ] Limiter - [ ] Compress +实现开发时迁移脚本: +- 检查 sql 注释 +- 执行迁移 +- 如果有必要则填充数据 + 查端口需要通过外部接口实现,防止不同环境下的端口覆盖。提供一个额外的简便方法用来实现端口覆盖 业务代码和测试代码共用的控制变量可以优化为环境变量 @@ -36,18 +46,12 @@ remote 令牌问题 考虑将鉴权逻辑放到 handler 里,统一动静态鉴权以及解耦服务层 -重新手动实现 model 层 - 环境变量配置默认会话配置 oauth token 验证授权范围 保存 session 到数据库 -账单数据表结构修改 - -短信发送日志 - ## 环境变量和脚本 在 init/env 中有定义和默认值 diff --git a/cmd/gen/main.go b/cmd/gen/main.go index 28227d8..c8810ae 100644 --- a/cmd/gen/main.go +++ b/cmd/gen/main.go @@ -1,8 +1,6 @@ package main import ( - m "platform/web/models" - "gorm.io/driver/postgres" "gorm.io/gen" "gorm.io/gen/field" @@ -10,7 +8,12 @@ import ( "gorm.io/gorm/schema" ) +var g *gen.Generator + func main() { + + // 初始化 + db, _ := gorm.Open( postgres.Open("host=localhost user=test password=test dbname=app port=5432 sslmode=disable TimeZone=Asia/Shanghai"), &gorm.Config{ @@ -20,32 +23,87 @@ func main() { }, ) - g := gen.NewGenerator(gen.Config{ + g = gen.NewGenerator(gen.Config{ OutPath: "web/queries", ModelPkgPath: "models", Mode: gen.WithDefaultQuery | gen.WithoutContext, }) g.UseDB(db) - models := g.GenerateAllTable( - gen.FieldType("created_at", "common.LocalDateTime"), - gen.FieldType("updated_at", "common.LocalDateTime"), - gen.FieldType("deleted_at", "common.LocalDateTime"), - ) + // 生成模型 + common := []gen.ModelOpt{ + gen.FieldModify(func(field gen.Field) gen.Field { + if field.Type == "time.Time" { + field.Type = "common.LocalDateTime" + } + return field + }), + } + + customs := make(map[string]any) + + resourcePss := g.GenerateModel("resource_pss", common...) + customs["resource_pss"] = resourcePss + + resource := g.GenerateModel("resource", append(common, + gen.FieldRelate(field.HasOne, "Pss", resourcePss, &field.RelateConfig{ + RelatePointer: true, + GORMTag: field.GormTag{ + "foreignKey": []string{"ResourceID"}, + "references": []string{"ID"}, + }, + }), + )...) + customs["resource"] = resource + + trade := g.GenerateModel("trade", common...) + customs["trade"] = trade + + refund := g.GenerateModel("refund", common...) + customs["refund"] = refund + + bill := g.GenerateModel("bill", append(common, + gen.FieldRelate(field.BelongsTo, "Trade", trade, &field.RelateConfig{ + RelatePointer: true, + GORMTag: field.GormTag{ + "foreignKey": []string{"TradeID"}, + }, + }), + gen.FieldRelate(field.BelongsTo, "Refund", refund, &field.RelateConfig{ + RelatePointer: true, + GORMTag: field.GormTag{ + "foreignKey": []string{"RefundID"}, + }, + }), + gen.FieldRelate(field.BelongsTo, "Resource", resource, &field.RelateConfig{ + RelatePointer: true, + GORMTag: field.GormTag{ + "foreignKey": []string{"ResourceID"}, + }, + }), + )...) + customs["bill"] = bill + + tables, _ := db.Migrator().GetTables() + models := make([]interface{}, len(tables)) + for i, name := range tables { + if customs[name] != nil { + models[i] = customs[name] + continue + } + models[i] = genBasic(name, common...) + } + g.ApplyBasic(models...) - modelChannel := g.GenerateModel("channel", - gen.FieldRelateModel(field.BelongsTo, "Node", &m.Node{}, &field.RelateConfig{ - RelatePointer: true, - }), - gen.FieldRelateModel(field.BelongsTo, "User", &m.User{}, &field.RelateConfig{ - RelatePointer: true, - }), - gen.FieldRelateModel(field.BelongsTo, "Proxy", &m.Proxy{}, &field.RelateConfig{ - RelatePointer: true, - }), - ) - g.ApplyBasic(modelChannel) + // 生成查询 g.Execute() } + +func genBasic(name string, opts ...gen.ModelOpt) any { + return g.GenerateModel(name, + gen.FieldType("created_at", "common.LocalDateTime"), + gen.FieldType("updated_at", "common.LocalDateTime"), + ) +} diff --git a/cmd/playground/main.go b/cmd/playground/main.go index 8ab8dcb..f105b42 100644 --- a/cmd/playground/main.go +++ b/cmd/playground/main.go @@ -1,14 +1,11 @@ package main import ( - "fmt" - "time" + "platform/web/services" ) func main() { - parse, err := time.Parse(time.RFC3339, "2025-04-16T16:00:00.000Z") - if err != nil { - return + for range 12 { + println(services.ID.GenReadable("res")) } - fmt.Printf("%x\n", parse) } diff --git a/scripts/sql/init.sql b/scripts/sql/init.sql index 6bb2ee4..faffaf8 100644 --- a/scripts/sql/init.sql +++ b/scripts/sql/init.sql @@ -587,16 +587,18 @@ comment on column product.deleted_at is '删除时间'; -- resource drop table if exists resource cascade; create table resource ( - id serial primary key, - user_id int not null references "user" (id) + id serial primary key, + user_id int not null references "user" (id) on update cascade on delete cascade, - active bool not null default true, - created_at timestamp default current_timestamp, - updated_at timestamp default current_timestamp, - deleted_at timestamp + resource_no varchar(255) unique, + active bool not null default true, + created_at timestamp default current_timestamp, + updated_at timestamp default current_timestamp, + deleted_at timestamp ); create index resource_user_id_index on resource (user_id); +create index resource_resource_no_index on resource (resource_no); create index resource_active_index on resource (active); create index resource_deleted_at_index on resource (deleted_at); @@ -604,6 +606,7 @@ create index resource_deleted_at_index on resource (deleted_at); comment on table resource is '套餐表'; comment on column resource.id is '套餐ID'; comment on column resource.user_id is '用户ID'; +comment on column resource.resource_no is '套餐编号'; comment on column resource.active is '套餐状态'; comment on column resource.created_at is '创建时间'; comment on column resource.updated_at is '更新时间'; @@ -763,6 +766,8 @@ create table refund ( on update cascade -- on delete set null, amount decimal(12, 2) not null default 0, + reason varchar(255), + status int not null default 0, created_at timestamp default current_timestamp, updated_at timestamp default current_timestamp, deleted_at timestamp @@ -777,6 +782,8 @@ comment on column refund.id is '退款ID'; comment on column refund.trade_id is '订单ID'; comment on column refund.product_id is '产品ID'; comment on column refund.amount is '退款金额'; +comment on column refund.reason is '退款原因'; +comment on column refund.status is '退款状态:0-待处理,1-已退款,2-已拒绝'; comment on column refund.created_at is '创建时间'; comment on column refund.updated_at is '更新时间'; comment on column refund.deleted_at is '删除时间'; @@ -785,24 +792,25 @@ comment on column refund.deleted_at is '删除时间'; drop table if exists bill cascade; create table bill ( id serial primary key, - user_id int not null references "user" (id) + user_id int not null references "user" (id) on update cascade on delete cascade, - trade_id int references trade (id) -- - on update cascade -- - on delete set null, - resource_id int references resource (id) -- - on update cascade -- - on delete set null, - refund_id int references refund (id) -- - on update cascade -- - on delete set null, - bill_no varchar(255) not null unique, + trade_id int references trade (id) -- + on update cascade -- + on delete set null, + resource_id int references resource (id) -- + on update cascade -- + on delete set null, + refund_id int references refund (id) -- + on update cascade -- + on delete set null, + bill_no varchar(255) not null unique, info varchar(255), - type int not null, - status int not null, - created_at timestamp default current_timestamp, - updated_at timestamp default current_timestamp, + type int not null, + status int not null, + amount decimal(12, 2) not null default 0, + created_at timestamp default current_timestamp, + updated_at timestamp default current_timestamp, deleted_at timestamp ); create index bill_user_id_index on bill (user_id); @@ -825,6 +833,7 @@ comment on column bill.bill_no is '易读账单号'; comment on column bill.info is '产品可读信息'; comment on column bill.type is '账单类型:0-充值,1-消费,2-退款'; comment on column bill.status is '账单状态:0-未完成,1-已完成,2-已作废'; +comment on column bill.amount is '账单金额'; comment on column bill.created_at is '创建时间'; comment on column bill.updated_at is '更新时间'; comment on column bill.deleted_at is '删除时间'; diff --git a/web/handlers/bill.go b/web/handlers/bill.go index 5ac8282..1dff142 100644 --- a/web/handlers/bill.go +++ b/web/handlers/bill.go @@ -1 +1,96 @@ package handlers + +import ( + "platform/web/auth" + "platform/web/common" + q "platform/web/queries" + "platform/web/services" + "time" + + "github.com/gofiber/fiber/v2" +) + +// region ListBill + +type ListBillReq struct { + Page int `json:"page" validate:"required"` + Size int `json:"size" validate:"required"` + BillNo *string `json:"bill_no"` + Type *int `json:"type"` + Status *int `json:"status"` + CreateAfter *time.Time `json:"create_after"` + CreateBefore *time.Time `json:"create_before"` +} + +// ListBill 获取账单列表 +func ListBill(c *fiber.Ctx) error { + // 检查权限 + authContext, err := auth.Protect(c, []services.PayloadType{services.PayloadUser}, []string{}) + if err != nil { + return err + } + + // 解析请求参数 + req := new(ListBillReq) + if err := c.BodyParser(req); err != nil { + return err + } + if req.Page < 1 { + req.Page = 1 + } + if req.Size < 1 { + req.Size = 10 + } + var offset = (req.Page - 1) * req.Size + var limit = req.Size + + // 查询账单列表 + do := q.Bill. + Where(q.Bill.UserID.Eq(authContext.Payload.Id)) + + if req.Status != nil { + do = do.Where(q.Bill.Status.Eq(int32(*req.Status))) + } + if req.Type != nil { + do = do.Where(q.Bill.Type.Eq(int32(*req.Type))) + } + if req.CreateAfter != nil { + do = do.Where(q.Bill.CreatedAt.Gte(common.LocalDateTime(*req.CreateAfter))) + } + if req.CreateBefore != nil { + do = do.Where(q.Bill.CreatedAt.Lte(common.LocalDateTime(*req.CreateBefore))) + } + if req.BillNo != nil && *req.BillNo != "" { + do = do.Where(q.Bill.BillNo.Eq(*req.BillNo)) + } + + bills, err := do.Debug(). + Preload(q.Bill.Resource, q.Bill.Trade, q.Bill.Refund). + Preload(q.Bill.Resource.Pss). + Order(q.Bill.CreatedAt.Desc()). + Offset(offset). + Limit(limit). + Find() + if err != nil { + return err + } + + var total int64 + if len(bills) < limit { + total = int64(len(bills) + offset) + } else { + total, err = do.Count() + if err != nil { + return err + } + } + + return c.JSON(common.PageResp{ + Total: int(total), + Page: req.Page, + Size: req.Size, + List: bills, + }) +} + +// endregion diff --git a/web/handlers/resource.go b/web/handlers/resource.go index 01f343b..8d0ab5f 100644 --- a/web/handlers/resource.go +++ b/web/handlers/resource.go @@ -17,6 +17,7 @@ import ( type ListResourcePssReq struct { Page int `json:"page" validate:"required"` Size int `json:"size" validate:"required"` + ResourceNo *string `json:"resource_no"` Active *bool `json:"active"` Type *int `json:"type"` CreateAfter *time.Time `json:"create_after"` @@ -38,16 +39,27 @@ func ListResourcePss(c *fiber.Ctx) error { if err := c.BodyParser(req); err != nil { return err } + if req.Page < 1 { + req.Page = 1 + } + if req.Size < 1 { + req.Size = 10 + } + var offset = (req.Page - 1) * req.Size + var limit = req.Size // 查询资源列表 do := q.Resource. - Join(q.ResourcePss, q.ResourcePss.ResourceID.EqCol(q.Resource.ID)). + Joins(q.Resource.Pss). Where(q.Resource.UserID.Eq(authContext.Payload.Id)) + if req.ResourceNo != nil && *req.ResourceNo != "" { + do = do.Where(q.Resource.ResourceNo.Eq(*req.ResourceNo)) + } if req.Active != nil { do = do.Where(q.Resource.Active.Is(*req.Active)) } if req.Type != nil { - do = do.Where(q.ResourcePss.Type.Eq(int32(*req.Type))) + do = do.Where(q.ResourcePss.As(q.Resource.Pss.Name()).Type.Eq(int32(*req.Type))) } if req.CreateAfter != nil { do = do.Where(q.Resource.CreatedAt.Gte(common.LocalDateTime(*req.CreateAfter))) @@ -56,34 +68,37 @@ func ListResourcePss(c *fiber.Ctx) error { do = do.Where(q.Resource.CreatedAt.Lte(common.LocalDateTime(*req.CreateBefore))) } if req.ExpireAfter != nil { - do = do.Where(q.ResourcePss.Expire.Gte(*req.ExpireAfter)) + do = do.Where(q.ResourcePss.As(q.Resource.Pss.Name()).Expire.Gte(common.LocalDateTime(*req.ExpireAfter))) } if req.ExpireBefore != nil { - do = do.Where(q.ResourcePss.Expire.Lte(*req.ExpireBefore)) + do = do.Where(q.ResourcePss.As(q.Resource.Pss.Name()).Expire.Lte(common.LocalDateTime(*req.ExpireBefore))) } - total, err := do.Debug(). - Count() - if err != nil { - return err - } - - var resourcePss []*m.ResourcePss + var resource []*m.Resource err = do.Debug(). - Select(q.ResourcePss.ALL). - Order(q.ResourcePss.CreatedAt.Desc()). - Offset((req.Page - 1) * req.Size). - Limit(req.Size). - Scan(&resourcePss) + Order(q.ResourcePss.As(q.Resource.Pss.Name()).CreatedAt.Desc()). + Offset(offset). + Limit(limit). + Scan(&resource) if err != nil { return err } + var total int64 + if len(resource) < limit { + total = int64(len(resource) + offset) + } else { + total, err = do.Count() + if err != nil { + return err + } + } + return c.JSON(common.PageResp{ Total: int(total), Page: req.Page, Size: req.Size, - List: resourcePss, + List: resource, }) } @@ -141,9 +156,10 @@ func CreateResourceByBalance(c *fiber.Ctx) error { // 创建资源 resource := m.Resource{ - UserID: authContext.Payload.Id, + UserID: authContext.Payload.Id, + ResourceNo: services.ID.GenReadable("res"), } - err = q.Resource.Save(&resource) + err = q.Resource.Create(&resource) if err != nil { return err } @@ -152,10 +168,10 @@ func CreateResourceByBalance(c *fiber.Ctx) error { Type: req.Type, Live: req.Live, Quota: req.Quota, - Expire: time.Now().Add(time.Duration(req.Expire) * time.Second), + Expire: common.LocalDateTime(time.Now().Add(time.Duration(req.Expire) * time.Second)), DailyLimit: req.DailyLimit, } - err = q.ResourcePss.Save(&resourcePss) + err = q.ResourcePss.Create(&resourcePss) if err != nil { return err } diff --git a/web/handlers/whitelist.go b/web/handlers/whitelist.go index c1967be..53c10ec 100644 --- a/web/handlers/whitelist.go +++ b/web/handlers/whitelist.go @@ -2,6 +2,7 @@ package handlers import ( "platform/web/auth" + "platform/web/common" m "platform/web/models" q "platform/web/queries" "platform/web/services" @@ -35,38 +36,44 @@ func ListWhitelist(c *fiber.Ctx) error { if err := c.BodyParser(req); err != nil { return err } - var page = req.Page - if page < 1 { - page = 1 + if req.Page < 1 { + req.Page = 1 } - var size = req.Size - if size < 1 { - size = 10 + if req.Size < 1 { + req.Size = 10 } + var offset = (req.Page - 1) * req.Size + var limit = req.Size // 获取用户信息 - list, err := q.Whitelist. - Where(q.Whitelist.UserID.Eq(authContext.Payload.Id)). - Offset((page - 1) * size). - Limit(size). + do := q.Whitelist. + Where(q.Whitelist.UserID.Eq(authContext.Payload.Id)) + + list, err := do. + Offset(offset). + Limit(limit). Order(q.Whitelist.CreatedAt.Desc()). Find() if err != nil { return err } - count, err := q.Whitelist. - Where(q.Whitelist.UserID.Eq(authContext.Payload.Id)). - Count() - if err != nil { - return err + + var total int64 + if len(list) < limit { + total = int64(len(list) + offset) + } else { + total, err = do.Count() + if err != nil { + return err + } } // 返回结果 - return c.Status(fiber.StatusOK).JSON(ListWhitelistResp{ - Total: count, + return c.JSON(common.PageResp{ + Total: int(total), List: list, - Page: page, - Size: size, + Page: req.Page, + Size: req.Size, }) } diff --git a/web/models/admin.gen.go b/web/models/admin.gen.go index 7f48ec0..d1ff68e 100644 --- a/web/models/admin.gen.go +++ b/web/models/admin.gen.go @@ -7,6 +7,8 @@ package models import ( "platform/web/common" "time" + + "gorm.io/gorm" ) const TableNameAdmin = "admin" @@ -26,7 +28,7 @@ type Admin struct { LastLoginAgent string `gorm:"column:last_login_agent;comment:最后登录代理" json:"last_login_agent"` // 最后登录代理 CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Admin's table name diff --git a/web/models/admin_role.gen.go b/web/models/admin_role.gen.go index 3b8a4e4..f036c92 100644 --- a/web/models/admin_role.gen.go +++ b/web/models/admin_role.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameAdminRole = "admin_role" @@ -17,7 +21,7 @@ type AdminRole struct { Sort int32 `gorm:"column:sort;comment:排序" json:"sort"` // 排序 CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName AdminRole's table name diff --git a/web/models/admin_role_link.gen.go b/web/models/admin_role_link.gen.go index feed505..09186ce 100644 --- a/web/models/admin_role_link.gen.go +++ b/web/models/admin_role_link.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameAdminRoleLink = "admin_role_link" @@ -15,7 +19,7 @@ type AdminRoleLink struct { RoleID int32 `gorm:"column:role_id;not null;comment:角色ID" json:"role_id"` // 角色ID CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName AdminRoleLink's table name diff --git a/web/models/admin_role_permission_link.gen.go b/web/models/admin_role_permission_link.gen.go index 6f43eb9..a12467d 100644 --- a/web/models/admin_role_permission_link.gen.go +++ b/web/models/admin_role_permission_link.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameAdminRolePermissionLink = "admin_role_permission_link" @@ -15,7 +19,7 @@ type AdminRolePermissionLink struct { PermissionID int32 `gorm:"column:permission_id;not null;comment:权限ID" json:"permission_id"` // 权限ID CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName AdminRolePermissionLink's table name diff --git a/web/models/bill.gen.go b/web/models/bill.gen.go index 58a634c..ad18279 100644 --- a/web/models/bill.gen.go +++ b/web/models/bill.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameBill = "bill" @@ -15,13 +19,17 @@ type Bill struct { Info string `gorm:"column:info;comment:产品可读信息" json:"info"` // 产品可读信息 CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 TradeID int32 `gorm:"column:trade_id" json:"trade_id"` ResourceID int32 `gorm:"column:resource_id" json:"resource_id"` Type int32 `gorm:"column:type;not null" json:"type"` BillNo string `gorm:"column:bill_no;not null" json:"bill_no"` RefundID int32 `gorm:"column:refund_id" json:"refund_id"` Status int32 `gorm:"column:status;not null" json:"status"` + Amount float64 `gorm:"column:amount;not null" json:"amount"` + Trade *Trade `gorm:"foreignKey:TradeID" json:"trade"` + Refund *Refund `gorm:"foreignKey:RefundID" json:"refund"` + Resource *Resource `gorm:"foreignKey:ResourceID" json:"resource"` } // TableName Bill's table name diff --git a/web/models/channel.gen.go b/web/models/channel.gen.go index 46528c5..d79382a 100644 --- a/web/models/channel.gen.go +++ b/web/models/channel.gen.go @@ -5,6 +5,7 @@ package models import ( + "platform/web/common" "time" "gorm.io/gorm" @@ -14,26 +15,23 @@ const TableNameChannel = "channel" // Channel mapped from table type Channel struct { - ID int32 `gorm:"column:id;primaryKey;autoIncrement:true;comment:通道ID" json:"id"` // 通道ID - UserID int32 `gorm:"column:user_id;not null;comment:用户ID" json:"user_id"` // 用户ID - ProxyID int32 `gorm:"column:proxy_id;not null;comment:代理ID" json:"proxy_id"` // 代理ID - NodeID int32 `gorm:"column:node_id;comment:节点ID" json:"node_id"` // 节点ID - ProxyPort int32 `gorm:"column:proxy_port;not null;comment:转发端口" json:"proxy_port"` // 转发端口 - Protocol string `gorm:"column:protocol;comment:协议" json:"protocol"` // 协议 - UserHost string `gorm:"column:user_host;comment:用户地址" json:"user_host"` // 用户地址 - NodeHost string `gorm:"column:node_host;comment:节点地址" json:"node_host"` // 节点地址 - AuthIP bool `gorm:"column:auth_ip;not null;comment:IP认证" json:"auth_ip"` // IP认证 - AuthPass bool `gorm:"column:auth_pass;not null;comment:密码认证" json:"auth_pass"` // 密码认证 - Username string `gorm:"column:username;comment:用户名" json:"username"` // 用户名 - Password string `gorm:"column:password;comment:密码" json:"password"` // 密码 - Expiration time.Time `gorm:"column:expiration;not null;comment:过期时间" json:"expiration"` // 过期时间 - CreatedAt time.Time `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt time.Time `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 - ProxyHost string `gorm:"column:proxy_host;not null" json:"proxy_host"` - Node *Node `json:"node"` - User *User `json:"user"` - Proxy *Proxy `json:"proxy"` + ID int32 `gorm:"column:id;primaryKey;autoIncrement:true;comment:通道ID" json:"id"` // 通道ID + UserID int32 `gorm:"column:user_id;not null;comment:用户ID" json:"user_id"` // 用户ID + ProxyID int32 `gorm:"column:proxy_id;not null;comment:代理ID" json:"proxy_id"` // 代理ID + NodeID int32 `gorm:"column:node_id;comment:节点ID" json:"node_id"` // 节点ID + ProxyPort int32 `gorm:"column:proxy_port;not null;comment:转发端口" json:"proxy_port"` // 转发端口 + Protocol string `gorm:"column:protocol;comment:协议" json:"protocol"` // 协议 + UserHost string `gorm:"column:user_host;comment:用户地址" json:"user_host"` // 用户地址 + NodeHost string `gorm:"column:node_host;comment:节点地址" json:"node_host"` // 节点地址 + AuthIP bool `gorm:"column:auth_ip;not null;comment:IP认证" json:"auth_ip"` // IP认证 + AuthPass bool `gorm:"column:auth_pass;not null;comment:密码认证" json:"auth_pass"` // 密码认证 + Username string `gorm:"column:username;comment:用户名" json:"username"` // 用户名 + Password string `gorm:"column:password;comment:密码" json:"password"` // 密码 + Expiration time.Time `gorm:"column:expiration;not null;comment:过期时间" json:"expiration"` // 过期时间 + CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + ProxyHost string `gorm:"column:proxy_host;not null" json:"proxy_host"` } // TableName Channel's table name diff --git a/web/models/client.gen.go b/web/models/client.gen.go index 45be2f2..52c7bb7 100644 --- a/web/models/client.gen.go +++ b/web/models/client.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameClient = "client" @@ -23,7 +27,7 @@ type Client struct { Status int32 `gorm:"column:status;not null;default:1;comment:状态:1-正常,0-禁用" json:"status"` // 状态:1-正常,0-禁用 CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Client's table name diff --git a/web/models/client_permission_link.gen.go b/web/models/client_permission_link.gen.go index 30a7207..fb90003 100644 --- a/web/models/client_permission_link.gen.go +++ b/web/models/client_permission_link.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameClientPermissionLink = "client_permission_link" @@ -15,7 +19,7 @@ type ClientPermissionLink struct { PermissionID int32 `gorm:"column:permission_id;not null;comment:权限ID" json:"permission_id"` // 权限ID CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName ClientPermissionLink's table name diff --git a/web/models/node.gen.go b/web/models/node.gen.go index 68362be..102215c 100644 --- a/web/models/node.gen.go +++ b/web/models/node.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameNode = "node" @@ -24,7 +28,7 @@ type Node struct { Loss int32 `gorm:"column:loss;comment:丢包率" json:"loss"` // 丢包率 CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Node's table name diff --git a/web/models/permission.gen.go b/web/models/permission.gen.go index 50392ea..dbcc606 100644 --- a/web/models/permission.gen.go +++ b/web/models/permission.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNamePermission = "permission" @@ -16,7 +20,7 @@ type Permission struct { Description string `gorm:"column:description;comment:权限描述" json:"description"` // 权限描述 CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Permission's table name diff --git a/web/models/product.gen.go b/web/models/product.gen.go index f4f06ca..3205cc3 100644 --- a/web/models/product.gen.go +++ b/web/models/product.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameProduct = "product" @@ -18,7 +22,7 @@ type Product struct { Status int32 `gorm:"column:status;not null;default:1;comment:产品状态:1-正常,0-禁用" json:"status"` // 产品状态:1-正常,0-禁用 CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Product's table name diff --git a/web/models/proxy.gen.go b/web/models/proxy.gen.go index 8a1be6f..73f2eda 100644 --- a/web/models/proxy.gen.go +++ b/web/models/proxy.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameProxy = "proxy" @@ -18,7 +22,7 @@ type Proxy struct { Secret string `gorm:"column:secret;comment:代理服务密钥" json:"secret"` // 代理服务密钥 CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName Proxy's table name diff --git a/web/models/refund.gen.go b/web/models/refund.gen.go index 7eb30e8..d20e62a 100644 --- a/web/models/refund.gen.go +++ b/web/models/refund.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameRefund = "refund" @@ -15,7 +19,7 @@ type Refund struct { Amount float64 `gorm:"column:amount;not null;comment:退款金额" json:"amount"` // 退款金额 CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 TradeID int32 `gorm:"column:trade_id;not null" json:"trade_id"` } diff --git a/web/models/resource.gen.go b/web/models/resource.gen.go index 6cf97da..c90befd 100644 --- a/web/models/resource.gen.go +++ b/web/models/resource.gen.go @@ -4,18 +4,24 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameResource = "resource" // Resource mapped from table type Resource struct { - ID int32 `gorm:"column:id;primaryKey;autoIncrement:true;comment:套餐ID" json:"id"` // 套餐ID - UserID int32 `gorm:"column:user_id;not null;comment:用户ID" json:"user_id"` // 用户ID - Active bool `gorm:"column:active;not null;default:true;comment:套餐状态" json:"active"` // 套餐状态 - CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 - UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + ID int32 `gorm:"column:id;primaryKey;autoIncrement:true;comment:套餐ID" json:"id"` // 套餐ID + UserID int32 `gorm:"column:user_id;not null;comment:用户ID" json:"user_id"` // 用户ID + Active bool `gorm:"column:active;not null;default:true;comment:套餐状态" json:"active"` // 套餐状态 + CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 + UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + ResourceNo string `gorm:"column:resource_no" json:"resource_no"` + Pss *ResourcePss `gorm:"foreignKey:ResourceID;references:ID" json:"pss"` } // TableName Resource's table name diff --git a/web/models/resource_pps.gen.go b/web/models/resource_pps.gen.go index 0adb32c..1452967 100644 --- a/web/models/resource_pps.gen.go +++ b/web/models/resource_pps.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameResourcePps = "resource_pps" @@ -14,7 +18,7 @@ type ResourcePps struct { ResourceID int32 `gorm:"column:resource_id;not null;comment:套餐ID" json:"resource_id"` // 套餐ID CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName ResourcePps's table name diff --git a/web/models/resource_psr.gen.go b/web/models/resource_psr.gen.go index bd1e28d..43336cf 100644 --- a/web/models/resource_psr.gen.go +++ b/web/models/resource_psr.gen.go @@ -7,6 +7,8 @@ package models import ( "platform/web/common" "time" + + "gorm.io/gorm" ) const TableNameResourcePsr = "resource_psr" @@ -21,7 +23,7 @@ type ResourcePsr struct { Used bool `gorm:"column:used;comment:是否已使用" json:"used"` // 是否已使用 CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName ResourcePsr's table name diff --git a/web/models/resource_pss.gen.go b/web/models/resource_pss.gen.go index a735a3c..f39b11c 100644 --- a/web/models/resource_pss.gen.go +++ b/web/models/resource_pss.gen.go @@ -6,7 +6,8 @@ package models import ( "platform/web/common" - "time" + + "gorm.io/gorm" ) const TableNameResourcePss = "resource_pss" @@ -18,14 +19,14 @@ type ResourcePss struct { Type int32 `gorm:"column:type;comment:套餐类型:1-包时,2-包量" json:"type"` // 套餐类型:1-包时,2-包量 Live int32 `gorm:"column:live;comment:可用时长(秒)" json:"live"` // 可用时长(秒) Quota int32 `gorm:"column:quota;comment:配额数量" json:"quota"` // 配额数量 - Expire time.Time `gorm:"column:expire;comment:过期时间" json:"expire"` // 过期时间 + Expire common.LocalDateTime `gorm:"column:expire;comment:过期时间" json:"expire"` // 过期时间 Used int32 `gorm:"column:used;not null;comment:已用数量" json:"used"` // 已用数量 DailyLimit int32 `gorm:"column:daily_limit;not null;comment:每日限制" json:"daily_limit"` // 每日限制 DailyUsed int32 `gorm:"column:daily_used;not null;comment:今日已用数量" json:"daily_used"` // 今日已用数量 - DailyLast time.Time `gorm:"column:daily_last;comment:今日最后使用时间" json:"daily_last"` // 今日最后使用时间 + DailyLast common.LocalDateTime `gorm:"column:daily_last;comment:今日最后使用时间" json:"daily_last"` // 今日最后使用时间 CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName ResourcePss's table name diff --git a/web/models/trade.gen.go b/web/models/trade.gen.go index 19132e9..3ec8b31 100644 --- a/web/models/trade.gen.go +++ b/web/models/trade.gen.go @@ -6,7 +6,8 @@ package models import ( "platform/web/common" - "time" + + "gorm.io/gorm" ) const TableNameTrade = "trade" @@ -25,10 +26,10 @@ type Trade struct { Status int32 `gorm:"column:status;not null;comment:订单状态:0-待支付,1-已支付,2-已取消,3-已退款" json:"status"` // 订单状态:0-待支付,1-已支付,2-已取消,3-已退款 CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 Type int32 `gorm:"column:type;not null" json:"type"` - CancelAt time.Time `gorm:"column:cancel_at" json:"cancel_at"` - PaidAt time.Time `gorm:"column:paid_at" json:"paid_at"` + CancelAt common.LocalDateTime `gorm:"column:cancel_at" json:"cancel_at"` + PaidAt common.LocalDateTime `gorm:"column:paid_at" json:"paid_at"` } // TableName Trade's table name diff --git a/web/models/user.gen.go b/web/models/user.gen.go index f2afb9b..58d7cb3 100644 --- a/web/models/user.gen.go +++ b/web/models/user.gen.go @@ -7,6 +7,8 @@ package models import ( "platform/web/common" "time" + + "gorm.io/gorm" ) const TableNameUser = "user" @@ -33,7 +35,7 @@ type User struct { LastLoginAgent string `gorm:"column:last_login_agent;comment:最后登录代理" json:"last_login_agent"` // 最后登录代理 CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName User's table name diff --git a/web/models/user_role.gen.go b/web/models/user_role.gen.go index 95be401..7d06dc5 100644 --- a/web/models/user_role.gen.go +++ b/web/models/user_role.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameUserRole = "user_role" @@ -17,7 +21,7 @@ type UserRole struct { Sort int32 `gorm:"column:sort;comment:排序" json:"sort"` // 排序 CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName UserRole's table name diff --git a/web/models/user_role_link.gen.go b/web/models/user_role_link.gen.go index 953cb37..e0f6446 100644 --- a/web/models/user_role_link.gen.go +++ b/web/models/user_role_link.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameUserRoleLink = "user_role_link" @@ -15,7 +19,7 @@ type UserRoleLink struct { RoleID int32 `gorm:"column:role_id;not null;comment:角色ID" json:"role_id"` // 角色ID CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName UserRoleLink's table name diff --git a/web/models/user_role_permission_link.gen.go b/web/models/user_role_permission_link.gen.go index 30a58ef..5b8e25f 100644 --- a/web/models/user_role_permission_link.gen.go +++ b/web/models/user_role_permission_link.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameUserRolePermissionLink = "user_role_permission_link" @@ -15,7 +19,7 @@ type UserRolePermissionLink struct { PermissionID int32 `gorm:"column:permission_id;not null;comment:权限ID" json:"permission_id"` // 权限ID CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 } // TableName UserRolePermissionLink's table name diff --git a/web/models/whitelist.gen.go b/web/models/whitelist.gen.go index f3b2ac8..7840209 100644 --- a/web/models/whitelist.gen.go +++ b/web/models/whitelist.gen.go @@ -4,7 +4,11 @@ package models -import "platform/web/common" +import ( + "platform/web/common" + + "gorm.io/gorm" +) const TableNameWhitelist = "whitelist" @@ -15,7 +19,7 @@ type Whitelist struct { Host string `gorm:"column:host;not null;comment:IP地址" json:"host"` // IP地址 CreatedAt common.LocalDateTime `gorm:"column:created_at;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"` // 创建时间 UpdatedAt common.LocalDateTime `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"` // 更新时间 - DeletedAt common.LocalDateTime `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 + DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;comment:删除时间" json:"deleted_at"` // 删除时间 Remark string `gorm:"column:remark" json:"remark"` } diff --git a/web/queries/bill.gen.go b/web/queries/bill.gen.go index 2c59438..2995857 100644 --- a/web/queries/bill.gen.go +++ b/web/queries/bill.gen.go @@ -39,6 +39,29 @@ func newBill(db *gorm.DB, opts ...gen.DOOption) bill { _bill.BillNo = field.NewString(tableName, "bill_no") _bill.RefundID = field.NewInt32(tableName, "refund_id") _bill.Status = field.NewInt32(tableName, "status") + _bill.Amount = field.NewFloat64(tableName, "amount") + _bill.Trade = billBelongsToTrade{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("Trade", "models.Trade"), + } + + _bill.Refund = billBelongsToRefund{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("Refund", "models.Refund"), + } + + _bill.Resource = billBelongsToResource{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("Resource", "models.Resource"), + Pss: struct { + field.RelationField + }{ + RelationField: field.NewRelation("Resource.Pss", "models.ResourcePss"), + }, + } _bill.fillFieldMap() @@ -61,6 +84,12 @@ type bill struct { BillNo field.String RefundID field.Int32 Status field.Int32 + Amount field.Float64 + Trade billBelongsToTrade + + Refund billBelongsToRefund + + Resource billBelongsToResource fieldMap map[string]field.Expr } @@ -89,6 +118,7 @@ func (b *bill) updateTableName(table string) *bill { b.BillNo = field.NewString(table, "bill_no") b.RefundID = field.NewInt32(table, "refund_id") b.Status = field.NewInt32(table, "status") + b.Amount = field.NewFloat64(table, "amount") b.fillFieldMap() @@ -105,7 +135,7 @@ func (b *bill) GetFieldByName(fieldName string) (field.OrderExpr, bool) { } func (b *bill) fillFieldMap() { - b.fieldMap = make(map[string]field.Expr, 12) + b.fieldMap = make(map[string]field.Expr, 16) b.fieldMap["id"] = b.ID b.fieldMap["user_id"] = b.UserID b.fieldMap["info"] = b.Info @@ -118,6 +148,8 @@ func (b *bill) fillFieldMap() { b.fieldMap["bill_no"] = b.BillNo b.fieldMap["refund_id"] = b.RefundID b.fieldMap["status"] = b.Status + b.fieldMap["amount"] = b.Amount + } func (b bill) clone(db *gorm.DB) bill { @@ -130,6 +162,223 @@ func (b bill) replaceDB(db *gorm.DB) bill { return b } +type billBelongsToTrade struct { + db *gorm.DB + + field.RelationField +} + +func (a billBelongsToTrade) Where(conds ...field.Expr) *billBelongsToTrade { + 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 billBelongsToTrade) WithContext(ctx context.Context) *billBelongsToTrade { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a billBelongsToTrade) Session(session *gorm.Session) *billBelongsToTrade { + a.db = a.db.Session(session) + return &a +} + +func (a billBelongsToTrade) Model(m *models.Bill) *billBelongsToTradeTx { + return &billBelongsToTradeTx{a.db.Model(m).Association(a.Name())} +} + +type billBelongsToTradeTx struct{ tx *gorm.Association } + +func (a billBelongsToTradeTx) Find() (result *models.Trade, err error) { + return result, a.tx.Find(&result) +} + +func (a billBelongsToTradeTx) Append(values ...*models.Trade) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a billBelongsToTradeTx) Replace(values ...*models.Trade) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a billBelongsToTradeTx) Delete(values ...*models.Trade) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a billBelongsToTradeTx) Clear() error { + return a.tx.Clear() +} + +func (a billBelongsToTradeTx) Count() int64 { + return a.tx.Count() +} + +type billBelongsToRefund struct { + db *gorm.DB + + field.RelationField +} + +func (a billBelongsToRefund) Where(conds ...field.Expr) *billBelongsToRefund { + 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 billBelongsToRefund) WithContext(ctx context.Context) *billBelongsToRefund { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a billBelongsToRefund) Session(session *gorm.Session) *billBelongsToRefund { + a.db = a.db.Session(session) + return &a +} + +func (a billBelongsToRefund) Model(m *models.Bill) *billBelongsToRefundTx { + return &billBelongsToRefundTx{a.db.Model(m).Association(a.Name())} +} + +type billBelongsToRefundTx struct{ tx *gorm.Association } + +func (a billBelongsToRefundTx) Find() (result *models.Refund, err error) { + return result, a.tx.Find(&result) +} + +func (a billBelongsToRefundTx) Append(values ...*models.Refund) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a billBelongsToRefundTx) Replace(values ...*models.Refund) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a billBelongsToRefundTx) Delete(values ...*models.Refund) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a billBelongsToRefundTx) Clear() error { + return a.tx.Clear() +} + +func (a billBelongsToRefundTx) Count() int64 { + return a.tx.Count() +} + +type billBelongsToResource struct { + db *gorm.DB + + field.RelationField + + Pss struct { + field.RelationField + } +} + +func (a billBelongsToResource) Where(conds ...field.Expr) *billBelongsToResource { + 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 billBelongsToResource) WithContext(ctx context.Context) *billBelongsToResource { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a billBelongsToResource) Session(session *gorm.Session) *billBelongsToResource { + a.db = a.db.Session(session) + return &a +} + +func (a billBelongsToResource) Model(m *models.Bill) *billBelongsToResourceTx { + return &billBelongsToResourceTx{a.db.Model(m).Association(a.Name())} +} + +type billBelongsToResourceTx struct{ tx *gorm.Association } + +func (a billBelongsToResourceTx) Find() (result *models.Resource, err error) { + return result, a.tx.Find(&result) +} + +func (a billBelongsToResourceTx) Append(values ...*models.Resource) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a billBelongsToResourceTx) Replace(values ...*models.Resource) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a billBelongsToResourceTx) Delete(values ...*models.Resource) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a billBelongsToResourceTx) Clear() error { + return a.tx.Clear() +} + +func (a billBelongsToResourceTx) Count() int64 { + return a.tx.Count() +} + type billDo struct{ gen.DO } func (b billDo) Debug() *billDo { diff --git a/web/queries/resource.gen.go b/web/queries/resource.gen.go index 492e1d5..c2f379e 100644 --- a/web/queries/resource.gen.go +++ b/web/queries/resource.gen.go @@ -33,6 +33,12 @@ func newResource(db *gorm.DB, opts ...gen.DOOption) resource { _resource.CreatedAt = field.NewField(tableName, "created_at") _resource.UpdatedAt = field.NewField(tableName, "updated_at") _resource.DeletedAt = field.NewField(tableName, "deleted_at") + _resource.ResourceNo = field.NewString(tableName, "resource_no") + _resource.Pss = resourceHasOnePss{ + db: db.Session(&gorm.Session{}), + + RelationField: field.NewRelation("Pss", "models.ResourcePss"), + } _resource.fillFieldMap() @@ -42,13 +48,15 @@ func newResource(db *gorm.DB, opts ...gen.DOOption) resource { type resource struct { resourceDo - ALL field.Asterisk - ID field.Int32 // 套餐ID - UserID field.Int32 // 用户ID - Active field.Bool // 套餐状态 - CreatedAt field.Field // 创建时间 - UpdatedAt field.Field // 更新时间 - DeletedAt field.Field // 删除时间 + ALL field.Asterisk + ID field.Int32 // 套餐ID + UserID field.Int32 // 用户ID + Active field.Bool // 套餐状态 + CreatedAt field.Field // 创建时间 + UpdatedAt field.Field // 更新时间 + DeletedAt field.Field // 删除时间 + ResourceNo field.String + Pss resourceHasOnePss fieldMap map[string]field.Expr } @@ -71,6 +79,7 @@ func (r *resource) updateTableName(table string) *resource { r.CreatedAt = field.NewField(table, "created_at") r.UpdatedAt = field.NewField(table, "updated_at") r.DeletedAt = field.NewField(table, "deleted_at") + r.ResourceNo = field.NewString(table, "resource_no") r.fillFieldMap() @@ -87,13 +96,15 @@ func (r *resource) GetFieldByName(fieldName string) (field.OrderExpr, bool) { } func (r *resource) fillFieldMap() { - r.fieldMap = make(map[string]field.Expr, 6) + r.fieldMap = make(map[string]field.Expr, 8) r.fieldMap["id"] = r.ID r.fieldMap["user_id"] = r.UserID r.fieldMap["active"] = r.Active r.fieldMap["created_at"] = r.CreatedAt r.fieldMap["updated_at"] = r.UpdatedAt r.fieldMap["deleted_at"] = r.DeletedAt + r.fieldMap["resource_no"] = r.ResourceNo + } func (r resource) clone(db *gorm.DB) resource { @@ -106,6 +117,77 @@ func (r resource) replaceDB(db *gorm.DB) resource { return r } +type resourceHasOnePss struct { + db *gorm.DB + + field.RelationField +} + +func (a resourceHasOnePss) Where(conds ...field.Expr) *resourceHasOnePss { + 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 resourceHasOnePss) WithContext(ctx context.Context) *resourceHasOnePss { + a.db = a.db.WithContext(ctx) + return &a +} + +func (a resourceHasOnePss) Session(session *gorm.Session) *resourceHasOnePss { + a.db = a.db.Session(session) + return &a +} + +func (a resourceHasOnePss) Model(m *models.Resource) *resourceHasOnePssTx { + return &resourceHasOnePssTx{a.db.Model(m).Association(a.Name())} +} + +type resourceHasOnePssTx struct{ tx *gorm.Association } + +func (a resourceHasOnePssTx) Find() (result *models.ResourcePss, err error) { + return result, a.tx.Find(&result) +} + +func (a resourceHasOnePssTx) Append(values ...*models.ResourcePss) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Append(targetValues...) +} + +func (a resourceHasOnePssTx) Replace(values ...*models.ResourcePss) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Replace(targetValues...) +} + +func (a resourceHasOnePssTx) Delete(values ...*models.ResourcePss) (err error) { + targetValues := make([]interface{}, len(values)) + for i, v := range values { + targetValues[i] = v + } + return a.tx.Delete(targetValues...) +} + +func (a resourceHasOnePssTx) Clear() error { + return a.tx.Clear() +} + +func (a resourceHasOnePssTx) Count() int64 { + return a.tx.Count() +} + type resourceDo struct{ gen.DO } func (r resourceDo) Debug() *resourceDo { diff --git a/web/queries/resource_pss.gen.go b/web/queries/resource_pss.gen.go index 8f0adde..5f52df3 100644 --- a/web/queries/resource_pss.gen.go +++ b/web/queries/resource_pss.gen.go @@ -32,11 +32,11 @@ func newResourcePss(db *gorm.DB, opts ...gen.DOOption) resourcePss { _resourcePss.Type = field.NewInt32(tableName, "type") _resourcePss.Live = field.NewInt32(tableName, "live") _resourcePss.Quota = field.NewInt32(tableName, "quota") - _resourcePss.Expire = field.NewTime(tableName, "expire") + _resourcePss.Expire = field.NewField(tableName, "expire") _resourcePss.Used = field.NewInt32(tableName, "used") _resourcePss.DailyLimit = field.NewInt32(tableName, "daily_limit") _resourcePss.DailyUsed = field.NewInt32(tableName, "daily_used") - _resourcePss.DailyLast = field.NewTime(tableName, "daily_last") + _resourcePss.DailyLast = field.NewField(tableName, "daily_last") _resourcePss.CreatedAt = field.NewField(tableName, "created_at") _resourcePss.UpdatedAt = field.NewField(tableName, "updated_at") _resourcePss.DeletedAt = field.NewField(tableName, "deleted_at") @@ -55,11 +55,11 @@ type resourcePss struct { Type field.Int32 // 套餐类型:1-包时,2-包量 Live field.Int32 // 可用时长(秒) Quota field.Int32 // 配额数量 - Expire field.Time // 过期时间 + Expire field.Field // 过期时间 Used field.Int32 // 已用数量 DailyLimit field.Int32 // 每日限制 DailyUsed field.Int32 // 今日已用数量 - DailyLast field.Time // 今日最后使用时间 + DailyLast field.Field // 今日最后使用时间 CreatedAt field.Field // 创建时间 UpdatedAt field.Field // 更新时间 DeletedAt field.Field // 删除时间 @@ -84,11 +84,11 @@ func (r *resourcePss) updateTableName(table string) *resourcePss { r.Type = field.NewInt32(table, "type") r.Live = field.NewInt32(table, "live") r.Quota = field.NewInt32(table, "quota") - r.Expire = field.NewTime(table, "expire") + r.Expire = field.NewField(table, "expire") r.Used = field.NewInt32(table, "used") r.DailyLimit = field.NewInt32(table, "daily_limit") r.DailyUsed = field.NewInt32(table, "daily_used") - r.DailyLast = field.NewTime(table, "daily_last") + r.DailyLast = field.NewField(table, "daily_last") r.CreatedAt = field.NewField(table, "created_at") r.UpdatedAt = field.NewField(table, "updated_at") r.DeletedAt = field.NewField(table, "deleted_at") diff --git a/web/queries/trade.gen.go b/web/queries/trade.gen.go index 33c736f..76aba67 100644 --- a/web/queries/trade.gen.go +++ b/web/queries/trade.gen.go @@ -41,8 +41,8 @@ func newTrade(db *gorm.DB, opts ...gen.DOOption) trade { _trade.UpdatedAt = field.NewField(tableName, "updated_at") _trade.DeletedAt = field.NewField(tableName, "deleted_at") _trade.Type = field.NewInt32(tableName, "type") - _trade.CancelAt = field.NewTime(tableName, "cancel_at") - _trade.PaidAt = field.NewTime(tableName, "paid_at") + _trade.CancelAt = field.NewField(tableName, "cancel_at") + _trade.PaidAt = field.NewField(tableName, "paid_at") _trade.fillFieldMap() @@ -67,8 +67,8 @@ type trade struct { UpdatedAt field.Field // 更新时间 DeletedAt field.Field // 删除时间 Type field.Int32 - CancelAt field.Time - PaidAt field.Time + CancelAt field.Field + PaidAt field.Field fieldMap map[string]field.Expr } @@ -99,8 +99,8 @@ func (t *trade) updateTableName(table string) *trade { t.UpdatedAt = field.NewField(table, "updated_at") t.DeletedAt = field.NewField(table, "deleted_at") t.Type = field.NewInt32(table, "type") - t.CancelAt = field.NewTime(table, "cancel_at") - t.PaidAt = field.NewTime(table, "paid_at") + t.CancelAt = field.NewField(table, "cancel_at") + t.PaidAt = field.NewField(table, "paid_at") t.fillFieldMap() diff --git a/web/router.go b/web/router.go index f883263..ee3ab7c 100644 --- a/web/router.go +++ b/web/router.go @@ -41,6 +41,10 @@ func ApplyRouters(app *fiber.App) { trade := api.Group("/trade") trade.Post("/create", handlers.CreateTrade) + // 账单 + bill := api.Group("/bill") + bill.Post("/list", handlers.ListBill) + // 临时 app.Get("/collect", handlers.CreateChannelGet) app.Get("/temp", handlers.Temp) diff --git a/web/services/channel.go b/web/services/channel.go index ab0c85a..990ff7b 100644 --- a/web/services/channel.go +++ b/web/services/channel.go @@ -311,7 +311,7 @@ func (s *channelService) CreateChannel( toUpdate := models.ResourcePss{ Used: resource.Used + int32(count), - DailyLast: now, + DailyLast: common.LocalDateTime(now), } last := resource.DailyLast if now.Year() != last.Year() || now.Month() != last.Month() || now.Day() != last.Day() {