commodity_trade_shanghai.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package services
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "hongze/hongze_data_crawler/models"
  6. "hongze/hongze_data_crawler/utils"
  7. "rdluck_tools/http"
  8. "strconv"
  9. "strings"
  10. "time"
  11. )
  12. type Position []struct {
  13. ContractCode string `json:"INSTRUMENTID"`
  14. ProductSortNo int `json:"PRODUCTSORTNO"`
  15. Rank int `json:"RANK"`
  16. ParticipantID1 string `json:"PARTICIPANTID1"`
  17. ParticipantName1 string `json:"PARTICIPANTABBR1"`
  18. Deal int `json:"CJ1"`
  19. Change1 int `json:"CJ1_CHG"`
  20. ParticipantID2 string `json:"PARTICIPANTID2"`
  21. ParticipantName2 string `json:"PARTICIPANTABBR2"`
  22. BuyIn int `json:"CJ2"`
  23. Change2 int `json:"CJ2_CHG"`
  24. ParticipantID3 string `json:"PARTICIPANTID3"`
  25. ParticipantName3 string `json:"PARTICIPANTABBR3"`
  26. SoldOut int `json:"CJ3"`
  27. Change3 int `json:"CJ3_CHG"`
  28. ProductName string `json:"PRODUCTNAME"`
  29. }
  30. type Message struct {
  31. Position Position `json:"o_cursor"`
  32. Length string `json:"showlength"`
  33. Code int `json:"o_code"`
  34. Msg string `json:"o_msg"`
  35. ReportDate string `json:"report_date"`
  36. UpdateDate string `json:"update_date"`
  37. PrintDate string `json:"print_date"`
  38. }
  39. var indexCode string
  40. var indexCodeMap = make(map[string]string)
  41. func shIndexCodeGenerator(indexName string) string {
  42. indexCode,_ := indexCodeMap[indexName]
  43. if indexCode == "" {
  44. indexCode = fmt.Sprintf("SH%s", time.Now().Format(utils.FormatDateTimeUnSpace)+strconv.Itoa(utils.GetRandInt(1, 100)))
  45. indexCodeMap[indexName] = indexCode
  46. err := models.AddBaseFromTradeMapping(indexName, indexCode, "SH")
  47. if err != nil {
  48. fmt.Println("add Code err:", err)
  49. }
  50. }
  51. return indexCode
  52. }
  53. // SyncRankingFromShangHai 上海商品交易所持单排名
  54. func SyncRankingFromShangHai() {
  55. //获取新的指标信息
  56. for i := 180; i > 0; i-- {
  57. var message Message
  58. var item = new(models.BaseFromTradeShanghaiIndex)
  59. zzUrl := "http://www.shfe.com.cn/data/dailydata/kx/pm%s.dat"
  60. date := time.Now().AddDate(0, 0, -i)
  61. dateStr := date.Format(utils.FormatDateUnSpace)
  62. zzUrl = fmt.Sprintf(zzUrl, dateStr)
  63. fmt.Println(zzUrl)
  64. body, err := http.Get(zzUrl)
  65. if err != nil {
  66. fmt.Println("err:", err)
  67. }
  68. err = json.Unmarshal(body, &message)
  69. var position = message.Position
  70. var tradeDate = message.ReportDate
  71. //获取所有指标信息
  72. allIndex, err := models.GetBaseFromTradeShangHaiIndexAll(dateStr)
  73. if err != nil {
  74. return
  75. }
  76. existIndexMap := make(map[string]*models.BaseFromTradeShanghaiIndex)
  77. for _, v := range allIndex {
  78. indexKey := v.DealName + v.BuyName + v.SoldName + v.DataTime
  79. existIndexMap[indexKey] = v
  80. }
  81. var itemVerifyCode int
  82. //处理指标
  83. for _, p := range position {
  84. if p.Rank > 0 && p.Rank <40 && p.ParticipantName1 != "" {
  85. //成交量
  86. item.Rank = p.Rank
  87. item.DealShortName = p.ParticipantName1
  88. item.BuyShortName = p.ParticipantName2
  89. item.SoldShortName = p.ParticipantName3
  90. item.DealName = strings.Replace(fmt.Sprintf("%s", p.ParticipantName1+"_成交量"+"_"+p.ProductName+"_"+p.ContractCode), " ", "", -1)
  91. item.BuyName = strings.Replace(fmt.Sprintf("%s", p.ParticipantName2+"_持买单量"+"_"+p.ProductName+"_"+p.ContractCode), " ", "", -1)
  92. item.SoldName = strings.Replace(fmt.Sprintf("%s", p.ParticipantName3+"_持卖单量"+"_"+p.ProductName+"_"+p.ContractCode), " ", "", -1)
  93. item.DealCode = shIndexCodeGenerator(item.DealName)
  94. item.BuyCode = shIndexCodeGenerator(item.BuyName)
  95. item.SoldCode = shIndexCodeGenerator(item.SoldCode)
  96. item.DealValue = p.Deal
  97. item.DealChange = p.Change1
  98. item.BuyValue = p.BuyIn
  99. item.BuyChange = p.Change2
  100. item.SoldValue = p.SoldOut
  101. item.SoldChange = p.Change3
  102. item.ClassifyName = strings.Replace(p.ProductName, " ", "", -1)
  103. item.ClassifyType = strings.Replace(p.ContractCode, " ", "", -1)
  104. item.Frequency = "日度"
  105. item.CreateTime = time.Now()
  106. item.ModifyTime = time.Now()
  107. item.DataTime = tradeDate
  108. itemVerifyCode = item.BuyValue + item.DealValue + item.SoldValue
  109. if existIndex, ok := existIndexMap[item.DealName + item.BuyName + item.SoldName + item.DataTime]; !ok {
  110. newID, err := models.AddBaseFromTradeShangHaiIndex(item)
  111. if err != nil {
  112. fmt.Println("insert error:", err)
  113. }
  114. fmt.Println("insert new indexID:", newID)
  115. } else if existIndex != nil && itemVerifyCode != (existIndex.DealValue+existIndex.BuyValue+existIndex.SoldValue) {
  116. //更新
  117. err := models.ModifyBaseFromTradeShangHaiIndex(item.DealValue, item.BuyValue, item.SoldValue, existIndex.BaseFromTradeShangHaiIndexId)
  118. if err != nil {
  119. fmt.Println("data update err:", err)
  120. }
  121. }
  122. }
  123. }
  124. }
  125. fmt.Println("end")
  126. }