quote.go 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. package quote
  2. import (
  3. "mtp2_if/config"
  4. "mtp2_if/global/app"
  5. "mtp2_if/global/e"
  6. "mtp2_if/logger"
  7. "mtp2_if/models"
  8. "mtp2_if/mtpcache"
  9. "mtp2_if/utils"
  10. "net/http"
  11. "strings"
  12. "time"
  13. "github.com/gin-gonic/gin"
  14. "github.com/shopspring/decimal"
  15. )
  16. // QueryQuoteDayReq 获取商品盘面信息请求参数
  17. type QueryQuoteDayReq struct {
  18. GoodsCodes string `form:"goodsCodes"`
  19. }
  20. // QueryQuoteDayRsp 获取商品盘面信息返回模型
  21. type QueryQuoteDayRsp struct {
  22. Exchangedate int64 `json:"exchangedate"` // 交易日
  23. Goodscode string `json:"goodscode"` // 商品代码
  24. Exchangecode int `json:"exchangecode"` // 交易所代码
  25. Preclose float64 `json:"preclose"` // 昨收
  26. Opentime time.Time `json:"opentime"` // 开盘时间
  27. Opened float64 `json:"opened"` // 开盘价
  28. Highest float64 `json:"highest"` // 最高价
  29. Lowest float64 `json:"lowest"` // 最低价
  30. Lasttime string `json:"lasttime"` // 行情时间(只有现价变化行情时间才变化)
  31. Utclasttime time.Time `json:"utclasttime"` // utc的行情时间
  32. Last float64 `json:"last"` // 最新价
  33. Lastvolume int64 `json:"lastvolume"` // 最新成交量
  34. Lastturnover float64 `json:"lastturnover` // 最新成交金额
  35. Totalbidvolume int64 `json:"totalbidvolume"` // 外盘
  36. Totalaskvolume int64 `json:"totalaskvolume"` // 内盘
  37. Totalvolume int64 `json:"totalvolume"` // 总量
  38. Totalturnover float64 `json:"totalturnover"` // 总金额
  39. Bid float64 `json:"bid"` // 买1
  40. Bid2 float64 `json:"bid2"` // 买2
  41. Bid3 float64 `json:"bid3"` // 买3
  42. Bid4 float64 `json:"bid4"` // 买4
  43. Bid5 float64 `json:"bid5"` // 买5
  44. Bidvolume int64 `json:"bidvolume"` // 买量1
  45. Bidvolume2 int64 `json:"bidvolume2"` // 买量2
  46. Bidvolume3 int64 `json:"bidvolume3"` // 买量3
  47. Bidvolume4 int64 `json:"bidvolume4"` // 买量4
  48. Bidvolume5 int64 `json:"bidvolume5"` // 买量5
  49. Ask float64 `json:"ask"` // 卖1
  50. Ask2 float64 `json:"ask2"` // 卖2
  51. Ask3 float64 `json:"ask3"` // 卖3
  52. Ask4 float64 `json:"ask4"` // 卖4
  53. Ask5 float64 `json:"ask5"` // 卖5
  54. Askvolume int64 `json:"askvolume"` // 卖量1
  55. Askvolume2 int64 `json:"askvolume2"` // 卖量2
  56. Askvolume3 int64 `json:"askvolume3"` // 卖量3
  57. Askvolume4 int64 `json:"askvolume4"` // 卖量4
  58. Askvolume5 int64 `json:"askvolume5"` // 卖量5
  59. Presettle float64 `json:"presettle"` // 昨结价
  60. Settle float64 `json:"settle"` // 结算价
  61. Preholdvolume int64 `json:"preholdvolume"` // 昨持仓
  62. Holdvolume int64 `json:"holdvolume"` // 持仓
  63. Averageprice float64 `json:"averageprice"` // 均价
  64. Orderid int64 `json:"orderid"` // 序号
  65. Limitup float64 `json:"limitup"` // 涨停价
  66. Limitdown float64 `json:"limitdown"` // 跌停价
  67. Inventory int64 `json:"inventory"` // 库存
  68. Holdincrement int64 `json:"holdincrement"` // 单笔持仓
  69. Iscleared int `json:"iscleared"` // 是否清盘标志
  70. Issettled int `json:"issettled"` // 是否结算标志
  71. Bidqueueinfo string `json:"bidqueueinfo"` // 大利市买港股用
  72. Askqueueinfo string `json:"askqueueinfo"` // 大利市卖港股用
  73. Bidorderid int64 `json:"bidorderid"` // 买单号1
  74. Bidorderid2 int64 `json:"bidorderid2"` // 买单号2
  75. Bidorderid3 int64 `json:"bidorderid3"` // 买单号3
  76. Bidorderid4 int64 `json:"bidorderid4"` // 买单号4
  77. Bidorderid5 int64 `json:"bidorderid5"` // 买单号5
  78. Askorderid int64 `json:"askorderid"` // 卖单号1
  79. Askorderid2 int64 `json:"askorderid2"` // 卖单号2
  80. Askorderid3 int64 `json:"askorderid3"` // 卖单号3
  81. Askorderid4 int64 `json:"askorderid4"` // 卖单号4
  82. Askorderid5 int64 `json:"askorderid5"` // 卖单号5
  83. Lastlot int64 `json:"lastlot"` // 最新成交手数
  84. Totallot int64 `json:"totallot"` // 总手数
  85. Strikeprice float64 `json:"strikeprice"` // 发行价
  86. Cleartime int64 `json:"cleartime"` // 清盘时间
  87. Calloptionpremiums int64 `json:"calloptionpremiums"` // 认购期权1
  88. Calloptionpremiums2 int64 `json:"calloptionpremiums2"` // 认购期权2
  89. Calloptionpremiums3 int64 `json:"calloptionpremiums3"` // 认购期权3
  90. Calloptionpremiums4 int64 `json:"calloptionpremiums4"` // 认购期权4
  91. Calloptionpremiums5 int64 `json:"calloptionpremiums5"` // 认购期权5
  92. Putoptionpremiums int64 `json:"putoptionpremiums"` // 认沽期权1
  93. Putoptionpremiums2 int64 `json:"putoptionpremiums2"` // 认沽期权2
  94. Putoptionpremiums3 int64 `json:"putoptionpremiums3"` // 认沽期权3
  95. Putoptionpremiums4 int64 `json:"putoptionpremiums4"` // 认沽期权4
  96. Putoptionpremiums5 int64 `json:"putoptionpremiums5"` // 认沽期权5
  97. Nontotalvolume int64 `json:"nontotalvolume"` // 非交易总量
  98. Nontotalholdervolume int64 `json:"nontotalholdervolume"` // 非交易持仓量
  99. Nontotalturnover int64 `json:"nontotalturnover"` // 非交易总金额
  100. Nontotallot int64 `json:"nontotallot"` // 非交易总手数
  101. Publictradetype string `json:"publictradetype"` // 公共交易标志类型 港股专用
  102. Iep float64 `json:"iep"` // 平衡价 港股专用
  103. Iev float64 `json:"iev"` // 平衡量 港股专用
  104. Grepmarketprice float64 `json:"grepmarketprice"` // 暗盘价 港股专用
  105. Bid6 float64 `json:"bid6"` // 买6
  106. Bid7 float64 `json:"bid7"` // 买7
  107. Bid8 float64 `json:"bid8"` // 买8
  108. Bid9 float64 `json:"bid9"` // 买9
  109. Bid10 float64 `json:"bid10"` // 买10
  110. Bidvolume6 int64 `json:"bidvolume6"` // 买量6
  111. Bidvolume7 int64 `json:"bidvolume7"` // 买量7
  112. Bidvolume8 int64 `json:"bidvolume8"` // 买量8
  113. Bidvolume9 int64 `json:"bidvolume9"` // 买量9
  114. Bidvolume10 int64 `json:"bidvolume10"` // 买量10
  115. Ask6 float64 `json:"ask6"` // 卖6
  116. Ask7 float64 `json:"ask7"` // 卖7
  117. Ask8 float64 `json:"ask8"` // 卖8
  118. Ask9 float64 `json:"ask9"` // 卖9
  119. Ask10 float64 `json:"ask10"` // 卖10
  120. Askvolume6 int64 `json:"askvolume6"` // 卖量6
  121. Askvolume7 int64 `json:"askvolume7"` // 卖量7
  122. Askvolume8 int64 `json:"askvolume8"` // 卖量8
  123. Askvolume9 int64 `json:"askvolume9"` // 卖量9
  124. Askvolume10 int64 `json:"askvolume10"` // 卖量10
  125. Bidordervolume int64 `json:"bidordervolume"` // 买单量1
  126. Bidordervolume2 int64 `json:"bidordervolume2"` // 买单量2
  127. Bidordervolume3 int64 `json:"bidordervolume3"` // 买单量3
  128. Bidordervolume4 int64 `json:"bidordervolume4"` // 买单量4
  129. Bidordervolume5 int64 `json:"bidordervolume5"` // 买单量5
  130. Bidordervolume6 int64 `json:"bidordervolume6"` // 买单量6
  131. Bidordervolume7 int64 `json:"bidordervolume7"` // 买单量7
  132. Bidordervolume8 int64 `json:"bidordervolume8"` // 买单量8
  133. Bidordervolume9 int64 `json:"bidordervolume9"` // 买单量9
  134. Bidordervolume10 int64 `json:"bidordervolume10"` // 买单量10
  135. Askordervolume int64 `json:"askordervolume"` // 卖单量1
  136. Askordervolume2 int64 `json:"askordervolume2"` // 卖单量2
  137. Askordervolume3 int64 `json:"askordervolume3"` // 卖单量3
  138. Askordervolume4 int64 `json:"askordervolume4"` // 卖单量4
  139. Askordervolume5 int64 `json:"askordervolume5"` // 卖单量5
  140. Askordervolume6 int64 `json:"askordervolume6"` // 卖单量6
  141. Askordervolume7 int64 `json:"askordervolume7"` // 卖单量7
  142. Askordervolume8 int64 `json:"askordervolume8"` // 卖单量8
  143. Askordervolume9 int64 `json:"askordervolume9"` // 卖单量9
  144. Askordervolume10 int64 `json:"askordervolume10"` // 卖单量10
  145. }
  146. // QueryQuoteDay 获取商品盘面信息
  147. // @Summary 获取商品盘面信息
  148. // @Produce json
  149. // @Security ApiKeyAuth
  150. // @Param goodsCodes query string false "此参数不填则查所有;商品代码列表,格式:CU2102,CU2103,AL2107"
  151. // @Success 200 {object} QueryQuoteDayRsp
  152. // @Failure 500 {object} app.Response
  153. // @Router /Quote/QueryQuoteDay [get]
  154. // @Tags 行情服务
  155. func QueryQuoteDay(c *gin.Context) {
  156. appG := app.Gin{C: c}
  157. // 获取请求参数
  158. var req QueryQuoteDayReq
  159. if err := appG.C.ShouldBindQuery(&req); err != nil {
  160. logger.GetLogger().Errorf("QueryQuoteDay failed: %s", err.Error())
  161. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  162. return
  163. }
  164. rsp := make([]QueryQuoteDayRsp, 0)
  165. quoteDays := make([]models.Quoteday, 0)
  166. // 判断是否启用 MySQL
  167. if config.SerCfg.MySQLCfg.Enabled == 1 {
  168. var err error
  169. quoteDays, err = models.GetQuoteDays(req.GoodsCodes)
  170. if err != nil {
  171. logger.GetLogger().Errorf("QueryQuoteDay failed: %s", err.Error())
  172. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  173. return
  174. }
  175. } else {
  176. // 从 Redis 获取盘面
  177. var err error
  178. quoteDays, err = models.QueryRedisQuoteDays(req.GoodsCodes)
  179. if err != nil {
  180. logger.GetLogger().Errorf("QueryQuoteDay failed: %s", err.Error())
  181. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  182. return
  183. }
  184. }
  185. for _, v := range quoteDays {
  186. // 获取对应的商品信息
  187. goods, bFind := mtpcache.GetGoods(v.Goodscode)
  188. if bFind {
  189. lt, _ := decimal.NewFromFloat(utils.IntToFloat64(int(v.Lastturnover), int(goods.DECIMALPLACE))).Round(2).Float64() // 按行情服务要求,金额类需要先除以商品报价小数位再按2位小数四舍五入
  190. tt, _ := decimal.NewFromFloat(utils.IntToFloat64(int(v.Totalturnover), int(goods.DECIMALPLACE))).Round(2).Float64()
  191. rsp = append(rsp, QueryQuoteDayRsp{
  192. Exchangedate: v.Exchangedate,
  193. Goodscode: v.Goodscode,
  194. Exchangecode: v.Exchangecode,
  195. Preclose: utils.IntToFloat64(int(v.Preclose), int(goods.DECIMALPLACE)),
  196. Opentime: time.Unix(int64(v.Opentime), 0),
  197. Opened: utils.IntToFloat64(int(v.Opened), int(goods.DECIMALPLACE)),
  198. Highest: utils.IntToFloat64(int(v.Highest), int(goods.DECIMALPLACE)),
  199. Lowest: utils.IntToFloat64(int(v.Lowest), int(goods.DECIMALPLACE)),
  200. Lasttime: v.Lasttime,
  201. Utclasttime: time.Unix(int64(v.Utclasttime), 0),
  202. Last: utils.IntToFloat64(int(v.Last), int(goods.DECIMALPLACE)),
  203. Lastvolume: v.Lastvolume,
  204. Lastturnover: lt,
  205. Totalbidvolume: v.Totalbidvolume,
  206. Totalaskvolume: v.Totalaskvolume,
  207. Totalvolume: v.Totalvolume,
  208. Totalturnover: tt,
  209. Bid: utils.IntToFloat64(int(v.Bid), int(goods.DECIMALPLACE)),
  210. Bid2: utils.IntToFloat64(int(v.Bid2), int(goods.DECIMALPLACE)),
  211. Bid3: utils.IntToFloat64(int(v.Bid3), int(goods.DECIMALPLACE)),
  212. Bid4: utils.IntToFloat64(int(v.Bid4), int(goods.DECIMALPLACE)),
  213. Bid5: utils.IntToFloat64(int(v.Bid5), int(goods.DECIMALPLACE)),
  214. Bidvolume: v.Bidvolume,
  215. Bidvolume2: v.Bidvolume2,
  216. Bidvolume3: v.Bidvolume3,
  217. Bidvolume4: v.Bidvolume4,
  218. Bidvolume5: v.Bidvolume5,
  219. Ask: utils.IntToFloat64(int(v.Ask), int(goods.DECIMALPLACE)),
  220. Ask2: utils.IntToFloat64(int(v.Ask2), int(goods.DECIMALPLACE)),
  221. Ask3: utils.IntToFloat64(int(v.Ask3), int(goods.DECIMALPLACE)),
  222. Ask4: utils.IntToFloat64(int(v.Ask4), int(goods.DECIMALPLACE)),
  223. Ask5: utils.IntToFloat64(int(v.Ask5), int(goods.DECIMALPLACE)),
  224. Askvolume: v.Askvolume,
  225. Askvolume2: v.Askvolume2,
  226. Askvolume3: v.Askvolume3,
  227. Askvolume4: v.Askvolume4,
  228. Askvolume5: v.Askvolume5,
  229. Presettle: utils.IntToFloat64(int(v.Presettle), int(goods.DECIMALPLACE)),
  230. Settle: utils.IntToFloat64(int(v.Settle), int(goods.DECIMALPLACE)),
  231. Preholdvolume: v.Preholdvolume,
  232. Holdvolume: v.Holdvolume,
  233. Averageprice: utils.IntToFloat64(int(v.Averageprice), int(goods.DECIMALPLACE)),
  234. Orderid: v.Orderid,
  235. Limitup: utils.IntToFloat64(int(v.Limitup), int(goods.DECIMALPLACE)),
  236. Limitdown: utils.IntToFloat64(int(v.Limitdown), int(goods.DECIMALPLACE)),
  237. Inventory: v.Inventory,
  238. Holdincrement: v.Holdincrement,
  239. Iscleared: v.Iscleared,
  240. Issettled: v.Issettled,
  241. Bidqueueinfo: v.Bidqueueinfo,
  242. Askqueueinfo: v.Askqueueinfo,
  243. Bidorderid: v.Bidorderid,
  244. Bidorderid2: v.Bidorderid2,
  245. Bidorderid3: v.Bidorderid3,
  246. Bidorderid4: v.Bidorderid4,
  247. Bidorderid5: v.Bidorderid5,
  248. Askorderid: v.Askorderid,
  249. Askorderid2: v.Askorderid2,
  250. Askorderid3: v.Askorderid3,
  251. Askorderid4: v.Askorderid4,
  252. Askorderid5: v.Askorderid5,
  253. Lastlot: v.Lastlot,
  254. Totallot: v.Totallot,
  255. Strikeprice: utils.IntToFloat64(int(v.Strikeprice), int(goods.DECIMALPLACE)),
  256. Cleartime: v.Cleartime,
  257. Calloptionpremiums: v.Calloptionpremiums,
  258. Calloptionpremiums2: v.Calloptionpremiums2,
  259. Calloptionpremiums3: v.Calloptionpremiums3,
  260. Calloptionpremiums4: v.Calloptionpremiums4,
  261. Calloptionpremiums5: v.Calloptionpremiums5,
  262. Putoptionpremiums: v.Putoptionpremiums,
  263. Putoptionpremiums2: v.Putoptionpremiums2,
  264. Putoptionpremiums3: v.Putoptionpremiums3,
  265. Putoptionpremiums4: v.Putoptionpremiums4,
  266. Putoptionpremiums5: v.Putoptionpremiums5,
  267. Nontotalvolume: v.Nontotalvolume,
  268. Nontotalholdervolume: v.Nontotalholdervolume,
  269. Nontotalturnover: v.Nontotalturnover,
  270. Nontotallot: v.Nontotallot,
  271. Publictradetype: v.Publictradetype,
  272. Iep: utils.IntToFloat64(int(v.Iep), int(goods.DECIMALPLACE)),
  273. Iev: utils.IntToFloat64(int(v.Iev), int(goods.DECIMALPLACE)),
  274. Grepmarketprice: utils.IntToFloat64(int(v.Grepmarketprice), int(goods.DECIMALPLACE)),
  275. Bid6: utils.IntToFloat64(int(v.Bid6), int(goods.DECIMALPLACE)),
  276. Bid7: utils.IntToFloat64(int(v.Bid7), int(goods.DECIMALPLACE)),
  277. Bid8: utils.IntToFloat64(int(v.Bid8), int(goods.DECIMALPLACE)),
  278. Bid9: utils.IntToFloat64(int(v.Bid9), int(goods.DECIMALPLACE)),
  279. Bid10: utils.IntToFloat64(int(v.Bid10), int(goods.DECIMALPLACE)),
  280. Bidvolume6: v.Bidvolume6,
  281. Bidvolume7: v.Bidvolume7,
  282. Bidvolume8: v.Bidvolume8,
  283. Bidvolume9: v.Bidvolume9,
  284. Bidvolume10: v.Bidvolume10,
  285. Ask6: utils.IntToFloat64(int(v.Ask6), int(goods.DECIMALPLACE)),
  286. Ask7: utils.IntToFloat64(int(v.Ask7), int(goods.DECIMALPLACE)),
  287. Ask8: utils.IntToFloat64(int(v.Ask8), int(goods.DECIMALPLACE)),
  288. Ask9: utils.IntToFloat64(int(v.Ask9), int(goods.DECIMALPLACE)),
  289. Ask10: utils.IntToFloat64(int(v.Ask10), int(goods.DECIMALPLACE)),
  290. Askvolume6: v.Askvolume6,
  291. Askvolume7: v.Askvolume7,
  292. Askvolume8: v.Askvolume8,
  293. Askvolume9: v.Askvolume9,
  294. Askvolume10: v.Askvolume10,
  295. Bidordervolume: v.Bidordervolume,
  296. Bidordervolume2: v.Bidordervolume2,
  297. Bidordervolume3: v.Bidordervolume3,
  298. Bidordervolume4: v.Bidordervolume4,
  299. Bidordervolume5: v.Bidordervolume5,
  300. Bidordervolume6: v.Bidordervolume6,
  301. Bidordervolume7: v.Bidordervolume7,
  302. Bidordervolume8: v.Bidordervolume8,
  303. Bidordervolume9: v.Bidordervolume9,
  304. Bidordervolume10: v.Bidordervolume10,
  305. Askordervolume: v.Askordervolume,
  306. Askordervolume2: v.Askordervolume2,
  307. Askordervolume3: v.Askordervolume3,
  308. Askordervolume4: v.Askordervolume4,
  309. Askordervolume5: v.Askordervolume5,
  310. Askordervolume6: v.Askordervolume6,
  311. Askordervolume7: v.Askordervolume7,
  312. Askordervolume8: v.Askordervolume8,
  313. Askordervolume9: v.Askordervolume9,
  314. Askordervolume10: v.Askordervolume10,
  315. })
  316. }
  317. }
  318. // 查询成功
  319. logger.GetLogger().Debugln("QueryQuoteDay successed, rows: %v", len(rsp))
  320. appG.Response(http.StatusOK, e.SUCCESS, rsp)
  321. }
  322. type GetTouristQuoteDayReq struct {
  323. Goodscodes string `form:"goodsCodes" binding:"required"` // 商品代码列表,格式:1,2,3
  324. }
  325. // GetTouristQuoteDay 获取游客商品盘面信息
  326. // @Summary 获取游客商品盘面信息
  327. // @Produce json
  328. // @Param goodsCodes query string true "商品代码列表,格式:1,2,3"
  329. // @Success 200 {array} QueryQuoteDayRsp
  330. // @Failure 500 {object} app.Response
  331. // @Router /Quote/GetTouristQuoteDay [get]
  332. // @Tags 行情服务
  333. func GetTouristQuoteDay(c *gin.Context) {
  334. appG := app.Gin{C: c}
  335. // 获取请求参数
  336. var req GetTouristQuoteDayReq
  337. if err := appG.C.ShouldBindQuery(&req); err != nil {
  338. logger.GetLogger().Errorf("GetTouristQuoteDay failed: %s", err.Error())
  339. appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
  340. return
  341. }
  342. g := strings.Split(req.Goodscodes, ",")
  343. quoteDays, err := models.GetRedisQuoteDays(g)
  344. if err != nil {
  345. logger.GetLogger().Errorf("GetTouristQuoteDay failed: %s", err.Error())
  346. appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
  347. return
  348. }
  349. rsp := make([]QueryQuoteDayRsp, 0)
  350. for _, v := range quoteDays {
  351. // 获取对应的商品信息
  352. goods, bFind := mtpcache.GetGoods(v.Goodscode)
  353. if bFind {
  354. rsp = append(rsp, QueryQuoteDayRsp{
  355. Exchangedate: v.Exchangedate,
  356. Goodscode: v.Goodscode,
  357. Exchangecode: v.Exchangecode,
  358. Preclose: utils.IntToFloat64(int(v.Preclose), int(goods.DECIMALPLACE)),
  359. Opentime: time.Unix(int64(v.Opentime), 0),
  360. Opened: utils.IntToFloat64(int(v.Opened), int(goods.DECIMALPLACE)),
  361. Highest: utils.IntToFloat64(int(v.Highest), int(goods.DECIMALPLACE)),
  362. Lowest: utils.IntToFloat64(int(v.Lowest), int(goods.DECIMALPLACE)),
  363. Lasttime: v.Lasttime,
  364. Utclasttime: time.Unix(int64(v.Utclasttime), 0),
  365. Last: utils.IntToFloat64(int(v.Last), int(goods.DECIMALPLACE)),
  366. Lastvolume: v.Lastvolume,
  367. Lastturnover: utils.IntToFloat64(int(v.Lastturnover), int(goods.DECIMALPLACE)),
  368. Totalbidvolume: v.Totalbidvolume,
  369. Totalaskvolume: v.Totalaskvolume,
  370. Totalvolume: v.Totalvolume,
  371. Totalturnover: utils.IntToFloat64(int(v.Totalturnover), int(goods.DECIMALPLACE)),
  372. Bid: utils.IntToFloat64(int(v.Bid), int(goods.DECIMALPLACE)),
  373. Bid2: utils.IntToFloat64(int(v.Bid2), int(goods.DECIMALPLACE)),
  374. Bid3: utils.IntToFloat64(int(v.Bid3), int(goods.DECIMALPLACE)),
  375. Bid4: utils.IntToFloat64(int(v.Bid4), int(goods.DECIMALPLACE)),
  376. Bid5: utils.IntToFloat64(int(v.Bid5), int(goods.DECIMALPLACE)),
  377. Bidvolume: v.Bidvolume,
  378. Bidvolume2: v.Bidvolume2,
  379. Bidvolume3: v.Bidvolume3,
  380. Bidvolume4: v.Bidvolume4,
  381. Bidvolume5: v.Bidvolume5,
  382. Ask: utils.IntToFloat64(int(v.Ask), int(goods.DECIMALPLACE)),
  383. Ask2: utils.IntToFloat64(int(v.Ask2), int(goods.DECIMALPLACE)),
  384. Ask3: utils.IntToFloat64(int(v.Ask3), int(goods.DECIMALPLACE)),
  385. Ask4: utils.IntToFloat64(int(v.Ask4), int(goods.DECIMALPLACE)),
  386. Ask5: utils.IntToFloat64(int(v.Ask5), int(goods.DECIMALPLACE)),
  387. Askvolume: v.Askvolume,
  388. Askvolume2: v.Askvolume2,
  389. Askvolume3: v.Askvolume3,
  390. Askvolume4: v.Askvolume4,
  391. Askvolume5: v.Askvolume5,
  392. Presettle: utils.IntToFloat64(int(v.Presettle), int(goods.DECIMALPLACE)),
  393. Settle: utils.IntToFloat64(int(v.Settle), int(goods.DECIMALPLACE)),
  394. Preholdvolume: v.Preholdvolume,
  395. Holdvolume: v.Holdvolume,
  396. Averageprice: utils.IntToFloat64(int(v.Averageprice), int(goods.DECIMALPLACE)),
  397. Orderid: v.Orderid,
  398. Limitup: utils.IntToFloat64(int(v.Limitup), int(goods.DECIMALPLACE)),
  399. Limitdown: utils.IntToFloat64(int(v.Limitdown), int(goods.DECIMALPLACE)),
  400. Inventory: v.Inventory,
  401. Holdincrement: v.Holdincrement,
  402. Iscleared: v.Iscleared,
  403. Issettled: v.Issettled,
  404. Bidqueueinfo: v.Bidqueueinfo,
  405. Askqueueinfo: v.Askqueueinfo,
  406. Bidorderid: v.Bidorderid,
  407. Bidorderid2: v.Bidorderid2,
  408. Bidorderid3: v.Bidorderid3,
  409. Bidorderid4: v.Bidorderid4,
  410. Bidorderid5: v.Bidorderid5,
  411. Askorderid: v.Askorderid,
  412. Askorderid2: v.Askorderid2,
  413. Askorderid3: v.Askorderid3,
  414. Askorderid4: v.Askorderid4,
  415. Askorderid5: v.Askorderid5,
  416. Lastlot: v.Lastlot,
  417. Totallot: v.Totallot,
  418. Strikeprice: utils.IntToFloat64(int(v.Strikeprice), int(goods.DECIMALPLACE)),
  419. Cleartime: v.Cleartime,
  420. Calloptionpremiums: v.Calloptionpremiums,
  421. Calloptionpremiums2: v.Calloptionpremiums2,
  422. Calloptionpremiums3: v.Calloptionpremiums3,
  423. Calloptionpremiums4: v.Calloptionpremiums4,
  424. Calloptionpremiums5: v.Calloptionpremiums5,
  425. Putoptionpremiums: v.Putoptionpremiums,
  426. Putoptionpremiums2: v.Putoptionpremiums2,
  427. Putoptionpremiums3: v.Putoptionpremiums3,
  428. Putoptionpremiums4: v.Putoptionpremiums4,
  429. Putoptionpremiums5: v.Putoptionpremiums5,
  430. Nontotalvolume: v.Nontotalvolume,
  431. Nontotalholdervolume: v.Nontotalholdervolume,
  432. Nontotalturnover: v.Nontotalturnover,
  433. Nontotallot: v.Nontotallot,
  434. Publictradetype: v.Publictradetype,
  435. Iep: utils.IntToFloat64(int(v.Iep), int(goods.DECIMALPLACE)),
  436. Iev: utils.IntToFloat64(int(v.Iev), int(goods.DECIMALPLACE)),
  437. Grepmarketprice: utils.IntToFloat64(int(v.Grepmarketprice), int(goods.DECIMALPLACE)),
  438. Bid6: utils.IntToFloat64(int(v.Bid6), int(goods.DECIMALPLACE)),
  439. Bid7: utils.IntToFloat64(int(v.Bid7), int(goods.DECIMALPLACE)),
  440. Bid8: utils.IntToFloat64(int(v.Bid8), int(goods.DECIMALPLACE)),
  441. Bid9: utils.IntToFloat64(int(v.Bid9), int(goods.DECIMALPLACE)),
  442. Bid10: utils.IntToFloat64(int(v.Bid10), int(goods.DECIMALPLACE)),
  443. Bidvolume6: v.Bidvolume6,
  444. Bidvolume7: v.Bidvolume7,
  445. Bidvolume8: v.Bidvolume8,
  446. Bidvolume9: v.Bidvolume9,
  447. Bidvolume10: v.Bidvolume10,
  448. Ask6: utils.IntToFloat64(int(v.Ask6), int(goods.DECIMALPLACE)),
  449. Ask7: utils.IntToFloat64(int(v.Ask7), int(goods.DECIMALPLACE)),
  450. Ask8: utils.IntToFloat64(int(v.Ask8), int(goods.DECIMALPLACE)),
  451. Ask9: utils.IntToFloat64(int(v.Ask9), int(goods.DECIMALPLACE)),
  452. Ask10: utils.IntToFloat64(int(v.Ask10), int(goods.DECIMALPLACE)),
  453. Askvolume6: v.Askvolume6,
  454. Askvolume7: v.Askvolume7,
  455. Askvolume8: v.Askvolume8,
  456. Askvolume9: v.Askvolume9,
  457. Askvolume10: v.Askvolume10,
  458. Bidordervolume: v.Bidordervolume,
  459. Bidordervolume2: v.Bidordervolume2,
  460. Bidordervolume3: v.Bidordervolume3,
  461. Bidordervolume4: v.Bidordervolume4,
  462. Bidordervolume5: v.Bidordervolume5,
  463. Bidordervolume6: v.Bidordervolume6,
  464. Bidordervolume7: v.Bidordervolume7,
  465. Bidordervolume8: v.Bidordervolume8,
  466. Bidordervolume9: v.Bidordervolume9,
  467. Bidordervolume10: v.Bidordervolume10,
  468. Askordervolume: v.Askordervolume,
  469. Askordervolume2: v.Askordervolume2,
  470. Askordervolume3: v.Askordervolume3,
  471. Askordervolume4: v.Askordervolume4,
  472. Askordervolume5: v.Askordervolume5,
  473. Askordervolume6: v.Askordervolume6,
  474. Askordervolume7: v.Askordervolume7,
  475. Askordervolume8: v.Askordervolume8,
  476. Askordervolume9: v.Askordervolume9,
  477. Askordervolume10: v.Askordervolume10,
  478. })
  479. }
  480. }
  481. // 查询成功
  482. // logger.GetLogger().Debugln("GetTouristQuoteDay successed, rows: %v", len(rsp))
  483. appG.Response(http.StatusOK, e.SUCCESS, rsp)
  484. }