瀏覽代碼

新增同花顺,wind,彭博数据刷新接口

longyu 3 年之前
父節點
當前提交
d2ee959adf

+ 2 - 2
controllers/base_from_ths.go

@@ -13,8 +13,8 @@ type ThsController struct {
 	BaseAuthController
 }
 
-// @Title 编辑指标接口
-// @Description 编辑指标接口
+// @Title 新增同花顺指标接口
+// @Description 新增同花顺指标接口
 // @Success 200 {object} data_manage.EditEdbInfoReq
 // @router /add [post]
 func (this *ThsController) Add() {

+ 69 - 1
models/base_from_pb.go

@@ -5,11 +5,11 @@ import (
 	"github.com/beego/beego/v2/client/orm"
 	"hongze/hongze_edb_lib/services"
 	"hongze/hongze_edb_lib/utils"
+	"strconv"
 	"strings"
 	"time"
 )
 
-
 func AddEdbDataFromPb(edbCode string, item *services.EdbDataFromPb) (err error) {
 	var errMsg string
 	o := orm.NewOrm()
@@ -53,3 +53,71 @@ func AddEdbDataFromPb(edbCode string, item *services.EdbDataFromPb) (err error)
 	}
 	return
 }
+
+//刷新彭博指标数据
+func RefreshAllEdbDataFromPb(edbInfoId int, edbCode, startDate string, item *services.EdbDataFromPb) (err error) {
+	o := orm.NewOrm()
+	source := utils.DATA_SOURCE_PB
+
+	var condition string
+	var pars []interface{}
+
+	condition += " AND edb_info_id=? "
+	pars = append(pars, edbInfoId)
+
+	condition += " AND data_time>=? "
+	pars = append(pars, startDate)
+	existList, err := GetEdbDataByCondition(source, condition, pars)
+	existMap := make(map[string]*EdbInfoSearchData)
+	for _, v := range existList {
+		existMap[v.DataTime] = v
+	}
+
+	edbInfoIdStr := strconv.Itoa(edbInfoId)
+	addMap := make(map[string]string)
+	if len(item.Date) > 0 {
+		dateMap := item.Date
+		var isAdd bool
+		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]
+			saveValue := utils.SubFloatToString(val, 30)
+			if field == "PX_LAST" {
+				if findItem, ok := existMap[dateTime]; !ok {
+					if _, addOk := addMap[dateTime]; !addOk {
+						addSql += "("
+						addSql += edbInfoIdStr + "," + "'" + edbCode + "'" + "," + "'" + dateTime + "'" + "," + saveValue + "," + "'" + nowStr + "'" +
+							"," + "'" + nowStr + "'" + "," + "1" + "," + "'" + ticker + "'" + "," + "'" + field + "'" + "," + "'" + timeStr + "'"
+						addSql += "),"
+						isAdd = true
+						addMap[dateTime] = saveValue
+					}
+				} else {
+					if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != saveValue {
+						err = ModifyEdbDataById(source, findItem.EdbDataId, saveValue)
+						if err != nil {
+							return err
+						}
+					}
+				}
+			}
+		}
+
+		if isAdd {
+			addSql = strings.TrimRight(addSql, ",")
+			_, err = o.Raw(addSql).Exec()
+			if err != nil {
+				fmt.Println("RefreshAllEdbDataByPb add Err", err.Error())
+				return
+			}
+		}
+	}
+	return
+}

+ 59 - 11
models/base_from_ths.go

@@ -5,10 +5,12 @@ import (
 	"github.com/beego/beego/v2/client/orm"
 	"hongze/hongze_edb_lib/services"
 	"hongze/hongze_edb_lib/utils"
+	"strconv"
 	"strings"
 	"time"
 )
 
