Просмотр исходного кода

fix:python运算,空值处理

Roc 2 лет назад
Родитель
Сommit
d73f573826
2 измененных файлов с 45 добавлено и 13 удалено
  1. 10 10
      controllers/base_from_python.go
  2. 35 3
      services/base_from_python.go

+ 10 - 10
controllers/base_from_python.go

@@ -222,14 +222,14 @@ func (this *PythonController) Add() {
 	//pythonCode
 	err = models.AddPythonEdb(edbInfo.EdbInfoId, edbInfo.EdbCode, edbData)
 	if err != nil {
-		br.Msg = "生成计算指标失败"
-		br.Msg = "生成计算指标失败,AddPythonEdb Err:" + err.Error()
+		br.Msg = "生成python指标失败"
+		br.Msg = "生成python指标失败,AddPythonEdb Err:" + err.Error()
 		return
 	}
 	maxAndMinItem, err := models.GetEdbInfoMaxAndMinInfo(utils.DATA_SOURCE_PYTHON, edbCode)
 	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "生成计算指标失败"
-		br.Msg = "生成计算指标失败,GetEdbInfoMaxAndMinInfo Err:" + err.Error()
+		br.Msg = "生成python指标失败"
+		br.Msg = "生成python指标失败,GetEdbInfoMaxAndMinInfo Err:" + err.Error()
 		return
 	}
 
@@ -326,8 +326,8 @@ func (this *PythonController) Edit() {
 	}
 	edbData, err, errMsg := services.ExecPythonCode(req.EdbName, req.PythonCode)
 	if err != nil {
-		br.Msg = "获取数据失败"
-		br.ErrMsg = "python代码获取数据失败,err:" + err.Error()
+		br.Msg = "执行python代码失败"
+		br.ErrMsg = "执行python代码失败,err:" + err.Error()
 		if errMsg != "" {
 			br.ErrMsg = errMsg
 		}
@@ -381,14 +381,14 @@ func (this *PythonController) Edit() {
 	//刷新数据
 	err = models.RefreshAllPythonEdb(edbInfo, edbData)
 	if err != nil {
-		br.Msg = "生成计算指标失败"
-		br.Msg = "生成计算指标失败,AddPythonEdb Err:" + err.Error()
+		br.Msg = "刷新python指标失败"
+		br.Msg = "刷新python指标失败,EditPythonEdb Err:" + err.Error()
 		return
 	}
 	maxAndMinItem, err := models.GetEdbInfoMaxAndMinInfo(utils.DATA_SOURCE_PYTHON, edbInfo.EdbCode)
 	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "生成计算指标失败"
-		br.Msg = "生成计算指标失败,GetEdbInfoMaxAndMinInfo Err:" + err.Error()
+		br.Msg = "生成python指标失败"
+		br.Msg = "生成python指标失败,GetEdbInfoMaxAndMinInfo Err:" + err.Error()
 		return
 	}
 

+ 35 - 3
services/base_from_python.go

@@ -7,6 +7,7 @@ import (
 	"hongze/hongze_edb_lib/utils"
 	"os"
 	"os/exec"
+	"reflect"
 	"strings"
 )
 
@@ -58,6 +59,12 @@ type EdbDataFromPython struct {
 	Value map[int]float64 `json:"value"`
 }
 
+// EdbDataStrFromPython 通过python代码获取到的指标数据(interface数据)
+type EdbDataStrFromPython struct {
+	Date  map[int]string      `json:"date"`
+	Value map[int]interface{} `json:"value"`
+}
+
 // ExecPythonCode 执行Python代码
 func ExecPythonCode(edbCode, reqCode string) (dataMap EdbDataFromPython, err error, errMsg string) {
 	defer func() {
@@ -112,10 +119,35 @@ func ExecPythonCode(edbCode, reqCode string) (dataMap EdbDataFromPython, err err
 		return
 	}
 	resultStr := arr[arrLen-1]
-	fmt.Println(resultStr)
+	//fmt.Println(resultStr)
+	var dataMapStr EdbDataStrFromPython
 
-	json.Unmarshal([]byte(resultStr), &dataMap)
-	//fmt.Println(dataMap)
+	//先将value转为interface
+	err = json.Unmarshal([]byte(resultStr), &dataMapStr)
+	if err != nil {
+		return
+	}
+
+	dataMap.Date = make(map[int]string)
+	dataMap.Value = make(map[int]float64)
+
+	//将value为nil的给过滤掉
+	i := 0
+	lenData := len(dataMapStr.Date)
+	for k := 1; k < lenData; k++ {
+		date := dataMapStr.Date[k]
+		tmpValue := dataMapStr.Value[k]
+		if reflect.TypeOf(tmpValue) != nil {
+			if reflect.TypeOf(tmpValue).Kind() == reflect.Float64 {
+				dataMap.Date[i] = date
+				dataMap.Value[i] = reflect.ValueOf(tmpValue).Float()
+				i++
+			}
+		}
+	}
+
+	//err = json.Unmarshal([]byte(resultStr), &dataMap)
+	fmt.Println(dataMap)
 	return
 }