rdluck 3 жил өмнө
parent
commit
7eb8656e4a

+ 48 - 0
models/data_manage/edb_data_ths.go

@@ -0,0 +1,48 @@
+package data_manage
+
+import (
+	"rdluck_tools/orm"
+	"time"
+)
+
+type EdbDataThs struct {
+	EdbDataId  int `orm:"column(edb_data_id);pk"`
+	EdbInfoId  int
+	EdbCode    string
+	DataTime   string
+	Value      float64
+	Status     int
+	CreateTime time.Time
+	ModifyTime time.Time
+}
+
+func AddEdbDataThs(items []*EdbDataThs) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	_, err = o.InsertMulti(1, items)
+	return
+}
+
+func ModifyEdbDataThs(edbInfoId int64, dataTime string, value float64) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` UPDATE edb_data_ths SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
+	_, err = o.Raw(sql, value, edbInfoId, dataTime).Exec()
+	return
+}
+
+func GetEdbDataThsCount(edbInfoId int64, dataTime string) (count int, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT COUNT(1) AS count FROM edb_data_ths WHERE edb_info_id=? AND data_time=? `
+	err = o.Raw(sql, edbInfoId, dataTime).QueryRow(&count)
+	return
+}
+
+func GetEdbDataThsMaxOrMinDate(edbInfoId int) (min_date, max_date string, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT MIN(data_time) AS min_date,MAX(data_time) AS max_date FROM edb_data_ths WHERE edb_info_id=? `
+	err = o.Raw(sql, edbInfoId).QueryRow(&min_date, &max_date)
+	return
+}

+ 56 - 0
models/data_manage/edb_data_wind.go

@@ -0,0 +1,56 @@
+package data_manage
+
+import (
+	"rdluck_tools/orm"
+	"time"
+)
+
+type EdbDataWind struct {
+	EdbDataId  int `orm:"column(edb_data_id);pk"`
+	EdbInfoId  int
+	EdbCode    string
+	DataTime   string
+	Value      float64
+	Status     int
+	CreateTime time.Time
+	ModifyTime time.Time
+}
+
+func AddEdbDataWind(items []*EdbDataWind) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	_, err = o.InsertMulti(1, items)
+	return
+}
+
+func ModifyEdbDataWind(edbInfoId int64, dataTime string, value float64) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` UPDATE edb_data_wind SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
+	_, err = o.Raw(sql, value, edbInfoId, dataTime).Exec()
+	return
+}
+
+func ModifyEdbDataWindStatus(edbInfoId int64, edbCode string) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` UPDATE edb_data_wind SET edb_info_id=?, status=1,modify_time=NOW() WHERE edb_code=? `
+	_, err = o.Raw(sql, edbInfoId, edbCode).Exec()
+	return
+}
+
+func GetEdbDataWindCount(edbInfoId int64, dataTime string) (count int, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT COUNT(1) AS count FROM edb_data_wind WHERE edb_info_id=? AND data_time=? `
+	err = o.Raw(sql, edbInfoId, dataTime).QueryRow(&count)
+	return
+}
+
+func GetEdbDataWindMaxOrMinDate(edbInfoId int) (min_date, max_date string, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT MIN(data_time) AS min_date,MAX(data_time) AS max_date FROM edb_data_wind WHERE edb_info_id=? `
+	err = o.Raw(sql, edbInfoId).QueryRow(&min_date, &max_date)
+	return
+}

+ 39 - 0
models/data_manage/edb_info.go

