Преглед изворни кода

行情历史数据查询接口针对 80 和 81 商品进行量与金额的小数位换算

muchinfo пре 1 дан
родитељ
комит
100af41847
6 измењених фајлова са 66 додато и 25 уклоњено
  1. 4 4
      controllers/guangzuan/tradeService.go
  2. 55 14
      controllers/quote/history.go
  3. 2 2
      docs/docs.go
  4. 2 2
      docs/swagger.json
  5. 2 2
      docs/swagger.yaml
  6. 1 1
      mtpcache/enumdicitem.go

+ 4 - 4
controllers/guangzuan/tradeService.go

@@ -18,8 +18,8 @@ import (
 // @Security Group
 // @Param    userid   query    int    true  "用户ID"
 // @Param    executestatus query    int false "执行状态 - 1:未生效 2:进行中 3:已结束"
-// @Param    page     query    int    false "页码"
-// @Param    pagesize query    int    false "每页条数"
+// @Param    page          query    int false "页码"
+// @Param    pagesize      query    int false "每页条数"
 // @Success  200           {array}  models.GzcjjcorderM
 // @Failure  500     {object} app.Response
 // @Router   /Guangzuan/QueryGZCJJCOrder [get]
@@ -39,8 +39,8 @@ func QueryGZCJJCOrder(c *gin.Context) {
 // @Security Group
 // @Param    userid        query    int true  "用户ID"
 // @Param    orderid  query    string false "单据ID"
-// @Param    page          query    int false "页码"
-// @Param    pagesize      query    int false "每页条数"
+// @Param    page     query    int    false "页码"
+// @Param    pagesize query    int    false "每页条数"
 // @Success  200      {array}  models.GzcjjcorderdetailM
 // @Failure  500           {object} app.Response
 // @Router   /Guangzuan/QueryGZCJJCOrderDetail [get]

+ 55 - 14
controllers/quote/history.go

@@ -12,6 +12,7 @@ import (
 	"mtp2_if/utils"
 	"net/http"
 	"sort"
+	"strconv"
 	"strings"
 	"time"
 
@@ -25,9 +26,9 @@ type HistoryData struct {
 	Highest       float64   `json:"h"`  // 最高价
 	Lowest        float64   `json:"l"`  // 最低价
 	Closed        float64   `json:"c"`  // 收盘价
-	TotleVolume   int       `json:"tv"` // 总量(成交量)
+	TotleVolume   float64   `json:"tv"` // 总量(成交量)
 	TotleTurnover float64   `json:"tt"` // 总金额
-	HoldVolume    int       `json:"hv"` // 持仓量
+	HoldVolume    float64   `json:"hv"` // 持仓量
 	Settle        float64   `json:"s"`  // 结算价,日线周期(包括)以上才有
 	TimeStamp     time.Time `json:"ts"` // 时间
 	IsFill        bool      `json:"f"`  // 是否补充数据
@@ -104,18 +105,37 @@ func QueryHistoryDatas(c *gin.Context) {
 	if len(cycleDatas) > 0 || req.CycleType >= 11 {
 		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)
 	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{
 			Opened:        utils.IntToFloat64(v.Open, dcplace),
 			Highest:       utils.IntToFloat64(v.High, dcplace),
 			Lowest:        utils.IntToFloat64(v.Low, dcplace),
 			Closed:        utils.IntToFloat64(v.Close, dcplace),
-			TotleVolume:   v.TV,
+			TotleVolume:   utils.IntToFloat64(v.TV, tPlace),
 			TotleTurnover: tt,
-			HoldVolume:    v.HV,
+			HoldVolume:    utils.IntToFloat64(v.HV, tPlace),
 			Settle:        utils.IntToFloat64(v.SP, dcplace),
 			TimeStamp:     time.Unix(int64(v.ST), 0),
 		}
@@ -188,16 +208,16 @@ func QueryHistoryDatas(c *gin.Context) {
 					v := quoteDays[0]
 					if len(rst) == 0 {
 						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{
 							Opened:        utils.IntToFloat64(int(v.Opened), dcplace),
 							Highest:       utils.IntToFloat64(int(v.Highest), dcplace),
 							Lowest:        utils.IntToFloat64(int(v.Lowest), dcplace),
 							Closed:        utils.IntToFloat64(int(v.Last), dcplace),
-							TotleVolume:   int(v.Totalvolume),
+							TotleVolume:   utils.IntToFloat64(int(v.Totalvolume), tPlace),
 							TotleTurnover: tt,
-							HoldVolume:    int(v.Holdvolume),
+							HoldVolume:    utils.IntToFloat64(int(v.Holdvolume), tPlace),
 							Settle:        utils.IntToFloat64(int(v.Settle), dcplace),
 							TimeStamp:     fisrtDate,
 						}
@@ -225,15 +245,15 @@ func QueryHistoryDatas(c *gin.Context) {
 							// #3424 当日未开市显示了K线
 							// 修改:这里增加判断盘面是否有开盘价
 							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{
 									Opened:        utils.IntToFloat64(int(v.Opened), dcplace),
 									Highest:       utils.IntToFloat64(int(v.Highest), dcplace),
 									Lowest:        utils.IntToFloat64(int(v.Lowest), dcplace),
 									Closed:        utils.IntToFloat64(int(v.Last), dcplace),
-									TotleVolume:   int(v.Totalvolume),
+									TotleVolume:   utils.IntToFloat64(int(v.Totalvolume), tPlace),
 									TotleTurnover: tt,
-									HoldVolume:    int(v.Holdvolume),
+									HoldVolume:    utils.IntToFloat64(int(v.Holdvolume), tPlace),
 									Settle:        utils.IntToFloat64(int(v.Settle), dcplace),
 									TimeStamp:     fisrtDate,
 								}
@@ -808,6 +828,27 @@ func QueryTSData(c *gin.Context) {
 		}
 		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)
 	for _, cycleData := range cycleDatas {
@@ -820,15 +861,15 @@ func QueryTSData(c *gin.Context) {
 			}
 		}
 		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{
 				Opened:        utils.IntToFloat64(cycleData.Open, int(goods.Decimalplace)),
 				Highest:       utils.IntToFloat64(cycleData.High, int(goods.Decimalplace)),
 				Lowest:        utils.IntToFloat64(cycleData.Low, int(goods.Decimalplace)),
 				Closed:        utils.IntToFloat64(cycleData.Close, int(goods.Decimalplace)),
-				TotleVolume:   cycleData.TV,
+				TotleVolume:   utils.IntToFloat64(cycleData.TV, tPlace),
 				TotleTurnover: tt,
-				HoldVolume:    cycleData.HV,
+				HoldVolume:    utils.IntToFloat64(cycleData.HV, tPlace),
 				Settle:        utils.IntToFloat64(cycleData.SP, int(goods.Decimalplace)),
 				TimeStamp:     time.Unix(int64(cycleData.ST), 0),
 				IsFill:        cycleData.FI,

+ 2 - 2
docs/docs.go

@@ -67912,7 +67912,7 @@ const docTemplate = `{
                 },
                 "hv": {
                     "description": "持仓量",
-                    "type": "integer"
+                    "type": "number"
                 },
                 "l": {
                     "description": "最低价",
@@ -67936,7 +67936,7 @@ const docTemplate = `{
                 },
                 "tv": {
                     "description": "总量(成交量)",
-                    "type": "integer"
+                    "type": "number"
                 }
             }
         },

+ 2 - 2
docs/swagger.json

@@ -67903,7 +67903,7 @@
                 },
                 "hv": {
                     "description": "持仓量",
-                    "type": "integer"
+                    "type": "number"
                 },
                 "l": {
                     "description": "最低价",
@@ -67927,7 +67927,7 @@
                 },
                 "tv": {
                     "description": "总量(成交量)",
-                    "type": "integer"
+                    "type": "number"
                 }
             }
         },

+ 2 - 2
docs/swagger.yaml

@@ -31940,7 +31940,7 @@ definitions:
         type: number
       hv:
         description: 持仓量
-        type: integer
+        type: number
       l:
         description: 最低价
         type: number
@@ -31958,7 +31958,7 @@ definitions:
         type: number
       tv:
         description: 总量(成交量)
-        type: integer
+        type: number
     type: object
   quote.HistoryTikData:
     properties:

+ 1 - 1
mtpcache/enumdicitem.go

@@ -31,7 +31,7 @@ type enumdicitem struct {
 	mtx   sync.RWMutex     //锁
 	data  map[int32]string //数据[enumitemname]enumdicname
 	last  time.Time
-	nType int32 // 1-单位名称 2-币种名称
+	nType int32 // 1-单位名称 2-币种名称 3-证件类型 4-数字货币
 }
 
 type enumData struct {