123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395 |
- package controllers
- import (
- "encoding/json"
- "eta_gn/eta_index_lib/models"
- "fmt"
- "github.com/mozillazg/go-pinyin"
- "strings"
- "time"
- )
- // 交易所爬虫
- type ExchangeCrawler struct {
- BaseAuthController
- }
- var ineIndexCodeMap = make(map[string]string)
- // @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
- }
- allCode, err := models.GetIndexCodeFromMapping("Ine")
- if err != nil {
- fmt.Println("select Code err:", err)
- }
- for _, item := range allCode {
- ineIndexCodeMap[item.IndexName] = item.IndexCode
- }
- 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 = IneIndexCodeGenerator(item.DealShortName, item.DealName, p.Instrumentid, "deal")
- item.BuyCode = IneIndexCodeGenerator(item.BuyShortName, item.BuyName, p.Instrumentid, "buy")
- item.SoldCode = 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 = IneIndexCodeGenerator("top20", item.DealName, p.Instrumentid, "deal")
- item.BuyCode = IneIndexCodeGenerator("top20", item.BuyName, p.Instrumentid, "buy")
- item.SoldCode = 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
- }
- var indexCodeMap = make(map[string]string)
- // @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
- }
- allCode, err := models.GetIndexCodeFromMapping("SH")
- if err != nil {
- fmt.Println("select Code err:", err)
- return
- }
- for _, item := range allCode {
- indexCodeMap[item.IndexName] = item.IndexCode
- }
- 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 = ShIndexCodeGenerator(item.DealShortName, item.DealName, contractCode, "deal")
- item.BuyCode = ShIndexCodeGenerator(item.BuyShortName, item.BuyName, contractCode, "buy")
- item.SoldCode = 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 = ShIndexCodeGenerator("top20", item.DealName, contractCode, "deal")
- item.BuyCode = ShIndexCodeGenerator("top20", item.BuyName, contractCode, "buy")
- item.SoldCode = 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
- }
- func ShIndexCodeGenerator(shortName, indexName, contractCode, suffix string) string {
- if shortName == "" {
- return ""
- }
- strResult := ""
- if shortName != "top20" {
- //取公司全拼
- a := pinyin.NewArgs()
- rows := pinyin.LazyPinyin(shortName, a)
- for i := 0; i < len(rows); i++ {
- strResult += rows[i]
- }
- } else {
- strResult = "top20"
- }
- indexCode, _ := indexCodeMap[indexName]
- if indexCode == "" {
- indexCode = strResult + contractCode + suffix
- indexCode = strings.Replace(indexCode, " ", "", -1)
- indexCodeMap[indexName] = indexCode
- err := models.AddBaseFromTradeMapping(indexName, indexCode, "SH")
- if err != nil {
- fmt.Println("add Code err:", err)
- }
- }
- return strings.Replace(indexCode, " ", "", -1)
- }
- func IneIndexCodeGenerator(shortName, indexName, Instrumentid, suffix string) string {
- if shortName == "" {
- return ""
- }
- strResult := ""
- if shortName != "top20" {
- //取公司全拼
- a := pinyin.NewArgs()
- rows := pinyin.LazyPinyin(shortName, a)
- for i := 0; i < len(rows); i++ {
- strResult += rows[i]
- }
- } else {
- strResult = "top20"
- }
- ineIndexCode, _ := ineIndexCodeMap[indexName]
- if ineIndexCode == "" {
- ineIndexCode = strResult + Instrumentid + suffix
- ineIndexCode = strings.Replace(ineIndexCode, " ", "", -1)
- ineIndexCodeMap[indexName] = ineIndexCode
- err := models.AddBaseFromTradeMapping(indexName, ineIndexCode, "INE")
- if err != nil {
- fmt.Println("add Code err:", err)
- }
- }
- return strings.Replace(ineIndexCode, " ", "", -1)
- }
|