Browse Source

fix:图表刷新逻辑调整,切换到edb指标库

Roc 3 years ago
parent
commit
227e8c3d49
4 changed files with 294 additions and 1 deletions
  1. 148 0
      services/data/base_edb_lib.go
  2. 131 1
      services/data/chart_info.go
  3. 9 0
      utils/config.go
  4. 6 0
      utils/constants.go

+ 148 - 0
services/data/base_edb_lib.go

@@ -0,0 +1,148 @@
+package data
+
+import (
+	"encoding/json"
+	"fmt"
+	"hongze/hongze_chart_lib/models"
+	"hongze/hongze_chart_lib/utils"
+	"io/ioutil"
+	"net/http"
+	"strings"
+)
+
+//新增指标数据
+func AddEdbData(source int, edbCode string) (resp *models.BaseResponse, err error) {
+	param := make(map[string]interface{})
+	param["EdbCode"] = edbCode
+	urlStr := ``
+	switch source {
+	case utils.DATA_SOURCE_THS:
+		urlStr = "/ths/add"
+	case utils.DATA_SOURCE_WIND:
+		urlStr = "/wind/add"
+	case utils.DATA_SOURCE_PB:
+		urlStr = "/pb/add"
+	case utils.DATA_SOURCE_MANUAL:
+		urlStr = "/manual/add"
+	case utils.DATA_SOURCE_LZ:
+		urlStr = "/lz/add"
+	case utils.DATA_SOURCE_YS:
+		urlStr = "/smm/add"
+	case utils.DATA_SOURCE_GL:
+		urlStr = "/mysteel/add"
+	case utils.DATA_SOURCE_ZZ:
+		urlStr = "/zz/add"
+	case utils.DATA_SOURCE_DL:
+		urlStr = "/dl/add"
+	case utils.DATA_SOURCE_SH:
+		urlStr = "/sh/add"
+	case utils.DATA_SOURCE_CFFEX:
+		urlStr = "/cffex/add"
+	case utils.DATA_SOURCE_SHFE:
+		urlStr = "/shfe/add"
+	case utils.DATA_SOURCE_GIE:
+		urlStr = "/gie/add"
+	case utils.DATA_SOURCE_LT:
+		urlStr = "/lt/add"
+	default:
+	}
+	if urlStr == "" {
+		err = fmt.Errorf("未实现该指标的刷新接口,请联系管理员")
+		return
+	}
+	resp, err = postRefreshEdbData(param, urlStr)
+	return
+}
+
+// RefreshEdbData 刷新指标数据
+func RefreshEdbData(edbInfoId, source int, edbCode, startDate string) (resp *models.BaseResponse, err error) {
+	param := make(map[string]interface{})
+	param["EdbCode"] = edbCode
+	param["EdbInfoId"] = edbInfoId
+	param["StartDate"] = startDate
+	urlStr := ``
+	switch source {
+	case utils.DATA_SOURCE_THS:
+		urlStr = "/ths/refresh"
+	case utils.DATA_SOURCE_WIND:
+		urlStr = "/wind/refresh"
+	case utils.DATA_SOURCE_PB:
+		urlStr = "/pb/refresh"
+	case utils.DATA_SOURCE_MANUAL:
+		urlStr = "/manual/refresh"
+	case utils.DATA_SOURCE_LZ:
+		urlStr = "/lz/refresh"
+	case utils.DATA_SOURCE_YS:
+		urlStr = "/smm/refresh"
+	case utils.DATA_SOURCE_GL:
+		urlStr = "/mysteel/refresh"
+	case utils.DATA_SOURCE_ZZ:
+		urlStr = "/zz/refresh"
+	case utils.DATA_SOURCE_DL:
+		urlStr = "/dl/refresh"
+	case utils.DATA_SOURCE_SH:
+		urlStr = "/sh/refresh"
+	case utils.DATA_SOURCE_CFFEX:
+		urlStr = "/cffex/refresh"
+	case utils.DATA_SOURCE_SHFE:
+		urlStr = "/shfe/refresh"
+	case utils.DATA_SOURCE_GIE:
+		urlStr = "/gie/refresh"
+	case utils.DATA_SOURCE_LT:
+		urlStr = "/lt/refresh"
+	}
+	if urlStr == "" {
+		err = fmt.Errorf(fmt.Sprint("source:", source, ";未实现该指标的刷新接口,请联系管理员"))
+		return
+	}
+	resp, err = postRefreshEdbData(param, urlStr)
+	return
+}
+
+// RefreshEdbCalculateData 刷新计算指标数据请求
+func RefreshEdbCalculateData(edbInfoId int, edbCode, startDate string) (resp *models.BaseResponse, err error) {
+	param := make(map[string]interface{})
+	param["EdbCode"] = edbCode
+	param["EdbInfoId"] = edbInfoId
+	param["StartDate"] = startDate
+	resp, err = postRefreshEdbData(param, "/calculate/refresh")
+	return
+}
+
+// postRefreshEdbData 刷新指标数据
+func postRefreshEdbData(param map[string]interface{}, urlStr string) (resp *models.BaseResponse, err error) {
+	postUrl := utils.EDB_LIB_URL + urlStr
+	postData, err := json.Marshal(param)
+	if err != nil {
+		return
+	}
+	result, err := HttpPost(postUrl, string(postData), "application/json")
+	if err != nil {
+		return
+	}
+	err = json.Unmarshal(result, &resp)
+	if err != nil {
+		return
+	}
+	return resp, nil
+}
+
+func HttpPost(url, postData string, params ...string) ([]byte, error) {
+	body := ioutil.NopCloser(strings.NewReader(postData))
+	client := &http.Client{}
+	req, err := http.NewRequest("POST", url, body)
+	if err != nil {
+		return nil, err
+	}
+	contentType := "application/x-www-form-urlencoded;charset=utf-8"
+	if len(params) > 0 && params[0] != "" {
+		contentType = params[0]
+	}
+	req.Header.Set("Content-Type", contentType)
+	req.Header.Set("authorization", utils.MD5(utils.APP_EDB_LIB_NAME_EN+utils.EDB_LIB_Md5_KEY))
+	resp, err := client.Do(req)
+	defer resp.Body.Close()
+	b, err := ioutil.ReadAll(resp.Body)
+	fmt.Println("HttpPost:" + string(b))
+	return b, err
+}

