|
@@ -6,7 +6,6 @@ import (
|
|
|
"fmt"
|
|
|
"sort"
|
|
|
"strings"
|
|
|
- "sync"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
@@ -26,36 +25,44 @@ func GetClassifyName() (list trade_analysis.TradeClassifyNameListSort, err error
|
|
|
"cffex": 4,
|
|
|
"ine": 5,
|
|
|
}
|
|
|
- //查询每个交易所的最新更新时间
|
|
|
- //查询每个交易所下的classifyNameList
|
|
|
+ //查询所有交易所下的分类
|
|
|
+ classifyExchangeList, tmpErr := trade_analysis.GetAllBaseFromTradeClassify()
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
+ errMsg = "查询交易所最新更新时间失败"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 每个交易所的分类信息
|
|
|
classifyExchangeMap := make(map[string][]trade_analysis.TradeClassifyName)
|
|
|
- timeMap := make(map[string]string)
|
|
|
- i := 0
|
|
|
- var wg sync.WaitGroup
|
|
|
- for k := range exchanges {
|
|
|
- wg.Add(1)
|
|
|
- go func(k string, classifyExchangeMap map[string][]trade_analysis.TradeClassifyName) {
|
|
|
- defer wg.Done()
|
|
|
- nameList, tmpErr := trade_analysis.GetExchangeClassify(k)
|
|
|
- if tmpErr != nil {
|
|
|
- err = tmpErr
|
|
|
- return
|
|
|
- }
|
|
|
- for _, n := range nameList {
|
|
|
- classifyExchangeMap[k] = append(classifyExchangeMap[k], n)
|
|
|
- }
|
|
|
+ // 每个交易所的最新更新时间
|
|
|
+ timeLastMap := make(map[string]time.Time)
|
|
|
+ for _, v := range classifyExchangeList {
|
|
|
+ tmpExchange := v.Exchange
|
|
|
|
|
|
- dataTimeItem, tmpErr := trade_analysis.GetExchangeLastTime(k)
|
|
|
- if tmpErr != nil {
|
|
|
- err = tmpErr
|
|
|
- errMsg = "查询交易所最新更新时间失败"
|
|
|
- return
|
|
|
- }
|
|
|
- timeMap[k] = dataTimeItem.CreateTime.Format(utils.FormatDateTime)
|
|
|
+ // 分类
|
|
|
+ tmpList, ok := classifyExchangeMap[tmpExchange]
|
|
|
+ if !ok {
|
|
|
+ tmpList = make([]trade_analysis.TradeClassifyName, 0)
|
|
|
+ }
|
|
|
+ tmpList = append(tmpList, trade_analysis.TradeClassifyName{
|
|
|
+ ClassifyName: v.ClassifyName,
|
|
|
+ ClassifyType: v.ClassifyType,
|
|
|
+ LatestDate: v.LatestDate.Format(utils.FormatDate),
|
|
|
+ })
|
|
|
+ classifyExchangeMap[v.Exchange] = tmpList
|
|
|
|
|
|
- }(k, classifyExchangeMap)
|
|
|
+ // 时间
|
|
|
+ if tmpLastTime, ok2 := timeLastMap[tmpExchange]; !ok2 {
|
|
|
+ timeLastMap[tmpExchange] = v.ModifyTime
|
|
|
+ } else {
|
|
|
+ if v.ModifyTime.After(tmpLastTime) {
|
|
|
+ timeLastMap[tmpExchange] = v.ModifyTime
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- wg.Wait()
|
|
|
+
|
|
|
+ i := 0
|
|
|
currDate := time.Now().Format(utils.FormatDate)
|
|
|
for k, v := range exchanges {
|
|
|
tmp := trade_analysis.TradeClassifyNameList{
|
|
@@ -70,12 +77,16 @@ func GetClassifyName() (list trade_analysis.TradeClassifyNameListSort, err error
|
|
|
errMsg = "查询交易所分类信息失败"
|
|
|
return
|
|
|
}
|
|
|
- tmp.DataTime, ok = timeMap[k]
|
|
|
- if !ok {
|
|
|
+
|
|
|
+ // 查询交易所最新更新时间失败
|
|
|
+ if timeLast, ok := timeLastMap[k]; ok {
|
|
|
+ tmp.DataTime = timeLast.Format(utils.FormatDateTime)
|
|
|
+ } else {
|
|
|
err = fmt.Errorf("查询交易所最新更新时间失败")
|
|
|
errMsg = "查询交易所最新更新时间失败"
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
classifyMap := make(map[string][]trade_analysis.TradeClassifyNameListItemItem)
|
|
|
if len(nameList) > 0 {
|
|
|
if k == "zhengzhou" {
|
|
@@ -217,10 +228,10 @@ func getZhengzhouClassifyName(code string) (name string) {
|
|
|
func GetPositionTopDetail(req trade_analysis.GetPositionTopReq) (ret trade_analysis.GetPositionTopResp, err error, errMsg string) {
|
|
|
//定义交易所
|
|
|
exchanges := map[string]string{
|
|
|
- "郑商所": "zhengzhou",
|
|
|
- "大商所": "dalian",
|
|
|
- "上期所": "shanghai",
|
|
|
- "中金所": "cffex",
|
|
|
+ "郑商所": "zhengzhou",
|
|
|
+ "大商所": "dalian",
|
|
|
+ "上期所": "shanghai",
|
|
|
+ "中金所": "cffex",
|
|
|
"上期能源": "ine",
|
|
|
}
|
|
|
exchange, ok := exchanges[req.Exchange]
|
|
@@ -230,16 +241,20 @@ func GetPositionTopDetail(req trade_analysis.GetPositionTopReq) (ret trade_analy
|
|
|
return
|
|
|
}
|
|
|
dataTimeStr := req.DataTime
|
|
|
- var dataTime time.Time
|
|
|
+ var lastDataTime, dataTime time.Time
|
|
|
+
|
|
|
//查询最新的时间
|
|
|
+ lastItem, tmpErr := trade_analysis.GetTradeTopLastDataTime(exchange, req.ClassifyName, req.ClassifyType)
|
|
|
+ if tmpErr != nil {
|
|
|
+ errMsg = "查询最新的榜单信息失败"
|
|
|
+ err = tmpErr
|
|
|
+ return
|
|
|
+ }
|
|
|
+ lastDataTime = lastItem.LatestDate
|
|
|
+
|
|
|
+ // 如果没有传入日期,那么就用最晚的的日期
|
|
|
if dataTimeStr == "" {
|
|
|
- lastItem, tmpErr := trade_analysis.GetTradeTopLastDataTime(exchange, req.ClassifyName, req.ClassifyType)
|
|
|
- if tmpErr != nil {
|
|
|
- errMsg = "查询最新的榜单信息失败"
|
|
|
- err = tmpErr
|
|
|
- return
|
|
|
- }
|
|
|
- dataTime = lastItem.DataTime
|
|
|
+ dataTime = lastDataTime
|
|
|
} else {
|
|
|
dataTime, err = time.ParseInLocation(utils.FormatDate, dataTimeStr, time.Local)
|
|
|
if err != nil {
|
|
@@ -247,6 +262,10 @@ func GetPositionTopDetail(req trade_analysis.GetPositionTopReq) (ret trade_analy
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
+ dataTimeStr = dataTime.Format(utils.FormatDate)
|
|
|
+
|
|
|
+ ret.DataTime = dataTimeStr
|
|
|
+ ret.LastDataTime = lastDataTime.Format(utils.FormatDate)
|
|
|
|
|
|
//遇到周末则跳过当天
|
|
|
weekStr := dataTime.Weekday().String()
|
|
@@ -255,13 +274,12 @@ func GetPositionTopDetail(req trade_analysis.GetPositionTopReq) (ret trade_analy
|
|
|
err = fmt.Errorf(errMsg)*/
|
|
|
return
|
|
|
}
|
|
|
- dataTimeStr = dataTime.Format(utils.FormatDate)
|
|
|
classifyName := req.ClassifyName
|
|
|
classifyType := req.ClassifyType
|
|
|
if exchange == "zhengzhou" {
|
|
|
classifyName = classifyType
|
|
|
var typeItem *trade_analysis.TradeClassifyName
|
|
|
- typeItem, err = trade_analysis.GetZhengzhouClassifyTypeByClassifyName(classifyName)
|
|
|
+ typeItem, err = trade_analysis.GetClassifyTypeByClassifyName(exchange, classifyName)
|
|
|
if err != nil {
|
|
|
if err.Error() == utils.ErrNoRow() {
|
|
|
errMsg = "该合约不存在"
|
|
@@ -360,6 +378,5 @@ func GetPositionTopDetail(req trade_analysis.GetPositionTopReq) (ret trade_analy
|
|
|
ret.CleanSoldList.TotalDealChange = totalChangeMap[4]
|
|
|
ret.CleanSoldList.List = detailList[4]
|
|
|
|
|
|
- ret.DataTime = dataTimeStr
|
|
|
return
|
|
|
}
|