瀏覽代碼

查询产能预售申请表请求接口

Simon Zhou 5 年之前
父節點
當前提交
2f3f16a845

+ 2 - 2
config/config.xml

@@ -16,12 +16,12 @@
         <DbAddress value="192.168.31.117"/>
         <DbName    value="orcl"/>
         <DbPort    value="1521"/>
-        <DbUser    value="mtp2_test18"/>
+        <DbUser    value="mtp2_test104"/>
         <DbPwd     value="muchinfo"/>
     </DbSetting>
 
     <RedisSetting>
-        <Address   value="192.168.31.136"/>
+        <Address   value="192.168.31.104"/>
         <Port      value="5007"/>
         <Timeout   value="3"/>
         <ConnNum   value="1"/>

+ 91 - 0
controllers/cptrade/cpTrade.go

@@ -0,0 +1,91 @@
+package cptrade
+
+import (
+	"mtp2_if/db"
+	"mtp2_if/global/app"
+	"mtp2_if/global/e"
+	"mtp2_if/logger"
+	"net/http"
+	"time"
+
+	"github.com/gin-gonic/gin"
+)
+
+// QueryPresaleApplyReq 产能预售申请表请求参数
+type QueryPresaleApplyReq struct {
+	UserID    int `form:"userid" binding:"required"`
+	ApplyID   int `form:"applyid"`
+	AccountID int `form:"accountid"`
+}
+
+// Cptradepresaleapply CPTRADE_PRESALEAPPLY 产能预售申请表
+type Cptradepresaleapply struct {
+	Applyid         int64     `json:"applyid"  xorm:"'APPLYID'" binding:"required"` // 申请ID(181+Unix秒时间戳(10位)+xxxxxx)
+	Userid          int64     `json:"userid"  xorm:"'USERID'"`                      // 申请人ID
+	Accountid       int64     `json:"accountid"  xorm:"'ACCOUNTID'"`                // 申请人账户ID
+	Goodscode       string    `json:"goodscode"  xorm:"'GOODSCODE'"`                // 商品代码
+	Goodsname       string    `json:"goodsname"  xorm:"'GOODSNAME'"`                // 商品名称
+	Relatedgoodsid  int64     `json:"relatedgoodsid"  xorm:"'RELATEDGOODSID'"`      // 关联交易合约ID
+	Presaleqty      int64     `json:"presaleqty"  xorm:"'PRESALEQTY'"`              // 预售数量
+	Starttime       time.Time `json:"starttime"  xorm:"'STARTTIME'"`                // 预售开始时间
+	Endtime         time.Time `json:"endtime"  xorm:"'ENDTIME'"`                    // 预售结束时间
+	Attachmenturl   string    `json:"attachmenturl"  xorm:"'ATTACHMENTURL'"`        // 附件地址
+	Applystatus     int64     `json:"applystatus"  xorm:"'APPLYSTATUS'"`            // 申请状态 - 1:已提交 2:初审通过 3:初审拒绝 4:初审失败 5复审通过 6:复审拒绝 7:复审失败 8:已撤销
+	Handlestatus    int64     `json:"handlestatus"  xorm:"'HANDLESTATUS'"`          // 处理状态
+	Applytime       time.Time `json:"applytime"  xorm:"'APPLYTIME'"`                // 申请时间
+	Firstremark     string    `json:"firstremark"  xorm:"'FIRSTREMARK'"`            // 初审备注
+	Marketid        int64     `json:"marketid"  xorm:"'MARKETID'"`                  // 预售市场ID
+	Secondauditid   int64     `json:"secondauditid"  xorm:"'SECONDAUDITID'"`        // 复审人
+	Secondaudittime time.Time `json:"secondaudittime"  xorm:"'SECONDAUDITTIME'"`    // 复审时间
+	Secondremark    string    `json:"secondremark"  xorm:"'SECONDREMARK'"`          // 复审备注
+	Tradedate       string    `json:"tradedate"  xorm:"'TRADEDATE'"`                // 交易日(yyyyMMdd)
+}
+
+// TableName is
+func (Cptradepresaleapply) TableName() string {
+	return "CPTRADE_PRESALEAPPLY"
+}
+
+// QueryPreasleApply 查询产能预售申请表信息
+// @Summary 查询产能预售申请表信息
+// @Produce  json
+// @Param userid query int true "账户ID"
+// @Param applyid query int false "申请ID"
+// @Param accountid query int false "资金账户ID"
+// @Success 0 {object} app.Response
+// @Failure 500 {object} app.Response
+// @Router /CPTrade/QueryPreasleApply [get]
+// @Tags 产能预售
+func QueryPreasleApply(c *gin.Context) {
+	appG := app.Gin{C: c}
+
+	// 获取请求参数
+	var queryPresaleApplyReq QueryPresaleApplyReq
+	if err := appG.C.ShouldBindQuery(&queryPresaleApplyReq); err != nil {
+		logger.GetLogger().Errorf("QueryPreasleApply failed: %s", err.Error())
+		appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
+		return
+	}
+
+	// 查询数据
+	engine := db.GetEngine()
+	cptradepresaleapplys := make([]Cptradepresaleapply, 0)
+	s := engine.Where("userid=?", queryPresaleApplyReq.UserID)
+	if queryPresaleApplyReq.AccountID != 0 {
+		s = s.And("accountid=?", queryPresaleApplyReq.AccountID)
+	}
+	if queryPresaleApplyReq.ApplyID != 0 {
+		s = s.And("applyid=?", queryPresaleApplyReq.ApplyID)
+	}
+
+	// 执行查询
+	err := s.Find(&cptradepresaleapplys)
+	if err != nil {
+		// 查询失败
+		logger.GetLogger().Errorf("QueryPreasleApply failed: %s", err.Error())
+		appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
+		return
+	}
+
+	appG.Response(http.StatusOK, e.SUCCESS, cptradepresaleapplys)
+}

+ 141 - 0
docs/docs.go

