|
@@ -12,6 +12,7 @@ import (
|
|
|
"mtp2_if/utils"
|
|
"mtp2_if/utils"
|
|
|
"net/http"
|
|
"net/http"
|
|
|
"sort"
|
|
"sort"
|
|
|
|
|
+ "strconv"
|
|
|
"strings"
|
|
"strings"
|
|
|
"time"
|
|
"time"
|
|
|
|
|
|
|
@@ -25,9 +26,9 @@ type HistoryData struct {
|
|
|
Highest float64 `json:"h"` // 最高价
|
|
Highest float64 `json:"h"` // 最高价
|
|
|
Lowest float64 `json:"l"` // 最低价
|
|
Lowest float64 `json:"l"` // 最低价
|
|
|
Closed float64 `json:"c"` // 收盘价
|
|
Closed float64 `json:"c"` // 收盘价
|
|
|
- TotleVolume int `json:"tv"` // 总量(成交量)
|
|
|
|
|
|
|
+ TotleVolume float64 `json:"tv"` // 总量(成交量)
|
|
|
TotleTurnover float64 `json:"tt"` // 总金额
|
|
TotleTurnover float64 `json:"tt"` // 总金额
|
|
|
- HoldVolume int `json:"hv"` // 持仓量
|
|
|
|
|
|
|
+ HoldVolume float64 `json:"hv"` // 持仓量
|
|
|
Settle float64 `json:"s"` // 结算价,日线周期(包括)以上才有
|
|
Settle float64 `json:"s"` // 结算价,日线周期(包括)以上才有
|
|
|
TimeStamp time.Time `json:"ts"` // 时间
|
|
TimeStamp time.Time `json:"ts"` // 时间
|
|
|
IsFill bool `json:"f"` // 是否补充数据
|
|
IsFill bool `json:"f"` // 是否补充数据
|
|
@@ -104,18 +105,37 @@ func QueryHistoryDatas(c *gin.Context) {
|
|
|
if len(cycleDatas) > 0 || req.CycleType >= 11 {
|
|
if len(cycleDatas) > 0 || req.CycleType >= 11 {
|
|
|
dcplace = mtpcache.GetGoodsDecimalplace(req.GoodsCode)
|
|
dcplace = mtpcache.GetGoodsDecimalplace(req.GoodsCode)
|
|
|
}
|
|
}
|
|
|
|
|
+ var tPlace int = 0
|
|
|
|
|
+ var jPlace int32 = 2
|
|
|
|
|
+ if goods, has := mtpcache.GetGoods(req.GoodsCode); has {
|
|
|
|
|
+ s := goods.MARKETID[0:2]
|
|
|
|
|
+ if s == "80" || s == "81" {
|
|
|
|
|
+ if enumitems, err := models.GetEnumDicItem("digitalcurrency", int(goods.GOODSCURRENCYID)); err == nil && enumitems != nil {
|
|
|
|
|
+ if len(enumitems) > 0 {
|
|
|
|
|
+ tPlace, _ = strconv.Atoi(enumitems[0].Param1)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if enumitems, err := models.GetEnumDicItem("digitalcurrency", int(goods.CURRENCYID)); err == nil && enumitems != nil {
|
|
|
|
|
+ if len(enumitems) > 0 {
|
|
|
|
|
+ j, _ := strconv.Atoi(enumitems[0].Param1)
|
|
|
|
|
+ jPlace = int32(j)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 计算最终价格
|
|
// 计算最终价格
|
|
|
rst := make([]HistoryData, 0)
|
|
rst := make([]HistoryData, 0)
|
|
|
for _, v := range cycleDatas {
|
|
for _, v := range cycleDatas {
|
|
|
- tt, _ := decimal.NewFromFloat(utils.IntToFloat64(v.TT, dcplace)).Round(2).Float64() // 按行情服务要求,金额类需要先除以商品报价小数位再按2位小数四舍五入
|
|
|
|
|
|
|
+ tt, _ := decimal.NewFromFloat(utils.IntToFloat64(v.TT, dcplace)).Round(jPlace).Float64() // 按行情服务要求,金额类需要先除以商品报价小数位再按2位小数四舍五入
|
|
|
historyData := HistoryData{
|
|
historyData := HistoryData{
|
|
|
Opened: utils.IntToFloat64(v.Open, dcplace),
|
|
Opened: utils.IntToFloat64(v.Open, dcplace),
|
|
|
Highest: utils.IntToFloat64(v.High, dcplace),
|
|
Highest: utils.IntToFloat64(v.High, dcplace),
|
|
|
Lowest: utils.IntToFloat64(v.Low, dcplace),
|
|
Lowest: utils.IntToFloat64(v.Low, dcplace),
|
|
|
Closed: utils.IntToFloat64(v.Close, dcplace),
|
|
Closed: utils.IntToFloat64(v.Close, dcplace),
|
|
|
- TotleVolume: v.TV,
|
|
|
|
|
|
|
+ TotleVolume: utils.IntToFloat64(v.TV, tPlace),
|
|
|
TotleTurnover: tt,
|
|
TotleTurnover: tt,
|
|
|
- HoldVolume: v.HV,
|
|
|
|
|
|
|
+ HoldVolume: utils.IntToFloat64(v.HV, tPlace),
|
|
|
Settle: utils.IntToFloat64(v.SP, dcplace),
|
|
Settle: utils.IntToFloat64(v.SP, dcplace),
|
|
|
TimeStamp: time.Unix(int64(v.ST), 0),
|
|
TimeStamp: time.Unix(int64(v.ST), 0),
|
|
|
}
|
|
}
|
|
@@ -188,16 +208,16 @@ func QueryHistoryDatas(c *gin.Context) {
|
|
|
v := quoteDays[0]
|
|
v := quoteDays[0]
|
|
|
if len(rst) == 0 {
|
|
if len(rst) == 0 {
|
|
|
logger.GetLogger().Debugf("[checkTiks] no tiks, add a tik:%v", v)
|
|
logger.GetLogger().Debugf("[checkTiks] no tiks, add a tik:%v", v)
|
|
|
- tt, _ := decimal.NewFromFloat(utils.IntToFloat64(int(v.Totalturnover), dcplace)).Round(2).Float64() // 按行情服务要求,金额类需要先除以商品报价小数位再按2位小数四舍五入
|
|
|
|
|
|
|
+ tt, _ := decimal.NewFromFloat(utils.IntToFloat64(int(v.Totalturnover), dcplace)).Round(jPlace).Float64() // 按行情服务要求,金额类需要先除以商品报价小数位再按2位小数四舍五入
|
|
|
// 历史数据当前没数据则直接加当前盘面数据
|
|
// 历史数据当前没数据则直接加当前盘面数据
|
|
|
historyData := HistoryData{
|
|
historyData := HistoryData{
|
|
|
Opened: utils.IntToFloat64(int(v.Opened), dcplace),
|
|
Opened: utils.IntToFloat64(int(v.Opened), dcplace),
|
|
|
Highest: utils.IntToFloat64(int(v.Highest), dcplace),
|
|
Highest: utils.IntToFloat64(int(v.Highest), dcplace),
|
|
|
Lowest: utils.IntToFloat64(int(v.Lowest), dcplace),
|
|
Lowest: utils.IntToFloat64(int(v.Lowest), dcplace),
|
|
|
Closed: utils.IntToFloat64(int(v.Last), dcplace),
|
|
Closed: utils.IntToFloat64(int(v.Last), dcplace),
|
|
|
- TotleVolume: int(v.Totalvolume),
|
|
|
|
|
|
|
+ TotleVolume: utils.IntToFloat64(int(v.Totalvolume), tPlace),
|
|
|
TotleTurnover: tt,
|
|
TotleTurnover: tt,
|
|
|
- HoldVolume: int(v.Holdvolume),
|
|
|
|
|
|
|
+ HoldVolume: utils.IntToFloat64(int(v.Holdvolume), tPlace),
|
|
|
Settle: utils.IntToFloat64(int(v.Settle), dcplace),
|
|
Settle: utils.IntToFloat64(int(v.Settle), dcplace),
|
|
|
TimeStamp: fisrtDate,
|
|
TimeStamp: fisrtDate,
|
|
|
}
|
|
}
|
|
@@ -225,15 +245,15 @@ func QueryHistoryDatas(c *gin.Context) {
|
|
|
// #3424 当日未开市显示了K线
|
|
// #3424 当日未开市显示了K线
|
|
|
// 修改:这里增加判断盘面是否有开盘价
|
|
// 修改:这里增加判断盘面是否有开盘价
|
|
|
if v.Opened > 0 && v.Last > 0 {
|
|
if v.Opened > 0 && v.Last > 0 {
|
|
|
- tt, _ := decimal.NewFromFloat(utils.IntToFloat64(int(v.Totalturnover), dcplace)).Round(2).Float64() // 按行情服务要求,金额类需要先除以商品报价小数位再按2位小数四舍五入
|
|
|
|
|
|
|
+ tt, _ := decimal.NewFromFloat(utils.IntToFloat64(int(v.Totalturnover), dcplace)).Round(jPlace).Float64() // 按行情服务要求,金额类需要先除以商品报价小数位再按2位小数四舍五入
|
|
|
historyData := HistoryData{
|
|
historyData := HistoryData{
|
|
|
Opened: utils.IntToFloat64(int(v.Opened), dcplace),
|
|
Opened: utils.IntToFloat64(int(v.Opened), dcplace),
|
|
|
Highest: utils.IntToFloat64(int(v.Highest), dcplace),
|
|
Highest: utils.IntToFloat64(int(v.Highest), dcplace),
|
|
|
Lowest: utils.IntToFloat64(int(v.Lowest), dcplace),
|
|
Lowest: utils.IntToFloat64(int(v.Lowest), dcplace),
|
|
|
Closed: utils.IntToFloat64(int(v.Last), dcplace),
|
|
Closed: utils.IntToFloat64(int(v.Last), dcplace),
|
|
|
- TotleVolume: int(v.Totalvolume),
|
|
|
|
|
|
|
+ TotleVolume: utils.IntToFloat64(int(v.Totalvolume), tPlace),
|
|
|
TotleTurnover: tt,
|
|
TotleTurnover: tt,
|
|
|
- HoldVolume: int(v.Holdvolume),
|
|
|
|
|
|
|
+ HoldVolume: utils.IntToFloat64(int(v.Holdvolume), tPlace),
|
|
|
Settle: utils.IntToFloat64(int(v.Settle), dcplace),
|
|
Settle: utils.IntToFloat64(int(v.Settle), dcplace),
|
|
|
TimeStamp: fisrtDate,
|
|
TimeStamp: fisrtDate,
|
|
|
}
|
|
}
|
|
@@ -808,6 +828,27 @@ func QueryTSData(c *gin.Context) {
|
|
|
}
|
|
}
|
|
|
queryTSDataRsp.RunSteps = append(queryTSDataRsp.RunSteps, tsDataRunStep)
|
|
queryTSDataRsp.RunSteps = append(queryTSDataRsp.RunSteps, tsDataRunStep)
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 获取目标商品报价小数位
|
|
|
|
|
+ var tPlace int = 0
|
|
|
|
|
+ var jPlace int32 = 2
|
|
|
|
|
+ if goods, has := mtpcache.GetGoods(req.GoodsCode); has {
|
|
|
|
|
+ s := goods.MARKETID[0:2]
|
|
|
|
|
+ if s == "80" || s == "81" {
|
|
|
|
|
+ if enumitems, err := models.GetEnumDicItem("digitalcurrency", int(goods.GOODSCURRENCYID)); err == nil && enumitems != nil {
|
|
|
|
|
+ if len(enumitems) > 0 {
|
|
|
|
|
+ tPlace, _ = strconv.Atoi(enumitems[0].Param1)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if enumitems, err := models.GetEnumDicItem("digitalcurrency", int(goods.CURRENCYID)); err == nil && enumitems != nil {
|
|
|
|
|
+ if len(enumitems) > 0 {
|
|
|
|
|
+ j, _ := strconv.Atoi(enumitems[0].Param1)
|
|
|
|
|
+ jPlace = int32(j)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 最终返回的历史数据
|
|
// 最终返回的历史数据
|
|
|
historyDatas := make([]HistoryData, 0)
|
|
historyDatas := make([]HistoryData, 0)
|
|
|
for _, cycleData := range cycleDatas {
|
|
for _, cycleData := range cycleDatas {
|
|
@@ -820,15 +861,15 @@ func QueryTSData(c *gin.Context) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
if needAdd {
|
|
if needAdd {
|
|
|
- tt, _ := decimal.NewFromFloat(utils.IntToFloat64(cycleData.TT, int(goods.Decimalplace))).Round(2).Float64() // 按行情服务要求,金额类需要先除以商品报价小数位再按2位小数四舍五入
|
|
|
|
|
|
|
+ tt, _ := decimal.NewFromFloat(utils.IntToFloat64(cycleData.TT, int(goods.Decimalplace))).Round(jPlace).Float64() // 按行情服务要求,金额类需要先除以商品报价小数位再按2位小数四舍五入
|
|
|
historyDatas = append(historyDatas, HistoryData{
|
|
historyDatas = append(historyDatas, HistoryData{
|
|
|
Opened: utils.IntToFloat64(cycleData.Open, int(goods.Decimalplace)),
|
|
Opened: utils.IntToFloat64(cycleData.Open, int(goods.Decimalplace)),
|
|
|
Highest: utils.IntToFloat64(cycleData.High, int(goods.Decimalplace)),
|
|
Highest: utils.IntToFloat64(cycleData.High, int(goods.Decimalplace)),
|
|
|
Lowest: utils.IntToFloat64(cycleData.Low, int(goods.Decimalplace)),
|
|
Lowest: utils.IntToFloat64(cycleData.Low, int(goods.Decimalplace)),
|
|
|
Closed: utils.IntToFloat64(cycleData.Close, int(goods.Decimalplace)),
|
|
Closed: utils.IntToFloat64(cycleData.Close, int(goods.Decimalplace)),
|
|
|
- TotleVolume: cycleData.TV,
|
|
|
|
|
|
|
+ TotleVolume: utils.IntToFloat64(cycleData.TV, tPlace),
|
|
|
TotleTurnover: tt,
|
|
TotleTurnover: tt,
|
|
|
- HoldVolume: cycleData.HV,
|
|
|
|
|
|
|
+ HoldVolume: utils.IntToFloat64(cycleData.HV, tPlace),
|
|
|
Settle: utils.IntToFloat64(cycleData.SP, int(goods.Decimalplace)),
|
|
Settle: utils.IntToFloat64(cycleData.SP, int(goods.Decimalplace)),
|
|
|
TimeStamp: time.Unix(int64(cycleData.ST), 0),
|
|
TimeStamp: time.Unix(int64(cycleData.ST), 0),
|
|
|
IsFill: cycleData.FI,
|
|
IsFill: cycleData.FI,
|