package main import ( "encoding/json" "fmt" "log" "os" "strings" "time" "gopkg.in/yaml.v3" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" ) var gdb *gorm.DB // connDB 连接到数据库 func connDB() *gorm.DB { if gdb != nil { return gdb } dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", DbUser, DbPassswd, DbHost, DbPort, DbName) newLogger := logger.New( log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer logger.Config{ SlowThreshold: time.Minute, // Slow SQL threshold LogLevel: logger.Error, // Log level IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger ParameterizedQueries: true, // Don't include params in the SQL log Colorful: false, // Disable color }, ) db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{Logger: newLogger}) if err != nil { log.Fatalln(err) } gdb = db return gdb } // getDirFileNameList 获取文件目录下所有文件名称,不含目录名称 func getDirFileNameList(dirPath string) ([]string, error) { fileNames := []string{} dir, err := os.Open(dirPath) if err != nil { return fileNames, nil } defer dir.Close() fileInfos, err := dir.Readdir(-1) if err != nil { return fileNames, err } for _, fileInfo := range fileInfos { if fileInfo.Mode().IsRegular() { fileNames = append(fileNames, fileInfo.Name()) } } return fileNames, nil } // parseStrToMap 解析内容string到map func parseStrToMap(filePath string) (map[string]any, error) { // 读取文件内容 bytes, err := os.ReadFile(filePath) if err != nil { return nil, err } content := string(bytes) var configMap map[string]any err = yaml.Unmarshal([]byte(content), &configMap) return configMap, err } // parseParamConfig 解析内容文件数据 func parseParamConfig(data map[string]any) ([]map[string]string, error) { paramMapArr := make([]map[string]string, 0) for k, v := range data { for ik, iv := range v.(map[string]any) { itemMap := make(map[string]string) itemMap["neType"] = strings.ToUpper(k) itemMap["paramName"] = ik for iik, iiv := range iv.(map[string]any) { switch iik { case "display": itemMap["paramDisplay"] = iiv.(string) case "sort": itemMap["paramSort"] = fmt.Sprint(iiv) case "perms", "method": itemMap["paramPerms"] = iiv.(string) case "data", "list", "array": itemMap["paramType"] = iik strByte, _ := json.Marshal(iiv) itemMap["paramJson"] = string(strByte) } } paramMapArr = append(paramMapArr, itemMap) } } return paramMapArr, nil }