Browse Source

增加游客盘面请求接口

zhou.xiaoning 2 years ago
parent
commit
6dc2072a90
8 changed files with 248 additions and 8 deletions
  1. 40 3
      controllers/quote/quote.go
  2. 46 0
      docs/docs.go
  3. 46 0
      docs/swagger.json
  4. 30 0
      docs/swagger.yaml
  5. 4 0
      main.go
  6. 65 0
      models/quote.go
  7. 6 5
      routers/router.go
  8. 11 0
      utils/stringsUtils.go

+ 40 - 3
controllers/quote/quote.go

@@ -8,6 +8,7 @@ import (
 	"mtp2_if/mtpcache"
 	"mtp2_if/utils"
 	"net/http"
+	"strings"
 	"time"
 
 	"github.com/gin-gonic/gin"
@@ -147,13 +148,13 @@ type QueryQuoteDayRsp struct {
 
 // QueryQuoteDay 获取商品盘面信息
 // @Summary  获取商品盘面信息
-// @Produce  json
+// @Produce json
 // @Security ApiKeyAuth
 // @Param    goodsCodes query    string false "此参数不填则查所有;商品代码列表,格式:CU2102,CU2103,AL2107"
 // @Success  200        {object} QueryQuoteDayRsp
-// @Failure  500        {object} app.Response
+// @Failure 500        {object} app.Response
 // @Router   /Quote/QueryQuoteDay [get]
-// @Tags     行情服务
+// @Tags    行情服务
 func QueryQuoteDay(c *gin.Context) {
 	appG := app.Gin{C: c}
 
@@ -308,3 +309,39 @@ func QueryQuoteDay(c *gin.Context) {
 	logger.GetLogger().Debugln("QueryQuoteDay successed, rows: %v", len(rsp))
 	appG.Response(http.StatusOK, e.SUCCESS, rsp)
 }
+
+type GetTouristQuoteDayReq struct {
+	Goodscodes string `form:"goodsCodes" binding:"required"` // 商品代码列表,格式:1,2,3
+}
+
+// GetTouristQuoteDay 获取游客商品盘面信息
+// @Summary 获取游客商品盘面信息
+// @Produce  json
+// @Param   goodsCodes query    string true "商品代码列表,格式:1,2,3"
+// @Success 200        {object} GetTouristQuoteDayReq
+// @Failure  500        {object} app.Response
+// @Router  /Quote/GetTouristQuoteDay [get]
+// @Tags     行情服务
+func GetTouristQuoteDay(c *gin.Context) {
+	appG := app.Gin{C: c}
+
+	// 获取请求参数
+	var req GetTouristQuoteDayReq
+	if err := appG.C.ShouldBindQuery(&req); err != nil {
+		logger.GetLogger().Errorf("GetTouristQuoteDay failed: %s", err.Error())
+		appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
+		return
+	}
+
+	g := strings.Split(req.Goodscodes, ",")
+	rsp, err := models.GetRedisQuoteDays(g)
+	if err != nil {
+		logger.GetLogger().Errorf("GetTouristQuoteDay failed: %s", err.Error())
+		appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
+		return
+	}
+
+	// 查询成功
+	// logger.GetLogger().Debugln("GetTouristQuoteDay successed, rows: %v", len(rsp))
+	appG.Response(http.StatusOK, e.SUCCESS, rsp)
+}

+ 46 - 0
docs/docs.go

@@ -16703,6 +16703,40 @@ const docTemplate = `{
                 }
             }
         },
+        "/Quote/GetTouristQuoteDay": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "行情服务"
+                ],
+                "summary": "获取游客商品盘面信息",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "商品代码列表,格式:1,2,3",
+                        "name": "goodsCodes",
+                        "in": "query",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/quote.GetTouristQuoteDayReq"
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/Quote/QueryHistoryDatas": {
             "get": {
                 "security": [
@@ -58323,6 +58357,18 @@ const docTemplate = `{
                 }
             }
         },
+        "quote.GetTouristQuoteDayReq": {
+            "type": "object",
+            "required": [
+                "goodscodes"
+            ],
+            "properties": {
+                "goodscodes": {
+                    "description": "商品代码列表,格式:1,2,3",
+                    "type": "string"
+                }
+            }
+        },
         "quote.HistoryData": {
             "type": "object",
             "properties": {

+ 46 - 0
docs/swagger.json

@@ -16694,6 +16694,40 @@
                 }
             }
         },
+        "/Quote/GetTouristQuoteDay": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "行情服务"
+                ],
+                "summary": "获取游客商品盘面信息",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "商品代码列表,格式:1,2,3",
+                        "name": "goodsCodes",
+                        "in": "query",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/quote.GetTouristQuoteDayReq"
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/Quote/QueryHistoryDatas": {
             "get": {
                 "security": [
@@ -58314,6 +58348,18 @@
                 }
             }
         },