+ 131 - 1
services/data/chart_info.go

@@ -1,6 +1,7 @@
 package data
 
 import (
+	"errors"
 	"fmt"
 	"hongze/hongze_chart_lib/models/data_manage"
 	"hongze/hongze_chart_lib/utils"
@@ -304,7 +305,8 @@ func ChartInfoRefresh(chartInfoId int) (err error) {
 	return err
 }
 
-func ChartInfoRefreshV1(chartInfoId int) (err error) {
+// ChartInfoRefreshVOld 图表刷新(旧版,2022年03月25日11:35:06 作废)
+func ChartInfoRefreshVOld(chartInfoId int) (err error) {
 	var errmsg string
 	defer func() {
 		if err != nil {
@@ -611,3 +613,131 @@ func ChartInfoRefreshV1(chartInfoId int) (err error) {
 
 	return err
 }
+
+// ChartInfoRefreshV1 图表刷新
+func ChartInfoRefreshV1(chartInfoId int) (err error) {
+	var errmsg string
+	defer func() {
+		if err != nil {
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "ChartInfoRefresh:"+errmsg, utils.EmailSendToUsers)
+			fmt.Println("ChartInfoRefresh Err:" + errmsg)
+		}
+	}()
+	baseEdbInfoArr, calculateInfoArr, err := data_manage.GetChartInfoRefreshData(chartInfoId)
+	if err != nil {
+		errmsg = "获取需要刷新的指标失败:Err:" + err.Error()
+		return
+	}
+	var startDate string
+
+	newBaseEdbInfoArr := make([]*data_manage.EdbInfo, 0)
+	baseMap := make(map[int]*data_manage.EdbInfo)
+	for _, bv := range baseEdbInfoArr {
+		if _, ok := baseMap[bv.EdbInfoId]; !ok {
+			newBaseEdbInfoArr = append(newBaseEdbInfoArr, bv)
+		}
+		baseMap[bv.EdbInfoId] = bv
+	}
+
+	fmt.Println("calculateInfoArr:", len(calculateInfoArr))
+
+	newCalculateInfoArr := make([]*data_manage.EdbInfo, 0)
+	calculateMap := make(map[int]*data_manage.EdbInfo)
+	var calculateArr []int
+	for _, bv := range calculateInfoArr {
+		if _, ok := calculateMap[bv.EdbInfoId]; !ok {
+			newCalculateInfoArr = append(newCalculateInfoArr, bv)
+			calculateArr = append(calculateArr, bv.EdbInfoId)
+		}
+		calculateMap[bv.EdbInfoId] = bv
+	}
+	sort.Ints(calculateArr)
+	for _, bv := range newBaseEdbInfoArr {
+		source := bv.Source
+		edbInfoId := bv.EdbInfoId
+		edbCode := bv.EdbCode
+		startDate = bv.StartDate
+		frequency := bv.Frequency
+		if bv.StartDate == "0000-00-00" {
+			continue
+		}
+		sTime, err := time.Parse(utils.FormatDate, bv.EndDate)
+		if err != nil {
+			return err
+		}
+
+		var limitDay int
+		startDate := ""
+		switch frequency {
+		case "日度":
+			limitDay = utils.DATA_REFRESH
+		case "周度":
+			limitDay = utils.DATA_REFRESH * 7
+		case "月度":
+			limitDay = utils.DATA_REFRESH * 30
+		case "季度":
+			limitDay = utils.DATA_REFRESH * 90
+		case "年度":
+			limitDay = utils.DATA_REFRESH * 365
+		default:
+			limitDay = utils.DATA_REFRESH
+		}
+		startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
+
+		fmt.Println("source:", source)
+		respItem, err := RefreshEdbData(edbInfoId, source, edbCode, startDate)
+		if err != nil {
+			errmsg = errors.New("RefreshEdbData Err:" + err.Error()).Error()
+			return err
+		}
+		if respItem.Ret != 200 {
+			errmsg = errors.New(respItem.ErrMsg + ";EdbCode:" + edbCode).Error()
+			return err
+		}
+
+		maxAndMinItem, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)
+		if err != nil {
+			return err
+		}
+		if maxAndMinItem != nil {
+			err = data_manage.ModifyEdbInfoMaxAndMinInfo(edbInfoId, maxAndMinItem)
+			if err != nil {
+				return err
+			}
+		}
+	}
+
+	//刷新相关计算指标
+	for _, v := range calculateArr {
+		edbInfo := calculateMap[v]
+		if edbInfo == nil {
+			return err
+		}
+		startDate = edbInfo.StartDate
+		source := edbInfo.Source
+
+		if source == utils.DATA_SOURCE_CALCULATE {
+			startDate = edbInfo.StartDate
+			sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
+			if err != nil {
+				return err
+			}
+			startDate = sTime.Format(utils.FormatDate)
+		}
+
+		result, err := RefreshEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
+		if err != nil {
+			fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
+			errmsg = "RefreshEdbCalculateData Err:" + err.Error()
+			return err
+		}
+		if result.Ret != 200 {
+			fmt.Println(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
+			errmsg = fmt.Sprint(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
+			return fmt.Errorf("刷新失败")
+		}
+		fmt.Println("end calculateArr:", v, time.Now())
+	}
+
+	return err
+}

+ 9 - 0
utils/config.go

@@ -18,6 +18,11 @@ var (
 	Re          error        //redis错误
 )
 
+// 经济数据库
+var (
+	EDB_LIB_URL string
+)
+
 func init() {
 	tmpRunMode, err := web.AppConfig.String("run_mode")
 	if err != nil {
@@ -57,9 +62,13 @@ func init() {
 
 		//同花顺,万得接口服务地址(阿里云windows服务器地址;内网地址)
 		Hz_Server_Data_Url = "http://172.19.173.231:7000/"
+
+		EDB_LIB_URL = "http://172.19.173.232:8300/edbapi/"
 	} else {
 		//同花顺,万得接口服务地址(阿里云windows服务器地址;外网地址)
 		Hz_Server_Data_Url = "http://139.196.136.213:7000/"
+
+		EDB_LIB_URL = "http://8.136.199.33:8300/edbapi/"
 	}
 }
 

+ 6 - 0
utils/constants.go

@@ -88,4 +88,10 @@ const (
 
 var (
 	Hz_Server_Data_Url string //同花顺,万得接口服务地址(阿里云windows服务器地址)
+)
+
+//EDB_LIB
+var (
+	APP_EDB_LIB_NAME_EN = "hongze_edb_lib"
+	EDB_LIB_Md5_KEY     = "GuRaB6dY1bXOJcwG"
 )