From 7714326db74b32a710f1b84f40094d574f945e91 Mon Sep 17 00:00:00 2001 From: qhd <1766646056@qq.com> Date: Wed, 18 Mar 2026 09:18:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E9=92=A9=E5=AD=90=E5=8F=8A=E5=88=86=E7=89=87=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=80=BB=E8=BE=91=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- beans/beans.go | 2 +- db/gfdb/gfdb.go | 46 +++++++++++++++++++++++++++++----------------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/beans/beans.go b/beans/beans.go index db34063..44a8cd0 100644 --- a/beans/beans.go +++ b/beans/beans.go @@ -40,7 +40,7 @@ type MongoBaseDO struct { // SQLBaseDO SQL数据库基础实体 type SQLBaseDO struct { - Id uint64 `orm:"id" json:"id"` // 主键ID + Id *uint64 `orm:"id" json:"id"` // 主键ID Bid string `orm:"bid" json:"bid"` // 业务ID Creator string `orm:"creator" json:"creator"` // 创建人 CreatedAt *gtime.Time `orm:"created_at" json:"createdAt"` // 创建时间 diff --git a/db/gfdb/gfdb.go b/db/gfdb/gfdb.go index 152d625..cbf23fc 100644 --- a/db/gfdb/gfdb.go +++ b/db/gfdb/gfdb.go @@ -167,10 +167,10 @@ func insertHook(ctx context.Context, in *gdb.HookInsertInput) (result sql.Result //} for i := range in.Data { 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 } - if _, ok := in.Data[i]["updater"]; !ok { + if _, ok := in.Data[i]["updater"]; ok { in.Data[i]["updater"] = userInfo.UserName } } @@ -206,14 +206,14 @@ func updateHook(ctx context.Context, in *gdb.HookUpdateInput) (result sql.Result switch data := in.Data.(type) { case gdb.Map: if !g.IsEmpty(userInfo.UserName) { - if _, ok := data["updater"]; !ok { + if _, ok := data["updater"]; ok { data["updater"] = userInfo.UserName } } case gdb.List: for i := range data { if !g.IsEmpty(userInfo.UserName) { - if _, ok := data[i]["updater"]; !ok { + if _, ok := data[i]["updater"]; ok { data[i]["updater"] = userInfo.UserName } } @@ -260,9 +260,7 @@ func deleteHook(ctx context.Context, in *gdb.HookDeleteInput) (result sql.Result func selectHook(ctx context.Context, in *gdb.HookSelectInput) (result gdb.Result, err error) { traceID := getTraceID(ctx) - if traceID == "" { - return nil, fmt.Errorf("[DB] GetTraceID error: traceID is empty") - } + enabled, err := gcache.Get(ctx, traceID) // 未启用缓存,直接执行查询 if !gconv.Bool(enabled) { @@ -384,7 +382,13 @@ func DB(ctx context.Context) Gfdb { dbName = append(dbName, schema) } else { dbName = append(dbName, "default") - schema = g.Cfg().MustGet(ctx, "database.default.name").String() + // 配置文件中 default 是数组格式,需要通过索引 0 访问 + defaultConfig := g.Cfg().MustGet(ctx, "database.default") + if defaultConfig.IsSlice() { + schema = g.Cfg().MustGet(ctx, "database.default.0.name").String() + } else { + schema = g.Cfg().MustGet(ctx, "database.default.name").String() + } } return &dataBase{ @@ -398,18 +402,26 @@ func (d *dataBase) Model(ctx context.Context, tableNameOrStruct ...any) *model { glog.Errorf(ctx, "[DB] GetUserInfo error: %v", err) return nil } - // 创建按地区分库的配置 - shardingConfig := gdb.ShardingConfig{ - Schema: gdb.ShardingSchemaConfig{ - Enable: true, // 启用分库 - Prefix: schemaPrefix, // 分库前缀 - Rule: &RegionShardingRule{RegionMapping: user.TenantId}, // 自定义分库规则 - }, + + m := d.DB.Model(tableNameOrStruct...).Ctx(ctx) + + var schema = fmt.Sprintf("%s%v", schemaPrefix, user.TenantId) + sprintf := fmt.Sprintf("database.%s", schema) + if !g.Cfg().MustGet(ctx, sprintf).IsEmpty() { + // 创建按地区分库的配置 + shardingConfig := gdb.ShardingConfig{ + Schema: gdb.ShardingSchemaConfig{ + Enable: true, // 启用分库 + Prefix: schemaPrefix, // 分库前缀 + Rule: &RegionShardingRule{RegionMapping: user.TenantId}, // 自定义分库规则 + }, + } + m.Sharding(shardingConfig).ShardingValue(user.TenantId) } - hook := d.DB.Model(tableNameOrStruct...).Ctx(ctx).Sharding(shardingConfig).ShardingValue(user.TenantId).OmitNilWhere().Hook(catchSQLHook()) + m.OmitNilData().OmitNilWhere().Hook(catchSQLHook()) return &model{ - Model: hook, + Model: m, } }