package siterpc import ( "encoding/json" "errors" "log" "reflect" "git.tetele.net/tgo/helper" ) /** * 取所有配置 * 2021/09/04 * GZ */ func GetAllConfig(site_id, dbname string, url ...string) (map[string]string, error) { if dbname == "" { return nil, errors.New("参数错误") } conn, err := rpc_server_conn(url...) if err != nil { return nil, err } defer conn.Close() arg := SiteConfigItemReqArg{site_id, dbname, ""} req, err := SetReqData(arg) if err != nil { return nil, err } res := &Response{} err = conn.GetAllConfig(req, res) if err != nil { return nil, err } res_data_de, err := GetResData(res) if err != nil { return nil, err } if res_data_de == "" { return nil, nil } var res_arr []map[string]string err = json.Unmarshal([]byte(res_data_de), &res_arr) if err != nil { return nil, err } var res_map map[string]string = make(map[string]string) if len(res_arr) > 0 { var value string for _, info := range res_arr { value = "" switch info["Type"] { case "select": var content interface{} err = json.Unmarshal([]byte(info["Content"]), &content) if err != nil { log.Println(err) } content_type := reflect.TypeOf(content).String() //数据字典的类型 switch content_type { case "[]interface {}": //数组形式,value字段对应数组的key list := content.([]interface{}) val_key := helper.ToInt(info["Value"]) value = helper.ToString(list[val_key]) case "map[string]interface {}": //map形式,value字段对应key list := content.(map[string]interface{}) value = helper.ToString(list[info["Value"]]) } default: value = info["Value"] } res_map[info["Name"]] = value } } return res_map, nil } /** * 分组下所有配置 * 2021/09/04 * GZ */ func GetGroupConfig(site_id, dbname string, groupname string, url ...string) (map[string]string, error) { if dbname == "" { return nil, errors.New("参数错误") } conn, err := rpc_server_conn(url...) if err != nil { return nil, err } defer conn.Close() arg := SiteConfigItemReqArg{site_id, dbname, groupname} req, err := SetReqData(arg) if err != nil { return nil, err } res := &Response{} err = conn.GetGroupConfig(req, res) if err != nil { return nil, err } res_data_de, err := GetResData(res) if err != nil { return nil, err } if res_data_de == "" { return nil, nil } var res_arr []map[string]string err = json.Unmarshal([]byte(res_data_de), &res_arr) if err != nil { return nil, err } var res_map map[string]string = make(map[string]string) if len(res_arr) > 0 { var value string for _, info := range res_arr { value = "" switch info["Type"] { case "select": var content interface{} err = json.Unmarshal([]byte(info["Content"]), &content) if err != nil { log.Println(err) } content_type := reflect.TypeOf(content).String() //数据字典的类型 switch content_type { case "[]interface {}": //数组形式,value字段对应数组的key list := content.([]interface{}) val_key := helper.ToInt(info["Value"]) value = helper.ToString(list[val_key]) case "map[string]interface {}": //map形式,value字段对应key list := content.(map[string]interface{}) value = helper.ToString(list[info["Value"]]) } default: value = info["Value"] } res_map[info["Name"]] = value } } return res_map, nil }