ziwen 2 years ago
parent
commit
943db26c33
2 changed files with 80 additions and 66 deletions
  1. 70 66
      services/data/trade_position_analysis.go
  2. 10 0
      services/task.go

+ 70 - 66
services/data/trade_position_analysis.go

@@ -12,28 +12,32 @@ import (
 
 
 // InitPositionTask 统计今日交易所的持仓分析数据
 // InitPositionTask 统计今日交易所的持仓分析数据
 func InitPositionTask(cont context.Context) (err error) {
 func InitPositionTask(cont context.Context) (err error) {
-	exchanges := []string{"zhengzhou","dalian","shanghai","cffex","ine"} //郑商所,大商所,上期所,中金所,上期能源
-	startDate := time.Now().Format(utils.FormatDate)
-	endDate := startDate
-	for _, v := range exchanges {
-		exchange := v
-		err = nil
-		fmt.Println("InitPositionTask:	启动:"+exchange)
-		utils.FileLog.Info("InitPositionTask:	启动:"+exchange)
+	exchanges := []string{"zhengzhou", "dalian", "shanghai", "cffex", "ine"} //郑商所,大商所,上期所,中金所,上期能源
 
 
-		fmt.Println("开始"+startDate+"结束"+endDate)
-		utils.FileLog.Info(fmt.Sprintf("InitTradePosition:开始:%s; 结束:%s", startDate, endDate))
-		tErr, errMsg := InitTradePosition(exchange, startDate, endDate)
-		if tErr != nil {
-			err = tErr
-			fmt.Println("InitTradePosition: 操作失败:"+errMsg+tErr.Error())
-			utils.FileLog.Info(fmt.Sprintf("InitTradePosition: 操作失败:%s:%s", errMsg, tErr.Error()))
-			continue
-		}
+	for i := 20; i >= 0; i-- {
+		startDate := time.Now().AddDate(0, 0, -i).Format(utils.FormatDate)
+		endDate := startDate
+		for _, v := range exchanges {
+			exchange := v
+			err = nil
+			fmt.Println("InitPositionTask:	启动:" + exchange)
+			utils.FileLog.Info("InitPositionTask:	启动:" + exchange)
 
 
-		fmt.Println("InitTradePosition:"+exchange+"已完成")
-		utils.FileLog.Info("InitTradePosition:"+exchange+"已完成")
+			fmt.Println("开始" + startDate + "结束" + endDate)
+			utils.FileLog.Info(fmt.Sprintf("InitTradePosition:开始:%s; 结束:%s", startDate, endDate))
+			tErr, errMsg := InitTradePosition(exchange, startDate, endDate)
+			if tErr != nil {
+				err = tErr
+				fmt.Println("InitTradePosition: 操作失败:" + errMsg + tErr.Error())
+				utils.FileLog.Info(fmt.Sprintf("InitTradePosition: 操作失败:%s:%s", errMsg, tErr.Error()))
+				continue
+			}
+
+			fmt.Println("InitTradePosition:" + exchange + "已完成")
+			utils.FileLog.Info("InitTradePosition:" + exchange + "已完成")
+		}
 	}
 	}
+
 	return
 	return
 }
 }
 
 
@@ -53,12 +57,12 @@ func InitTradePosition(exchange, startDate, endDate string) (err error, errMsg s
 		errMsg = "新增原始数据失败,MultiInsertTradeBaseDataToTop() Err: "
 		errMsg = "新增原始数据失败,MultiInsertTradeBaseDataToTop() Err: "
 		return
 		return
 	}
 	}
-	originList, err :=data_manage.GetTradePositionTopByExchangeDataTime(exchange, startDate, endDate)
+	originList, err := data_manage.GetTradePositionTopByExchangeDataTime(exchange, startDate, endDate)
 	if err != nil {
 	if err != nil {
 		errMsg = "查询原始数据失败, GetTradePositionTopByExchangeDataTime() Err: "
 		errMsg = "查询原始数据失败, GetTradePositionTopByExchangeDataTime() Err: "
 		return
 		return
 	}
 	}
-	if len(originList) <=0 {
+	if len(originList) <= 0 {
 		err = fmt.Errorf("原始数据没有值")
 		err = fmt.Errorf("原始数据没有值")
 		return
 		return
 	}
 	}