+//新增同花顺指标数据
 func AddEdbDataFromThs(edbCode string, item *services.EdbDataFromThs) (err error) {
 	var errMsg string
 	o := orm.NewOrm()
@@ -52,17 +54,63 @@ func AddEdbDataFromThs(edbCode string, item *services.EdbDataFromThs) (err error
 	return
 }
 
-func GetEdbDataByThs(edbCode string, item *services.EdbDataFromThs) (dataList []*EdbInfoSearchData, err error) {
-	AddEdbDataFromThs(edbCode, item)
+//刷新同花顺指标数据
+func RefreshEdbDataFromThs(edbInfoId int, edbCode, startDate string, item *services.EdbDataFromThs) (err error) {
+	o := orm.NewOrm()
+	source := utils.DATA_SOURCE_THS
+	if len(item.Tables) > 0 {
+		var condition string
+		var pars []interface{}
 
-	size := utils.EDB_DATA_LIMIT
-	dataList, err = GetEdbDataAllByEdbCode(edbCode, utils.DATA_SOURCE_THS, size)
-	if err != nil {
-		//utils.FileLogData.Info("GetEdbDataThsByCode Err:%s", err.Error())
-		return
-	}
-	if len(dataList) < 0 {
-		dataList = make([]*EdbInfoSearchData, 0)
+		condition += " AND edb_info_id=? "
+		pars = append(pars, edbInfoId)
+
+		condition += " AND data_time>=? "
+		pars = append(pars, startDate)
+		existList, err := GetEdbDataByCondition(source, condition, pars)
+		existMap := make(map[string]*EdbInfoSearchData)
+		for _, v := range existList {
+			existMap[v.DataTime] = v
+		}
+
+		table := item.Tables[0]
+		dataLen := len(table.Time)
+		addSql := ` INSERT INTO edb_data_ths(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+		var isAdd bool
+		addMap := make(map[string]string)
+		edbInfoIdStr := strconv.Itoa(edbInfoId)
+		for i := 0; i < dataLen; i++ {
+			eDate := table.Time[i]
+			sValue := table.Value[i]
+			sValueStr := utils.SubFloatToString(sValue, 30)
+			if findItem, ok := existMap[eDate]; !ok {
+				if _, addOk := addMap[eDate]; !addOk {
+					dataTime, err := time.Parse(utils.FormatDate, eDate)
+					if err != nil {
+						return err
+					}
+					timestamp := dataTime.UnixNano() / 1e6
+					timeStr := fmt.Sprintf("%d", timestamp)
+					addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, sValueStr)
+					isAdd = true
+					addMap[eDate] = sValueStr
+				}
+			} else {
+				if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != utils.SubFloatToString(sValue, 30) {
+					err = ModifyEdbDataById(source, findItem.EdbDataId, sValueStr)
+					if err != nil {
+						return err
+					}
+				}
+			}
+		}
+		if isAdd {
+			addSql = strings.TrimRight(addSql, ",")
+			_, err = o.Raw(addSql).Exec()
+			if err != nil {
+				return err
+			}
+		}
 	}
 	return
-}
+}

+ 59 - 6
models/base_from_wind.go

@@ -5,11 +5,11 @@ import (
 	"github.com/beego/beego/v2/client/orm"
 	"hongze/hongze_edb_lib/services"
 	"hongze/hongze_edb_lib/utils"
+	"strconv"
 	"strings"
 	"time"
 )
 
-
 func AddEdbDataFromWind(edbCode string, item *services.EdbDataFromWind) (err error) {
 	var errMsg string
 	o := orm.NewOrm()
@@ -21,18 +21,15 @@ func AddEdbDataFromWind(edbCode string, item *services.EdbDataFromWind) (err err
 
 	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]
+		saveVal:=utils.SubFloatToString(val, 20)
+		addSql += GetAddSql("0", edbCode, dateTime, timeStr, saveVal)
 
-		addSql += "("
-		addSql += "0," + "'" + edbCode + "'" + "," + "'" + dateTime + "'" + "," + utils.SubFloatToString(val, 20) + "," + "'" + nowStr + "'" +
-			"," + "'" + nowStr + "'" + "," + "0" + "," + "'" + timeStr + "'"
-		addSql += "),"
 		isAdd = true
 	}
 
@@ -46,3 +43,59 @@ func AddEdbDataFromWind(edbCode string, item *services.EdbDataFromWind) (err err
 	}
 	return
 }
+
+//刷新wind指标数据
+func RefreshEdbDataFromWind(edbInfoId int, edbCode, startDate string, item *services.EdbDataFromWind) (err error) {
+	o := orm.NewOrm()
+	source := utils.DATA_SOURCE_WIND
+
+	var condition string
+	var pars []interface{}
+
+	condition += " AND edb_info_id=? "
+	pars = append(pars, edbInfoId)
+
+	condition += " AND data_time>=? "
+	pars = append(pars, startDate)
+	existList, err := GetEdbDataByCondition(source, condition, pars)
+	existMap := make(map[string]*EdbInfoSearchData)
+	for _, v := range existList {
+		existMap[v.DataTime] = v
+	}
+	addSql := ` INSERT INTO edb_data_wind(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
+	var isAdd bool
+	addMap := make(map[string]string)
+	edbInfoIdStr := strconv.Itoa(edbInfoId)
+	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]
+		saveVal := utils.SubFloatToString(val, 30)
+
+		if findItem, ok := existMap[dateTime]; !ok {
+			if _, existOk := addMap[dateTime]; !existOk {
+				isAdd = true
+				addSql += GetAddSql(edbInfoIdStr, edbCode, dateTime, timeStr, saveVal)
+				addMap[dateTime] = saveVal
+			}
+		} else {
+			if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != saveVal {
+				err = ModifyEdbDataById(source, findItem.EdbDataId, saveVal)
+				if err != nil {
+					return err
+				}
+			}
+		}
+	}
+	if isAdd {
+		addSql = strings.TrimRight(addSql, ",")
+		_, err = o.Raw(addSql).Exec()
+		if err != nil {
+			fmt.Println("RefreshEdbDataFromWind add Err", err.Error())
+			return
+		}
+	}
+	return
+}

+ 22 - 0
models/edb_data_base.go

@@ -71,3 +71,25 @@ func GetEdbDataAllByEdbCode(edbCode string, source, limit int) (items []*EdbInfo
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
+
+func GetEdbDataByCondition(source int, condition string, pars []interface{}) (items []*EdbInfoSearchData, err error) {
+	o := orm.NewOrm()
+	tableName := GetEdbDataTableName(source)
+	sql := ` SELECT * FROM %s WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY data_time DESC `
+	sql = fmt.Sprintf(sql, tableName)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+func ModifyEdbDataById(source, edbDataId int, value string) (err error) {
+	o := orm.NewOrm()
+	tableName := GetEdbDataTableName(source)
+	sql := ` UPDATE %s SET value=? WHERE edb_data_id=? `
+	sql = fmt.Sprintf(sql, tableName)
+	_, err = o.Raw(sql, value, edbDataId).Exec()
+	return
+}

+ 0 - 0
models/edb_calculate_tcz.go → models/edb_data_calculate_tcz.go


+ 3 - 2
models/edb_info.go

@@ -86,8 +86,9 @@ func GetEdbInfoById(edbInfoId int) (item *EdbInfo, err error) {
 
 // EdbInfoSearchData
 type EdbInfoSearchData struct {
-	DataTime string  `description:"数据日期"`
-	Value    float64 `description:"数据"`
+	EdbDataId int    `description:"数据ID"`
+	DataTime  string `description:"数据日期"`
+	Value     float64 `description:"数据"`
 }
 
 // GetEdbDataListAll 获取指标数据列表 order:1升序,其余值为降序

+ 1 - 1
utils/config.go

@@ -27,7 +27,7 @@ func init() {
 	fmt.Println("RunMode:", RunMode)
 	if RunMode == "" {
 		RunMode = "release"
-		configPath := `/home/code/config/hongze_admin/conf/app.conf`
+		configPath := `/home/code/config/hongze_edb_lib/conf/app.conf`
 		err = web.LoadAppConfig("ini", configPath)
 		if err != nil {
 			fmt.Println("web.LoadAppConfig Err:" + err.Error())

+ 1 - 28
utils/email.go

@@ -40,31 +40,4 @@ func SendEmail(title, content string, touser string) bool {
 		return false
 	}
 	return true
-}
-
-//发送邮件
-func SendEmailByHz(title, content string, touser string) (result bool, err error) {
-	var arr []string
-	sub := strings.Index(touser, ";")
-	if sub >= 0 {
-		spArr := strings.Split(touser, ";")
-		for _, v := range spArr {
-			arr = append(arr, v)
-		}
-	} else {
-		arr = append(arr, touser)
-	}
-	m := gomail.NewMessage()
-	m.SetHeader("From", "public@hzinsights.com")
-	m.SetHeader("To", arr...)
-	m.SetHeader("Subject", title)
-	m.SetBody("text/html", content)
-	d := gomail.NewDialer("smtp.mxhichina.com", 465, "public@hzinsights.com", "Hzinsights2018")
-	if err := d.DialAndSend(m); err != nil {
-		fmt.Println("DialAndSend Err:" + err.Error())
-		result = false
-		return result, err
-	}
-	result = true
-	return
-}
+}