@@ -0,0 +1,141 @@
+// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
+// This file was generated by swaggo/swag
+
+package docs
+
+import (
+	"bytes"
+	"encoding/json"
+	"strings"
+
+	"github.com/alecthomas/template"
+	"github.com/swaggo/swag"
+)
+
+var doc = `{
+    "schemes": {{ marshal .Schemes }},
+    "swagger": "2.0",
+    "info": {
+        "description": "{{.Description}}",
+        "title": "{{.Title}}",
+        "termsOfService": "http://muchinfo.cn",
+        "contact": {},
+        "license": {},
+        "version": "{{.Version}}"
+    },
+    "host": "{{.Host}}",
+    "basePath": "{{.BasePath}}",
+    "paths": {
+        "/CPTrade/QueryPreasleApply": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "产能预售"
+                ],
+                "summary": "查询产能预售申请表信息",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "账户ID",
+                        "name": "userid",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "申请ID",
+                        "name": "applyid",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "资金账户ID",
+                        "name": "accountid",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "0": {
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/app.Response"
+                            }
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    }
+                }
+            }
+        }
+    },
+    "definitions": {
+        "app.Response": {
+            "type": "object",
+            "properties": {
+                "code": {
+                    "type": "integer"
+                },
+                "data": {
+                    "type": "object"
+                },
+                "msg": {
+                    "type": "string"
+                }
+            }
+        }
+    }
+}`
+
+type swaggerInfo struct {
+	Version     string
+	Host        string
+	BasePath    string
+	Schemes     []string
+	Title       string
+	Description string
+}
+
+// SwaggerInfo holds exported Swagger Info so clients can modify it
+var SwaggerInfo = swaggerInfo{
+	Version:     "1.0",
+	Host:        "",
+	BasePath:    "/api",
+	Schemes:     []string{},
+	Title:       "MTP2.0 查询服务 API",
+	Description: "新的查询服务,替代原通用查询服务。",
+}
+
+type s struct{}
+
+func (s *s) ReadDoc() string {
+	sInfo := SwaggerInfo
+	sInfo.Description = strings.Replace(sInfo.Description, "\n", "\\n", -1)
+
+	t, err := template.New("swagger_info").Funcs(template.FuncMap{
+		"marshal": func(v interface{}) string {
+			a, _ := json.Marshal(v)
+			return string(a)
+		},
+	}).Parse(doc)
+	if err != nil {
+		return doc
+	}
+
+	var tpl bytes.Buffer
+	if err := t.Execute(&tpl, sInfo); err != nil {
+		return doc
+	}
+
+	return tpl.String()
+}
+
+func init() {
+	swag.Register(swag.Name, &s{})
+}

+ 78 - 0
docs/swagger.json

@@ -0,0 +1,78 @@
+{
+    "swagger": "2.0",
+    "info": {
+        "description": "新的查询服务,替代原通用查询服务。",
+        "title": "MTP2.0 查询服务 API",
+        "termsOfService": "http://muchinfo.cn",
+        "contact": {},
+        "license": {},
+        "version": "1.0"
+    },
+    "basePath": "/api",
+    "paths": {
+        "/CPTrade/QueryPreasleApply": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "产能预售"
+                ],
+                "summary": "查询产能预售申请表信息",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "账户ID",
+                        "name": "userid",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "申请ID",
+                        "name": "applyid",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "资金账户ID",
+                        "name": "accountid",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "0": {
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/app.Response"
+                            }
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    }
+                }
+            }
+        }
+    },
+    "definitions": {
+        "app.Response": {
+            "type": "object",
+            "properties": {
+                "code": {
+                    "type": "integer"
+                },
+                "data": {
+                    "type": "object"
+                },
+                "msg": {
+                    "type": "string"
+                }
+            }
+        }
+    }
+}

+ 51 - 0
docs/swagger.yaml

@@ -0,0 +1,51 @@
+basePath: /api
+definitions:
+  app.Response:
+    properties:
+      code:
+        type: integer
+      data:
+        type: object
+      msg:
+        type: string
+    type: object
+info:
+  contact: {}
+  description: 新的查询服务,替代原通用查询服务。
+  license: {}
+  termsOfService: http://muchinfo.cn
+  title: MTP2.0 查询服务 API
+  version: "1.0"
+paths:
+  /CPTrade/QueryPreasleApply:
+    get:
+      parameters:
+      - description: 账户ID
+        in: query
+        name: userid
+        required: true
+        type: integer
+      - description: 申请ID
+        in: query
+        name: applyid
+        type: integer
+      - description: 资金账户ID
+        in: query
+        name: accountid
+        type: integer
+      produces:
+      - application/json
+      responses:
+        "0":
+          schema:
+            items:
+              $ref: '#/definitions/app.Response'
+            type: array
+        "500":
+          description: Internal Server Error
+          schema:
+            $ref: '#/definitions/app.Response'
+      summary: 查询产能预售申请表信息
+      tags:
+      - 产能预售
+swagger: "2.0"

+ 0 - 14
ex/code.go

@@ -1,14 +0,0 @@
-package ex
-
-const (
-	SUCCESS        = 200
-	ERROR          = 500
-	INVALID_PARAMS = 400
-
-	ERROR_AUTH_CHECK_TOKEN_MISSING = 20001
-	ERROR_AUTH_CHECK_TOKEN_FAIL    = 20002
-
-	ERROR_UPLOAD_SAVE_IMAGE_FAIL    = 30001
-	ERROR_UPLOAD_CHECK_IMAGE_FAIL   = 30002
-	ERROR_UPLOAD_CHECK_IMAGE_FORMAT = 30003
-)

+ 3 - 3
models/response.go → global/app/response.go

@@ -1,7 +1,7 @@
-package models
+package app
 
 import (
-	"mtp2_if/ex"
+	"mtp2_if/global/e"
 
 	"github.com/gin-gonic/gin"
 )
