|
@@ -13,268 +13,126 @@ import (
|
|
|
|
|
|
type position []struct {
|
|
type position []struct {
|
|
ContractCode string `json:"INSTRUMENTID"`
|
|
ContractCode string `json:"INSTRUMENTID"`
|
|
- ParticipantID3 string `json:"PARTICIPANTID3"`
|
|
|
|
- ParticipantID2 string `json:"PARTICIPANTID2"`
|
|
|
|
- ParticipantID1 string `json:"PARTICIPANTID1"`
|
|
|
|
- ParticipantName3 string `json:"PARTICIPANTABBR3"`
|
|
|
|
- ParticipantName2 string `json:"PARTICIPANTABBR2"`
|
|
|
|
|
|
+ ProductSortNo int `json:"PRODUCTSORTNO"`
|
|
Rank int `json:"RANK"`
|
|
Rank int `json:"RANK"`
|
|
|
|
+ ParticipantID1 string `json:"PARTICIPANTID1"`
|
|
ParticipantName1 string `json:"PARTICIPANTABBR1"`
|
|
ParticipantName1 string `json:"PARTICIPANTABBR1"`
|
|
|
|
+ Deal int `json:"CJ1"`
|
|
|
|
+ Change1 int `json:"CJ1_CHG"`
|
|
|
|
+ ParticipantID2 string `json:"PARTICIPANTID2"`
|
|
|
|
+ ParticipantName2 string `json:"PARTICIPANTABBR2"`
|
|
BuyIn int `json:"CJ2"`
|
|
BuyIn int `json:"CJ2"`
|
|
- Deal string `json:"CJ1"`
|
|
|
|
- Change1 string `json:"CJ1_CHG"`
|
|
|
|
- Change3 string `json:"CJ3_CHG"`
|
|
|
|
- ProductName string `json:"PRODUCTNAME"`
|
|
|
|
- ProductSortNo int `json:"PRODUCTSORTNO"`
|
|
|
|
|
|
+ Change2 int `json:"CJ2_CHG"`
|
|
|
|
+ ParticipantID3 string `json:"PARTICIPANTID3"`
|
|
|
|
+ ParticipantName3 string `json:"PARTICIPANTABBR3"`
|
|
SoldOut int `json:"CJ3"`
|
|
SoldOut int `json:"CJ3"`
|
|
- Change2 string `json:"CJ2_CHG"`
|
|
|
|
|
|
+ Change3 int `json:"CJ3_CHG"`
|
|
|
|
+ ProductName string `json:"PRODUCTNAME"`
|
|
}
|
|
}
|
|
|
|
|
|
type message struct {
|
|
type message struct {
|
|
- Position position `json:"o_cursor"`
|
|
|
|
|
|
+ Position Position `json:"o_cursor"`
|
|
|
|
+ Length string `json:"showlength"`
|
|
Code int `json:"o_code"`
|
|
Code int `json:"o_code"`
|
|
Msg string `json:"o_msg"`
|
|
Msg string `json:"o_msg"`
|
|
ReportDate string `json:"report_date"`
|
|
ReportDate string `json:"report_date"`
|
|
UpdateDate string `json:"update_date"`
|
|
UpdateDate string `json:"update_date"`
|
|
|
|
+ PrintDate string `json:"print_date"`
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+var ineIndexCode string
|
|
|
|
+var ineIndexCodeMap = make(map[string]string)
|
|
|
|
+
|
|
|
|
+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)))
|
|
|
|
+ ineIndexCodeMap[indexName] = ineIndexCode
|
|
|
|
+ err := models.AddBaseFromTradeMapping(indexName, ineIndexCode, "INE")
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("add Code err:", err)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return ineIndexCode
|
|
}
|
|
}
|
|
|
|
|
|
// SyncRankingFromIne 上海能源交易中心持单排名
|
|
// SyncRankingFromIne 上海能源交易中心持单排名
|
|
func SyncRankingFromIne() {
|
|
func SyncRankingFromIne() {
|
|
- //获取所有指标信息
|
|
|
|
- allIndex, err := models.GetBaseFromTradeIneIndexAll()
|
|
|
|
|
|
+ allCode, err := models.GetIndexCodeFromMapping("Ine")
|
|
if err != nil {
|
|
if err != nil {
|
|
- fmt.Println("select err:", err)
|
|
|
|
|
|
+ fmt.Println("select Code err:", err)
|
|
}
|
|
}
|
|
- existIndexMap := make(map[string]*models.BaseFromTradeIneIndex)
|
|
|
|
- addIndexMap := make(map[string]string)
|
|
|
|
- indexCodeMap := make(map[string]struct{})
|
|
|
|
- for _, v := range allIndex {
|
|
|
|
- indexKey := v.IndexName
|
|
|
|
- existIndexMap[indexKey] = v
|
|
|
|
|
|
+ for _, item := range allCode {
|
|
|
|
+ ineIndexCodeMap[item.IndexName] = item.IndexCode
|
|
}
|
|
}
|
|
-
|
|
|
|
- existDataMap := make(map[string]*models.BaseFromTradeIneData)
|
|
|
|
-
|
|
|
|
//获取新的指标信息
|
|
//获取新的指标信息
|
|
- var message message
|
|
|
|
- var indexCode string
|
|
|
|
- var indexID int
|
|
|
|
- var indexKey string
|
|
|
|
- var dealItem = new(models.BaseFromTradeIneIndex)
|
|
|
|
- var buyItem = new(models.BaseFromTradeIneIndex)
|
|
|
|
- var soldItem = new(models.BaseFromTradeIneIndex)
|
|
|
|
- var dataItem = new(models.BaseFromTradeIneData)
|
|
|
|
- var existDataList []*models.BaseFromTradeIneData
|
|
|
|
- var dataTime time.Time
|
|
|
|
- var dataKey string
|
|
|
|
- body, err := http.Get("http://www.ine.cn/data/dailydata/kx/pm20211028.dat")
|
|
|
|
- if err != nil {
|
|
|
|
- fmt.Println("err:", err)
|
|
|
|
- }
|
|
|
|
- err = json.Unmarshal(body, &message)
|
|
|
|
- var position = message.Position
|
|
|
|
- var tradeDate = message.ReportDate
|
|
|
|
- //处理指标
|
|
|
|
- for _, p := range position {
|
|
|
|
- if p.ParticipantName1 != "" {
|
|
|
|
- //成交量
|
|
|
|
- dealItem.IndexName = strings.Replace(fmt.Sprintf("%s", p.ParticipantName1+"_成交量"+"_"+p.ProductName+"_"+p.ContractCode), " ", "", -1)
|
|
|
|
- for {
|
|
|
|
- indexCode = fmt.Sprintf("INE%s", time.Now().Format(utils.FormatDateTimeUnSpace)+strconv.Itoa(utils.GetRandInt(1, 100)))
|
|
|
|
- if _, ok := indexCodeMap[indexCode]; !ok {
|
|
|
|
- indexCodeMap[indexCode] = struct{}{}
|
|
|
|
- break
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- dealItem.IndexCode = indexCode
|
|
|
|
- dealItem.ClassifyName = strings.Replace(p.ProductName, " ", "", -1)
|
|
|
|
- dealItem.ClassifyType = strings.Replace(p.ContractCode, " ", "", -1)
|
|
|
|
- dealItem.CreateTime = time.Now()
|
|
|
|
- dealItem.Frequency = "日度"
|
|
|
|
- dealItem.ModifyTime = time.Now()
|
|
|
|
- if existIndex, ok := existIndexMap[dealItem.IndexName]; !ok {
|
|
|
|
- newID, err := models.AddBaseFromTradeIneIndex(dealItem)
|
|
|
|
- if err != nil {
|
|
|
|
- fmt.Println("insert error:", err)
|
|
|
|
- }
|
|
|
|
- indexID = int(newID)
|
|
|
|
- fmt.Println("new indexID:", indexID)
|
|
|
|
- addIndexMap[indexKey] = indexCode
|
|
|
|
- } else {
|
|
|
|
- indexID = existIndex.BaseFromTradeIneIndexId
|
|
|
|
- indexCode = existIndex.IndexCode
|
|
|
|
- }
|
|
|
|
- existDataList, err = models.GetBaseFromTradeIneDataByIndexCode(indexCode)
|
|
|
|
- if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
|
- fmt.Println("GetBaseFromTradeIneDataByIndexCode error:", err)
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- for _, v := range existDataList {
|
|
|
|
- key := v.IndexCode + v.DataTime
|
|
|
|
- existDataMap[key] = v
|
|
|
|
- }
|
|
|
|
- dataTime, err = time.Parse(utils.FormatDateUnSpace, tradeDate)
|
|
|
|
- if err != nil {
|
|
|
|
- fmt.Println("time.Parse Err:" + err.Error())
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- dataKey = indexCode + dataTime.Format(utils.FormatDate)
|
|
|
|
- if existDataItem, ok := existDataMap[dataKey]; !ok && indexCode != "" { //新增
|
|
|
|
-
|
|
|
|
- dataItem.BaseFromTradeIneIndexId = indexID
|
|
|
|
- dataItem.IndexCode = indexCode
|
|
|
|
- dataItem.DataTime = tradeDate
|
|
|
|
- dataItem.Value = p.Deal
|
|
|
|
- dataItem.AddCutValue = p.Change1
|
|
|
|
- dataItem.DataTimestamp = dataTime.UnixNano() / 1e6
|
|
|
|
- dataItem.CreateTime = time.Now()
|
|
|
|
- dataItem.ModifyTime = time.Now()
|
|
|
|
- _, err = models.AddBaseFromTradeIneData(dataItem)
|
|
|
|
- if err != nil {
|
|
|
|
- fmt.Println("data insert err:", err)
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- existDataMap[indexCode+tradeDate] = dataItem
|
|
|
|
- } else {
|
|
|
|
- if existDataItem != nil && existDataItem.Value != p.Deal { //修改数据
|
|
|
|
- err = models.ModifyBaseFromTradeIneDataData(p.Deal, p.Change1, existDataItem.BaseFromTradeIneDataId)
|
|
|
|
- if err != nil {
|
|
|
|
- fmt.Println("data update err:", err)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ for i := 180; i > 0; i-- {
|
|
|
|
+ var message Message
|
|
|
|
+ var item = new(models.BaseFromTradeIneIndex)
|
|
|
|
+ zzUrl := "http://www.ine.com.cn/data/dailydata/kx/pm%s.dat"
|
|
|
|
+ date := time.Now().AddDate(0, 0, -i)
|
|
|
|
+ dateStr := date.Format(utils.FormatDateUnSpace)
|
|
|
|
+ zzUrl = fmt.Sprintf(zzUrl, dateStr)
|
|
|
|
+ fmt.Println(zzUrl)
|
|
|
|
+ body, err := http.Get(zzUrl)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("err:", err)
|
|
}
|
|
}
|
|
|
|
+ err = json.Unmarshal(body, &message)
|
|
|
|
+ var position = message.Position
|
|
|
|
+ var tradeDate = message.ReportDate
|
|
|
|
+ existIndexMap := make(map[string]*models.BaseFromTradeIneIndex)
|
|
|
|
|
|
- if p.ParticipantName2 != "" {
|
|
|
|
- //持买单量
|
|
|
|
- buyItem.IndexName = strings.Replace(fmt.Sprintf("%s", p.ParticipantName2+"_持买单量"+"_"+p.ProductName+"_"+p.ContractCode), " ", "", -1)
|
|
|
|
- for {
|
|
|
|
- indexCode = fmt.Sprintf("INE%s", time.Now().Format(utils.FormatDateTimeUnSpace)+strconv.Itoa(utils.GetRandInt(1, 100)))
|
|
|
|
- if _, ok := indexCodeMap[indexCode]; !ok {
|
|
|
|
- indexCodeMap[indexCode] = struct{}{}
|
|
|
|
- break
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- buyItem.IndexCode = indexCode
|
|
|
|
- buyItem.ClassifyName = strings.Replace(p.ProductName, " ", "", -1)
|
|
|
|
- buyItem.ClassifyType = strings.Replace(p.ContractCode, " ", "", -1)
|
|
|
|
- buyItem.CreateTime = time.Now()
|
|
|
|
- buyItem.Frequency = "日度"
|
|
|
|
- buyItem.ModifyTime = time.Now()
|
|
|
|
- if existIndex, ok := existIndexMap[buyItem.IndexName]; !ok {
|
|
|
|
- newID, err := models.AddBaseFromTradeIneIndex(buyItem)
|
|
|
|
- if err != nil {
|
|
|
|
- fmt.Println("insert error:", err)
|
|
|
|
- }
|
|
|
|
- indexID = int(newID)
|
|
|
|
- fmt.Println("new indexID:", indexID)
|
|
|
|
- addIndexMap[indexKey] = indexCode
|
|
|
|
- } else {
|
|
|
|
- indexID = existIndex.BaseFromTradeIneIndexId
|
|
|
|
- indexCode = existIndex.IndexCode
|
|
|
|
- }
|
|
|
|
- existDataList, err = models.GetBaseFromTradeIneDataByIndexCode(indexCode)
|
|
|
|
- if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- for _, v := range existDataList {
|
|
|
|
- key := v.IndexCode + v.DataTime
|
|
|
|
- existDataMap[key] = v
|
|
|
|
- }
|
|
|
|
- dataTime, err := time.Parse(utils.FormatDateUnSpace, tradeDate)
|
|
|
|
- if err != nil {
|
|
|
|
- fmt.Println("time.Parse Err:" + err.Error())
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- dataKey = indexCode + dataTime.Format(utils.FormatDate)
|
|
|
|
- if existDataItem, ok := existDataMap[dataKey]; !ok && indexCode != "" { //新增
|
|
|
|
|
|
+ //获取所有指标信息
|
|
|
|
+ allIndex, err := models.GetBaseFromTradeIneIndexAll(dateStr)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("select err:", err)
|
|
|
|
+ }
|
|
|
|
+ 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
|
|
|
|
+ //处理指标
|
|
|
|
+ for _, p := range position {
|
|
|
|
+ if p.Rank > 0 && p.Rank < 40 && p.ParticipantName1 != "" {
|
|
|
|
+ //成交量
|
|
|
|
+ item.Rank = p.Rank
|
|
|
|
+ item.DealShortName = p.ParticipantName1
|
|
|
|
+ item.BuyShortName = p.ParticipantName2
|
|
|
|
+ item.SoldShortName = p.ParticipantName3
|
|
|
|
+ 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.DealName)
|
|
|
|
+ item.BuyCode = IneIndexCodeGenerator(item.BuyName)
|
|
|
|
+ item.SoldCode = IneIndexCodeGenerator(item.SoldName)
|
|
|
|
+ item.DealValue = p.Deal
|
|
|
|
+ item.DealChange = p.Change1
|
|
|
|
+ item.BuyValue = p.BuyIn
|
|
|
|
+ item.BuyChange = p.Change2
|
|
|
|
+ item.SoldValue = p.SoldOut
|
|
|
|
+ item.SoldChange = p.Change3
|
|
|
|
+ item.ClassifyName = strings.Replace(p.ProductName, " ", "", -1)
|
|
|
|
+ item.ClassifyType = strings.Replace(p.ContractCode, " ", "", -1)
|
|
|
|
+ item.Frequency = "日度"
|
|
|
|
+ item.CreateTime = time.Now()
|
|
|
|
+ item.ModifyTime = time.Now()
|
|
|
|
+ item.DataTime = tradeDate
|
|
|
|
|
|
- dataItem.BaseFromTradeIneIndexId = indexID
|
|
|
|
- dataItem.IndexCode = indexCode
|
|
|
|
- dataItem.DataTime = tradeDate
|
|
|
|
- dataItem.Value = fmt.Sprintf("%d", p.BuyIn)
|
|
|
|
- dataItem.AddCutValue = p.Change2
|
|
|
|
- dataItem.DataTimestamp = dataTime.UnixNano() / 1e6
|
|
|
|
- dataItem.CreateTime = time.Now()
|
|
|
|
- dataItem.ModifyTime = time.Now()
|
|
|
|
- _, err = models.AddBaseFromTradeIneData(dataItem)
|
|
|
|
- if err != nil {
|
|
|
|
- fmt.Println("data insert err:", err)
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- existDataMap[indexCode+tradeDate] = dataItem
|
|
|
|
- } else {
|
|
|
|
- if existDataItem != nil && existDataItem.Value != fmt.Sprintf("%d", p.BuyIn) { //修改数据
|
|
|
|
- err = models.ModifyBaseFromTradeIneDataData(fmt.Sprintf("%d", p.BuyIn), p.Change2, existDataItem.BaseFromTradeIneDataId)
|
|
|
|
|
|
+ itemVerifyCode = item.BuyValue + item.DealValue + item.SoldValue
|
|
|
|
+ if existIndex, ok := existIndexMap[item.DealName+item.BuyName+item.SoldName+tradeDate]; !ok {
|
|
|
|
+ newID, err := models.AddBaseFromTradeIneIndex(item)
|
|
if err != nil {
|
|
if err != nil {
|
|
- fmt.Println("data update err:", err)
|
|
|
|
|
|
+ fmt.Println("insert error:", err)
|
|
}
|
|
}
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if p.ParticipantName3 != "" {
|
|
|
|
- //持卖单量
|
|
|
|
- soldItem.IndexName = strings.Replace(fmt.Sprintf("%s", p.ParticipantName3+"_持卖单量"+"_"+p.ProductName+"_"+p.ContractCode), " ", "", -1)
|
|
|
|
- for {
|
|
|
|
- indexCode = fmt.Sprintf("INE%s", time.Now().Format(utils.FormatDateTimeUnSpace)+strconv.Itoa(utils.GetRandInt(1, 100)))
|
|
|
|
- if _, ok := indexCodeMap[indexCode]; !ok {
|
|
|
|
- indexCodeMap[indexCode] = struct{}{}
|
|
|
|
- break
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- soldItem.IndexCode = indexCode
|
|
|
|
- soldItem.ClassifyName = strings.Replace(p.ProductName, " ", "", -1)
|
|
|
|
- soldItem.ClassifyType = strings.Replace(p.ContractCode, " ", "", -1)
|
|
|
|
- soldItem.CreateTime = time.Now()
|
|
|
|
- soldItem.Frequency = "日度"
|
|
|
|
- soldItem.ModifyTime = time.Now()
|
|
|
|
- if existIndex, ok := existIndexMap[soldItem.IndexName]; !ok {
|
|
|
|
- newID, err := models.AddBaseFromTradeIneIndex(soldItem)
|
|
|
|
- if err != nil {
|
|
|
|
- fmt.Println("insert error:", err)
|
|
|
|
- }
|
|
|
|
- indexID = int(newID)
|
|
|
|
- fmt.Println("new indexID:", indexID)
|
|
|
|
- addIndexMap[indexKey] = indexCode
|
|
|
|
- } else {
|
|
|
|
- indexID = existIndex.BaseFromTradeIneIndexId
|
|
|
|
- indexCode = existIndex.IndexCode
|
|
|
|
- }
|
|
|
|
- existDataList, err = models.GetBaseFromTradeIneDataByIndexCode(indexCode)
|
|
|
|
- if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
|
- fmt.Println("GetBaseFromTradeIneDataByIndexCode error:", err)
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- for _, v := range existDataList {
|
|
|
|
- key := v.IndexCode + v.DataTime
|
|
|
|
- existDataMap[key] = v
|
|
|
|
- }
|
|
|
|
- dataTime, err = time.Parse(utils.FormatDateUnSpace, tradeDate)
|
|
|
|
- if err != nil {
|
|
|
|
- fmt.Println("time.Parse Err:" + err.Error())
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- dataKey = indexCode + dataTime.Format(utils.FormatDate)
|
|
|
|
- if existDataItem, ok := existDataMap[dataKey]; !ok && indexCode != "" { //新增
|
|
|
|
-
|
|
|
|
- dataItem.BaseFromTradeIneIndexId = indexID
|
|
|
|
- dataItem.IndexCode = indexCode
|
|
|
|
- dataItem.DataTime = tradeDate
|
|
|
|
- dataItem.Value = fmt.Sprintf("%d", p.SoldOut)
|
|
|
|
- dataItem.AddCutValue = p.Change3
|
|
|
|
- dataItem.DataTimestamp = dataTime.UnixNano() / 1e6
|
|
|
|
- dataItem.CreateTime = time.Now()
|
|
|
|
- dataItem.ModifyTime = time.Now()
|
|
|
|
- _, err = models.AddBaseFromTradeIneData(dataItem)
|
|
|
|
- if err != nil {
|
|
|
|
- fmt.Println("data insert err:", err)
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- existDataMap[indexCode+tradeDate] = dataItem
|
|
|
|
- } else {
|
|
|
|
- if existDataItem != nil && existDataItem.Value != fmt.Sprintf("%d", p.SoldOut) { //修改数据
|
|
|
|
- err = models.ModifyBaseFromTradeIneDataData(fmt.Sprintf("%d", p.SoldOut), p.Change3, existDataItem.BaseFromTradeIneDataId)
|
|
|
|
|
|
+ fmt.Println("insert new indexID:", newID)
|
|
|
|
+ } else if existIndex != nil && itemVerifyCode != (existIndex.DealValue+existIndex.BuyValue+existIndex.SoldValue) {
|
|
|
|
+ //更新
|
|
|
|
+ err := models.ModifyBaseFromTradeIneIndex(item.DealValue, item.BuyValue, item.SoldValue, existIndex.BaseFromTradeIneIndexId)
|
|
if err != nil {
|
|
if err != nil {
|
|
fmt.Println("data update err:", err)
|
|
fmt.Println("data update err:", err)
|
|
}
|
|
}
|