@@ -89,7 +93,7 @@ func InitTradePosition(exchange, startDate, endDate string) (err error, errMsg s
 			list = make([]*data_manage.TradePositionTop, 0)
 			list = make([]*data_manage.TradePositionTop, 0)
 		}
 		}
 	}
 	}
-	if len(list) > 0  {
+	if len(list) > 0 {
 		err = data_manage.InsertMultiTradePositionTop(exchange, list)
 		err = data_manage.InsertMultiTradePositionTop(exchange, list)
 		if err != nil {
 		if err != nil {
 			errMsg = "批量新增昨日数据失败,InsertMultiTradePositionTop() Err: "
 			errMsg = "批量新增昨日数据失败,InsertMultiTradePositionTop() Err: "
@@ -103,20 +107,20 @@ func InitTradePosition(exchange, startDate, endDate string) (err error, errMsg s
 		_, ok2 := onlyEmptyMap[k+"_2"]
 		_, ok2 := onlyEmptyMap[k+"_2"]
 		var dealType int
 		var dealType int
 		if ok1 && !ok2 {
 		if ok1 && !ok2 {
-			dealType =2  //只有买单没有卖单
-		}else if !ok1 && ok2 {
+			dealType = 2 //只有买单没有卖单
+		} else if !ok1 && ok2 {
 			dealType = 1 //只有卖单没有买单的情况
 			dealType = 1 //只有卖单没有买单的情况
-		}else{
+		} else {
 			continue
 			continue
 		}
 		}
 		if dealType > 0 {
 		if dealType > 0 {
-			str := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_"+strconv.Itoa(dealType)
+			str := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DataTime + "_" + strconv.Itoa(dealType)
 			dealValue := 0
 			dealValue := 0
 			if lastVal, ok := topLastMap[str]; ok {
 			if lastVal, ok := topLastMap[str]; ok {
-				dealValue = int(float64(lastVal) * 0.7+0.5)
+				dealValue = int(float64(lastVal)*0.7 + 0.5)
 			}
 			}
 
 
-			tmp :=&data_manage.TradePositionTop{
+			tmp := &data_manage.TradePositionTop{
 				ClassifyName:  v.ClassifyName,
 				ClassifyName:  v.ClassifyName,
 				ClassifyType:  v.ClassifyType,
 				ClassifyType:  v.ClassifyType,
 				DealShortName: v.DealShortName,
 				DealShortName: v.DealShortName,
@@ -164,7 +168,7 @@ func InitTradePosition(exchange, startDate, endDate string) (err error, errMsg s
 
 
 func dealTradeOriginData(dataTimeMap map[string]*data_manage.TradePositionTop, onlyEmptyMap map[string]bool, onlyEmptyNameMap map[string]*data_manage.TradePositionTop, currentItem *data_manage.TradePositionTop, topLastMap map[string]int, topLastRankMap map[string]int, startDate string, now time.Time) (tmp0 *data_manage.TradePositionTop, err error) {
 func dealTradeOriginData(dataTimeMap map[string]*data_manage.TradePositionTop, onlyEmptyMap map[string]bool, onlyEmptyNameMap map[string]*data_manage.TradePositionTop, currentItem *data_manage.TradePositionTop, topLastMap map[string]int, topLastRankMap map[string]int, startDate string, now time.Time) (tmp0 *data_manage.TradePositionTop, err error) {
 	classifyName := currentItem.ClassifyName
 	classifyName := currentItem.ClassifyName
-	classifyType :=currentItem.ClassifyType
+	classifyType := currentItem.ClassifyType
 	dealShortName := currentItem.DealShortName
 	dealShortName := currentItem.DealShortName
 	dealValue := currentItem.DealValue
 	dealValue := currentItem.DealValue
 	dealChange := currentItem.DealChange
 	dealChange := currentItem.DealChange
@@ -196,7 +200,7 @@ func dealTradeOriginData(dataTimeMap map[string]*data_manage.TradePositionTop, o
 			if ok1 {
 			if ok1 {
 				yesterdayChange = yesterdayVal - beforeYesterdayItem.DealValue
 				yesterdayChange = yesterdayVal - beforeYesterdayItem.DealValue
 			}
 			}
-			tmp0 =&data_manage.TradePositionTop{
+			tmp0 = &data_manage.TradePositionTop{
 				ClassifyName:  classifyName,
 				ClassifyName:  classifyName,
 				ClassifyType:  classifyType,
 				ClassifyType:  classifyType,
 				DealShortName: dealShortName,
 				DealShortName: dealShortName,
@@ -223,7 +227,7 @@ func DealYesterdayData(exchange, startDate string) (err error) {
 	if err != nil {
 	if err != nil {
 		return
 		return
 	}
 	}
-	if startDate == firstItem.DataTime {  //如果当前是起始日,则无需统计修改前一天的数据
+	if startDate == firstItem.DataTime { //如果当前是起始日,则无需统计修改前一天的数据
 		return
 		return
 	}
 	}
 
 
@@ -237,7 +241,7 @@ func DealYesterdayData(exchange, startDate string) (err error) {
 		return
 		return
 	}
 	}
 	// 先查出T日最原始的数据
 	// 先查出T日最原始的数据
-	originList, err :=data_manage.GetTradePositionTopByExchangeDataTime(exchange, startDate, startDate)
+	originList, err := data_manage.GetTradePositionTopByExchangeDataTime(exchange, startDate, startDate)
 	if err != nil {
 	if err != nil {
 		return
 		return
 	}
 	}
@@ -247,10 +251,10 @@ func DealYesterdayData(exchange, startDate string) (err error) {
 		if v.SourceType != 0 {
 		if v.SourceType != 0 {
 			continue
 			continue
 		}
 		}
-		str := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DealShortName
+		str := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DealShortName
 		if v.DealType == 1 {
 		if v.DealType == 1 {
 			originBuyMap[str] = v
 			originBuyMap[str] = v
-		}else if v.DealType == 2 {
+		} else if v.DealType == 2 {
 			originSoldMap[str] = v
 			originSoldMap[str] = v
 		}
 		}
 	}
 	}
@@ -260,7 +264,7 @@ func DealYesterdayData(exchange, startDate string) (err error) {
 	if err != nil {
 	if err != nil {
 		return
 		return
 	}
 	}
-	if len(changeList) <=0 {
+	if len(changeList) <= 0 {
 		//err = fmt.Errorf("前天的数据无需修改")
 		//err = fmt.Errorf("前天的数据无需修改")
 		return
 		return
 	}
 	}
@@ -276,10 +280,10 @@ func DealYesterdayData(exchange, startDate string) (err error) {
 			if v.SourceType == 2 {
 			if v.SourceType == 2 {
 				continue
 				continue
 			}
 			}
-			str := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DealShortName
+			str := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DealShortName
 			if v.DealType == 1 {
 			if v.DealType == 1 {
 				beforeYesterdayMap1[str] = v.DealValue
 				beforeYesterdayMap1[str] = v.DealValue
-			}else if v.DealType == 2 {
+			} else if v.DealType == 2 {
 				beforeYesterdayMap2[str] = v.DealValue
 				beforeYesterdayMap2[str] = v.DealValue
 			}
 			}
 		}
 		}
@@ -289,17 +293,17 @@ func DealYesterdayData(exchange, startDate string) (err error) {
 	// 批量更新到分析表中,
 	// 批量更新到分析表中,
 	var updateAnalysisData []data_manage.UpdateDealValueChange
 	var updateAnalysisData []data_manage.UpdateDealValueChange
 	for _, v := range changeList {
 	for _, v := range changeList {
-		str := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DealShortName
+		str := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DealShortName
 		dealValue := 0
 		dealValue := 0
 		dealChange := 0
 		dealChange := 0
 		if v.DealType == 1 {
 		if v.DealType == 1 {
 			if n, ok := originBuyMap[str]; ok {
 			if n, ok := originBuyMap[str]; ok {
-				dealValue =  n.DealValue - n.DealChange
+				dealValue = n.DealValue - n.DealChange
 				if beforeVal, ok1 := beforeYesterdayMap1[str]; ok1 {
 				if beforeVal, ok1 := beforeYesterdayMap1[str]; ok1 {
 					dealChange = dealValue - beforeVal
 					dealChange = dealValue - beforeVal
 				}
 				}
 				tmp := data_manage.UpdateDealValueChange{
 				tmp := data_manage.UpdateDealValueChange{
-					Id: v.Id,
+					Id:         v.Id,
 					DealValue:  dealValue,
 					DealValue:  dealValue,
 					DealChange: dealChange,
 					DealChange: dealChange,
 					SourceType: 1,
 					SourceType: 1,
@@ -307,14 +311,14 @@ func DealYesterdayData(exchange, startDate string) (err error) {
 				}
 				}
 				updateAnalysisData = append(updateAnalysisData, tmp)
 				updateAnalysisData = append(updateAnalysisData, tmp)
 			}
 			}
-		}else if v.DealType == 2 {
+		} else if v.DealType == 2 {
 			if n, ok := originSoldMap[str]; ok {
 			if n, ok := originSoldMap[str]; ok {
-				dealValue =  n.DealValue - n.DealChange
+				dealValue = n.DealValue - n.DealChange
 				if beforeVal, ok1 := beforeYesterdayMap2[str]; ok1 {
 				if beforeVal, ok1 := beforeYesterdayMap2[str]; ok1 {
 					dealChange = dealValue - beforeVal
 					dealChange = dealValue - beforeVal
 				}
 				}
 				tmp := data_manage.UpdateDealValueChange{
 				tmp := data_manage.UpdateDealValueChange{
-					Id: v.Id,
+					Id:         v.Id,
 					DealValue:  dealValue,
 					DealValue:  dealValue,
 					DealChange: dealChange,
 					DealChange: dealChange,
 					SourceType: 1,
 					SourceType: 1,
@@ -356,8 +360,8 @@ func createAnalysisCleanTop(exchange, startDate, endDate string) (err error) {
 	now := time.Now()
 	now := time.Now()
 	var subDataList data_manage.TradePositionSubList
 	var subDataList data_manage.TradePositionSubList
 
 
-	subChangeMap1 := make(map[string]int)  //净多单map
-	subChangeMap2 := make(map[string]int)  //净空单map
+	subChangeMap1 := make(map[string]int) //净多单map
+	subChangeMap2 := make(map[string]int) //净空单map
 	//查询所有差值数据,
 	//查询所有差值数据,
 	yesterday, err := getYesterdayDate(startDate)
 	yesterday, err := getYesterdayDate(startDate)
 	if err != nil {
 	if err != nil {
@@ -370,7 +374,7 @@ func createAnalysisCleanTop(exchange, startDate, endDate string) (err error) {
 	}
 	}
 	if len(yesterdayTopList1) > 0 {
 	if len(yesterdayTopList1) > 0 {
 		for _, v := range yesterdayTopList1 {
 		for _, v := range yesterdayTopList1 {
-			nameStr := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_"+v.DealShortName
+			nameStr := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DataTime + "_" + v.DealShortName
 			subChangeMap1[nameStr] = v.DealValue
 			subChangeMap1[nameStr] = v.DealValue
 		}
 		}
 	}
 	}
@@ -382,7 +386,7 @@ func createAnalysisCleanTop(exchange, startDate, endDate string) (err error) {
 	}
 	}
 	if len(yesterdayTopList2) > 0 {
 	if len(yesterdayTopList2) > 0 {
 		for _, v := range yesterdayTopList2 {
 		for _, v := range yesterdayTopList2 {
-			nameStr := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_"+v.DealShortName
+			nameStr := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DataTime + "_" + v.DealShortName
 			subChangeMap2[nameStr] = v.DealValue
 			subChangeMap2[nameStr] = v.DealValue
 		}
 		}
 	}
 	}
@@ -393,17 +397,17 @@ func createAnalysisCleanTop(exchange, startDate, endDate string) (err error) {
 	}
 	}
 	buyDataMap := make(map[string]int)
 	buyDataMap := make(map[string]int)
 	for _, v := range originDataList {
 	for _, v := range originDataList {
-		str := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_"+v.DealShortName
+		str := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DataTime + "_" + v.DealShortName
 		if v.DealType == 1 {
 		if v.DealType == 1 {
 			buyDataMap[str] = v.DealValue
 			buyDataMap[str] = v.DealValue
-		}else if v.DealType == 2 {
+		} else if v.DealType == 2 {
 			subValue := 0
 			subValue := 0
 			dealType := 0
 			dealType := 0
 			if buy, ok := buyDataMap[str]; ok {
 			if buy, ok := buyDataMap[str]; ok {
 				subValue = buy - v.DealValue
 				subValue = buy - v.DealValue
-				if subValue >=0 {
+				if subValue >= 0 {
 					dealType = 3
 					dealType = 3
-				}else{
+				} else {
 					subValue = -subValue
 					subValue = -subValue
 					dealType = 4
 					dealType = 4
 				}
 				}
@@ -426,22 +430,22 @@ func createAnalysisCleanTop(exchange, startDate, endDate string) (err error) {
 	rankMap := make(map[string]int)
 	rankMap := make(map[string]int)
 	for _, v := range subDataList {
 	for _, v := range subDataList {
 		subValue := v.SubValue
 		subValue := v.SubValue
-		nameStr := v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_"+v.DealShortName
+		nameStr := v.ClassifyName + "_" + v.ClassifyType + "_" + v.DataTime + "_" + v.DealShortName
 		if v.DealType == 3 {
 		if v.DealType == 3 {
 			subChangeMap1[nameStr] = subValue
 			subChangeMap1[nameStr] = subValue
 			dealType = 3
 			dealType = 3
-			if _, ok :=rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_3"]; !ok {
+			if _, ok := rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_3"]; !ok {
 				rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_3"] = 1
 				rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_3"] = 1
-			}else{
-				rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_3"] ++
+			} else {
+				rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_3"]++
 			}
 			}
-		}else if v.DealType == 4 {
+		} else if v.DealType == 4 {
 			subChangeMap2[nameStr] = subValue
 			subChangeMap2[nameStr] = subValue
 			dealType = 4
 			dealType = 4
-			if _, ok :=rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_4"]; !ok {
+			if _, ok := rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_4"]; !ok {
 				rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_4"] = 1
 				rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_4"] = 1
-			}else{
-				rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_4"] ++
+			} else {
+				rankMap[v.ClassifyName+"_"+v.ClassifyType+"_"+v.DataTime+"_4"]++
 			}
 			}
 		}
 		}
 		//和T-1日比较差值
 		//和T-1日比较差值
@@ -450,13 +454,13 @@ func createAnalysisCleanTop(exchange, startDate, endDate string) (err error) {
 		if err != nil {
 		if err != nil {
 			return
 			return
 		}
 		}
-		yesterdayStr := v.ClassifyName+"_"+v.ClassifyType+"_"+tmpTimeStr+"_"+v.DealShortName
+		yesterdayStr := v.ClassifyName + "_" + v.ClassifyType + "_" + tmpTimeStr + "_" + v.DealShortName
 		dealChange := 0
 		dealChange := 0
 		if dealType == 3 {
 		if dealType == 3 {
 			if c, ok := subChangeMap1[yesterdayStr]; ok {
 			if c, ok := subChangeMap1[yesterdayStr]; ok {
 				dealChange = subValue - c
 				dealChange = subValue - c
 			}
 			}
-		}else if dealType == 4 {
+		} else if dealType == 4 {
 			if c, ok := subChangeMap2[yesterdayStr]; ok {
 			if c, ok := subChangeMap2[yesterdayStr]; ok {
 				dealChange = subValue - c
 				dealChange = subValue - c
 			}
 			}
@@ -498,14 +502,14 @@ func getYesterdayDate(today string) (yesterday string, err error) {
 	if err != nil {
 	if err != nil {
 		return
 		return
 	}
 	}
-	tmpTimeDate := tmpTime.AddDate(0,0,-i)
+	tmpTimeDate := tmpTime.AddDate(0, 0, -i)
 	weekStr := tmpTimeDate.Weekday().String()
 	weekStr := tmpTimeDate.Weekday().String()
 	if weekStr == "Sunday" {
 	if weekStr == "Sunday" {
-		i +=2
+		i += 2
 	} else if weekStr == "Saturday" {
 	} else if weekStr == "Saturday" {
-		i +=1
+		i += 1
 	}
 	}
-	tmpTimeDate = tmpTime.AddDate(0,0,-i)
+	tmpTimeDate = tmpTime.AddDate(0, 0, -i)
 	yesterday = tmpTimeDate.Format(utils.FormatDate)
 	yesterday = tmpTimeDate.Format(utils.FormatDate)
 	return
 	return
-}
+}

+ 10 - 0
services/task.go

@@ -18,6 +18,16 @@ import (
 	"time"
 	"time"
 )
 )
 
 
+func init() {
+	fmt.Println("init start")
+	var cont context.Context
+	err := data.InitPositionTask(cont)
+	if err != nil {
+		fmt.Println(err.Error())
+	}
+	fmt.Println("init end")
+}
+
 func Task() {
 func Task() {
 	fmt.Println("task start")
 	fmt.Println("task start")
 	//如果是生产环境,才需要走这些任务
 	//如果是生产环境,才需要走这些任务