tuoling805 1 year ago
parent
commit
19f09fcca6
4 changed files with 112 additions and 10 deletions
  1. 29 0
      models/trade_guangzhou.go
  2. 18 0
      services/task.go
  3. 45 10
      services/trade_guangzhou.go
  4. 20 0
      utils/common.go

+ 29 - 0
models/trade_guangzhou.go

@@ -120,6 +120,19 @@ func (obj *BaseFromTradeGuangzhouIndex) UpdateGuangzhouData(updateParams, whereP
 	return
 }
 
+// 修改
+func (obj *BaseFromTradeGuangzhouIndex) UpdateGuangzhouIndex(updateParams, whereParam map[string]interface{}) (err error) {
+	to := orm.NewOrmUsingDB("data")
+	ptrStructOrTableName := "base_from_trade_guangzhou_index"
+
+	qs := to.QueryTable(ptrStructOrTableName)
+	for expr, exprV := range whereParam {
+		qs = qs.Filter(expr, exprV)
+	}
+	_, err = qs.Update(updateParams)
+	return
+}
+
 // 合约
 type GuangzhouContract struct {
 	Code  string `json:"code"`
@@ -222,3 +235,19 @@ type GuangzhouCongregateDeliveryQuotes struct {
 	} `json:"data"`
 	Time int64 `json:"time"`
 }
