package sys import ( "context" "fmt" "strconv" "hotgo/internal/dao" "hotgo/internal/library/contexts" "hotgo/internal/library/imkafka" "hotgo/internal/library/imtenant" "hotgo/internal/model/entity" "hotgo/internal/service" "github.com/gogf/gf/v2/encoding/gjson" "github.com/gogf/gf/v2/errors/gerror" ) func resolveImPolicyTenant(ctx context.Context, selectedTenantID int64) (tenantID int64, tenantCode string, err error) { operatorID := contexts.GetUserId(ctx) if service.AdminMember().VerifySuperId(ctx, operatorID) && selectedTenantID == 0 { return 0, "*", nil } scope, err := resolveImAdminScope(ctx, selectedTenantID) if err != nil { return 0, "", err } var tenant *entity.ImTenant if err = imtenant.RegistryDB().Model(dao.ImTenant.Table()).Safe().Ctx(ctx). Where(dao.ImTenant.Columns().Id, scope.TenantId).Scan(&tenant); err != nil { return 0, "", gerror.Wrap(err, "获取IM租户失败") } if tenant == nil { return 0, "", gerror.New("IM租户不存在") } return tenant.Id, tenant.Code, nil } func policyJSON(value *gjson.Json, fallback string) string { if value == nil || value.String() == "" || value.String() == "null" { return fallback } return value.String() } func publishImPolicyEvent(ctx context.Context, tenantID int64, tenantCode, eventType, group string, version uint) error { return imkafka.PublishConfigEvent(ctx, imkafka.ConfigEventInput{ TenantID: tenantID, TenantCode: tenantCode, EventType: eventType, Group: group, Keys: []string{"version", "payload"}, BizID: fmt.Sprintf("%s:%d:%d", group, tenantID, version), Actor: &imkafka.Actor{ Type: "admin", ID: strconv.FormatInt(contexts.GetUserId(ctx), 10), }, CreatedBy: contexts.GetUserId(ctx), }) }