+        "quote.GetTouristQuoteDayReq": {
+            "type": "object",
+            "required": [
+                "goodscodes"
+            ],
+            "properties": {
+                "goodscodes": {
+                    "description": "商品代码列表,格式:1,2,3",
+                    "type": "string"
+                }
+            }
+        },
         "quote.HistoryData": {
             "type": "object",
             "properties": {

+ 30 - 0
docs/swagger.yaml

@@ -27643,6 +27643,14 @@ definitions:
         description: 结算保证金值
         type: number
     type: object
+  quote.GetTouristQuoteDayReq:
+    properties:
+      goodscodes:
+        description: 商品代码列表,格式:1,2,3
+        type: string
+    required:
+    - goodscodes
+    type: object
   quote.HistoryData:
     properties:
       c:
@@ -39258,6 +39266,28 @@ paths:
       summary: 查询用户协议节点配置和状态
       tags:
       - 大连千海金(协议和签约信息)
+  /Quote/GetTouristQuoteDay:
+    get:
+      parameters:
+      - description: 商品代码列表,格式:1,2,3
+        in: query
+        name: goodsCodes
+        required: true
+        type: string
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/quote.GetTouristQuoteDayReq'
+        "500":
+          description: Internal Server Error
+          schema:
+            $ref: '#/definitions/app.Response'
+      summary: 获取游客商品盘面信息
+      tags:
+      - 行情服务
   /Quote/QueryHistoryDatas:
     get:
       parameters:

+ 4 - 0
main.go

@@ -3,6 +3,7 @@ package main
 import (
 	"context"
 	"mtp2_if/controllers/other"
+	"mtp2_if/models"
 	"net/http"
 	"os"
 	"os/signal"
@@ -112,6 +113,9 @@ func main() {
 		gin.SetMode(gin.ReleaseMode)
 	}
 
+	// 启动定时同步盘面Timer
+	models.StartSyncRedisQuoteDay()
+
 	// 设置超时
 	timeout := 15 * time.Second
 

+ 65 - 0
models/quote.go

@@ -1,9 +1,13 @@
 package models
 
 import (
+	"encoding/json"
 	"errors"
 	"fmt"
 	"mtp2_if/db"
+	"mtp2_if/logger"
+	"mtp2_if/rediscli"
+	"mtp2_if/utils"
 	"strings"
 	"time"
 
@@ -352,3 +356,64 @@ func GetQuoteDays(goodsCodes string) ([]Quoteday, error) {
 
 	return datas, nil
 }
+
+// SetRedisQuoteDays 将盘面数据同步到Redis
+func SetRedisQuoteDays() (err error) {
+	engine := db.GetMySQLEngine()
+	datas := make([]Quoteday, 0)
+	if err = engine.Find(&datas); err != nil {
+		return
+	}
+	b, err := json.Marshal(datas)
+	if err != nil {
+		return
+	}
+
+	redisCli := rediscli.GetRedisClient()
+	err = redisCli.Set("Tourist:QuoteDay", b, 0).Err()
+
+	return
+}
+
+// GetRedisQuoteDays 从Redis读取盘面数据
+func GetRedisQuoteDays(goodsCodes []string) (quoteDays []Quoteday, err error) {
+	redisCli := rediscli.GetRedisClient()
+	b, err := redisCli.Get("Tourist:QuoteDay").Bytes()
+	if err != nil {
+		return
+	}
+
+	var datas []Quoteday
+	if err = json.Unmarshal(b, &datas); err != nil {
+		return
+	}
+	quoteDays = make([]Quoteday, 0)
+	for _, item := range datas {
+		if utils.InArray(len(goodsCodes), func(i int) bool { return goodsCodes[i] == item.Goodscode }) {
+			quoteDays = append(quoteDays, item)
+		}
+	}
+
+	return
+}
+
+var Done chan bool
+
+func StartSyncRedisQuoteDay() {
+	ticker := time.NewTicker(2 * time.Second)
+	Done = make(chan bool)
+	go func() {
+		for {
+			select {
+			case <-Done:
+				ticker.Stop()
+				return
+			case <-ticker.C:
+				// 在这里执行定时任务的代码
+				if err := SetRedisQuoteDays(); err != nil {
+					logger.GetLogger().Errorf("Sync Redis failed: %s", err.Error())
+				}
+			}
+		}
+	}()
+}

+ 6 - 5
routers/router.go

@@ -202,16 +202,17 @@ func InitRouter() *gin.Engine {
 	// ************************ 行情服务 ************************
 	quoteR := apiR.Group("Quote")
 	// quoteR.Use(token.AuthByHsby())
-	quoteR.Use(token.Auth())
+	quoteR.Use()
 	{
+		quoteR.Use().GET("/GetTouristQuoteDay", quote.GetTouristQuoteDay)
 		// 查询行情历史数据
-		quoteR.GET("/QueryHistoryDatas", quote.QueryHistoryDatas)
+		quoteR.Use(token.Auth()).GET("/QueryHistoryDatas", quote.QueryHistoryDatas)
 		// 查询行情Tik数据
-		quoteR.GET("/QueryHistoryTikDatas", quote.QueryHistoryTikDatas)
+		quoteR.Use(token.Auth()).GET("/QueryHistoryTikDatas", quote.QueryHistoryTikDatas)
 		// 查询分时图历史数据
-		quoteR.GET("/QueryTSData", quote.QueryTSData)
+		quoteR.Use(token.Auth()).GET("/QueryTSData", quote.QueryTSData)
 		// 获取商品盘面信息
-		quoteR.GET("/QueryQuoteDay", quote.QueryQuoteDay)
+		quoteR.Use(token.Auth()).GET("/QueryQuoteDay", quote.QueryQuoteDay)
 	}
 	// ************************ 检索服务 ************************
 	searchR := apiR.Group("Search")

+ 11 - 0
utils/stringsUtils.go

@@ -0,0 +1,11 @@
+package utils
+
+func InArray(n int, f func(int) bool) bool {
+
+	for i := 0; i < n; i++ {
+		if f(i) {
+			return true
+		}
+	}
+	return false
+}