@@ -0,0 +1,39 @@
+package data_manage
+
+import (
+	"rdluck_tools/orm"
+	"time"
+)
+
+type EdbInfoList struct {
+	EdbInfoId  int       `orm:"column(edb_info_id);pk"`
+	SourceName string    `description:"来源名称"`
+	Source     int       `description:"来源id"`
+	EdbCode    string    `description:"指标编码"`
+	EdbName    string    `description:"指标名称"`
+	Frequency  string    `description:"频率"`
+	Unit       string    `description:"单位"`
+	StartDate  time.Time `description:"起始日期"`
+	EndDate    time.Time `description:"终止日期"`
+	ClassifyId int       `description:"分类id"`
+	UniqueCode string    `description:"指标唯一编码"`
+}
+
+func GetEdbInfoByCondition(condition string, pars []interface{}) (item []*EdbInfoList, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` SELECT * FROM edb_info WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	err = o.Raw(sql, pars).QueryRow(&item)
+	return
+}
+
+func ModifyEdbDataInfoDate(edbInfoId int, maxDate string) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := ` UPDATE edb_info SET end_date=?,modify_time=NOW() WHERE edb_info_id=? `
+	_, err = o.Raw(sql, maxDate, edbInfoId).Exec()
+	return
+}

+ 82 - 0
services/data_manage/data_ths.go

@@ -0,0 +1,82 @@
+package data_manage
+
+import (
+	"encoding/json"
+	"errors"
+	"fmt"
+	"hongze/hongze_task/models/data_manage"
+	"hongze/hongze_task/utils"
+	"rdluck_tools/http"
+	"time"
+)
+
+type EdbDataFromThs struct {
+	DataVol   int64  `json:"dataVol"`
+	Errmsg    string `json:"errmsg"`
+	Errorcode int64  `json:"errorcode"`
+	Perf      int64  `json:"perf"`
+	Tables    []struct {
+		ID    []string  `json:"id"`
+		Time  []string  `json:"time"`
+		Value []float64 `json:"value"`
+	} `json:"tables"`
+}
+
+func SyncEdbDataByThs(edbInfoId int64, edbCode, startDate, endDate string) (err error) {
+	thsUrl := utils.Hz_Data_Url + `edbInfo/ths/?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))
+
+	if err != nil {
+		return
+	}
+	item := new(EdbDataFromThs)
+	err = json.Unmarshal(body, &item)
+	if err != nil {
+		return
+	}
+	if item.Errorcode != 0 {
+		err = errors.New(string(body))
+		return
+	}
+
+	dataList := make([]*data_manage.EdbDataThs, 0)
+	if len(item.Tables) > 0 {
+		table := item.Tables[0]
+		dataLen := len(table.Time)
+		for i := 0; i < dataLen; i++ {
+			eDate := table.Time[i]
+			sValue := table.Value[i]
+			count, err := data_manage.GetEdbDataThsCount(edbInfoId, eDate)
+			if err != nil {
+				return err
+			}
+			if count > 0 {
+				err = data_manage.ModifyEdbDataThs(edbInfoId, eDate, sValue)
+				if err != nil {
+					return
+				}
+			} else {
+				dataItem := new(data_manage.EdbDataThs)
+				dataItem.EdbInfoId = int(edbInfoId)
+				dataItem.EdbCode = edbCode
+				dataItem.DataTime = eDate
+				dataItem.Value = sValue
+				dataItem.Status = 1
+				dataItem.CreateTime = time.Now()
+				dataItem.ModifyTime = time.Now()
+				dataList = append(dataList, dataItem)
+			}
+		}
+	}
+	if len(dataList) > 0 {
+		err = data_manage.AddEdbDataThs(dataList)
+		if err != nil {
+			return
+		}
+	}
+	return
+}

+ 79 - 0
services/data_manage/data_wind.go

@@ -0,0 +1,79 @@
+package data_manage
+
+import (
+	"encoding/json"
+	"fmt"
+	"hongze/hongze_task/models/data_manage"
+	"hongze/hongze_task/utils"
+	"rdluck_tools/http"
+	"time"
+)
+
+type EdbDataFromWind struct {
+	Close map[string]float64 `json:"CLOSE"`
+	Dt    map[string]int64   `json:"DT"`
+}
+
+//万得
+func SyncEdbDataByWind(edbInfoId int64, edbCode, startDate, endDate string) (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("GetEdbDataByWind Err:" + err.Error())
+		}
+	}()
+
+	thsUrl := utils.Hz_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 %s", string(body))
+
+	if err != nil {
+		return
+	}
+	item := new(EdbDataFromWind)
+	err = json.Unmarshal(body, &item)
+	if err != nil {
+		return
+	}
+
+	windList := make([]*data_manage.EdbDataWind, 0)
+	for k, v := range item.Dt {
+		v = v / 1000
+		fmt.Println(k, v)
+		t := time.Unix(v, 0)
+		dateTime := t.Format(utils.FormatDate)
+		fmt.Println(dateTime)
+		val := item.Close[k]
+		count, err := data_manage.GetEdbDataWindCount(edbInfoId, dateTime)
+		if err != nil {
+			return err
+		}
+		if count > 0 {
+			err = data_manage.ModifyEdbDataWind(edbInfoId, dateTime, val)
+			if err != nil {
+				return
+			}
+		} else {
+
+			item := new(data_manage.EdbDataWind)
+			item.EdbCode = edbCode
+			item.EdbInfoId = 0
+			item.CreateTime = time.Now()
+			item.ModifyTime = time.Now()
+			item.DataTime = dateTime
+			item.Value = val
+			item.Status = 1
+			windList = append(windList, item)
+		}
+	}
+	if len(windList) > 0 {
+		err = data_manage.AddEdbDataWind(windList)
+		if err != nil {
+			return
+		}
+	}
+	return
+}

