From 3d1db276fa7f24b6b3a27769fc2acb21d0d5e9a4 Mon Sep 17 00:00:00 2001 From: zhangjun <53766543@qq.com> Date: Thu, 25 Feb 2021 10:08:02 +0800 Subject: [PATCH] zj --- .../GPSql/GPSqlService/GPSqlService.go | 485 +++++++++++++++++- dsDataexV1.1/Utils/GPUtil/GPUtil.go | 48 +- 2 files changed, 503 insertions(+), 30 deletions(-) diff --git a/dsDataexV1.1/MyReport/GPSql/GPSqlService/GPSqlService.go b/dsDataexV1.1/MyReport/GPSql/GPSqlService/GPSqlService.go index 9e42650b..7dd8a6a7 100644 --- a/dsDataexV1.1/MyReport/GPSql/GPSqlService/GPSqlService.go +++ b/dsDataexV1.1/MyReport/GPSql/GPSqlService/GPSqlService.go @@ -5,8 +5,17 @@ import ( "dsDataex/Utils/ES7SqlUtil" "dsDataex/Utils/GPUtil" "encoding/json" + "reflect" + "strconv" ) +/** + * @Author zhangjun + * @Description + * @Date 2021-02-22 10:02 + * @Param + * @return + **/ func QuerySimple(queryCode string, queryParam []string, queryGroup []string, queryCount []string, queryFormat string) (bool, string, string) { res, msg, data, _ := GPSqlDAO.GetQuerybyCode(queryCode) @@ -15,26 +24,31 @@ func QuerySimple(queryCode string, queryParam []string, queryGroup []string, que var gpSql = data["query_sql"].(string) + var param []interface{} + for no := 0; no < len(queryParam); no++ { + param = append(param, queryParam[no]) + } + switch queryFormat { case "table": - flag, result := GPUtil.SqlQueryXml(gpSql, queryParam) + flag, msg, result := GPUtil.SqlQueryXml(gpSql, param) - return flag, "查询成功", result + return flag, msg , result break case "json": - flag, result := GPUtil.SqlQueryJson(gpSql, queryParam) + flag, msg, result := GPUtil.SqlQueryJson(gpSql, param) - return flag, "查询成功", result + return flag, msg, result break case "echarts": - _, result := GPUtil.SqlQuery(gpSql, queryParam) + _, msg, result := GPUtil.SqlQuery(gpSql, param) + echarts := ConvEcharts(result, queryGroup, queryCount) if len(queryGroup) <= 2 { - - bytes, _ := json.Marshal(result) - return true, "查询成功,格式转换成功", string(bytes) + bytes, _ := json.Marshal(echarts) + return true, msg, string(bytes) } else { return false, "查询成功,格式转换失败,Echarts格式不支持三级GroupBy", "" @@ -42,9 +56,9 @@ func QuerySimple(queryCode string, queryParam []string, queryGroup []string, que break case "antd": - flag, result := GPUtil.SqlQueryJson(gpSql, queryParam) + flag, msg, result := GPUtil.SqlQueryJson(gpSql, param) - return flag, "查询成功", result + return flag, msg, result break default: @@ -57,12 +71,453 @@ func QuerySimple(queryCode string, queryParam []string, queryGroup []string, que } } -func ConvEcharts(result ES7SqlUtil.ESSqlResult, group []string, count []string) interface{} { +/** + * @Author zhangjun + * @Description + * @Date 2021-02-22 10:02 + * @Param + * @return + **/ +func ConvEcharts(result []map[string]interface{}, queryGroup []string, queryCount []string) ES7SqlUtil.EchartsResult { + var echarts ES7SqlUtil.EchartsResult - return nil -} + if len(result) ==0{ + return echarts + } + + if len(queryGroup) == 1 { + + var data []string + var data2 []string + var data3 []string + var data4 []string + var data5 []string + var group []string + var groupName = queryGroup[0] + var groupIndex = -1 + var totalIndex = -1 + var total2Index = -1 + var total3Index = -1 + var total4Index = -1 + var total5Index = -1 + + if len(queryCount) == 0 { + queryCount = append(queryCount, "total") + } + + //确定统计分组、统计数值的列号 + no :=0 + for k,_ := range result[0] { + if k == groupName { + groupIndex = no + } + if k == queryCount[0] { + totalIndex = no + } + if len(queryCount) > 1 && k == queryCount[1] { + total2Index = no + } + if len(queryCount) > 2 && k == queryCount[2] { + total3Index = no + } + if len(queryCount) > 3 && k == queryCount[3] { + total4Index = no + } + if len(queryCount) > 4 && k == queryCount[4] { + total5Index = no + } + no++ + } + + for no := 0; no < len(result); no++ { + + if groupIndex > -1 { + switch result[no][groupName].(type) { + case int, int32, int64: + group = append(group, strconv.Itoa(int(result[no][groupName].(int64)))) + case float64: + group = append(group, strconv.FormatFloat(result[no][groupName].(float64), 'f', -1, 64)) + default: + group = append(group, result[no][groupName].(string)) + } + } + + if totalIndex > -1 { + switch result[no][queryCount[0]].(type) { + case int, int32, int64: + data = append(data, strconv.Itoa(int(result[no][queryCount[0]].(int64)))) + case float64: + data = append(data, strconv.FormatFloat(result[no][queryCount[0]].(float64), 'f', -1, 64)) + case []uint8: + data = append(data, B2S(result[no][queryCount[0]].([]uint8))) + default: + data = append(data, result[no][queryCount[0]].(string)) + } + } + + if total2Index > -1 { + switch result[no][queryCount[1]].(type) { + case int, int32, int64: + data2 = append(data2, strconv.Itoa(int(result[no][queryCount[1]].(int64)))) + case float64: + data2 = append(data2, strconv.FormatFloat(result[no][queryCount[1]].(float64), 'f', -1, 64)) + case []uint8: + data2 = append(data2, B2S(result[no][queryCount[1]].([]uint8))) + default: + data2 = append(data2, result[no][queryCount[1]].(string)) + } + } + + if total3Index > -1 { + switch result[no][queryCount[2]].(type) { + case int, int32, int64: + data3 = append(data3, strconv.Itoa(int(result[no][queryCount[2]].(int64)))) + case float64: + data3 = append(data3, strconv.FormatFloat(result[no][queryCount[2]].(float64), 'f', -1, 64)) + case []uint8: + data3 = append(data3, B2S(result[no][queryCount[2]].([]uint8))) + default: + data3 = append(data3, result[no][queryCount[2]].(string)) + } + } + + if total4Index > -1 { + switch result[no][queryCount[3]].(type) { + case int, int32, int64: + data4 = append(data4, strconv.Itoa(int(result[no][queryCount[3]].(int64)))) + case float64: + data4 = append(data4, strconv.FormatFloat(result[no][queryCount[3]].(float64), 'f', -1, 64)) + case []uint8: + data4 = append(data4, B2S(result[no][queryCount[3]].([]uint8))) + default: + data4 = append(data4, result[no][queryCount[3]].(string)) + } + } + + if total5Index > -1 { + switch result[no][queryCount[4]].(type) { + case int, int32, int64: + data5 = append(data5, strconv.Itoa(int(result[no][queryCount[4]].(int64)))) + case float64: + data5 = append(data5, strconv.FormatFloat(result[no][queryCount[4]].(float64), 'f', -1, 64)) + case []uint8: + data5 = append(data5, B2S(result[no][queryCount[4]].([]uint8))) + default: + data5 = append(data5, result[no][queryCount[4]].(string)) + } + } + } + + echarts.Groups = append(echarts.Groups, group) + echarts.Datas = append(echarts.Datas, data) + echarts.Datas2 = append(echarts.Datas2, data2) + echarts.Datas3 = append(echarts.Datas3, data3) + echarts.Datas4 = append(echarts.Datas4, data4) + echarts.Datas5 = append(echarts.Datas5, data5) + } + + if len(queryGroup) == 2 { + + var groupName1 = queryGroup[0] + var groupName2 = queryGroup[1] + var groupIndex1 = -1 + var groupIndex2 = -1 + var totalIndex = -1 + var total2Index = -1 + var total3Index = -1 + var total4Index = -1 + var total5Index = -1 + + if len(queryCount) == 0 { + queryCount = append(queryCount, "total") + } + + no :=0 + for k,_ := range result[0] { + if k == groupName1 { + groupIndex1 = no + } + if k == groupName2 { + groupIndex2 = no + } + if k == queryCount[0] { + totalIndex = no + } + if len(queryCount) > 1 && k == queryCount[1] { + total2Index = no + } + if len(queryCount) > 2 && k == queryCount[2] { + total3Index = no + } + if len(queryCount) > 3 && k == queryCount[3] { + total4Index = no + } + if len(queryCount) > 4 && k == queryCount[4] { + total5Index = no + } + + no++ + } + + var group1 []string + var group2 []string + + //初始化分组1、2 + for no := 0; no < len(result); no++ { + if groupIndex1 > -1 { + if Contains(group1, result[no][groupName1]) == -1 { + switch result[no][groupName1].(type) { + case int, int32, int64: + group1 = append(group1, strconv.Itoa(int(result[no][groupName1].(int64)))) + case float64: + group1 = append(group1, strconv.FormatFloat(result[no][groupName1].(float64), 'f', -1, 64)) + default: + group1 = append(group1, result[no][groupName1].(string)) + } + } + } + + if groupIndex2 > -1 { + if Contains(group2, result[no][groupName2]) == -1 { + switch result[no][groupName2].(type) { + case int, int32, int64: + group2 = append(group2, strconv.Itoa(int(result[no][groupName2].(int64)))) + case float64: + group2 = append(group2, strconv.FormatFloat(result[no][groupName2].(float64), 'f', -1, 64)) + default: + group2 = append(group2, result[no][groupName2].(string)) + } + } + } + } + + echarts.Groups = append(echarts.Groups, group1) + echarts.Groups = append(echarts.Groups, group2) + + //分组统计数据 + var datas [][]string = make([][]string, len(group2)) + var datas2 [][]string = make([][]string, len(group2)) + var datas3 [][]string = make([][]string, len(group2)) + var datas4 [][]string = make([][]string, len(group2)) + var datas5 [][]string = make([][]string, len(group2)) + + for no := 0; no < len(group2); no++ { + datas[no] = make([]string, len(group1)) + if total2Index > -1 { + datas2[no] = make([]string, len(group1)) + } + if total3Index > -1 { + datas3[no] = make([]string, len(group1)) + } + if total4Index > -1 { + datas4[no] = make([]string, len(group1)) + } + if total5Index > -1 { + datas5[no] = make([]string, len(group1)) + } + } -func ConvAntd(result ES7SqlUtil.ESSqlResult) interface{} { - return nil + //重组数据 + for no := 0; no < len(result); no++ { + if totalIndex > -1 { + switch result[no][queryCount[0]].(type) { + case int, int32, int64: + if result[no][queryCount[0]] == nil { + datas[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = strconv.Itoa(int(result[no][queryCount[0]].(int64))) + } + case float64: + if result[no][queryCount[0]] == nil { + datas[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = strconv.FormatFloat(result[no][queryCount[0]].(float64), 'f', -1, 64) + } + case []uint8: + if result[no][queryCount[0]] == nil { + datas[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = B2S(result[no][queryCount[0]].([]uint8)) + } + default: + if result[no][queryCount[0]] == nil { + datas[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = result[no][queryCount[0]].(string) + } + } + } + if total2Index > -1 { + switch result[no][queryCount[1]].(type) { + case int, int32, int64: + if result[no][queryCount[1]] == nil { + datas2[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas2[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = strconv.Itoa(int(result[no][queryCount[1]].(int64))) + } + case float64: + if result[no][queryCount[1]] == nil { + datas2[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas2[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = strconv.FormatFloat(result[no][queryCount[1]].(float64), 'f', -1, 64) + } + case []uint8: + if result[no][queryCount[0]] == nil { + datas2[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas2[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = B2S(result[no][queryCount[1]].([]uint8)) + } + default: + if result[no][queryCount[1]] == nil { + datas2[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas2[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = result[no][queryCount[1]].(string) + } + } + } + + if total3Index > -1 { + switch result[no][queryCount[2]].(type) { + case int, int32, int64: + if result[no][queryCount[2]] == nil { + datas3[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas3[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = strconv.Itoa(int(result[no][queryCount[2]].(int64))) + } + case float64: + if result[no][queryCount[2]] == nil { + datas3[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas3[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = strconv.FormatFloat(result[no][queryCount[2]].(float64), 'f', -1, 64) + } + case []uint8: + if result[no][queryCount[0]] == nil { + datas3[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas3[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = B2S(result[no][queryCount[2]].([]uint8)) + } + default: + if result[no][queryCount[2]] == nil { + datas3[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas3[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = result[no][queryCount[2]].(string) + } + } + } + + if total4Index > -1 { + switch result[no][queryCount[3]].(type) { + case int, int32, int64: + if result[no][queryCount[3]] == nil { + datas4[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas4[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = strconv.Itoa(int(result[no][queryCount[3]].(int64))) + } + case float64: + if result[no][queryCount[3]] == nil { + datas4[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas4[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = strconv.FormatFloat(result[no][queryCount[3]].(float64), 'f', -1, 64) + } + case []uint8: + if result[no][queryCount[0]] == nil { + datas4[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas4[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = B2S(result[no][queryCount[3]].([]uint8)) + } + default: + if result[no][queryCount[3]] == nil { + datas4[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas4[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = result[no][queryCount[3]].(string) + } + } + } + + if total5Index > -1 { + switch result[no][queryCount[4]].(type) { + case int, int32, int64: + if result[no][queryCount[4]] == nil { + datas5[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas5[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = strconv.Itoa(int(result[no][queryCount[4]].(int64))) + } + case float64: + if result[no][queryCount[4]] == nil { + datas5[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas5[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = strconv.FormatFloat(result[no][queryCount[4]].(float64), 'f', -1, 64) + } + case []uint8: + if result[no][queryCount[0]] == nil { + datas5[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas5[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = B2S(result[no][queryCount[4]].([]uint8)) + } + default: + if result[no][queryCount[4]] == nil { + datas5[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = "0" + } else { + datas5[Contains(group2, result[no][groupName2])][Contains(group1, result[no][groupName1])] = result[no][queryCount[4]].(string) + } + } + } + } + + echarts.Datas = datas + if total2Index > -1 { + echarts.Datas2 = datas2 + } + if total3Index > -1 { + echarts.Datas3 = datas3 + } + if total4Index > -1 { + echarts.Datas4 = datas4 + } + if total5Index > -1 { + echarts.Datas5 = datas5 + } + } + + return echarts +} + +/** + * @Author zhangjun + * @Description + * @Date 2021-02-22 10:02 + * @Param + * @return + **/ +func Contains(array interface{}, val interface{}) (index int) { + index = -1 + switch reflect.TypeOf(array).Kind() { + case reflect.Slice: + { + s := reflect.ValueOf(array) + for i := 0; i < s.Len(); i++ { + if reflect.DeepEqual(val, s.Index(i).Interface()) { + index = i + return index + } + } + } + } + return index } + +/** + * @Author zhangjun + * @Description + * @Date 2021-02-24 02:21 + * @Param + * @return + **/ +func B2S(bs []uint8) string { + ba := []byte{} + for _, b := range bs { + ba = append(ba, byte(b)) + } + return string(ba) +} \ No newline at end of file diff --git a/dsDataexV1.1/Utils/GPUtil/GPUtil.go b/dsDataexV1.1/Utils/GPUtil/GPUtil.go index 02679ca9..05e78c88 100644 --- a/dsDataexV1.1/Utils/GPUtil/GPUtil.go +++ b/dsDataexV1.1/Utils/GPUtil/GPUtil.go @@ -59,16 +59,22 @@ func init() { * @Param * @return **/ -func SqlQuery(sql string, param []string) (bool, []map[string]interface{}) { +func SqlQuery(sql string, param []interface{}) (bool, string, []map[string]interface{}) { if len(param) > 0 { - result, _ := Engine.SQL(sql, param).QueryInterface() + result, err := Engine.SQL(sql, param...).QueryInterface() - return true, result + if err!=nil{ + return false,err.Error(),result + } + return true,"数据查询成功", result } else { - result, _ := Engine.SQL(sql).QueryInterface() + result, err := Engine.SQL(sql).QueryInterface() - return true, result + if err!=nil{ + return false,err.Error(),result + } + return true,"数据查询成功", result } } @@ -79,16 +85,22 @@ func SqlQuery(sql string, param []string) (bool, []map[string]interface{}) { * @Param * @return **/ -func SqlQueryJson(sql string, param []string) (bool, string) { +func SqlQueryJson(sql string, param []interface{}) (bool,string, string) { if len(param) > 0 { - result, _ := Engine.SQL(sql, param).Query().Json() + result, err := Engine.SQL(sql, param...).Query().Json() - return true, result + if err!=nil{ + return false,err.Error(),result + } + return true,"数据查询成功", result } else { - result, _ := Engine.SQL(sql).Query().Json() + result, err := Engine.SQL(sql).Query().Json() - return true, result + if err!=nil{ + return false,err.Error(),result + } + return true,"数据查询成功", result } } @@ -99,15 +111,21 @@ func SqlQueryJson(sql string, param []string) (bool, string) { * @Param * @return **/ -func SqlQueryXml(sql string, param []string) (bool, string) { +func SqlQueryXml(sql string, param []interface{}) (bool,string, string) { if len(param) > 0 { - result, _ := Engine.SQL(sql, param).Query().Xml() + result, err := Engine.SQL(sql, param...).Query().Xml() - return true, result + if err!=nil{ + return false,err.Error(),result + } + return true,"数据查询成功", result } else { - result, _ := Engine.SQL(sql).Query().Xml() + result, err := Engine.SQL(sql).Query().Xml() - return true, result + if err!=nil{ + return false,err.Error(),result + } + return true,"数据查询成功", result } }