refactor: 重构SQL基础实体并集成雪花ID生成器

将主键ID类型从uint64改为int64,移除Bid和Deleter字段;在insertHook中集成Snowflake算法自动生成ID;更新ModuleAssetId为int64类型。
This commit is contained in:
2026-03-19 17:07:01 +08:00
parent 7714326db7
commit d1f80c3109
5 changed files with 22 additions and 23 deletions

View File

@@ -40,37 +40,31 @@ type MongoBaseDO struct {
// SQLBaseDO SQL数据库基础实体 // SQLBaseDO SQL数据库基础实体
type SQLBaseDO struct { type SQLBaseDO struct {
Id *uint64 `orm:"id" json:"id"` // 主键ID Id int64 `orm:"id" json:"id"` // 主键ID
Bid string `orm:"bid" json:"bid"` // 业务ID
Creator string `orm:"creator" json:"creator"` // 创建人 Creator string `orm:"creator" json:"creator"` // 创建人
CreatedAt *gtime.Time `orm:"created_at" json:"createdAt"` // 创建时间 CreatedAt *gtime.Time `orm:"created_at" json:"createdAt"` // 创建时间
Updater string `orm:"updater" json:"updater"` // 更新人 Updater string `orm:"updater" json:"updater"` // 更新人
UpdatedAt *gtime.Time `orm:"updated_at" json:"updatedAt"` // 更新时间 UpdatedAt *gtime.Time `orm:"updated_at" json:"updatedAt"` // 更新时间
Deleter string `orm:"deleter" json:"deleter"` // 软删除人
DeletedAt *gtime.Time `orm:"deleted_at" json:"deletedAt"` // 软删除时间 DeletedAt *gtime.Time `orm:"deleted_at" json:"deletedAt"` // 软删除时间
IsDeleted bool `orm:"is_deleted" json:"isDeleted"` // 是否删除 IsDeleted bool `orm:"is_deleted" json:"isDeleted"` // 是否删除
} }
type SQLBaseCol struct { type SQLBaseCol struct {
Id string Id string
Bid string
Creator string Creator string
CreatedAt string CreatedAt string
Updater string Updater string
UpdatedAt string UpdatedAt string
Deleter string
DeletedAt string DeletedAt string
IsDeleted string IsDeleted string
} }
var DefSQLBaseCol = SQLBaseCol{ var DefSQLBaseCol = SQLBaseCol{
Id: "id", Id: "id",
Bid: "bid",
Creator: "creator", Creator: "creator",
CreatedAt: "created_at", CreatedAt: "created_at",
Updater: "updater", Updater: "updater",
UpdatedAt: "updated_at", UpdatedAt: "updated_at",
Deleter: "deleter",
DeletedAt: "deleted_at", DeletedAt: "deleted_at",
IsDeleted: "is_deleted", IsDeleted: "is_deleted",
} }

View File

@@ -6,10 +6,10 @@ import (
// ModuleAssetId 模块资产ID映射key-value结构 // ModuleAssetId 模块资产ID映射key-value结构
// Key: 服务名Value: 资产ID // Key: 服务名Value: 资产ID
var ModuleAssetId = map[string]string{ var ModuleAssetId = map[string]int64{
"assets": "696b4acd1be1c8b76c4b4c15", // 资产模块 "assets": 1, // 资产模块
"cid": "696f423705e496ba4ccbe665", // 广告模块 "cid": 2, // 广告模块
"customerService": "696f421205e496ba4ccbe662", // AI客服模块 "customerService": 3, // AI客服模块
} }
// 模块类型值从ModuleAssetId map获取 // 模块类型值从ModuleAssetId map获取
@@ -48,7 +48,7 @@ var TenantModuleTypesAd []TenantModuleTypeKV
var TenantModuleTypesAICs []TenantModuleTypeKV var TenantModuleTypesAICs []TenantModuleTypeKV
// GetTenantModuleTypes 获取模块的租户类型列表 // GetTenantModuleTypes 获取模块的租户类型列表
func GetTenantModuleTypes(module string) []TenantModuleTypeKV { func GetTenantModuleTypes(module int64) []TenantModuleTypeKV {
switch module { switch module {
case TenantModuleAssets: case TenantModuleAssets:
return TenantModuleTypesAssets return TenantModuleTypesAssets

View File

@@ -10,6 +10,7 @@ import (
"time" "time"
"gitea.com/red-future/common/utils" "gitea.com/red-future/common/utils"
"github.com/bwmarrin/snowflake"
"github.com/gogf/gf/v2/crypto/gmd5" "github.com/gogf/gf/v2/crypto/gmd5"
"github.com/gogf/gf/v2/database/gdb" "github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/database/gredis" "github.com/gogf/gf/v2/database/gredis"
@@ -158,14 +159,20 @@ func catchSQLHook() gdb.HookHandler {
// ==================== Insert钩子 ==================== // ==================== Insert钩子 ====================
func insertHook(ctx context.Context, in *gdb.HookInsertInput) (result sql.Result, err error) { func insertHook(ctx context.Context, in *gdb.HookInsertInput) (result sql.Result, err error) {
// 1. 自动赋值租户字段
userInfo, _ := utils.GetUserInfo(ctx)
//if !g.IsEmpty(userInfo.UserName) { userInfo, err := utils.GetUserInfo(ctx)
// in.Model.Data("creator", userInfo.UserName) if err != nil {
// in.Model.Data("updater", userInfo.UserName) return nil, err
//} }
node, err := snowflake.NewNode(g.Cfg().MustGet(ctx, "server.workerId").Int64())
if err != nil {
return nil, err
}
for i := range in.Data { for i := range in.Data {
if _, ok := in.Data[i]["id"]; ok {
in.Data[i]["id"] = node.Generate().Int64()
}
if !g.IsEmpty(userInfo.UserName) { if !g.IsEmpty(userInfo.UserName) {
if _, ok := in.Data[i]["creator"]; ok { if _, ok := in.Data[i]["creator"]; ok {
in.Data[i]["creator"] = userInfo.UserName in.Data[i]["creator"] = userInfo.UserName
@@ -198,11 +205,6 @@ func updateHook(ctx context.Context, in *gdb.HookUpdateInput) (result sql.Result
// 1. 自动赋值修改人 // 1. 自动赋值修改人
userInfo, _ := utils.GetUserInfo(ctx) userInfo, _ := utils.GetUserInfo(ctx)
//if !g.IsEmpty(userInfo.UserName) {
// in.Model.Data("creator", userInfo.UserName)
// in.Model.Data("updater", userInfo.UserName)
//}
switch data := in.Data.(type) { switch data := in.Data.(type) {
case gdb.Map: case gdb.Map:
if !g.IsEmpty(userInfo.UserName) { if !g.IsEmpty(userInfo.UserName) {

1
go.mod
View File

@@ -4,6 +4,7 @@ go 1.25.5
require ( require (
github.com/alibaba/sentinel-golang v1.0.4 github.com/alibaba/sentinel-golang v1.0.4
github.com/bwmarrin/snowflake v0.3.0
github.com/cloudwego/eino v0.7.26 github.com/cloudwego/eino v0.7.26
github.com/gogf/gf/contrib/registry/consul/v2 v2.9.5 github.com/gogf/gf/contrib/registry/consul/v2 v2.9.5
github.com/gogf/gf/contrib/trace/otlphttp/v2 v2.9.5 github.com/gogf/gf/contrib/trace/otlphttp/v2 v2.9.5

2
go.sum
View File

@@ -56,6 +56,8 @@ github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMU
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
github.com/bugsnag/bugsnag-go v1.4.0/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= github.com/bugsnag/bugsnag-go v1.4.0/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
github.com/bugsnag/panicwrap v1.2.0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/bugsnag/panicwrap v1.2.0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M= github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M=
github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM= github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM=
github.com/bytedance/sonic v1.14.1 h1:FBMC0zVz5XUmE4z9wF4Jey0An5FueFvOsTKKKtwIl7w= github.com/bytedance/sonic v1.14.1 h1:FBMC0zVz5XUmE4z9wF4Jey0An5FueFvOsTKKKtwIl7w=