Explorar o código

feat:新增彭博、wind新增接口

Roc %!s(int64=3) %!d(string=hai) anos
pai
achega
590c2e9f0b

+ 2 - 1
.gitignore

@@ -3,4 +3,5 @@
 /hongze_edb_lib.exe
 /lastupdate.tmp
 /rdlucklog
-hongze_edb_lib
+hongze_edb_lib
+.DS_Store

+ 64 - 0
controllers/base_from_pb.go

@@ -0,0 +1,64 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hongze_edb_lib/models"
+	"hongze/hongze_edb_lib/services"
+	"hongze/hongze_edb_lib/utils"
+	"strconv"
+	"time"
+)
+
+type PbController struct {
+	BaseAuthController
+}
+
+// @Title 编辑指标接口
+// @Description 编辑指标接口
+// @Success 200 {object} data_manage.EditEdbInfoReq
+// @router /add [post]
+func (this *PbController) Add() {
+	br := new(models.BaseResponse).Init()
+	var cacheKey string
+	defer func() {
+		utils.Rc.Delete(cacheKey)
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	source := utils.DATA_SOURCE_PB
+	var req models.AddEdbInfoReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.EdbCode == "" {
+		br.Msg = "请输入指标编码!"
+		br.ErrMsg = "请输入指标编码,指标编码为空"
+		return
+	}
+	cacheKey = "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.GetEdbDataFromPb(req.EdbCode, utils.BASE_START_DATE, utils.BASE_END_DATE)
+		if err != nil {
+			br.Msg = "获取指标信息失败!"
+			br.ErrMsg = "获取指标信息失败 GetEdbDataFromPb,Err:" + err.Error()
+			return
+		}
+		err = models.AddEdbDataFromPb(req.EdbCode, dataItem)
+		if err != nil {
+			br.Msg = "获取指标信息失败!"
+			br.ErrMsg = "获取指标信息失败 AddEdbDataFromPb,Err:" + err.Error()
+			return
+		}
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+	}else{
+		br.Ret = 501
+		br.Success = true
+		br.Msg = "系统处理中,请稍后重试"
+	}
+}

+ 64 - 0
controllers/base_from_wind.go

@@ -0,0 +1,64 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hongze_edb_lib/models"
+	"hongze/hongze_edb_lib/services"
+	"hongze/hongze_edb_lib/utils"
+	"strconv"
+	"time"
+)
+
+type WindController struct {
+	BaseAuthController
+}
+
+// @Title 编辑指标接口
+// @Description 编辑指标接口
+// @Success 200 {object} data_manage.EditEdbInfoReq
+// @router /add [post]
+func (this *WindController) Add() {
+	br := new(models.BaseResponse).Init()
+	var cacheKey string
+	defer func() {
+		utils.Rc.Delete(cacheKey)
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	source := utils.DATA_SOURCE_WIND
+	var req models.AddEdbInfoReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.EdbCode == "" {
+		br.Msg = "请输入指标编码!"
+		br.ErrMsg = "请输入指标编码,指标编码为空"
+		return
+	}
+	cacheKey = "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)
+		if err != nil {
+			br.Msg = "获取指标信息失败!"
+			br.ErrMsg = "获取指标信息失败 GetEdbDataFromWind,Err:" + err.Error()
+			return
+		}
+		err = models.AddEdbDataFromWind(req.EdbCode, dataItem)
+		if err != nil {
+			br.Msg = "获取指标信息失败!"
+			br.ErrMsg = "获取指标信息失败 AddEdbDataFromWind,Err:" + err.Error()
+			return
+		}
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+	}else{
+		br.Ret = 501
+		br.Success = true
+		br.Msg = "系统处理中,请稍后重试"
+	}
+}

+ 55 - 0
models/base_from_pb.go

@@ -0,0 +1,55 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_edb_lib/services"
+	"hongze/hongze_edb_lib/utils"
+	"strings"
+	"time"
+)
+
+
+func AddEdbDataFromPb(edbCode string, item *services.EdbDataFromPb) (err error) {
+	var errMsg string
+	o := orm.NewOrm()
+	defer func() {
+		if err != nil {
+			go utils.SendEmail(utils.APP_NAME_CN+"【"+utils.RunMode+"】"+"失败提醒", " 同花顺数据获取失败:err:"+errMsg, utils.EmailSendToUsers)
+		}
+	}()
+
+	if len(item.Date) > 0 {
+		var isAdd bool
+		dateMap := item.Date
+		addSql := ` INSERT INTO edb_data_pb(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,ticker,field,data_timestamp) values `
+		nowStr := time.Now().Format(utils.FormatDateTime)
+		for k, v := range dateMap {
+			timeStr := fmt.Sprintf("%d", v)
+			v = v / 1000
+			t := time.Unix(v, 0)
+			dateTime := t.Format(utils.FormatDate)
+
+			val := item.Value[k]
+			field := item.Field[k]
+			ticker := item.Ticker[k]
+
+			if field == "PX_LAST" {
+				addSql += "("
+				addSql += "0," + "'" + edbCode + "'" + "," + "'" + dateTime + "'" + "," + utils.SubFloatToString(val, 20) + "," + "'" + nowStr + "'" +
+					"," + "'" + nowStr + "'" + "," + "0" + "," + "'" + ticker + "'" + "," + "'" + field + "'" + "," + "'" + timeStr + "'"
+				addSql += "),"
+				isAdd = true
+			}
+		}
+		if isAdd {
+			addSql = strings.TrimRight(addSql, ",")
+			_, err = o.Raw(addSql).Exec()
+			if err != nil {
+				errMsg = " tx.Exec Err :" + err.Error()
+				return
+			}
+		}
+	}
+	return
+}