+ 82 - 0
services/data_manage/edb_info.go

@@ -0,0 +1,82 @@
+package data_manage
+
+import (
+	"fmt"
+	"hongze/hongze_task/models/data_manage"
+	"hongze/hongze_task/utils"
+	"time"
+)
+
+//刷新同花顺数据
+func RefreshDataFromThs() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("RefreshDataFromWind Err:" + err.Error())
+		}
+	}()
+	var condition string
+	var pars []interface{}
+	condition += " AND source=? "
+	pars = append(pars, utils.DATA_SOURCE_THS)
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars)
+	if err != nil {
+		return err
+	}
+
+	for _, v := range items {
+		startDate := v.EndDate.AddDate(0, 0, -3).Format(utils.FormatDate)
+		endDate := time.Now().Format(utils.FormatDate)
+		err = SyncEdbDataByThs(int64(v.EdbInfoId), v.EdbCode, startDate, endDate)
+		if err != nil {
+			return err
+		}
+		minDate, maxDate, err := data_manage.GetEdbDataThsMaxOrMinDate(v.EdbInfoId)
+		if err != nil {
+			return err
+		}
+		fmt.Println("minDate:" + minDate + ";maxDate:" + maxDate)
+		err = data_manage.ModifyEdbDataInfoDate(v.EdbInfoId, maxDate)
+		if err != nil {
+			return err
+		}
+	}
+
+	return err
+}
+
+//刷新万得数据
+func RefreshDataFromWind() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("RefreshDataFromWind Err:" + err.Error())
+		}
+	}()
+	var condition string
+	var pars []interface{}
+	condition += " AND source=? "
+	pars = append(pars, utils.DATA_SOURCE_WIND)
+	items, err := data_manage.GetEdbInfoByCondition(condition, pars)
+	if err != nil {
+		return err
+	}
+
+	for _, v := range items {
+		startDate := v.EndDate.AddDate(0, 0, -3).Format(utils.FormatDate)
+		endDate := time.Now().Format(utils.FormatDate)
+		err = SyncEdbDataByWind(int64(v.EdbInfoId), v.EdbCode, startDate, endDate)
+		if err != nil {
+			return err
+		}
+		minDate, maxDate, err := data_manage.GetEdbDataWindMaxOrMinDate(v.EdbInfoId)
+		if err != nil {
+			return err
+		}
+		fmt.Println("minDate:" + minDate + ";maxDate:" + maxDate)
+		err = data_manage.ModifyEdbDataInfoDate(v.EdbInfoId, maxDate)
+		if err != nil {
+			return err
+		}
+	}
+
+	return err
+}

+ 8 - 0
utils/config.go

@@ -37,6 +37,10 @@ var (
 	AccessKeySecret string = "12kk1ptCHoGWedhBnKRVW5hRJzq9Fq"
 )
 
+var (
+	Hz_Data_Url string
+)
+
 func init() {
 	RunMode = beego.AppConfig.String("run_mode")
 	config, err := beego.AppConfig.GetSection(RunMode)
@@ -55,6 +59,8 @@ func init() {
 		WxAppSecret = "26c586e7ccb3c575433f0f37797b3eeb"
 		TemplateId = "P0klzaZjEI2UYth-z-WnmtOQgyxcF8klPoA_MlsA8Eo"
 		RemindTemplateId="PaHpQjVffrvmeW8wiOUcqlEhnD1LXyU9FnPVF-Jg9wM"
+
+		Hz_Data_Url="http://47.100.166.55:7002/"
 	} else {
 		CompanyId = 16
 		RealName="超级管理员"
@@ -63,6 +69,8 @@ func init() {
 		WxAppSecret = "f4d52e34021eee262dce9682b31f8861"
 		TemplateId = "P0klzaZjEI2UYth-z-WnmtOQgyxcF8klPoA_MlsA8Eo"
 		RemindTemplateId="9JYV6sHMJlu2EHRBIj_8ift6wkrrTb9_UO-M_-YXKBw"
+
+		Hz_Data_Url="http://8.136.199.33:8040/"
 	}
 }
 

+ 5 - 0
utils/constants.go

@@ -60,3 +60,8 @@ const (
 	//EmailSendToHzUsers = "317699326@qq.com"
 )
 
+//数据来源渠道
+const (
+	DATA_SOURCE_THS  = iota + 1 //同花顺
+	DATA_SOURCE_WIND            //wind
+)