+
+type GuangzhouDataMinAndMaxDate struct {
+	BaseFromTradeGuangzhouIndexId int    `description:"指标id"`
+	StartDate                     string `description:"开始日期"`
+	EndDate                       string `description:"结束日期"`
+}
+
+// 获取所有合约
+func (obj *BaseFromTradeGuangzhouIndex) GetBaseFromTradeGuangzhouDataMinAndMaxDate() (list []*GuangzhouDataMinAndMaxDate, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT a.base_from_trade_guangzhou_index_id,MIN(a.data_time) AS start_date,MAX(a.data_time) AS end_date
+			FROM base_from_trade_guangzhou_data AS a
+			GROUP BY a.base_from_trade_guangzhou_index_id `
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}

+ 18 - 0
services/task.go

@@ -162,3 +162,21 @@ func RefreshChangesVisitorsCovid(cont context.Context) (err error) {
 //	//_ = national_data.ApiTest()
 //	fmt.Println("end")
 //}
+
+func Task123() {
+	fmt.Println("start")
+	//n := 193
+	//for i := n; i >= 0; i-- {
+	//	date := time.Now().AddDate(0, 0, -i)
+	//	if date.Weekday() == time.Saturday || date.Weekday() == time.Sunday {
+	//		continue
+	//	}
+	//	fmt.Println("date:", date.Format(utils.FormatDate))
+	//	CrawlerFromGuangzhouWbillWeeklyQuotes(date)
+	//	rn := utils.RangeRand(3, 15)
+	//	fmt.Println("i:"+strconv.Itoa(i)+" date:", date.Format(utils.FormatDate)+";sleep:", strconv.Itoa(int(rn)))
+	//	time.Sleep(time.Duration(rn) * time.Second)
+	//}
+	CrawlerFromGuangzhouIndexMinAndMaxDate()
+	fmt.Println("end")
+}

+ 45 - 10
services/trade_guangzhou.go

@@ -6,7 +6,6 @@ import (
 	"eta/eta_crawler/services/alarm_msg"
 	"eta/eta_crawler/utils"
 	"fmt"
-	"github.com/mozillazg/go-pinyin"
 	"strconv"
 	"strings"
 	"time"
@@ -446,9 +445,7 @@ func CrawlerFromGuangzhouDealPosiQuotes(date time.Time) {
 					if v.Abbr == "总计" {
 						continue
 					}
-					pinyinArg := pinyin.NewArgs()
-					pinyinArr := pinyin.LazyPinyin(v.Abbr, pinyinArg)
-					indexCode := strings.Join(pinyinArr, "")
+					indexCode := utils.ChineseToPinyin(v.Abbr)
 					if indexCode == "" {
 						continue
 					}
@@ -612,12 +609,11 @@ func CrawlerFromGuangzhouWbillWeeklyQuotes(date time.Time) {
 			if v.WhAbbr == "总计" {
 				continue
 			}
-			pinyinArg := pinyin.NewArgs()
-			pinyinArr := pinyin.LazyPinyin(v.WhAbbr, pinyinArg)
-			indexCode := strings.Join(pinyinArr, "")
+			indexCode := utils.ChineseToPinyin(v.WhAbbr)
 			if indexCode == "" {
 				continue
 			}
+			indexCode = v.VarietyOrder + indexCode
 			indexCode += "wbill"
 			indexName := v.WhAbbr + "仓单量"
 
@@ -777,9 +773,7 @@ func CrawlerFromGuangzhouCongregateDeliveryQuotes(date time.Time) {
 		addDataList := make([]*models.BaseFromTradeGuangzhouData, 0)
 		updateDataList := make([]*models.BaseFromTradeGuangzhouData, 0)
 		for _, v := range deliveryQuotes.Data {
-			pinyinArg := pinyin.NewArgs()
-			pinyinArr := pinyin.LazyPinyin(v.WhName, pinyinArg)
-			indexCode := strings.Join(pinyinArr, "")
+			indexCode := utils.ChineseToPinyin(v.WhName)
 			if indexCode == "" {
 				continue
 			}
@@ -872,4 +866,45 @@ func CrawlerFromGuangzhouCongregateDeliveryQuotes(date time.Time) {
 	}
 }
 
+// CrawlerFromGuangzhouIndexMinAndMaxDate 广州交易所期货-处理指标开始日期和结束日期
+func CrawlerFromGuangzhouIndexMinAndMaxDate() {
+	gzObj := new(models.BaseFromTradeGuangzhouIndex)
+	//获取所有指标
+	indexList, err := gzObj.GetBaseFromTradeGuangzhouIndexAll()
+	if err != nil {
+		fmt.Println("GetBaseFromTradeGuangzhouIndexAll Err:" + err.Error())
+		return
+	}
+
+	indexMap := make(map[int]*models.BaseFromTradeGuangzhouIndex)
+	for _, iv := range indexList {
+		indexMap[iv.BaseFromTradeGuangzhouIndexId] = iv
+	}
+	//获取数据开始和结束日期
+	dataDateList, err := gzObj.GetBaseFromTradeGuangzhouDataMinAndMaxDate()
+	if err != nil {
+		fmt.Println("GetBaseFromTradeGuangzhouDataMinAndMaxDate Err:" + err.Error())
+		return
+	}
+	for _, v := range dataDateList {
+		if indexItem, ok := indexMap[v.BaseFromTradeGuangzhouIndexId]; ok {
+			updateParams := make(map[string]interface{})
+			whereParam := make(map[string]interface{})
+			if indexItem.StartDate != v.StartDate {
+				updateParams["start_date"] = v.StartDate
+			}
+			if indexItem.EndDate != v.EndDate {
+				updateParams["end_date"] = v.EndDate
+				updateParams["modify_time"] = time.Now()
+				whereParam["base_from_trade_guangzhou_index_id"] = v.BaseFromTradeGuangzhouIndexId
+				err = gzObj.UpdateGuangzhouIndex(updateParams, whereParam)
+				if err != nil {
+					fmt.Println("UpdateGuangzhouData Err:" + err.Error())
+					return
+				}
+			}
+		}
+	}
+}
+
 //http://www.gfex.com.cn/u/interfacesWebTiMemberDealPosiQuotes/loadList

+ 20 - 0
utils/common.go

@@ -10,6 +10,7 @@ import (
 	"encoding/json"
 	"errors"
 	"fmt"
+	"github.com/mozillazg/go-pinyin"
 	"image"
 	"image/png"
 	"io"
@@ -27,6 +28,7 @@ import (
 	"strconv"
 	"strings"
 	"time"
+	"unicode"
 )
 
 // 随机数种子
@@ -1088,3 +1090,21 @@ func HttpGet(reqUrl, payload string) (err error) {
 	}
 	return
 }
+
+func ChineseToPinyin(input string) string {
+	a := pinyin.NewArgs()
+	var result strings.Builder
+
+	for _, r := range input {
+		if unicode.Is(unicode.Han, r) {
+			py := pinyin.Pinyin(string(r), a)
+			if len(py) > 0 && len(py[0]) > 0 {
+				result.WriteString(py[0][0])
+			}
+		} else if unicode.IsNumber(r) || unicode.IsLetter(r) {
+			result.WriteRune(r)
+		}
+	}
+
+	return result.String()
+}