+ 48 - 0
models/base_from_wind.go

@@ -0,0 +1,48 @@
+package models
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_edb_lib/services"
+	"hongze/hongze_edb_lib/utils"
+	"strings"
+	"time"
+)
+
+
+func AddEdbDataFromWind(edbCode string, item *services.EdbDataFromWind) (err error) {
+	var errMsg string
+	o := orm.NewOrm()
+	defer func() {
+		if err != nil {
+			go utils.SendEmail(utils.APP_NAME_CN+"【"+utils.RunMode+"】"+"失败提醒", " 同花顺数据获取失败:err:"+errMsg, utils.EmailSendToUsers)
+		}
+	}()
+
+	var isAdd bool
+	addSql := ` INSERT INTO edb_data_wind(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+	nowStr := time.Now().Format(utils.FormatDateTime)
+	for k, v := range item.Dt {
+		timeStr := fmt.Sprintf("%d", v)
+		v = v / 1000
+		t := time.Unix(v, 0)
+		dateTime := t.Format(utils.FormatDate)
+		val := item.Close[k]
+
+		addSql += "("
+		addSql += "0," + "'" + edbCode + "'" + "," + "'" + dateTime + "'" + "," + utils.SubFloatToString(val, 20) + "," + "'" + nowStr + "'" +
+			"," + "'" + nowStr + "'" + "," + "0" + "," + "'" + timeStr + "'"
+		addSql += "),"
+		isAdd = true
+	}
+
+	if isAdd {
+		addSql = strings.TrimRight(addSql, ",")
+		_, err = o.Raw(addSql).Exec()
+		if err != nil {
+			errMsg = " tx.Exec Err :" + err.Error()
+			return
+		}
+	}
+	return
+}

+ 38 - 0
services/base_from_pb.go

@@ -0,0 +1,38 @@
+package services
+
+import (
+	"encoding/json"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/http"
+	"hongze/hongze_edb_lib/utils"
+	"net/url"
+)
+
+type EdbDataFromPb struct {
+	Date   map[string]int64   `json:"date"`
+	Ticker map[string]string  `json:"ticker"`
+	Field  map[string]string  `json:"field"`
+	Value  map[string]float64 `json:"value"`
+}
+
+// GetEdbDataFromPb 获取Pb数据
+func GetEdbDataFromPb(edbCode, startDate, endDate string) (item *EdbDataFromPb, err error) {
+	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:%s", bpUrl)
+	body, err := http.Get(bpUrl)
+	if err != nil {
+		utils.FileLog.Info("GetEdbDataByPb Err:%s", err.Error())
+		return
+	}
+	utils.FileLog.Info("GetEdbDataByPb result:%s", string(body))
+	item = new(EdbDataFromPb)
+	err = json.Unmarshal(body, &item)
+	if err != nil {
+		utils.FileLog.Info("GetEdbDataByPb Unmarshal Err:%s", err.Error())
+		return
+	}
+	edbCode, _ = url.QueryUnescape(edbCode)
+	return
+}

+ 32 - 0
services/base_from_wind.go

@@ -0,0 +1,32 @@
+package services
+
+import (
+	"encoding/json"
+	"fmt"
+	"github.com/rdlucklib/rdluck_tools/http"
+	"hongze/hongze_edb_lib/utils"
+)
+
+type EdbDataFromWind struct {
+	Close  map[string]float64 `json:"CLOSE"`
+	Dt     map[string]int64   `json:"DT"`
+	ErrMsg string
+}
+
+// GetEdbDataFromWind 获取wind数据
+func GetEdbDataFromWind(edbCode, startDate, endDate string) (item *EdbDataFromWind, err error) {
+	thsUrl := utils.Hz_Wind_Data_Url + `edbInfo/wind?EdbCode=%s&StartDate=%s&EndDate=%s`
+	thsUrl = fmt.Sprintf(thsUrl, edbCode, startDate, endDate)
+	utils.FileLog.Info("thsUrl:%s", thsUrl)
+	body, err := http.Get(thsUrl)
+	fmt.Println("GetEdbDataByThs body:")
+	fmt.Println(string(body))
+	utils.FileLog.Info("wind result:", string(body))
+
+	if err != nil {
+		return
+	}
+	item = new(EdbDataFromWind)
+	err = json.Unmarshal(body, &item)
+	return
+}