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

fix:处理交易所分类

Roc 1 жил өмнө
parent
commit
dca92f4a0b

+ 51 - 0
models/data_manage/trade_position_analysis.go

@@ -203,3 +203,54 @@ func GetTradePositionTopOriginDataTimes(exchange string) (dates []string, err er
 	_, err = o.Raw(sql).QueryRows(&dates)
 	return
 }
+
+// BaseFromTradeClassify 交易所分类表
+type BaseFromTradeClassify struct {
+	Id           uint64    `orm:"column(id);pk"`
+	ClassifyName string    //分类名称
+	ClassifyType string    //分类名称下的类型
+	Exchange     string    //交易所
+	CreateTime   time.Time //插入时间
+	ModifyTime   time.Time //修改时间
+}
+
+// GetAllBaseFromTradeClassify 获取所有的交易所分类列表
+func GetAllBaseFromTradeClassify() (list []BaseFromTradeClassify, err error) {
+	sql := `SELECT * FROM base_from_trade_classify   `
+
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Raw(sql).QueryRows(&list)
+
+	return
+}
+
+// MultiAddBaseFromTradeClassify 批量插入交易所分类
+func MultiAddBaseFromTradeClassify(items []*BaseFromTradeClassify) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.InsertMulti(len(items), items)
+	return
+}
+
+type TradeClassifyName struct {
+	ClassifyName string //分类名称
+	ClassifyType string //分类名称下的类型
+}
+
+// GetExchangeClassify 获取交易所分类列表
+func GetExchangeClassify(exchange string) (list []TradeClassifyName, err error) {
+	tableName := "base_from_trade_" + exchange + "_index"
+	orderStr := "classify_name DESC, classify_type asc"
+	if exchange == "zhengzhou" {
+		orderStr = "classify_name asc"
+	}
+	sql := `SELECT classify_name, classify_type FROM ` + tableName + ` WHERE rank <=20 and rank > 0 GROUP BY classify_name, classify_type  `
+	sql += ` ORDER BY ` + orderStr
+
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Raw(sql).QueryRows(&list)
+
+	return
+}

+ 1 - 0
models/db.go

@@ -200,6 +200,7 @@ func initTradePositionTop() {
 		new(data_manage.TradePositionShanghaiTop),
 		new(data_manage.TradePositionIneTop),
 		new(data_manage.TradePositionCffexTop),
+		new(data_manage.BaseFromTradeClassify), // 交易所分类
 	)
 }
 

+ 54 - 1
services/data/trade_position_analysis.go

@@ -15,7 +15,7 @@ import (
 func InitPositionTask(cont context.Context) (err error) {
 	exchanges := []string{"zhengzhou", "dalian", "shanghai", "cffex", "ine"} //郑商所,大商所,上期所,中金所,上期能源
 	for i := 1; i >= 0; i-- {
-		startDate := time.Now().AddDate( 0, 0, -i).Format(utils.FormatDate)
+		startDate := time.Now().AddDate(0, 0, -i).Format(utils.FormatDate)
 		endDate := startDate
 		for _, v := range exchanges {
 			exchange := v
@@ -37,6 +37,59 @@ func InitPositionTask(cont context.Context) (err error) {
 			utils.FileLog.Info("InitTradePosition:" + exchange + "已完成")
 		}
 	}
+
+	// 处理交易所的分类
+	{
+		allBaseFromTradeClassify, tmpErr := data_manage.GetAllBaseFromTradeClassify()
+		if tmpErr != nil {
+			utils.FileLog.Info(fmt.Sprintf("获取所有交易所分类失败,;err:%s", tmpErr.Error()))
+			return
+		}
+		tradeClassifyMap := make(map[string]int)
+		for _, v := range allBaseFromTradeClassify {
+			key := fmt.Sprintf("%s_%s_%s", v.Exchange, v.ClassifyName, v.ClassifyType)
+			tradeClassifyMap[key] = 1
+		}
+
+		baseFromTradeClassifyList := make([]*data_manage.BaseFromTradeClassify, 0)
+		for _, v := range exchanges {
+			tradeClassifyNameList, tmpErr := data_manage.GetExchangeClassify(v)
+			if tmpErr != nil {
+				utils.FileLog.Info(fmt.Sprintf("获取%s分类失败,;err:%s", v, tmpErr.Error()))
+				continue
+			}
+
+			for _, classify := range tradeClassifyNameList {
+				key := fmt.Sprintf("%s_%s_%s", v, classify.ClassifyName, classify.ClassifyType)
+
+				if _, ok := tradeClassifyMap[key]; !ok {
+					baseFromTradeClassifyList = append(baseFromTradeClassifyList, &data_manage.BaseFromTradeClassify{
+						Id:           0,
+						ClassifyName: classify.ClassifyName,
+						ClassifyType: classify.ClassifyType,
+						Exchange:     v,
+						CreateTime:   time.Now(),
+						ModifyTime:   time.Now(),
+					})
+				}
+			}
+		}
+
+		lenAddList := len(baseFromTradeClassifyList)
+		if lenAddList > 0 {
+			baseAddNum := 500
+			num := lenAddList / baseAddNum
+			lastNum := lenAddList % baseAddNum
+			for i := 0; i <= num; i++ {
+				tmpNum := baseAddNum
+				if i == num && lastNum > 0 {
+					tmpNum = lastNum
+				}
+				data_manage.MultiAddBaseFromTradeClassify(baseFromTradeClassifyList[i*baseAddNum : (i*baseAddNum + tmpNum)])
+			}
+		}
+	}
+
 	return
 }