* 新增 tools 包:统一工具定义、注册表与 Server 接口,对齐 MCP 规范 * 新增 websocket 包:泛化连接管理、心跳、并发写锁与优雅关闭 * 新增参数读取工具函数,避免类型断言静默失败 * 新增 OSS 路径识别与 JSON 扁平映射还原工具 * 修复租户 SQL 条件插入位置,正确处理 GROUP BY 与 ORDER BY 同时出现的场景
44 lines
951 B
Go
44 lines
951 B
Go
package utils
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/tidwall/sjson"
|
|
)
|
|
|
|
// IsFlatMap 递归判断 map 是否扁平化
|
|
func IsFlatMap(m map[string]interface{}) bool {
|
|
for _, v := range m {
|
|
switch val := v.(type) {
|
|
case map[string]interface{}:
|
|
return false
|
|
case []interface{}:
|
|
for _, item := range val {
|
|
if _, ok := item.(map[string]interface{}); ok {
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
// UnFlatBySjson 将扁平路径映射还原为嵌套 JSON
|
|
func UnFlatBySjson(flatMap map[string]interface{}) (map[string]interface{}, error) {
|
|
raw := "{}"
|
|
for path, val := range flatMap {
|
|
var err error
|
|
raw, err = sjson.Set(raw, path, val)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("sjson set path %s failed: %w", path, err)
|
|
}
|
|
}
|
|
|
|
var result map[string]interface{}
|
|
if err := json.Unmarshal([]byte(raw), &result); err != nil {
|
|
return nil, fmt.Errorf("parse final json failed: %w", err)
|
|
}
|
|
return result, nil
|
|
}
|