@@ -22,7 +22,7 @@ type Response struct {
 func (g *Gin) Response(httpCode, errCode int, data interface{}) {
 	g.C.JSON(httpCode, Response{
 		Code: errCode,
-		Msg:  ex.GetMsg(errCode),
+		Msg:  e.GetMsg(errCode),
 		Data: data,
 	})
 	return

+ 16 - 0
global/e/code.go

@@ -0,0 +1,16 @@
+package e
+
+const (
+	SUCCESS        = 0
+	ERROR          = 500
+	INVALID_PARAMS = 400
+
+	ERROR_AUTH_CHECK_TOKEN_MISSING = 20001
+	ERROR_AUTH_CHECK_TOKEN_FAIL    = 20002
+
+	ERROR_QUERY_FAIL = 30001
+
+	ERROR_UPLOAD_SAVE_IMAGE_FAIL    = 40001
+	ERROR_UPLOAD_CHECK_IMAGE_FAIL   = 40002
+	ERROR_UPLOAD_CHECK_IMAGE_FORMAT = 40003
+)

+ 3 - 2
ex/msg.go → global/e/msg.go

@@ -1,11 +1,12 @@
-package ex
+package e
 
 var MsgFlags = map[int]string{
-	SUCCESS:                         "ok",
+	SUCCESS:                         "success",
 	ERROR:                           "fail",
 	INVALID_PARAMS:                  "请求参数错误",
 	ERROR_AUTH_CHECK_TOKEN_MISSING:  "Token缺失",
 	ERROR_AUTH_CHECK_TOKEN_FAIL:     "Token鉴权失败",
+	ERROR_QUERY_FAIL:                "查询失败",
 	ERROR_UPLOAD_SAVE_IMAGE_FAIL:    "保存图片失败",
 	ERROR_UPLOAD_CHECK_IMAGE_FAIL:   "检查图片失败",
 	ERROR_UPLOAD_CHECK_IMAGE_FORMAT: "校验图片错误,图片格式或大小有问题",

+ 9 - 3
go.mod

@@ -7,13 +7,15 @@ require (
 	github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 // indirect
 	github.com/CloudyKit/jet v2.1.2+incompatible // indirect
 	github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586
+	github.com/EDDYCJY/go-gin-example v0.0.0-20200505102242-63963976dee0
 	github.com/agrison/go-tablib v0.0.0-20160310143025-4930582c22ee // indirect
 	github.com/agrison/mxj v0.0.0-20160310142625-1269f8afb3b4 // indirect
+	github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
 	github.com/beevik/etree v1.1.0
 	github.com/bndr/gotabulate v1.1.2 // indirect
 	github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 // indirect
 	github.com/fatih/structs v1.1.0 // indirect
-	github.com/gin-gonic/gin v1.5.0
+	github.com/gin-gonic/gin v1.6.3
 	github.com/go-redis/redis v6.15.7+incompatible
 	github.com/golang/protobuf v1.4.1
 	github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
@@ -28,12 +30,16 @@ require (
 	github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
 	github.com/sirupsen/logrus v1.4.2
 	github.com/streadway/amqp v0.0.0-20200108173154-1c71cc93ed71
+	github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14
+	github.com/swaggo/gin-swagger v1.2.0
+	github.com/swaggo/swag v1.5.1
 	github.com/syndtr/goleveldb v1.0.0 // indirect
 	github.com/tealeg/xlsx v1.0.5 // indirect
 	github.com/tebeka/strftime v0.1.3 // indirect
 	github.com/xormplus/builder v0.0.0-20200331055651-240ff40009be // indirect
 	github.com/xormplus/core v0.0.0-20200308074340-f3bce19d5f31
-	github.com/xormplus/xorm v0.0.0-20200514184607-0f37421d8714
-	google.golang.org/protobuf v1.24.0
+	github.com/xormplus/xorm v0.0.0-20200529061552-7d0d26c6f81c
 	gopkg.in/flosch/pongo2.v3 v3.0.0-20141028000813-5e81b817a0c4 // indirect
+	gopkg.in/go-playground/assert.v1 v1.2.1 // indirect
+	gopkg.in/go-playground/validator.v9 v9.29.1 // indirect
 )

+ 117 - 0
go.sum

@@ -1,5 +1,6 @@
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU=
+github.com/360EntSecGroup-Skylar/excelize v1.3.1-0.20180527032555-9e463b461434/go.mod h1:R8KYLmGns0vDPe6/HyphW0mzW+MFexlGDafU0ykVEnU=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/Chronokeeper/anyxml v0.0.0-20160530174208-54457d8e98c6 h1:Etfj2lhXyrYemgmWzEtEQQb1kezeEXc8jVjkQUyJnWI=
 github.com/Chronokeeper/anyxml v0.0.0-20160530174208-54457d8e98c6/go.mod h1:YzuYAe2hrrwKXkM9kqjbkTLlkbA+/xw2MA46f1+ENxc=
@@ -9,21 +10,35 @@ github.com/CloudyKit/jet v2.1.2+incompatible h1:ybZoYzMBdoijK6I+Ke3vg9GZsmlKo/Zh
 github.com/CloudyKit/jet v2.1.2+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w=
 github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586 h1:vDSj8WQZoe+dhK9JVwkSEBwtmcJw5rJ7l1L0Yik8Ku0=
 github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586/go.mod h1:kMi/fSDAgvjo9TYfYwYeQ2vkyj+VTR/tB6u/Tjh39t0=
+github.com/EDDYCJY/go-gin-example v0.0.0-20200505102242-63963976dee0 h1:eB4cf+PC0faCxlJwe8+2E8/0FBEsm+13ZbYMpZPdcno=
+github.com/EDDYCJY/go-gin-example v0.0.0-20200505102242-63963976dee0/go.mod h1:66/PDewGK5IUxJNsxmAenHAyCiOpGvTqh9EUvcH1mjs=
+github.com/PuerkitoBio/purell v1.1.0 h1:rmGxhojJlM0tuKtfdvliR84CFHljx9ag64t2xmVkjK4=
+github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
+github.com/PuerkitoBio/purell v1.1.1-0.20180310210909-975f53781597 h1:8+pMa56PPVkN6NbWGZbNIWLVIitrF8AQZ95d4UAhqmE=
+github.com/PuerkitoBio/purell v1.1.1-0.20180310210909-975f53781597/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
+github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
+github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
 github.com/agrison/go-tablib v0.0.0-20160310143025-4930582c22ee h1:0RklYSvekYaIFI9JUx7TFPQvo++TdILmZiV17QI4nXk=
 github.com/agrison/go-tablib v0.0.0-20160310143025-4930582c22ee/go.mod h1:M9nmO4lBRWR/bBv7UCOmDJ1MB2DVoqz19B4JchDA+K0=
 github.com/agrison/mxj v0.0.0-20160310142625-1269f8afb3b4 h1:XBNSe5eibe5Fh131ah+xnO6s4A97U1T3tKZKLQQvqu0=
 github.com/agrison/mxj v0.0.0-20160310142625-1269f8afb3b4/go.mod h1:n7qJAqL9BKqGqiJyjPbWtxpdswTL5wX0IVP2Uw4vVhQ=
+github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
+github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/astaxie/beego v1.9.3-0.20171218111859-f16688817aa4/go.mod h1:0R4++1tUqERR0WYFWdfkcrsyoVBCG4DgpDGokT3yb+U=
 github.com/beevik/etree v1.1.0 h1:T0xke/WvNtMoCqgzPhkX2r4rjY3GDZFi+FjpRZY2Jbs=
 github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A=
 github.com/bndr/gotabulate v1.1.2 h1:yC9izuZEphojb9r+KYL4W9IJKO/ceIO8HDwxMA24U4c=
 github.com/bndr/gotabulate v1.1.2/go.mod h1:0+8yUgaPTtLRTjf49E8oju7ojpU11YmXyvq1LbPAb3U=
+github.com/boombuler/barcode v1.0.1-0.20180315051053-3c06908149f7/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/denisenkom/go-mssqldb v0.0.0-20190920000552-128d9f4ae1cd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
 github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6ROGeiHFAP8WJdI2RoxALQYgdllERc3N5N2DM=
 github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
+github.com/dgrijalva/jwt-go v3.1.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
@@ -34,16 +49,42 @@ github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
 github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
 github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/gin-contrib/gzip v0.0.1/go.mod h1:fGBJBCdt6qCZuCAOwWuFhBB4OOq9EFqlo5dEaFhhu5w=
+github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
+github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
 github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
 github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
+github.com/gin-gonic/gin v1.3.0/go.mod h1:7cKuhb5qV2ggCFctp2fJQ+ErvciLZrIeoOSOm6mUr7Y=
+github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM=
 github.com/gin-gonic/gin v1.5.0 h1:fi+bqFAx/oLK54somfCtEZs9HeH1LHVoEPUgARpTqyc=
 github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
+github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
+github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
+github.com/go-ini/ini v1.32.1-0.20180214101753-32e4be5f41bb/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
+github.com/go-openapi/jsonpointer v0.17.0 h1:nH6xp8XdXHx8dqveo0ZuJBluCO2qGrPbDNZ0dwoRHP0=
+github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
+github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
+github.com/go-openapi/jsonreference v0.19.0 h1:BqWKpV1dFd+AuiKlgtddwVIFQsuMpxfBDBHGfM2yNpk=
+github.com/go-openapi/jsonreference v0.19.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
+github.com/go-openapi/spec v0.19.0 h1:A4SZ6IWh3lnjH0rG0Z5lkxazMGBECtrZcbyYQi+64k4=
+github.com/go-openapi/spec v0.19.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
+github.com/go-openapi/swag v0.17.0 h1:iqrgMg7Q7SvtbWLlltPrkMs0UBJI6oTSs79JFRUi880=
+github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
+github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
 github.com/go-playground/locales v0.12.1 h1:2FITxuFt/xuCNP1Acdhv62OzaCiviiE4kotfhkmOqEc=
 github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
+github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
+github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
 github.com/go-playground/universal-translator v0.16.0 h1:X++omBR/4cE2MNg91AoC3rmGrCjJ8eAeUP/K/EKx4DM=
 github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY=
+github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
+github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
+github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
+github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
 github.com/go-redis/redis v6.15.7+incompatible h1:3skhDh95XQMpnqeqNftPkQD9jL9e5e36z/1SUm6dy1U=
 github.com/go-redis/redis v6.15.7+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
+github.com/go-sql-driver/mysql v1.4.1-0.20190510102335-877a9775f068/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
 github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
 github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
@@ -51,9 +92,11 @@ github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
 github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
 github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
 github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
+github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I=
 github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
@@ -66,26 +109,35 @@ github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0
 github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
 github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
 github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/gomodule/redigo v2.0.1-0.20180401191855-9352ab68be13+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 h1:IPJ3dvxmJ4uczJe5YQdrYB16oTJlGSC/OyZDqUk9xX4=
 github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag=
+github.com/jinzhu/gorm v0.0.0-20180213101209-6e1387b44c64/go.mod h1:Vla75njaFJ8clLU1W44h34PjIkijhjHIYnZxMqCdxqo=
 github.com/jinzhu/gorm v1.9.12 h1:Drgk1clyWT9t9ERbzHza6Mj/8FY/CqMyVzOiHviMo6Q=
 github.com/jinzhu/gorm v1.9.12/go.mod h1:vhTjlKSJUTWNtcbQtrMBFCxy7eXTzeCAzfL5fBZT/Qs=
+github.com/jinzhu/inflection v0.0.0-20170102125226-1c35d901db3d/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
 github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
 github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
 github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M=
 github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
 github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
 github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
+github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
@@ -95,6 +147,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/leodido/go-urn v1.1.0 h1:Sm1gr51B1kKyfD2BlRcLSiEkffoG96g6TPv6eRoEiB8=
 github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
+github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
+github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
 github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570 h1:0iQektZGS248WXmGIYOwRXSQhD4qn3icjMpuxwO7qlo=
 github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570/go.mod h1:BLt8L9ld7wVsvEWQbuLrUZnCMnUmLZ+CGDzKtclrTlE=
 github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f h1:sgUSP4zdTUZYZgAGGtN5Lxk92rK+JUFOwf+FT99EEI4=
@@ -103,16 +157,28 @@ github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 h1:Bvq8AziQ5j
 github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042/go.mod h1:TPpsiPUEh0zFL1Snz4crhMlBe60PYxRHr5oFF3rRYg0=
 github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
 github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic=
+github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
+github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
 github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg=
 github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
+github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
+github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
 github.com/mattn/go-oci8 v0.0.8 h1:D0lVs4vwDEsZ1uPKsE6v26OS6FfHeAI43yf3l8h3X48=
 github.com/mattn/go-oci8 v0.0.8/go.mod h1:wjDx6Xm9q7dFtHJvIlrI99JytznLw5wQ4R+9mNXJwGI=
+github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/mattn/go-sqlite3 v2.0.1+incompatible h1:xQ15muvnzGBHpIpdrNi1DA5x0+TcBZzsIDwmw9uTHzw=
 github.com/mattn/go-sqlite3 v2.0.1+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
 github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU=
@@ -121,6 +187,7 @@ github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
 github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
 github.com/onsi/gomega v1.9.0 h1:R1uwffexN6Pr340GtYRIdZmAiN4J+iw6WG4wog1DUXg=
 github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -130,6 +197,10 @@ github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnH
 github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM=
 github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
+github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
+github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
+github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/streadway/amqp v0.0.0-20200108173154-1c71cc93ed71 h1:2MR0pKUzlP3SGgj5NYJe/zRYDwOu9ku6YHy+Iw7l5DM=
 github.com/streadway/amqp v0.0.0-20200108173154-1c71cc93ed71/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -139,63 +210,103 @@ github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14 h1:PyYN9JH5jY9j6av01SpfRMb+1DWg/i3MbGOKPxJ2wjM=
+github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14/go.mod h1:gxQT6pBGRuIGunNf/+tSOB5OHvguWi8Tbt82WOkf35E=
+github.com/swaggo/gin-swagger v1.2.0 h1:YskZXEiv51fjOMTsXrOetAjrMDfFaXD79PEoQBOe2W0=
+github.com/swaggo/gin-swagger v1.2.0/go.mod h1:qlH2+W7zXGZkczuL+r2nEBR2JTT+/lX05Nn6vPhc7OI=
+github.com/swaggo/swag v1.5.1 h1:2Agm8I4K5qb00620mHq0VJ05/KT4FtmALPIcQR9lEZM=
+github.com/swaggo/swag v1.5.1/go.mod h1:1Bl9F/ZBpVWh22nY0zmYyASPO1lI/zIwRDrpZU+tv8Y=
 github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
 github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
+github.com/tealeg/xlsx v1.0.4-0.20180419195153-f36fa3be8893/go.mod h1:uxu5UY2ovkuRPWKQ8Q7JG0JbSivrISjdPzZQKeo74mA=
 github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
 github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
 github.com/tebeka/strftime v0.1.3 h1:5HQXOqWKYRFfNyBMNVc9z5+QzuBtIXy03psIhtdJYto=
 github.com/tebeka/strftime v0.1.3/go.mod h1:7wJm3dZlpr4l/oVK0t1HYIc4rMzQ2XJlOMIUJUJH6XQ=
+github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
+github.com/ugorji/go v1.1.5-pre/go.mod h1:FwP/aQVg39TXzItUBMwnWp9T9gPQnXw4Poh4/oBQZ/0=
 github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
 github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
+github.com/ugorji/go/codec v0.0.0-20181022190402-e5e69e061d4f/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
+github.com/ugorji/go/codec v1.1.5-pre/go.mod h1:tULtS6Gy1AE1yCENaw4Vb//HLH5njI2tfCQDUqRd8fI=
 github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
 github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
+github.com/unknwon/com v1.0.1/go.mod h1:tOOxU81rwgoCLoOVVPHb6T/wt8HZygqH5id+GNnlCXM=
+github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
 github.com/xormplus/builder v0.0.0-20200331055651-240ff40009be h1:HTSana2sMSKVze3XXYrF89w2tw835Fh+7xX5KPvAkuo=
 github.com/xormplus/builder v0.0.0-20200331055651-240ff40009be/go.mod h1:PgBA7NoHtnttVkWModa/qpvIWkX6MpOKgyRCWsSKSB0=
 github.com/xormplus/core v0.0.0-20200308074340-f3bce19d5f31 h1:Xc/TNcIKyvLIp1Y9K+K7a/XQ2wtBLiF6FNmyCjgmb5E=
 github.com/xormplus/core v0.0.0-20200308074340-f3bce19d5f31/go.mod h1:V3p6iAR/MaICgU6GJqxGQxspfljTyfOTv4Czz0B5atU=
 github.com/xormplus/xorm v0.0.0-20200514184607-0f37421d8714 h1:N/QKP2s2FuwXOozdAkX6upoKfxysbz0K8Ea5eZYH1D0=
 github.com/xormplus/xorm v0.0.0-20200514184607-0f37421d8714/go.mod h1:+v6b10b4x5IcQmp1/Cbo9IqaknxVeuhQng+fhya6bdI=
+github.com/xormplus/xorm v0.0.0-20200529061552-7d0d26c6f81c h1:NaRjnzmJVo7x3L+W6mgwNBbxTdAK1BbCYto3tKKT1GU=
+github.com/xormplus/xorm v0.0.0-20200529061552-7d0d26c6f81c/go.mod h1:+v6b10b4x5IcQmp1/Cbo9IqaknxVeuhQng+fhya6bdI=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd h1:GGJVjV8waZKRHrgwvtH66z9ZGVurTD1MT0n1Bb+q4aM=
 golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/image v0.0.0-20180628062038-cc896f830ced/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190611141213-3f473d35a33a h1:+KkCgOMgnKSgenxTBoiwkMqTiouMIy/3o8RLdmSbGoY=
+golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181228144115-9a3f9b0469bb/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ=
 golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190921204832-2dccfee4fd3e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e h1:N7DeIrjYszNmSW409R3frPPwglRwMkXSBzwVbkOjLLA=
 golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190606050223-4d9ae51c2468/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190611222205-d73e1c7e250b h1:/mJ+GKieZA6hFDQGdWZrjj4AXPl5ylY+5HusG80roy0=
+golang.org/x/tools v0.0.0-20190611222205-d73e1c7e250b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.6.3/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
@@ -207,12 +318,14 @@ google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
 google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
 google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0 h1:cJv5/xdbk1NnMPR1VP9+HU6gupuG9MLBoH1r6RHZ2MY=
 google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
 google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA=
 google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/flosch/pongo2.v3 v3.0.0-20141028000813-5e81b817a0c4 h1:eyQQg/uGuZ3ndaBhqteakHpVW+dSOPalilfC9RpM2TA=
 gopkg.in/flosch/pongo2.v3 v3.0.0-20141028000813-5e81b817a0c4/go.mod h1:bJkYqV5pg6+Z7MsSu/hSb1zsPT955hBW2QHLE1jm4wA=
@@ -220,8 +333,10 @@ gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM=
 gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
+gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
 gopkg.in/go-playground/validator.v9 v9.29.1 h1:SvGtYmN60a5CVKTOzMSyfzWDeZRxRuGvRQyEAKbw1xc=
 gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
+gopkg.in/ini.v1 v1.47.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -229,5 +344,7 @@ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
 gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

+ 0 - 134
goods/goods.go

@@ -1,134 +0,0 @@
-package goods
-
-import (
-	"net/http"
-	"strconv"
-
-	"mtp2_if/db"
-
-	"github.com/gin-gonic/gin"
-)
-
-// Goods 商品表结构定义
-type Goods struct {
-	Goodsid   int    `json:"goodsid" xorm:"'GOODSID'"`
-	Goodscode string `json:"goodscode" xorm:"'GOODSCODE'"`
-	Goodsname string `json:"goodsname" xorm:"'GOODSNAME'"`
-	Marketid  int    `json:"marketid" xorm:"'MARKETID'"`
-}
-
-// TableName 返回表名接口
-func (Goods) TableName() string {
-	return "GOODS"
-}
-
-// QueryReq 商品查询请求
-type QueryReq struct {
-	Token   string `json:"token" binding:"required"`
-	GoodsID int    `json:"goodsid" binding:"required"`
-}
-
-// QueryRsp 商品查询结果
-type QueryRsp struct {
-	GoodsID   int    `json:"goodsid" binding:"required"`
-	GoodsCode string `json:"goodscode" binding:"required"`
-	GoodsName string `json:"goodsname" binding:"required"`
-	MarketID  int    `json:"marketid" binding:"required"`
-}
-
-// QueryAllReq 所有商品查询请求
-type QueryAllReq struct {
-	Token string `json:"token" binding:"required"`
-	//MarketID int `json:"marketid" binding:"required"`
-}
-
-// QueryAllRsp 所有商品查询结果
-type QueryAllRsp struct {
-	Goodss []Goods `json:"goodss"`
-}
-
-// QueryGoods 商品信息查询
-func QueryGoods(c *gin.Context) {
-	var goods QueryReq
-	err := c.ShouldBind(&goods)
-	if err != nil {
-		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
-	}
-
-	sql := "select goodscode, goodsname, marketid from goods where goodsid = ?"
-	engine := db.GetEngine()
-	results, err := engine.QueryString(sql, goods.GoodsID)
-	if err != nil {
-		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
-	}
-
-	if len(results) == 0 {
-		c.JSON(http.StatusBadRequest, gin.H{"error": "cont find"})
-	}
-
-	goodscode := results[0]["GOODSCODE"]
-	goodsname := results[0]["GOODSNAME"]
-	marketid, _ := strconv.Atoi(results[0]["MARKETID"])
-
-	ret := QueryRsp{
-		GoodsID:   goods.GoodsID,
-		GoodsCode: goodscode,
-		GoodsName: goodsname,
-		MarketID:  marketid,
-	}
-	c.SecureJSON(http.StatusOK, ret)
-}
-
-// GetGoods 商品信息查询
-func GetGoods(c *gin.Context) {
-	var goods QueryReq
-	err := c.ShouldBind(&goods)
-	if err != nil {
-		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
-	}
-
-	engine := db.GetEngine()
-
-	goodsinfo := new(Goods)
-	has, err := engine.Where("goodsid=?", goods.GoodsID).And("marketid=?", 200).Get(goodsinfo)
-	if err != nil {
-		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
-		return
-	}
-
-	if !has {
-		c.JSON(http.StatusBadRequest, gin.H{"error": "not find record"})
-		return
-	}
-
-	ret := QueryRsp{
-		GoodsID:   goods.GoodsID,
-		GoodsCode: goodsinfo.Goodscode,
-		GoodsName: goodsinfo.Goodsname,
-		MarketID:  goodsinfo.Marketid,
-	}
-	c.SecureJSON(http.StatusOK, ret)
-}
-
-// GetAllGoods 所有商品信息查询
-func GetAllGoods(c *gin.Context) {
-	var goods QueryAllReq
-	err := c.ShouldBind(&goods)
-	if err != nil {
-		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
-	}
-
-	engine := db.GetEngine()
-
-	goodss := make([]Goods, 0)
-	err = engine.Find(&goodss)
-	if err != nil {
-		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
-		return
-	}
-
-	ret := QueryAllRsp{
-		Goodss: goodss,
-	}
-	c.SecureJSON(http.StatusOK, ret)
-}

+ 0 - 3
log/mtp2_if/mtp2_if_2020-06-04.log

@@ -1,3 +0,0 @@
-time="2020-06-04 17:37:33" level=debug msg="Shutdown service..." func=main.main file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:134"
-time="2020-06-04 17:37:33" level=error msg="Start service failed[http: Server closed]." func=main.main.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:124"
-time="2020-06-04 17:37:33" level=debug msg="Service stopped" func=main.main file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:147"

+ 0 - 105
log/mtp2_if/mtp2_if_2020-06-05.log

@@ -1,105 +0,0 @@
-time="2020-06-05 11:27:43" level=debug msg="Shutdown service..." func=main.main file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:134"
-time="2020-06-05 11:27:43" level=error msg="Start service failed[http: Server closed]." func=main.main.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:124"
-time="2020-06-05 11:27:43" level=debug msg="Service stopped" func=main.main file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:147"
-time="2020-06-05 12:10:09" level=debug msg="Shutdown service..." func=main.main file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:134"
-time="2020-06-05 12:10:09" level=error msg="Start service failed[http: Server closed]." func=main.main.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:124"
-time="2020-06-05 12:10:09" level=debug msg="Service stopped" func=main.main file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:147"
-time="2020-06-05 15:46:15" level=info msg="|200|  81.286105ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:46:41" level=info msg="|200|  97.776915ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:47:34" level=info msg="|404|        771ns|            ::1|POST /bus/busopt/SMsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:48:01" level=info msg="|404|        737ns|            ::1|POST /bus/busopt/SMsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:48:19" level=info msg="|404|        790ns|            ::1|POST /bus/busopt/SMsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:48:32" level=info msg="|200|    298.407µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:49:05" level=info msg="|200|    284.827µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:50:29" level=info msg="|200|    210.452µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:51:49" level=info msg="|200| 5.153418708s|            ::1|POST /goods/goodsopt/GetAllGoods" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:52:17" level=info msg="|200|    552.361µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:52:58" level=info msg="|200|  75.766731ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:53:32" level=info msg="|200|    187.767µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:54:32" level=info msg="|200|      206.8µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:54:43" level=info msg="|200|    254.625µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:54:54" level=info msg="|200|    187.083µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:55:19" level=info msg="|200|    807.711µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:57:15" level=info msg="|200|    219.308µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:57:41" level=info msg="|200|    182.007µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:59:12" level=info msg="|200|    376.102µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 15:59:43" level=info msg="|200|    568.351µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:00:38" level=info msg="|200|     251.47µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:01:11" level=info msg="|200|   1.330674ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:01:16" level=info msg="|200|   1.032471ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:01:27" level=info msg="|200|   1.199197ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:01:46" level=info msg="|200|    223.833µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:01:53" level=info msg="|200|    146.176µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:02:02" level=info msg="|200|    152.343µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:02:09" level=info msg="|200|    160.242µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:03:32" level=info msg="|200|   1.007587ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:03:35" level=info msg="|200|    770.977µs|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:03:38" level=info msg="|200|   1.808109ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:03:52" level=info msg="|200|    698.583µs|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:04:02" level=info msg="|200|    226.692µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:04:07" level=info msg="|200|    241.531µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:04:10" level=info msg="|200|    187.229µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:06:11" level=info msg="|200|   1.918763ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:06:18" level=info msg="|200|    983.116µs|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:06:22" level=info msg="|200|    991.028µs|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:06:30" level=info msg="|200|    320.391µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:06:37" level=info msg="|200|    167.074µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:06:41" level=info msg="|200|    172.279µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:07:48" level=info msg="|200|   1.277762ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:07:52" level=info msg="|200|   3.297417ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:07:55" level=info msg="|200|   1.181534ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:08:02" level=info msg="|200|    258.164µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:08:04" level=info msg="|200|     282.11µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:08:05" level=info msg="|200|    199.894µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:08:09" level=info msg="|200|    205.854µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:08:11" level=info msg="|200|    211.936µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:08:12" level=info msg="|200|     178.76µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:08:12" level=info msg="|200|     329.66µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:08:13" level=info msg="|200|    149.778µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:08:17" level=info msg="|200|    182.572µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:08:18" level=info msg="|200|     261.88µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:08:18" level=info msg="|200|    187.272µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:08:19" level=info msg="|200|    284.993µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:08:22" level=info msg="|200|   1.150576ms|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:08:23" level=info msg="|200|    174.161µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:08:28" level=info msg="|200|    207.699µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:09:17" level=info msg="|200|    198.959µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:09:19" level=info msg="|200|    156.574µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:09:23" level=info msg="|200|    193.051µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:09:31" level=info msg="|200|    139.039µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:09:32" level=info msg="|200|     288.56µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:09:33" level=info msg="|200|    178.741µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:09:34" level=info msg="|200|    207.382µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:09:36" level=info msg="|200|    233.472µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:09:39" level=info msg="|200|    153.426µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:09:55" level=info msg="|200|    182.163µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:09:56" level=info msg="|200|      269.6µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:09:57" level=info msg="|200|    158.062µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:09:58" level=info msg="|200|    433.657µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:09:58" level=info msg="|200|    180.066µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:10:30" level=info msg="|200|    209.799µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:10:31" level=info msg="|200|    200.526µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:10:36" level=info msg="|200|    426.196µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:10:41" level=info msg="|200|    200.969µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:11:12" level=info msg="|200| 5.036108641s|            ::1|POST /goods/goodsopt/GetAllGoods" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:11:16" level=info msg="|200|    218.817µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:14:32" level=info msg="|200|   1.353051ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:14:36" level=info msg="|200|   1.222703ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:14:39" level=info msg="|200|   1.019808ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:14:52" level=info msg="|200|    273.346µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:15:05" level=info msg="|200|    182.549µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:15:16" level=info msg="|200|    176.806µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:18:13" level=info msg="|200|   1.621907ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:18:22" level=info msg="|200|   1.842767ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:18:27" level=info msg="|200|   1.089213ms|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:18:31" level=info msg="|200|    671.097µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:18:37" level=info msg="|200|    297.408µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:18:42" level=info msg="|200|    167.469µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:18:48" level=info msg="|200|    188.841µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:19:07" level=info msg="|200|    873.127µs|            ::1|POST /bus/busopt/SubTopic" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:19:15" level=info msg="|200|    225.689µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:20:02" level=info msg="|200|     220.01µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:35:30" level=info msg="|200|    443.472µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:35:34" level=info msg="|200|    187.245µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:35:42" level=info msg="|200|     298.17µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-05 16:35:52" level=info msg="|200|     229.36µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"

+ 0 - 12
log/mtp2_if/mtp2_if_2020-06-08.log

@@ -1,12 +0,0 @@
-time="2020-06-08 16:44:32" level=info msg="|200|    594.055µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-08 16:44:48" level=info msg="|200|    169.473µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-08 16:45:04" level=info msg="|200|     240.73µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-08 16:46:51" level=info msg="|200|    231.647µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-08 16:46:57" level=info msg="|200|    572.316µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-08 16:47:03" level=info msg="|200|    200.908µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-08 18:04:21" level=info msg="|200|    398.986µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-08 18:05:26" level=info msg="|200|   3.656098ms|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-08 18:50:35" level=info msg="|200|    186.363µs|            ::1|POST /bus/busopt/MsgPublish" func=main.ginLoggerMiddleware.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:169"
-time="2020-06-08 18:52:13" level=debug msg="Shutdown service..." func=main.main file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:140"
-time="2020-06-08 18:52:13" level=error msg="Start service failed[http: Server closed]." func=main.main.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:130"
-time="2020-06-08 18:52:13" level=debug msg="Service stopped" func=main.main file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:153"

+ 0 - 3
log/mtp2_if/mtp2_if_2020-06-09.log

@@ -1,3 +0,0 @@
-time="2020-06-09 09:30:18" level=debug msg="Shutdown service..." func=main.main file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:140"
-time="2020-06-09 09:30:18" level=error msg="Start service failed[http: Server closed]." func=main.main.func1 file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:130"
-time="2020-06-09 09:30:18" level=debug msg="Service stopped" func=main.main file="/Users/wanghongliang/Repo/Muchinfo_Git/MTP20_IF/main.go:153"

+ 6 - 0
main.go

@@ -19,6 +19,12 @@ import (
 	_ "github.com/mattn/go-oci8"
 )
 
+// @title MTP2.0 查询服务 API
+// @version 1.0
+// @description 新的查询服务,替代原通用查询服务。
+// @termsOfService http://muchinfo.cn
+//
+// @BasePath /api
 func main() {
 	// 初始化配置
 	err := config.SerCfg.Init("config/config.xml")

+ 14 - 11
routers/router.go

@@ -1,12 +1,16 @@
 package routers
 
 import (
+	"mtp2_if/controllers/cptrade"
 	"mtp2_if/logger"
-	"mtp2_if/token"
-	"net/http"
 	"time"
 
 	"github.com/gin-gonic/gin"
+
+	_ "mtp2_if/docs"
+
+	ginSwagger "github.com/swaggo/gin-swagger"
+	"github.com/swaggo/gin-swagger/swaggerFiles"
 )
 
 // InitRouter 初始化路由器的方法
@@ -16,19 +20,18 @@ func InitRouter() *gin.Engine {
 	r.Use(ginLoggerMiddleware())
 	// 设置奔溃中间件
 	r.Use(ginRecoveryMiddleware())
+	// Swagger
+	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
 
 	// 路由分组
 	apiR := r.Group("/api")
-	apiR.Use(token.Auth())
+	// ************************ 产能预售 ************************
+	cpTradeR := apiR.Group("CPTrade")
+	// cpTradeR.Use(token.Auth())
+	cpTradeR.Use()
 	{
-		// 测试
-		apiR.GET("/ping", func(c *gin.Context) {
-			c.JSON(http.StatusOK, gin.H{
-				"code": 0,
-				"msg":  "pong",
-				"data": nil,
-			})
-		})
+		// 查询产能预售申请表
+		cpTradeR.GET("/QueryPreasleApply", cptrade.QueryPreasleApply)
 	}
 
 	return r

+ 6 - 6
token/token.go

@@ -3,7 +3,7 @@ package token
 import (
 	"errors"
 	"fmt"
-	"mtp2_if/ex"
+	"mtp2_if/global/e"
 	"mtp2_if/rediscli"
 	"net/http"
 	"strings"
@@ -34,26 +34,26 @@ func Auth() gin.HandlerFunc {
 		var code int
 		var data interface{}
 
-		code = ex.SUCCESS
+		code = e.SUCCESS
 		token := c.GetHeader("token")
 		if token == "" {
 			// Token缺失
-			code = ex.ERROR_AUTH_CHECK_TOKEN_MISSING
+			code = e.ERROR_AUTH_CHECK_TOKEN_MISSING
 		} else {
 			// 获取loginid
 			s := strings.Split(token, "_")
 			loginid := s[0]
 			if err := CheckToken(loginid, token); err != nil {
 				// Token错误
-				code = ex.ERROR_AUTH_CHECK_TOKEN_FAIL
+				code = e.ERROR_AUTH_CHECK_TOKEN_FAIL
 			}
 		}
 
 		// Token检验失败
-		if code != 0 {
+		if code != e.SUCCESS {
 			c.JSON(http.StatusUnauthorized, gin.H{
 				"code": code,
-				"msg":  ex.GetMsg(code),
+				"msg":  e.GetMsg(code),
 				"data": data,
 			})