|
|
package DatahyperService
|
|
|
|
|
|
import (
|
|
|
"dsDataex/MyHyper/DataHyper/DatahyperDAO"
|
|
|
"dsDataex/MyHyper/MySwagger"
|
|
|
"dsDataex/Utils/CommonUtil"
|
|
|
//"strconv"
|
|
|
"strings"
|
|
|
)
|
|
|
|
|
|
func GetResults(platform string, raw MySwagger.DatahyperQuery) (bool, string, int, []map[string]interface{}, error) {
|
|
|
queryID := raw.QueryID
|
|
|
var params []interface{}
|
|
|
|
|
|
res, msg, sql, _ := DatahyperDAO.GetQuerySQL(platform, queryID)
|
|
|
if res {
|
|
|
//reg := regexp.MustCompile(`(WHERE|where)`)
|
|
|
//if !reg.MatchString(sql) {
|
|
|
// sql += " WHERE "
|
|
|
//}
|
|
|
|
|
|
for no := 0; no < len(raw.QueryCondition); no++ {
|
|
|
params = append(params, raw.QueryCondition[no])
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
if len(raw.QueryCondition) > 0 {
|
|
|
if find := strings.Contains(sql, "?"); find {
|
|
|
for _, v := range raw.QueryCondition {
|
|
|
var new string
|
|
|
switch v.(type) {
|
|
|
case int, int32, int64:
|
|
|
new = strconv.Itoa(int(v.(int64)))
|
|
|
break
|
|
|
case float64:
|
|
|
new = strconv.FormatFloat(v.(float64), 'f', -1, 64)
|
|
|
break
|
|
|
default:
|
|
|
new = v.(string)
|
|
|
}
|
|
|
sql = strings.Replace(sql, `?`, `'` + new + `'`, 1 )
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
*/
|
|
|
//reg1 := regexp.MustCompile(`(AS T|as T)$`)
|
|
|
|
|
|
if raw.QueryCombination != "" {
|
|
|
//if find := strings.Contains(strings.ToUpper(sql), "WHERE"); find {
|
|
|
// sql += " AND " + raw.QueryCombination
|
|
|
//} else {
|
|
|
// sql += " WHERE " + raw.QueryCombination
|
|
|
//}
|
|
|
sql += " WHERE " + raw.QueryCombination
|
|
|
}
|
|
|
|
|
|
if len(raw.QueryOrder) > 0 {
|
|
|
orderBy := strings.Join(raw.QueryOrder, ", ")
|
|
|
prefix := ""
|
|
|
//reg2 := regexp.MustCompile(`(ORDER|order)`)
|
|
|
//if ! reg1.MatchString(sql) {
|
|
|
// if reg2.MatchString(sql) {
|
|
|
// prefix = ", "
|
|
|
// } else {
|
|
|
// prefix = " ORDER BY "
|
|
|
// }
|
|
|
//} else {
|
|
|
// prefix = " ORDER BY "
|
|
|
//}
|
|
|
prefix = " ORDER BY "
|
|
|
sql += prefix + orderBy
|
|
|
}
|
|
|
|
|
|
//接收传入参数
|
|
|
var limit = raw.QueryPerPage
|
|
|
var offset = (raw.QueryPage - 1) * limit
|
|
|
|
|
|
switch raw.QueryFormat {
|
|
|
case "json":
|
|
|
res1, msg1, count, data, _ := DatahyperDAO.GetResults(platform, sql, params, limit, offset)
|
|
|
if res1 {
|
|
|
if len(raw.QueryCols) > 0 {
|
|
|
for k, v := range data {
|
|
|
for kk, _ := range v {
|
|
|
if CommonUtil.StringArrayContain((raw.QueryCols), kk) == false {
|
|
|
delete(data[k], kk)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
return res1, msg1, count, data, nil
|
|
|
} else {
|
|
|
return res1, msg1, 0, nil, nil
|
|
|
}
|
|
|
break
|
|
|
default:
|
|
|
break
|
|
|
}
|
|
|
return false, "查询Format参数错误,不支持此类型的数据格式转换", 0, nil, nil
|
|
|
} else {
|
|
|
return res, msg, 0, nil, nil
|
|
|
}
|
|
|
}
|
|
|
|
|
|
func GetRow(platform string, raw MySwagger.DatahyperQueryByID) (bool, string, map[string]interface{}, error) {
|
|
|
queryID := raw.QueryID
|
|
|
res, msg, sql, _ := DatahyperDAO.GetQuerySQL(platform, queryID)
|
|
|
if res {
|
|
|
switch raw.QueryFormat {
|
|
|
case "json":
|
|
|
res1, msg1, data, _ := DatahyperDAO.GetRow(platform, sql, raw.DataID)
|
|
|
if res1 {
|
|
|
if len(raw.QueryCols) > 0 {
|
|
|
for kk, _ := range data {
|
|
|
if CommonUtil.StringArrayContain((raw.QueryCols), kk) == false {
|
|
|
delete(data, kk)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return res1, msg1, data, nil
|
|
|
} else {
|
|
|
return res1, msg1, nil, nil
|
|
|
}
|
|
|
break
|
|
|
default:
|
|
|
break
|
|
|
}
|
|
|
return false, "查询Format参数错误,不支持此类型的数据格式转换", nil, nil
|
|
|
} else {
|
|
|
return res, msg, nil, nil
|
|
|
}
|
|
|
}
|
|
|
|
|
|
func GetResultsFE(platform string, raw MySwagger.DatahyperQueryFE) (bool, string, int, []map[string]interface{}, error) {
|
|
|
queryID := raw.QueryID
|
|
|
var params []interface{}
|
|
|
|
|
|
res, msg, sql, _ := DatahyperDAO.GetQuerySQL(platform, queryID)
|
|
|
if res {
|
|
|
//reg := regexp.MustCompile(`(WHERE|where)`)
|
|
|
//if !reg.MatchString(sql) {
|
|
|
// sql += " WHERE " + sql
|
|
|
//}
|
|
|
|
|
|
for no := 0; no < len(raw.QueryCondition); no++ {
|
|
|
params = append(params, raw.QueryCondition[no])
|
|
|
}
|
|
|
/*
|
|
|
if len(raw.QueryCondition) > 0 {
|
|
|
if find := strings.Contains(sql, "?"); find {
|
|
|
for _, v := range raw.QueryCondition {
|
|
|
var new string
|
|
|
switch v.(type) {
|
|
|
case int, int32, int64:
|
|
|
new = strconv.Itoa(int(v.(int64)))
|
|
|
case float64:
|
|
|
new = strconv.FormatFloat(v.(float64), 'f', -1, 64)
|
|
|
default:
|
|
|
new = v.(string)
|
|
|
}
|
|
|
sql = strings.Replace(sql, `?`, `'` + new + `'`, 1 )
|
|
|
}
|
|
|
}
|
|
|
//condition := strings.Join(raw.QueryCondition, " AND ")
|
|
|
}
|
|
|
|
|
|
*/
|
|
|
|
|
|
if raw.QueryCombination != "" {
|
|
|
//if find := strings.Contains(strings.ToUpper(sql), "WHERE"); find {
|
|
|
// sql += " AND " + raw.QueryCombination
|
|
|
//} else {
|
|
|
// sql += " WHERE " + raw.QueryCombination
|
|
|
//}
|
|
|
sql += " WHERE " + raw.QueryCombination
|
|
|
}
|
|
|
|
|
|
if len(raw.QueryOrder) > 0 {
|
|
|
orderBy := strings.Join(raw.QueryOrder, ", ")
|
|
|
prefix := ""
|
|
|
//reg2 := regexp.MustCompile(`(ORDER|order)`)
|
|
|
//if ! reg1.MatchString(sql) {
|
|
|
// if reg2.MatchString(sql) {
|
|
|
// prefix = ", "
|
|
|
// } else {
|
|
|
// prefix = " ORDER BY "
|
|
|
// }
|
|
|
//} else {
|
|
|
// prefix = " ORDER BY "
|
|
|
//}
|
|
|
prefix = " ORDER BY "
|
|
|
sql += prefix + orderBy
|
|
|
}
|
|
|
|
|
|
//接收传入参数
|
|
|
var limit = raw.QueryPerPage
|
|
|
var offset = (raw.QueryPage - 1) * limit
|
|
|
|
|
|
switch raw.QueryFormat {
|
|
|
case "json":
|
|
|
res1, msg1, count, data, _ := DatahyperDAO.GetResults(platform, sql, params, limit, offset)
|
|
|
if res1 {
|
|
|
if len(raw.QueryCols) > 0 {
|
|
|
for k, v := range data {
|
|
|
for kk, _ := range v {
|
|
|
if CommonUtil.StringArrayContain((raw.QueryCols), kk) == false {
|
|
|
delete(data[k], kk)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return res1, msg1, count, data, nil
|
|
|
} else {
|
|
|
return res1, msg1, 0, nil, nil
|
|
|
}
|
|
|
break
|
|
|
default:
|
|
|
break
|
|
|
}
|
|
|
return false, "查询Format参数错误,不支持此类型的数据格式转换", 0, nil, nil
|
|
|
} else {
|
|
|
return res, msg, 0, nil, nil
|
|
|
}
|
|
|
}
|
|
|
|
|
|
func GetRowFE(platform string, raw MySwagger.DatahyperQueryFEByID) (bool, string, map[string]interface{}, error) {
|
|
|
queryID := raw.QueryID
|
|
|
res, msg, sql, _ := DatahyperDAO.GetQuerySQL(platform, queryID)
|
|
|
if res {
|
|
|
switch raw.QueryFormat {
|
|
|
case "json":
|
|
|
res1, msg1, data, _ := DatahyperDAO.GetRow(platform, sql, raw.DataID)
|
|
|
if res1 {
|
|
|
if len(raw.QueryCols) > 0 {
|
|
|
for kk, _ := range data { //map[string]interface{}
|
|
|
if CommonUtil.StringArrayContain((raw.QueryCols), kk) == false {
|
|
|
delete(data, kk)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return res1, msg1, data, nil
|
|
|
} else {
|
|
|
return res1, msg1, nil, nil
|
|
|
}
|
|
|
break
|
|
|
default:
|
|
|
break
|
|
|
}
|
|
|
return false, "查询Format参数错误,不支持此类型的数据格式转换", nil, nil
|
|
|
} else {
|
|
|
return res, msg, nil, nil
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|