|
@@ -4,7 +4,8 @@ import (
|
|
|
"encoding/json"
|
|
|
"eta/eta_index_lib/models"
|
|
|
"fmt"
|
|
|
- "github.com/rdlucklib/rdluck_tools/http"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
)
|
|
|
|
|
|
// 交易所爬虫
|
|
@@ -16,51 +17,304 @@ type ExchangeCrawler struct {
|
|
|
// @Description 刷新数据接口
|
|
|
// @Param request body models.AddEdbClassifyReq true "type json string"
|
|
|
// @Success 200 {object} models.EdbClassify
|
|
|
-// @router /refresh [post]
|
|
|
-func (this *ExchangeCrawler) GetOrAdd() {
|
|
|
+// @router /refresh/ine [post]
|
|
|
+func (this *ExchangeCrawler) RefreshIne() {
|
|
|
br := new(models.BaseResponse).Init()
|
|
|
defer func() {
|
|
|
this.Data["json"] = br
|
|
|
this.ServeJSON()
|
|
|
}()
|
|
|
- var req models.RefreshExchangeoReq
|
|
|
+ var req models.RefreshINEExchangeReq
|
|
|
err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
if err != nil {
|
|
|
br.Msg = "参数解析异常!"
|
|
|
br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
return
|
|
|
}
|
|
|
- if req.Url == "" {
|
|
|
- br.Msg = "交易所链接错误"
|
|
|
- br.IsSendEmail = false
|
|
|
- return
|
|
|
+
|
|
|
+ message := req.Data
|
|
|
+ var position = message.OCursor
|
|
|
+ var tradeDate = message.ReportDate
|
|
|
+ existIndexMap := make(map[string]*models.BaseFromTradeIneIndex)
|
|
|
+
|
|
|
+ //获取所有指标信息
|
|
|
+ allIndex, err := models.GetBaseFromTradeIneIndexAll(req.Date)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("select err:", err)
|
|
|
+ }
|
|
|
+ for _, v := range allIndex {
|
|
|
+ indexKey := v.DealName + v.BuyName + v.SoldName
|
|
|
+ existIndexMap[indexKey] = v
|
|
|
+ }
|
|
|
+ var itemVerifyCode int
|
|
|
+ //处理指标
|
|
|
+ for _, p := range position {
|
|
|
+ var item = new(models.BaseFromTradeIneIndex)
|
|
|
+ if p.Rank > 0 && p.Rank < 40 && p.Participantabbr1 != "" {
|
|
|
+ //成交量
|
|
|
+ item.Rank = p.Rank
|
|
|
+ item.DealShortName = p.Participantabbr1
|
|
|
+ item.BuyShortName = p.Participantabbr2
|
|
|
+ item.SoldShortName = p.Participantabbr3
|
|
|
+ item.DealName = strings.Replace(fmt.Sprintf("%s", p.Participantabbr1+"_"+p.Instrumentid+"_成交量(手)"), " ", "", -1)
|
|
|
+ item.BuyName = strings.Replace(fmt.Sprintf("%s", p.Participantabbr2+"_"+p.Instrumentid+"_持买单量(手)"), " ", "", -1)
|
|
|
+ item.SoldName = strings.Replace(fmt.Sprintf("%s", p.Participantabbr3+"_"+p.Instrumentid+"_持卖单量(手)"), " ", "", -1)
|
|
|
+ item.DealCode = models.IneIndexCodeGenerator(item.DealShortName, item.DealName, p.Instrumentid, "deal")
|
|
|
+ item.BuyCode = models.IneIndexCodeGenerator(item.BuyShortName, item.BuyName, p.Instrumentid, "buy")
|
|
|
+ item.SoldCode = models.IneIndexCodeGenerator(item.SoldShortName, item.SoldName, p.Instrumentid, "sold")
|
|
|
+ item.ClassifyName = strings.Replace(p.Productname, " ", "", -1)
|
|
|
+ item.ClassifyType = strings.Replace(p.Instrumentid, " ", "", -1)
|
|
|
+ item.Frequency = "日度"
|
|
|
+ item.CreateTime = time.Now()
|
|
|
+ item.ModifyTime = time.Now()
|
|
|
+ item.DataTime = tradeDate
|
|
|
+
|
|
|
+ if deal, ok := p.Deal.(float64); ok {
|
|
|
+ item.DealValue = int(deal)
|
|
|
+ }
|
|
|
+ if change1, ok := p.Change1.(float64); ok {
|
|
|
+ item.DealChange = int(change1)
|
|
|
+ }
|
|
|
+ if buyIn, ok := p.BuyIn.(float64); ok {
|
|
|
+ item.BuyValue = int(buyIn)
|
|
|
+ }
|
|
|
+ if change2, ok := p.Change2.(float64); ok {
|
|
|
+ item.BuyChange = int(change2)
|
|
|
+ }
|
|
|
+ if soldOut, ok := p.SoldOut.(float64); ok {
|
|
|
+ item.SoldValue = int(soldOut)
|
|
|
+ }
|
|
|
+ if change3, ok := p.Change3.(float64); ok {
|
|
|
+ item.SoldChange = int(change3)
|
|
|
+ }
|
|
|
+
|
|
|
+ itemVerifyCode = item.BuyValue + item.DealValue + item.SoldValue
|
|
|
+ if existIndex, ok := existIndexMap[item.DealName+item.BuyName+item.SoldName]; !ok {
|
|
|
+ newID, err := models.AddBaseFromTradeIneIndex(item)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("insert error:", err)
|
|
|
+ }
|
|
|
+ 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 {
|
|
|
+ fmt.Println("data update err:", err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if p.Rank == 999 {
|
|
|
+ //Top 20
|
|
|
+ item.Rank = p.Rank
|
|
|
+ item.DealShortName = p.Participantabbr1
|
|
|
+ item.BuyShortName = p.Participantabbr2
|
|
|
+ item.SoldShortName = p.Participantabbr3
|
|
|
+ item.DealName = strings.Replace(fmt.Sprintf("%s", "top20_"+p.Instrumentid+"_成交量(手)"), " ", "", -1)
|
|
|
+ item.BuyName = strings.Replace(fmt.Sprintf("%s", "top20_"+p.Instrumentid+"_持买单量(手)"), " ", "", -1)
|
|
|
+ item.SoldName = strings.Replace(fmt.Sprintf("%s", "top20_"+p.Instrumentid+"_持卖单量(手)"), " ", "", -1)
|
|
|
+ item.DealCode = models.IneIndexCodeGenerator("top20", item.DealName, p.Instrumentid, "deal")
|
|
|
+ item.BuyCode = models.IneIndexCodeGenerator("top20", item.BuyName, p.Instrumentid, "buy")
|
|
|
+ item.SoldCode = models.IneIndexCodeGenerator("top20", item.SoldName, p.Instrumentid, "sold")
|
|
|
+ item.ClassifyName = strings.Replace(p.Productname, " ", "", -1)
|
|
|
+ item.ClassifyType = strings.Replace(p.Instrumentid, " ", "", -1)
|
|
|
+ item.Frequency = "日度"
|
|
|
+ item.CreateTime = time.Now()
|
|
|
+ item.ModifyTime = time.Now()
|
|
|
+ item.DataTime = tradeDate
|
|
|
+
|
|
|
+ if deal, ok := p.Deal.(float64); ok {
|
|
|
+ item.DealValue = int(deal)
|
|
|
+ }
|
|
|
+ if change1, ok := p.Change1.(float64); ok {
|
|
|
+ item.DealChange = int(change1)
|
|
|
+ }
|
|
|
+ if buyIn, ok := p.BuyIn.(float64); ok {
|
|
|
+ item.BuyValue = int(buyIn)
|
|
|
+ }
|
|
|
+ if change2, ok := p.Change2.(float64); ok {
|
|
|
+ item.BuyChange = int(change2)
|
|
|
+ }
|
|
|
+ if soldOut, ok := p.SoldOut.(float64); ok {
|
|
|
+ item.SoldValue = int(soldOut)
|
|
|
+ }
|
|
|
+ if change3, ok := p.Change3.(float64); ok {
|
|
|
+ item.SoldChange = int(change3)
|
|
|
+ }
|
|
|
+
|
|
|
+ itemVerifyCode = item.BuyValue + item.DealValue + item.SoldValue
|
|
|
+ if existIndex, ok := existIndexMap[item.DealName+item.BuyName+item.SoldName]; !ok {
|
|
|
+ newID, err := models.AddBaseFromTradeIneIndex(item)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("insert error:", err)
|
|
|
+ }
|
|
|
+ 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 {
|
|
|
+ fmt.Println("data update err:", err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- body, e := http.Get(req.Url)
|
|
|
- if e != nil {
|
|
|
- err = e
|
|
|
- fmt.Println("err:", err)
|
|
|
+ br.Ret = 200
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ br.Success = true
|
|
|
+}
|
|
|
+
|
|
|
+// @Title 刷新数据
|
|
|
+// @Description 刷新数据接口
|
|
|
+// @Param request body models.AddEdbClassifyReq true "type json string"
|
|
|
+// @Success 200 {object} models.EdbClassify
|
|
|
+// @router /refresh/sh [post]
|
|
|
+func (this *ExchangeCrawler) RefreshSH() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+ var req models.RefreshSHExchangeReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
return
|
|
|
}
|
|
|
- if req.Exchange == "ine" {
|
|
|
- var resp models.IneJSONData
|
|
|
- err = json.Unmarshal(body, &resp)
|
|
|
- if err != nil {
|
|
|
- fmt.Println(err)
|
|
|
- return
|
|
|
- }
|
|
|
- br.Data = resp
|
|
|
- } else {
|
|
|
- var resp models.SHMessage
|
|
|
- err = json.Unmarshal(body, &resp)
|
|
|
- if err != nil {
|
|
|
- fmt.Println(err)
|
|
|
- return
|
|
|
+
|
|
|
+ message := req.Data
|
|
|
+ var position = message.Position
|
|
|
+ var tradeDate = message.ReportDate
|
|
|
+ existIndexMap := make(map[string]*models.BaseFromTradeShanghaiIndex)
|
|
|
+
|
|
|
+ //获取所有指标信息
|
|
|
+ allIndex, err := models.GetBaseFromTradeShangHaiIndexAll(req.Date)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("select err:", err)
|
|
|
+ }
|
|
|
+ for _, v := range allIndex {
|
|
|
+ indexKey := v.DealName + v.BuyName + v.SoldName
|
|
|
+ existIndexMap[indexKey] = v
|
|
|
+ }
|
|
|
+ var itemVerifyCode int
|
|
|
+ //处理指标
|
|
|
+ for _, p := range position {
|
|
|
+ var item = new(models.BaseFromTradeShanghaiIndex)
|
|
|
+ if p.Rank > 0 && p.Rank < 40 && p.ParticipantName1 != "" {
|
|
|
+ if strings.Replace(p.ProductName, " ", "", -1) != "20号胶" && strings.Replace(p.ProductName, " ", "", -1) != "低硫燃料油" {
|
|
|
+ contractCode := strings.Replace(p.ContractCode, " ", "", -1)
|
|
|
+ //成交量
|
|
|
+ item.Rank = p.Rank
|
|
|
+ item.DealShortName = strings.Replace(p.ParticipantName1, " ", "", -1)
|
|
|
+ item.BuyShortName = strings.Replace(p.ParticipantName2, " ", "", -1)
|
|
|
+ item.SoldShortName = strings.Replace(p.ParticipantName3, " ", "", -1)
|
|
|
+ item.DealName = strings.Replace(fmt.Sprintf("%s", p.ParticipantName1+"_"+p.ContractCode+"_成交量(手)"), " ", "", -1)
|
|
|
+ item.BuyName = strings.Replace(fmt.Sprintf("%s", p.ParticipantName2+"_"+p.ContractCode+"_持买单量(手)"), " ", "", -1)
|
|
|
+ item.SoldName = strings.Replace(fmt.Sprintf("%s", p.ParticipantName3+"_"+p.ContractCode+"_持卖单量(手)"), " ", "", -1)
|
|
|
+ item.DealCode = models.ShIndexCodeGenerator(item.DealShortName, item.DealName, contractCode, "deal")
|
|
|
+ item.BuyCode = models.ShIndexCodeGenerator(item.BuyShortName, item.BuyName, contractCode, "buy")
|
|
|
+ item.SoldCode = models.ShIndexCodeGenerator(item.SoldShortName, item.SoldName, contractCode, "sold")
|
|
|
+ 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
|
|
|
+
|
|
|
+ if deal, ok := p.Deal.(float64); ok {
|
|
|
+ item.DealValue = int(deal)
|
|
|
+ }
|
|
|
+ if change1, ok := p.Change1.(float64); ok {
|
|
|
+ item.DealChange = int(change1)
|
|
|
+ }
|
|
|
+ if buyIn, ok := p.BuyIn.(float64); ok {
|
|
|
+ item.BuyValue = int(buyIn)
|
|
|
+ }
|
|
|
+ if change2, ok := p.Change2.(float64); ok {
|
|
|
+ item.BuyChange = int(change2)
|
|
|
+ }
|
|
|
+ if soldOut, ok := p.SoldOut.(float64); ok {
|
|
|
+ item.SoldValue = int(soldOut)
|
|
|
+ }
|
|
|
+ if change3, ok := p.Change3.(float64); ok {
|
|
|
+ item.SoldChange = int(change3)
|
|
|
+ }
|
|
|
+
|
|
|
+ itemVerifyCode = item.BuyValue + item.DealValue + item.SoldValue
|
|
|
+ if existIndex, ok := existIndexMap[item.DealName+item.BuyName+item.SoldName]; !ok {
|
|
|
+ newID, e := models.AddBaseFromTradeShangHaiIndex(item)
|
|
|
+ if e != nil {
|
|
|
+ err = e
|
|
|
+ fmt.Println("insert error:", err)
|
|
|
+ }
|
|
|
+ fmt.Println("insert new indexID:", newID)
|
|
|
+ } else if existIndex != nil && itemVerifyCode != (existIndex.DealValue+existIndex.BuyValue+existIndex.SoldValue) {
|
|
|
+ //更新
|
|
|
+ err = models.ModifyBaseFromTradeShangHaiIndex(item.DealValue, item.BuyValue, item.SoldValue, existIndex.BaseFromTradeShangHaiIndexId)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("data update err:", err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if p.Rank == 999 {
|
|
|
+ if strings.Replace(p.ProductName, " ", "", -1) != "20号胶" && strings.Replace(p.ProductName, " ", "", -1) != "低硫燃料油" {
|
|
|
+ contractCode := strings.Replace(p.ContractCode, " ", "", -1)
|
|
|
+ //Top 20
|
|
|
+ item.Rank = p.Rank
|
|
|
+ item.DealShortName = strings.Replace(p.ParticipantName1, " ", "", -1)
|
|
|
+ item.BuyShortName = strings.Replace(p.ParticipantName2, " ", "", -1)
|
|
|
+ item.SoldShortName = strings.Replace(p.ParticipantName3, " ", "", -1)
|
|
|
+ item.DealName = strings.Replace(fmt.Sprintf("%s", "top20_"+p.ContractCode+"_成交量(手)"), " ", "", -1)
|
|
|
+ item.BuyName = strings.Replace(fmt.Sprintf("%s", "top20_"+p.ContractCode+"_持买单量(手)"), " ", "", -1)
|
|
|
+ item.SoldName = strings.Replace(fmt.Sprintf("%s", "top20_"+p.ContractCode+"_持卖单量(手)"), " ", "", -1)
|
|
|
+ item.DealCode = models.ShIndexCodeGenerator("top20", item.DealName, contractCode, "deal")
|
|
|
+ item.BuyCode = models.ShIndexCodeGenerator("top20", item.BuyName, contractCode, "buy")
|
|
|
+ item.SoldCode = models.ShIndexCodeGenerator("top20", item.SoldName, contractCode, "sold")
|
|
|
+ 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
|
|
|
+
|
|
|
+ if deal, ok := p.Deal.(float64); ok {
|
|
|
+ item.DealValue = int(deal)
|
|
|
+ }
|
|
|
+ if change1, ok := p.Change1.(float64); ok {
|
|
|
+ item.DealChange = int(change1)
|
|
|
+ }
|
|
|
+ if buyIn, ok := p.BuyIn.(float64); ok {
|
|
|
+ item.BuyValue = int(buyIn)
|
|
|
+ }
|
|
|
+ if change2, ok := p.Change2.(float64); ok {
|
|
|
+ item.BuyChange = int(change2)
|
|
|
+ }
|
|
|
+ if soldOut, ok := p.SoldOut.(float64); ok {
|
|
|
+ item.SoldValue = int(soldOut)
|
|
|
+ }
|
|
|
+ if change3, ok := p.Change3.(float64); ok {
|
|
|
+ item.SoldChange = int(change3)
|
|
|
+ }
|
|
|
+
|
|
|
+ itemVerifyCode = item.BuyValue + item.DealValue + item.SoldValue
|
|
|
+ if existIndex, ok := existIndexMap[item.DealName+item.BuyName+item.SoldName]; !ok {
|
|
|
+ newID, e := models.AddBaseFromTradeShangHaiIndex(item)
|
|
|
+ if e != nil {
|
|
|
+ err = e
|
|
|
+ fmt.Println("insert error:", err)
|
|
|
+ }
|
|
|
+ fmt.Println("insert new indexID:", newID)
|
|
|
+ } else if existIndex != nil && itemVerifyCode != (existIndex.DealValue+existIndex.BuyValue+existIndex.SoldValue) {
|
|
|
+ //更新
|
|
|
+ err = models.ModifyBaseFromTradeShangHaiIndex(item.DealValue, item.BuyValue, item.SoldValue, existIndex.BaseFromTradeShangHaiIndexId)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("data update err:", err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- br.Data = resp
|
|
|
}
|
|
|
|
|
|
br.Ret = 200
|
|
|
br.Msg = "获取成功"
|
|
|
br.Success = true
|
|
|
-}
|
|
|
+}
|