Эх сурвалжийг харах

Merge remote-tracking branch 'origin/master' into debug

Roc 3 жил өмнө
parent
commit
a3f2ef2c24

+ 7 - 7
controllers/base_from_calculate.go

@@ -579,13 +579,13 @@ func (this *CalculateController) Refresh() {
 
 		switch source {
 		case utils.DATA_SOURCE_CALCULATE:
-			startDate = edbInfo.StartDate
-			sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
-			if err != nil {
-				return
-			}
-			startDate = sTime.Format(utils.FormatDate)
-
+			//startDate = edbInfo.StartDate
+			//sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
+			//if err != nil {
+			//	return
+			//}
+			//startDate = sTime.Format(utils.FormatDate)
+			startDate = ""
 			var edbInfoIdBytes []string
 			calculateMap, err := models.GetEdbInfoCalculateDetailList(edbInfo.EdbInfoId)
 			if err != nil {

+ 5 - 1
controllers/base_from_pb.go

@@ -97,7 +97,11 @@ func (this *PbController) Refresh() {
 	cacheKey = utils.CACHE_EDB_DATA_REFRESH + strconv.Itoa(source) + "_" + req.EdbCode
 	if !utils.Rc.IsExist(cacheKey) {
 		utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
-		dataItem, err := services.GetEdbDataFromPb(req.EdbCode, req.StartDate, utils.BASE_END_DATE_UnSpace)
+
+		//开始日期格式化
+		startDateTime, _ := time.Parse(utils.FormatDate, req.StartDate)
+
+		dataItem, err := services.GetEdbDataFromPb(req.EdbCode, startDateTime.Format(utils.FormatDateUnSpace), utils.BASE_END_DATE_UnSpace)
 		if err != nil {
 			br.Msg = "获取指标信息失败!"
 			br.ErrMsg = "获取指标信息失败 GetEdbDataFromPb,Err:" + err.Error()

+ 17 - 2
controllers/base_from_wind.go

@@ -6,6 +6,7 @@ import (
 	"hongze/hongze_edb_lib/services"
 	"hongze/hongze_edb_lib/utils"
 	"strconv"
+	"strings"
 	"time"
 )
 
@@ -42,7 +43,14 @@ func (this *WindController) Add() {
 	cacheKey = utils.CACHE_EDB_DATA_ADD + strconv.Itoa(source) + "_" + req.EdbCode
 	if !utils.Rc.IsExist(cacheKey) {
 		utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
-		dataItem, err := services.GetEdbDataFromWind(req.EdbCode, utils.BASE_START_DATE, utils.BASE_END_DATE)
+
+		//期货数据,就默认到今天,特殊处理下
+		endDate := utils.BASE_END_DATE
+		if strings.Contains(req.EdbCode, ".") {
+			endDate = time.Now().Format(utils.FormatDate)
+		}
+
+		dataItem, err := services.GetEdbDataFromWind(req.EdbCode, utils.BASE_START_DATE, endDate)
 		if err != nil {
 			br.Msg = "获取指标信息失败!"
 			br.ErrMsg = "获取指标信息失败 GetEdbDataFromWind,Err:" + err.Error()
@@ -97,7 +105,14 @@ func (this *WindController) Refresh() {
 	cacheKey = utils.CACHE_EDB_DATA_REFRESH + strconv.Itoa(source) + "_" + req.EdbCode
 	if !utils.Rc.IsExist(cacheKey) {
 		utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
-		dataItem, err := services.GetEdbDataFromWind(req.EdbCode, req.StartDate, utils.BASE_END_DATE)
+
+		//期货数据,就默认到今天,特殊处理下
+		endDate := utils.BASE_END_DATE
+		if strings.Contains(req.EdbCode, ".") {
+			endDate = time.Now().Format(utils.FormatDate)
+		}
+
+		dataItem, err := services.GetEdbDataFromWind(req.EdbCode, req.StartDate, endDate)
 		if err != nil {
 			br.Msg = "获取指标信息失败!"
 			br.ErrMsg = "获取指标信息失败 GetEdbDataFromWind,Err:" + err.Error()

+ 22 - 0
models/base_from_calculate.go

@@ -191,6 +191,8 @@ func RefreshAllCalculate(edbInfoIdArr []*EdbInfo, edbInfoId, source int, edbCode
 	}
 	edbInfoIdStr := strconv.Itoa(edbInfoId)
 	existDataMap := make(map[string]string)
+
+	removeDateList := make([]string, 0) //需要移除的日期
 	for sk, sv := range saveDataMap {
 		fmt.Println(sk, sv)
 		formulaStr = strings.ToUpper(formulaStr)
@@ -200,6 +202,11 @@ func RefreshAllCalculate(edbInfoIdArr []*EdbInfo, edbInfoId, source int, edbCode
 			expression := formula.NewExpression(formulaFormStr)
 			calResult, err := expression.Evaluate()
 			if err != nil {
+				// 分母为0的报错
+				if strings.Contains(err.Error(), "divide by zero") {
+					removeDateList = append(removeDateList, sk)
+					continue
+				}
 				err = errors.New("计算失败:Err:" + err.Error() + ";formulaStr:" + formulaFormStr)
 				fmt.Println(err)
 				return err
@@ -234,6 +241,7 @@ func RefreshAllCalculate(edbInfoIdArr []*EdbInfo, edbInfoId, source int, edbCode
 			}
 		}
 	}
+
 	if isAdd {
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = o.Raw(addSql).Exec()
@@ -242,6 +250,20 @@ func RefreshAllCalculate(edbInfoIdArr []*EdbInfo, edbInfoId, source int, edbCode
 			return
 		}
 	}
+
+	if len(removeDateList) > 0 {
+		removeDateStr := strings.Join(removeDateList, `","`)
+		removeDateStr = `"` + removeDateStr + `"`
+		//如果拼接指标变更了,那么需要删除所有的指标数据
+		tableName := GetEdbDataTableName(source)
+		sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (%s) `, tableName, removeDateStr)
+
+		_, err = o.Raw(sql, edbInfoId).Exec()
+		if err != nil {
+			err = fmt.Errorf("删除计算失败的计算指标数据失败,Err:" + err.Error())
+			return
+		}
+	}
 	return
 }
 

+ 2 - 2
models/base_from_mysteel.go

@@ -19,7 +19,7 @@ type GlData struct {
 
 func GetGlDataByCondition(condition string, pars []interface{}) (item []*GlData, err error) {
 	condition += " AND IS_DELETE=0 "
-	sql := ` SELECT * FROM mb_index_main_data WHERE 1=1 `
+	sql := ` SELECT * FROM mb_index_main_data WHERE 1=1 AND DATA_VALUE is not null `
 	o := orm.NewOrmUsingDB("gl")
 	if condition != "" {
 		sql += condition
@@ -131,7 +131,7 @@ func RefreshEdbDataFromMysteel(edbInfoId int, edbCode, startDate string) (err er
 	for _, v := range glDataList {
 		item := v
 		eDate := item.DataTime
-		sValue :=utils.SubFloatToString(item.InputValue, 30)
+		sValue := utils.SubFloatToString(item.InputValue, 30)
 
 		if findItem, ok := existMap[v.DataTime]; !ok {
 			if sValue != "" {

+ 3 - 2
models/base_from_wind.go

@@ -27,7 +27,7 @@ func AddEdbDataFromWind(edbCode string, item *services.EdbDataFromWind) (err err
 		t := time.Unix(v, 0)
 		dateTime := t.Format(utils.FormatDate)
 		val := item.Close[k]
-		saveVal:=utils.SubFloatToString(val, 20)
+		saveVal := utils.SubFloatToString(val, 20)
 		addSql += GetAddSql("0", edbCode, dateTime, timeStr, saveVal)
 
 		isAdd = true
@@ -55,7 +55,7 @@ func RefreshEdbDataFromWind(edbInfoId int, edbCode, startDate string, item *serv
 	condition += " AND edb_info_id=? "
 	pars = append(pars, edbInfoId)
 
-	if startDate!="" {
+	if startDate != "" {
 		condition += " AND data_time>=? "
 		pars = append(pars, startDate)
 	}
@@ -100,5 +100,6 @@ func RefreshEdbDataFromWind(edbInfoId int, edbCode, startDate string, item *serv
 			return
 		}
 	}
+
 	return
 }

+ 4 - 5
services/base_from_pb.go

@@ -3,10 +3,9 @@ package services
 import (
 	"encoding/json"
 	"fmt"
+	"github.com/rdlucklib/rdluck_tools/http"
 	"hongze/hongze_edb_lib/utils"
 	"net/url"
-
-	"github.com/rdlucklib/rdluck_tools/http"
 )
 
 type EdbDataFromPb struct {
@@ -18,20 +17,20 @@ type EdbDataFromPb struct {
 
 // GetEdbDataFromPb 获取Pb数据
 func GetEdbDataFromPb(edbCode, startDate, endDate string) (item *EdbDataFromPb, err error) {
-	edbCode = url.QueryEscape(edbCode)
+	//edbCode = url.QueryEscape(edbCode)
 	bpUrl := utils.Hz_Pb_Data_Url + `edbInfo/pb?EdbCode=%s&StartDate=%s&EndDate=%s`
 	bpUrl = fmt.Sprintf(bpUrl, edbCode, startDate, endDate)
 	utils.FileLog.Info("bpUrl:" + bpUrl)
 	body, err := http.Get(bpUrl)
 	if err != nil {
-		utils.FileLog.Info("GetEdbDataByPb Err:"+err.Error())
+		utils.FileLog.Info("GetEdbDataByPb Err:" + err.Error())
 		return
 	}
 	utils.FileLog.Info("GetEdbDataByPb result:" + string(body))
 	item = new(EdbDataFromPb)
 	err = json.Unmarshal(body, &item)
 	if err != nil {
-		utils.FileLog.Info("GetEdbDataByPb Unmarshal Err:"+err.Error())
+		utils.FileLog.Info("GetEdbDataByPb Unmarshal Err:" + err.Error())
 		return
 	}
 	edbCode, _ = url.QueryUnescape(edbCode)