exchange_crawler.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_index_lib/models"
  5. "fmt"
  6. "strings"
  7. "time"
  8. )
  9. // 交易所爬虫
  10. type ExchangeCrawler struct {
  11. BaseAuthController
  12. }
  13. // @Title 刷新数据
  14. // @Description 刷新数据接口
  15. // @Param request body models.AddEdbClassifyReq true "type json string"
  16. // @Success 200 {object} models.EdbClassify
  17. // @router /refresh/ine [post]
  18. func (this *ExchangeCrawler) RefreshIne() {
  19. br := new(models.BaseResponse).Init()
  20. defer func() {
  21. this.Data["json"] = br
  22. this.ServeJSON()
  23. }()
  24. var req models.RefreshINEExchangeReq
  25. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  26. if err != nil {
  27. br.Msg = "参数解析异常!"
  28. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  29. return
  30. }
  31. message := req.Data
  32. var position = message.OCursor
  33. var tradeDate = message.ReportDate
  34. existIndexMap := make(map[string]*models.BaseFromTradeIneIndex)
  35. //获取所有指标信息
  36. allIndex, err := models.GetBaseFromTradeIneIndexAll(req.Date)
  37. if err != nil {
  38. fmt.Println("select err:", err)
  39. }
  40. for _, v := range allIndex {
  41. indexKey := v.DealName + v.BuyName + v.SoldName
  42. existIndexMap[indexKey] = v
  43. }
  44. var itemVerifyCode int
  45. //处理指标
  46. for _, p := range position {
  47. var item = new(models.BaseFromTradeIneIndex)
  48. if p.Rank > 0 && p.Rank < 40 && p.Participantabbr1 != "" {
  49. //成交量
  50. item.Rank = p.Rank
  51. item.DealShortName = p.Participantabbr1
  52. item.BuyShortName = p.Participantabbr2
  53. item.SoldShortName = p.Participantabbr3
  54. item.DealName = strings.Replace(fmt.Sprintf("%s", p.Participantabbr1+"_"+p.Instrumentid+"_成交量(手)"), " ", "", -1)
  55. item.BuyName = strings.Replace(fmt.Sprintf("%s", p.Participantabbr2+"_"+p.Instrumentid+"_持买单量(手)"), " ", "", -1)
  56. item.SoldName = strings.Replace(fmt.Sprintf("%s", p.Participantabbr3+"_"+p.Instrumentid+"_持卖单量(手)"), " ", "", -1)
  57. item.DealCode = models.IneIndexCodeGenerator(item.DealShortName, item.DealName, p.Instrumentid, "deal")
  58. item.BuyCode = models.IneIndexCodeGenerator(item.BuyShortName, item.BuyName, p.Instrumentid, "buy")
  59. item.SoldCode = models.IneIndexCodeGenerator(item.SoldShortName, item.SoldName, p.Instrumentid, "sold")
  60. item.ClassifyName = strings.Replace(p.Productname, " ", "", -1)
  61. item.ClassifyType = strings.Replace(p.Instrumentid, " ", "", -1)
  62. item.Frequency = "日度"
  63. item.CreateTime = time.Now()
  64. item.ModifyTime = time.Now()
  65. item.DataTime = tradeDate
  66. if deal, ok := p.Deal.(float64); ok {
  67. item.DealValue = int(deal)
  68. }
  69. if change1, ok := p.Change1.(float64); ok {
  70. item.DealChange = int(change1)
  71. }
  72. if buyIn, ok := p.BuyIn.(float64); ok {
  73. item.BuyValue = int(buyIn)
  74. }
  75. if change2, ok := p.Change2.(float64); ok {
  76. item.BuyChange = int(change2)
  77. }
  78. if soldOut, ok := p.SoldOut.(float64); ok {
  79. item.SoldValue = int(soldOut)
  80. }
  81. if change3, ok := p.Change3.(float64); ok {
  82. item.SoldChange = int(change3)
  83. }
  84. itemVerifyCode = item.BuyValue + item.DealValue + item.SoldValue
  85. if existIndex, ok := existIndexMap[item.DealName+item.BuyName+item.SoldName]; !ok {
  86. newID, err := models.AddBaseFromTradeIneIndex(item)
  87. if err != nil {
  88. fmt.Println("insert error:", err)
  89. }
  90. fmt.Println("insert new indexID:", newID)
  91. } else if existIndex != nil && itemVerifyCode != (existIndex.DealValue+existIndex.BuyValue+existIndex.SoldValue) {
  92. //更新
  93. err := models.ModifyBaseFromTradeIneIndex(item.DealValue, item.BuyValue, item.SoldValue, existIndex.BaseFromTradeIneIndexId)
  94. if err != nil {
  95. fmt.Println("data update err:", err)
  96. }
  97. }
  98. } else if p.Rank == 999 {
  99. //Top 20
  100. item.Rank = p.Rank
  101. item.DealShortName = p.Participantabbr1
  102. item.BuyShortName = p.Participantabbr2
  103. item.SoldShortName = p.Participantabbr3
  104. item.DealName = strings.Replace(fmt.Sprintf("%s", "top20_"+p.Instrumentid+"_成交量(手)"), " ", "", -1)
  105. item.BuyName = strings.Replace(fmt.Sprintf("%s", "top20_"+p.Instrumentid+"_持买单量(手)"), " ", "", -1)
  106. item.SoldName = strings.Replace(fmt.Sprintf("%s", "top20_"+p.Instrumentid+"_持卖单量(手)"), " ", "", -1)
  107. item.DealCode = models.IneIndexCodeGenerator("top20", item.DealName, p.Instrumentid, "deal")
  108. item.BuyCode = models.IneIndexCodeGenerator("top20", item.BuyName, p.Instrumentid, "buy")
  109. item.SoldCode = models.IneIndexCodeGenerator("top20", item.SoldName, p.Instrumentid, "sold")
  110. item.ClassifyName = strings.Replace(p.Productname, " ", "", -1)
  111. item.ClassifyType = strings.Replace(p.Instrumentid, " ", "", -1)
  112. item.Frequency = "日度"
  113. item.CreateTime = time.Now()
  114. item.ModifyTime = time.Now()
  115. item.DataTime = tradeDate
  116. if deal, ok := p.Deal.(float64); ok {
  117. item.DealValue = int(deal)
  118. }
  119. if change1, ok := p.Change1.(float64); ok {
  120. item.DealChange = int(change1)
  121. }
  122. if buyIn, ok := p.BuyIn.(float64); ok {
  123. item.BuyValue = int(buyIn)
  124. }
  125. if change2, ok := p.Change2.(float64); ok {
  126. item.BuyChange = int(change2)
  127. }
  128. if soldOut, ok := p.SoldOut.(float64); ok {
  129. item.SoldValue = int(soldOut)
  130. }
  131. if change3, ok := p.Change3.(float64); ok {
  132. item.SoldChange = int(change3)
  133. }
  134. itemVerifyCode = item.BuyValue + item.DealValue + item.SoldValue
  135. if existIndex, ok := existIndexMap[item.DealName+item.BuyName+item.SoldName]; !ok {
  136. newID, err := models.AddBaseFromTradeIneIndex(item)
  137. if err != nil {
  138. fmt.Println("insert error:", err)
  139. }
  140. fmt.Println("insert new indexID:", newID)
  141. } else if existIndex != nil && itemVerifyCode != (existIndex.DealValue+existIndex.BuyValue+existIndex.SoldValue) {
  142. //更新
  143. err := models.ModifyBaseFromTradeIneIndex(item.DealValue, item.BuyValue, item.SoldValue, existIndex.BaseFromTradeIneIndexId)
  144. if err != nil {
  145. fmt.Println("data update err:", err)
  146. }
  147. }
  148. }
  149. }
  150. br.Ret = 200
  151. br.Msg = "获取成功"
  152. br.Success = true
  153. }
  154. // @Title 刷新数据
  155. // @Description 刷新数据接口
  156. // @Param request body models.AddEdbClassifyReq true "type json string"
  157. // @Success 200 {object} models.EdbClassify
  158. // @router /refresh/sh [post]
  159. func (this *ExchangeCrawler) RefreshSH() {
  160. br := new(models.BaseResponse).Init()
  161. defer func() {
  162. this.Data["json"] = br
  163. this.ServeJSON()
  164. }()
  165. var req models.RefreshSHExchangeReq
  166. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  167. if err != nil {
  168. br.Msg = "参数解析异常!"
  169. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  170. return
  171. }
  172. message := req.Data
  173. var position = message.Position
  174. var tradeDate = message.ReportDate
  175. existIndexMap := make(map[string]*models.BaseFromTradeShanghaiIndex)
  176. //获取所有指标信息
  177. allIndex, err := models.GetBaseFromTradeShangHaiIndexAll(req.Date)
  178. if err != nil {
  179. fmt.Println("select err:", err)
  180. }
  181. for _, v := range allIndex {
  182. indexKey := v.DealName + v.BuyName + v.SoldName
  183. existIndexMap[indexKey] = v
  184. }
  185. var itemVerifyCode int
  186. //处理指标
  187. for _, p := range position {
  188. var item = new(models.BaseFromTradeShanghaiIndex)
  189. if p.Rank > 0 && p.Rank < 40 && p.ParticipantName1 != "" {
  190. if strings.Replace(p.ProductName, " ", "", -1) != "20号胶" && strings.Replace(p.ProductName, " ", "", -1) != "低硫燃料油" {
  191. contractCode := strings.Replace(p.ContractCode, " ", "", -1)
  192. //成交量
  193. item.Rank = p.Rank
  194. item.DealShortName = strings.Replace(p.ParticipantName1, " ", "", -1)
  195. item.BuyShortName = strings.Replace(p.ParticipantName2, " ", "", -1)
  196. item.SoldShortName = strings.Replace(p.ParticipantName3, " ", "", -1)
  197. item.DealName = strings.Replace(fmt.Sprintf("%s", p.ParticipantName1+"_"+p.ContractCode+"_成交量(手)"), " ", "", -1)
  198. item.BuyName = strings.Replace(fmt.Sprintf("%s", p.ParticipantName2+"_"+p.ContractCode+"_持买单量(手)"), " ", "", -1)
  199. item.SoldName = strings.Replace(fmt.Sprintf("%s", p.ParticipantName3+"_"+p.ContractCode+"_持卖单量(手)"), " ", "", -1)
  200. item.DealCode = models.ShIndexCodeGenerator(item.DealShortName, item.DealName, contractCode, "deal")
  201. item.BuyCode = models.ShIndexCodeGenerator(item.BuyShortName, item.BuyName, contractCode, "buy")
  202. item.SoldCode = models.ShIndexCodeGenerator(item.SoldShortName, item.SoldName, contractCode, "sold")
  203. item.ClassifyName = strings.Replace(p.ProductName, " ", "", -1)
  204. item.ClassifyType = strings.Replace(p.ContractCode, " ", "", -1)
  205. item.Frequency = "日度"
  206. item.CreateTime = time.Now()
  207. item.ModifyTime = time.Now()
  208. item.DataTime = tradeDate
  209. if deal, ok := p.Deal.(float64); ok {
  210. item.DealValue = int(deal)
  211. }
  212. if change1, ok := p.Change1.(float64); ok {
  213. item.DealChange = int(change1)
  214. }
  215. if buyIn, ok := p.BuyIn.(float64); ok {
  216. item.BuyValue = int(buyIn)
  217. }
  218. if change2, ok := p.Change2.(float64); ok {
  219. item.BuyChange = int(change2)
  220. }
  221. if soldOut, ok := p.SoldOut.(float64); ok {
  222. item.SoldValue = int(soldOut)
  223. }
  224. if change3, ok := p.Change3.(float64); ok {
  225. item.SoldChange = int(change3)
  226. }
  227. itemVerifyCode = item.BuyValue + item.DealValue + item.SoldValue
  228. if existIndex, ok := existIndexMap[item.DealName+item.BuyName+item.SoldName]; !ok {
  229. newID, e := models.AddBaseFromTradeShangHaiIndex(item)
  230. if e != nil {
  231. err = e
  232. fmt.Println("insert error:", err)
  233. }
  234. fmt.Println("insert new indexID:", newID)
  235. } else if existIndex != nil && itemVerifyCode != (existIndex.DealValue+existIndex.BuyValue+existIndex.SoldValue) {
  236. //更新
  237. err = models.ModifyBaseFromTradeShangHaiIndex(item.DealValue, item.BuyValue, item.SoldValue, existIndex.BaseFromTradeShangHaiIndexId)
  238. if err != nil {
  239. fmt.Println("data update err:", err)
  240. }
  241. }
  242. }
  243. } else if p.Rank == 999 {
  244. if strings.Replace(p.ProductName, " ", "", -1) != "20号胶" && strings.Replace(p.ProductName, " ", "", -1) != "低硫燃料油" {
  245. contractCode := strings.Replace(p.ContractCode, " ", "", -1)
  246. //Top 20
  247. item.Rank = p.Rank
  248. item.DealShortName = strings.Replace(p.ParticipantName1, " ", "", -1)
  249. item.BuyShortName = strings.Replace(p.ParticipantName2, " ", "", -1)
  250. item.SoldShortName = strings.Replace(p.ParticipantName3, " ", "", -1)
  251. item.DealName = strings.Replace(fmt.Sprintf("%s", "top20_"+p.ContractCode+"_成交量(手)"), " ", "", -1)
  252. item.BuyName = strings.Replace(fmt.Sprintf("%s", "top20_"+p.ContractCode+"_持买单量(手)"), " ", "", -1)
  253. item.SoldName = strings.Replace(fmt.Sprintf("%s", "top20_"+p.ContractCode+"_持卖单量(手)"), " ", "", -1)
  254. item.DealCode = models.ShIndexCodeGenerator("top20", item.DealName, contractCode, "deal")
  255. item.BuyCode = models.ShIndexCodeGenerator("top20", item.BuyName, contractCode, "buy")
  256. item.SoldCode = models.ShIndexCodeGenerator("top20", item.SoldName, contractCode, "sold")
  257. item.ClassifyName = strings.Replace(p.ProductName, " ", "", -1)
  258. item.ClassifyType = strings.Replace(p.ContractCode, " ", "", -1)
  259. item.Frequency = "日度"
  260. item.CreateTime = time.Now()
  261. item.ModifyTime = time.Now()
  262. item.DataTime = tradeDate
  263. if deal, ok := p.Deal.(float64); ok {
  264. item.DealValue = int(deal)
  265. }
  266. if change1, ok := p.Change1.(float64); ok {
  267. item.DealChange = int(change1)
  268. }
  269. if buyIn, ok := p.BuyIn.(float64); ok {
  270. item.BuyValue = int(buyIn)
  271. }
  272. if change2, ok := p.Change2.(float64); ok {
  273. item.BuyChange = int(change2)
  274. }
  275. if soldOut, ok := p.SoldOut.(float64); ok {
  276. item.SoldValue = int(soldOut)
  277. }
  278. if change3, ok := p.Change3.(float64); ok {
  279. item.SoldChange = int(change3)
  280. }
  281. itemVerifyCode = item.BuyValue + item.DealValue + item.SoldValue
  282. if existIndex, ok := existIndexMap[item.DealName+item.BuyName+item.SoldName]; !ok {
  283. newID, e := models.AddBaseFromTradeShangHaiIndex(item)
  284. if e != nil {
  285. err = e
  286. fmt.Println("insert error:", err)
  287. }
  288. fmt.Println("insert new indexID:", newID)
  289. } else if existIndex != nil && itemVerifyCode != (existIndex.DealValue+existIndex.BuyValue+existIndex.SoldValue) {
  290. //更新
  291. err = models.ModifyBaseFromTradeShangHaiIndex(item.DealValue, item.BuyValue, item.SoldValue, existIndex.BaseFromTradeShangHaiIndexId)
  292. if err != nil {
  293. fmt.Println("data update err:", err)
  294. }
  295. }
  296. }
  297. }
  298. }
  299. br.Ret = 200
  300. br.Msg = "获取成功"
  301. br.Success = true
  302. }