Browse Source

indexCode逻辑优化

ziwen 3 years ago
parent
commit
620fee19f6

+ 1 - 1
models/base_from_trade_cffex.go

@@ -41,7 +41,7 @@ func AddBaseFromTradeCffexIndex(item *BaseFromTradeCffexIndex) (lastId int64, er
 func GetBaseFromTradeCffexIndexAll(dateStr string) (list []*BaseFromTradeCffexIndex, err error) {
 	o := orm.NewOrm()
 	o.Using("data")
-	sql := `SELECT * FROM base_from_trade_cffex_index WHERE date_time=?`
+	sql := `SELECT * FROM base_from_trade_cffex_index WHERE data_time=?`
 	_, err = o.Raw(sql, dateStr).QueryRows(&list)
 	return
 }

+ 46 - 23
models/base_from_trade_ine.go

@@ -7,28 +7,35 @@ import (
 
 type BaseFromTradeIneIndex struct {
 	BaseFromTradeIneIndexId int `orm:"column(base_from_trade_ine_index_id);pk"`
-	Rank                         int
-	DealShortName                string
-	DealName                     string
-	DealCode                     string
-	DealValue                    int
-	DealChange                   int
-	BuyShortName                 string
-	BuyName                      string
-	BuyCode                      string
-	BuyValue                     int
-	BuyChange                    int
-	SoldShortName                string
-	SoldName                     string
-	SoldCode                     string
-	SoldValue                    int
-	SoldChange                   int
-	Frequency                    string
-	ClassifyName                 string
-	ClassifyType                 string
-	CreateTime                   time.Time
-	ModifyTime                   time.Time
-	DataTime                     string
+	Rank                    int
+	DealShortName           string
+	DealName                string
+	DealCode                string
+	DealValue               int
+	DealChange              int
+	BuyShortName            string
+	BuyName                 string
+	BuyCode                 string
+	BuyValue                int
+	BuyChange               int
+	SoldShortName           string
+	SoldName                string
+	SoldCode                string
+	SoldValue               int
+	SoldChange              int
+	Frequency               string
+	ClassifyName            string
+	ClassifyType            string
+	CreateTime              time.Time
+	ModifyTime              time.Time
+	DataTime                string
+}
+
+type BaseFromTradeMapping struct {
+	BaseFromTradeMappingId int `json:"column(base_from_trade_mapping_id);pk"`
+	IndexName              string
+	IndexCode              string
+	Exchange               string
 }
 
 func AddBaseFromTradeIneIndex(item *BaseFromTradeIneIndex) (lastId int64, err error) {
@@ -41,7 +48,7 @@ func AddBaseFromTradeIneIndex(item *BaseFromTradeIneIndex) (lastId int64, err er
 func GetBaseFromTradeIneIndexAll(dateStr string) (list []*BaseFromTradeIneIndex, err error) {
 	o := orm.NewOrm()
 	o.Using("data")
-	sql := `SELECT * FROM base_from_trade_ine_index where date=?`
+	sql := `SELECT * FROM base_from_trade_ine_index where data_time=?`
 	_, err = o.Raw(sql, dateStr).QueryRows(&list)
 	return
 }
@@ -53,3 +60,19 @@ func ModifyBaseFromTradeIneIndex(dealValue, buyValue, soldValue int, dataId int)
 	_, err = o.Raw(sql, dealValue, buyValue, soldValue, dataId).Exec()
 	return
 }
+
+func GetIndexCodeFromMapping(exchange string) (list []*BaseFromTradeMapping, err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := `SELECT * FROM base_from_trade_mapping where exchange=?`
+	_, err = o.Raw(sql, exchange).QueryRows(&list)
+	return
+}
+
+func AddBaseFromTradeMapping(indexName, indexCode, exchange string) (err error) {
+	o := orm.NewOrm()
+	o.Using("data")
+	sql := "Insert Into base_from_trade_mapping(index_name,index_code,exchange) Values('"+indexName+"','"+indexCode+"','"+exchange+"')"
+	_, err = o.Raw(sql).Exec()
+	return
+}

+ 11 - 9
services/commodity_trade_cffex.go

@@ -27,15 +27,17 @@ type XmlItem struct {
 }
 
 var cffexIndexCode string
-var cffexIndexCodeMap = make(map[string]struct{})
+var cffexIndexCodeMap = make(map[string]string)
 var cffexActionCodeMap = make(map[string]map[string]int)
 
-func cffexIndexCodeGenerator() string {
-	for {
+func cffexIndexCodeGenerator(indexName string) string {
+	cffexIndexCode,_ := cffexIndexCodeMap[indexName]
+	if cffexIndexCode == "" {
 		cffexIndexCode = fmt.Sprintf("CFFEX%s", time.Now().Format(utils.FormatDateTimeUnSpace)+strconv.Itoa(utils.GetRandInt(1, 100)))
-		if _, ok := cffexIndexCodeMap[cffexIndexCode]; !ok {
-			cffexIndexCodeMap[cffexIndexCode] = struct{}{}
-			break
+		cffexIndexCodeMap[indexName] = cffexIndexCode
+		err := models.AddBaseFromTradeMapping(indexName, cffexIndexCode, "CFFEX")
+		if err != nil {
+			fmt.Println("add Code err:", err)
 		}
 	}
 	return cffexIndexCode
@@ -92,7 +94,7 @@ func SyncRankingFromCffex() {
 				case "0":
 					item.DealShortName = i.ShortName
 					item.DealName = fmt.Sprintf("%s", i.ShortName+"_成交量_"+i.ContractCode)
-					item.DealCode = cffexIndexCodeGenerator()
+					item.DealCode = cffexIndexCodeGenerator(item.DealName)
 					item.DealValue = i.Volume
 					item.DealChange = i.Varvolume
 
@@ -101,7 +103,7 @@ func SyncRankingFromCffex() {
 				case "1":
 					item.BuyShortName = i.ShortName
 					item.BuyName = fmt.Sprintf("%s", i.ShortName+"_持买单量_"+i.ContractCode)
-					item.BuyCode = cffexIndexCodeGenerator()
+					item.BuyCode = cffexIndexCodeGenerator(item.BuyName)
 					item.BuyValue = i.Volume
 					item.BuyChange = i.Varvolume
 
@@ -110,7 +112,7 @@ func SyncRankingFromCffex() {
 				case "2":
 					item.SoldShortName = i.ShortName
 					item.SoldName = fmt.Sprintf("%s", i.ShortName+"_持卖单量_"+i.ContractCode)
-					item.SoldCode = cffexIndexCodeGenerator()
+					item.SoldCode = cffexIndexCodeGenerator(item.SoldName)
 					item.SoldValue = i.Volume
 					item.SoldChange = i.Varvolume
 

+ 21 - 9
services/commodity_trade_ine.go

@@ -41,14 +41,16 @@ type message struct {
 }
 
 var ineIndexCode string
-var ineIndexCodeMap = make(map[string]struct{})
+var ineIndexCodeMap = make(map[string]string)
 
-func IneIndexCodeGenerator() string {
-	for {
+func IneIndexCodeGenerator(indexName string) string {
+	ineIndexCode,_ := ineIndexCodeMap[indexName]
+	if ineIndexCode == "" {
 		ineIndexCode = fmt.Sprintf("INE%s", time.Now().Format(utils.FormatDateTimeUnSpace)+strconv.Itoa(utils.GetRandInt(1, 100)))
-		if _, ok := ineIndexCodeMap[ineIndexCode]; !ok {
-			ineIndexCodeMap[ineIndexCode] = struct{}{}
-			break
+		ineIndexCodeMap[indexName] = ineIndexCode
+		err := models.AddBaseFromTradeMapping(indexName, ineIndexCode, "INE")
+		if err != nil {
+			fmt.Println("add Code err:", err)
 		}
 	}
 	return ineIndexCode
@@ -56,6 +58,13 @@ func IneIndexCodeGenerator() string {
 
 // SyncRankingFromIne 上海能源交易中心持单排名
 func SyncRankingFromIne() {
+	allCode, err := models.GetIndexCodeFromMapping("Ine")
+	if err != nil {
+		fmt.Println("select Code err:", err)
+	}
+	for _, item := range allCode {
+		ineIndexCodeMap[item.IndexName] = item.IndexCode
+	}
 	//获取新的指标信息
 	for i := 180; i > 0; i-- {
 		var message Message
@@ -82,6 +91,9 @@ func SyncRankingFromIne() {
 		for _, v := range allIndex {
 			indexKey := v.DealName + v.BuyName + v.SoldName + tradeDate
 			existIndexMap[indexKey] = v
+			ineIndexCodeMap[v.BuyName] = v.BuyCode
+			ineIndexCodeMap[v.SoldName] = v.SoldCode
+			ineIndexCodeMap[v.DealName] = v.DealCode
 		}
 		var itemVerifyCode int
 		//处理指标
@@ -95,9 +107,9 @@ func SyncRankingFromIne() {
 				item.DealName = strings.Replace(fmt.Sprintf("%s", p.ParticipantName1+"_成交量"+"_"+p.ProductName+"_"+p.ContractCode), " ", "", -1)
 				item.BuyName = strings.Replace(fmt.Sprintf("%s", p.ParticipantName2+"_持买单量"+"_"+p.ProductName+"_"+p.ContractCode), " ", "", -1)
 				item.SoldName = strings.Replace(fmt.Sprintf("%s", p.ParticipantName3+"_持卖单量"+"_"+p.ProductName+"_"+p.ContractCode), " ", "", -1)
-				item.DealCode = IneIndexCodeGenerator()
-				item.BuyCode = IneIndexCodeGenerator()
-				item.SoldCode = IneIndexCodeGenerator()
+				item.DealCode = IneIndexCodeGenerator(item.DealName)
+				item.BuyCode = IneIndexCodeGenerator(item.BuyName)
+				item.SoldCode = IneIndexCodeGenerator(item.SoldName)
 				item.DealValue = p.Deal
 				item.DealChange = p.Change1
 				item.BuyValue = p.BuyIn

+ 1 - 1
services/task.go

@@ -15,6 +15,6 @@ func Task() {
 
 	//SyncRankingFromDalian2()
 	//SyncStorageFromEic()
-	SyncStorageFromEic()
+	//SyncStorageFromEic()
 	fmt.Println("end crawler")
 }