package controllers import ( "encoding/json" "eta/eta_index_lib/models" "fmt" "strings" "time" ) // 交易所爬虫 type ExchangeCrawler struct { BaseAuthController } // @Title 刷新数据 // @Description 刷新数据接口 // @Param request body models.AddEdbClassifyReq true "type json string" // @Success 200 {object} models.EdbClassify // @router /refresh/ine [post] func (this *ExchangeCrawler) RefreshIne() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() var req models.RefreshINEExchangeReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() 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) } } } } 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 } 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.Ret = 200 br.Msg = "获取成功" br.Success = true }