Forráskód Böngészése

增加"查询交易端菜单"接口

Simon Zhou 5 éve
szülő
commit
2e256a2f4a

+ 2 - 2
config/config.xml

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

+ 148 - 0
controllers/common/table.go

@@ -0,0 +1,148 @@
+package common
+
+import (
+	"fmt"
+	"mtp2_if/db"
+	"mtp2_if/global/app"
+	"mtp2_if/global/e"
+	"mtp2_if/global/utils"
+	"mtp2_if/logger"
+	"mtp2_if/models"
+	"net/http"
+	"strconv"
+	"strings"
+
+	"github.com/gin-gonic/gin"
+)
+
+// QueryTraderMenuReq 查询交易端菜单请求参数
+type QueryTraderMenuReq struct {
+	LoginID int `form:"loginid" binding:"required"`
+}
+
+// QuotePrimaryMenu 报价牌一级分类菜单
+type QuotePrimaryMenu struct {
+	Index        int                  `json:"index"`      // 序号
+	Key          string               `json:"key"`        // 键名
+	Name         string               `json:"name"`       // 菜单名称
+	SubTitleType int                  `json:"titletype"`  // 子菜单标题模式:0-市场名称;1-外部交易所名称
+	TradeModes   string               `json:"trademodes"` // 包含市场交易类型
+	SubMenus     []QuoteSecondaryMenu `json:"submenus"`   // 子菜单
+}
+
+// QuoteSecondaryMenu 报价牌二级分类菜单
+type QuoteSecondaryMenu struct {
+	Index          int    `json:"index"`          // 序号
+	MarketID       int    `json:"marketid"`       // 市场ID
+	TradeMode      int    `json:"trademode"`      // 交易模式
+	MenuTitle      string `json:"menutitle"`      // 菜单标题(市场名称或外部交易所名称)
+	GoodsGroupID   int    `json:"goodsgroupid"`   // 商品组ID
+	ExExchangeCode string `json:"exexchangecode"` // 外部交易所代码
+}
+
+// QueryTraderMenu 查询交易端菜单
+// @Summary 查询交易端菜单
+// @Produce json
+// @Security ApiKeyAuth
+// @Param loginid query int true "登录账号"
+// @Success 200 {object} app.Response
+// @Failure 500 {object} app.Response
+// @Router /Common/QueryTraderMenu [get]
+// @Tags 通用
+func QueryTraderMenu(c *gin.Context) {
+	appG := app.Gin{C: c}
+
+	// 获取请求参数
+	var req QueryTraderMenuReq
+	if err := appG.C.ShouldBindQuery(&req); err != nil {
+		logger.GetLogger().Errorf("QueryPreasleApply failed: %s", err.Error())
+		appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
+		return
+	}
+
+	datas, _ := getMenu(req.LoginID)
+	menuMap := make(map[string]interface{})
+	menuMap["menu"] = datas
+
+	// 查询成功
+	logger.GetLogger().Infof("QueryPreasleApply successed: %v", menuMap)
+	appG.Response(http.StatusOK, e.SUCCESS, datas)
+}
+
+func getMenu(loginID int) ([]QuotePrimaryMenu, error) {
+	engine := db.GetEngine()
+	rst := make([]QuotePrimaryMenu, 0)
+
+	// ********************* 准备数据 *********************
+	var taAccounts []string // 账户下所有资金账户
+	var marketIDs []int     // 资金账户下有权限的市场ID列表
+	// 先要获取当前登录账户对应的资金账户
+	if err := engine.SQL(fmt.Sprintf(`select to_char(AccountID) from LoginTAAccount where LoginID = %d`, loginID)).Find(&taAccounts); err != nil {
+		return nil, err
+	}
+	// 如果一条记录都没有则直接通过资金账户表获取
+	if len(taAccounts) == 0 {
+		sql := fmt.Sprintf(`select to_char(ta.accountid) from taaccount ta
+							inner join loginaccount l on ta.userid = l.userid
+							where l.loginid = %d`, loginID)
+		if err := engine.SQL(sql).Find(&taAccounts); err != nil {
+			return nil, err
+		}
+	}
+	// 获取资金账户对应的市场权限(有权限的市场ID)
+	if len(taAccounts) > 0 {
+		taAccountStr := strings.Join(taAccounts, ",")
+		if err := engine.SQL(fmt.Sprintf(`select MarketID from TAAccountMarket where AccountID in (%s)`, taAccountStr)).Find(&marketIDs); err != nil {
+			return nil, err
+		}
+	}
+
+	// ********************* 构建行情报价牌菜单 *********************
+	// 获取一级菜单列表
+	datas := make([]models.Tablecolumnconfig, 0)
+	if err := engine.Where("TableKey = 'trader_master_menu' and IsShow = 1").Find(&datas); err != nil {
+		return nil, err
+	}
+	// 构建一级菜单对象
+	for i, v := range datas {
+		quotePrimaryMenu := QuotePrimaryMenu{
+			Index: i,
+			Key:   v.Columnfield,
+			Name:  v.Columntitle,
+		}
+		// 跳过自选
+		if v.Columnfield == "optional" {
+			rst = append(rst, quotePrimaryMenu)
+			continue
+		}
+		// FormatterString:模式,0-使用市场名称,1-使用外部交易所名称;Remark:包含市场交易模式
+		quotePrimaryMenu.SubTitleType, _ = strconv.Atoi(v.Formatterstring)
+		quotePrimaryMenu.TradeModes = v.Remark
+
+		// 构建二级子菜单对象
+		// 获取目标交易模式的市场信息
+		markets := make([]models.Market, 0)
+		marketIDsStr := utils.JoinItoString(marketIDs, ",")
+		if err := engine.Where(fmt.Sprintf(`TradeMode in (%s) and MarketID in (%s)`, quotePrimaryMenu.TradeModes, marketIDsStr)).Find(&markets); err != nil {
+			return nil, err
+		}
+		if quotePrimaryMenu.SubTitleType == 0 {
+			// 使用市场名称
+			for mi, mv := range markets {
+				quoteSecondaryMenu := QuoteSecondaryMenu{
+					Index:     mi,
+					MarketID:  int(mv.Marketid),
+					TradeMode: int(mv.Trademode),
+					MenuTitle: mv.Marketname,
+				}
+				quotePrimaryMenu.SubMenus = append(quotePrimaryMenu.SubMenus, quoteSecondaryMenu)
+			}
+		} else {
+			// 使用外部交易所名称
+		}
+
+		rst = append(rst, quotePrimaryMenu)
+	}
+
+	return rst, nil
+}

+ 39 - 0
docs/docs.go

@@ -369,6 +369,45 @@ var doc = `{
                 }
             }
         },
+        "/Common/QueryTraderMenu": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "通用"
+                ],
+                "summary": "查询交易端菜单",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "登录账号",
+                        "name": "loginid",
+                        "in": "query",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/Delivery/QueryDeliveryRelation": {
             "get": {
                 "security": [

+ 39 - 0
docs/swagger.json

@@ -353,6 +353,45 @@
                 }
             }
         },
+        "/Common/QueryTraderMenu": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "通用"
+                ],
+                "summary": "查询交易端菜单",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "登录账号",
+                        "name": "loginid",
+                        "in": "query",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/Delivery/QueryDeliveryRelation": {
             "get": {
                 "security": [

+ 24 - 0
docs/swagger.yaml

@@ -1302,6 +1302,30 @@ paths:
       summary: 查询远期订单信息
       tags:
       - 产能预售
+  /Common/QueryTraderMenu:
+    get:
+      parameters:
+      - description: 登录账号
+        in: query
+        name: loginid
+        required: true
+        type: integer
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/app.Response'
+        "500":
+          description: Internal Server Error
+          schema:
+            $ref: '#/definitions/app.Response'
+      security:
+      - ApiKeyAuth: []
+      summary: 查询交易端菜单
+      tags:
+      - 通用
   /Delivery/QueryDeliveryRelation:
     get:
       parameters:

+ 1 - 0
global/e/msg.go

@@ -1,5 +1,6 @@
 package e
 
+// MsgFlags 接口返回信息
 var MsgFlags = map[int]string{
 	SUCCESS:                         "ok",
 	ERROR:                           "fail",

+ 33 - 0
global/utils/utils.go

@@ -0,0 +1,33 @@
+package utils
+
+import "strconv"
+
+// AtoiBySlice 将[]string转化为[]int的方法
+// 如果[]string中元素存在不能转化为int的情况将返回错误
+func AtoiBySlice(src []string) ([]int, error) {
+	var rst []int
+	for _, v := range src {
+		s, err := strconv.Atoi(v)
+		if err == nil {
+			rst = append(rst, s)
+		} else {
+			return nil, err
+		}
+	}
+
+	return rst, nil
+}
+
+// JoinItoString 解决strings.Join不支持[]int的方法
+func JoinItoString(src []int, sep string) string {
+	rst := ""
+	for _, v := range src {
+		if len(rst) == 0 {
+			rst += strconv.Itoa(v)
+		} else {
+			rst += sep + strconv.Itoa(v)
+		}
+	}
+
+	return rst
+}

+ 89 - 0
models/accountModels.go

@@ -28,3 +28,92 @@ type Loginaccount struct {
 func (Loginaccount) TableName() string {
 	return "LOGINACCOUNT"
 }
+
+// Taaccount 资金账户表 - 导历史
+type Taaccount struct {
+	Accountid             uint64    `json:"accountid"  xorm:"'ACCOUNTID'" binding:"required"`      // 资金账户ID
+	Userid                uint64    `json:"userid"  xorm:"'USERID'" binding:"required"`            // 用户ID
+	Currencyid            uint64    `json:"currencyid"  xorm:"'CURRENCYID'"`                       // 货币ID
+	Changeflag            uint32    `json:"changeflag"  xorm:"'CHANGEFLAG'"`                       // 变动标志(当前账户资金有任何变动更新为1系统结算时更新0;供清算时使用) 0:无变动 1:有变动
+	Password              string    `json:"password"  xorm:"'PASSWORD'"`                           // 资金密码
+	Tradestatus           uint32    `json:"tradestatus"  xorm:"'TRADESTATUS'"`                     // 交易状态 - 1:正常 2:受限 3:冻结 4:禁止建仓(人工受限) 5:禁止交易(人工冻结) 6:待激活 7:已注销
+	Signstatus            uint32    `json:"signstatus"  xorm:"'SIGNSTATUS'"`                       // 签约状态 - 1:未签约 2:签约待审核 3:签约中 4:已签约 5:解约待审核 6:解约中 7:已解约 8:已解绑 9:绑卡中
+	Ismain                uint32    `json:"ismain"  xorm:"'ISMAIN'"`                               // 是否母账号 0:不是母账户 1:是母账户
+	Parentaccountid       uint64    `json:"parentaccountid"  xorm:"'PARENTACCOUNTID'"`             // 所属根账号
+	Relateduserid         uint64    `json:"relateduserid"  xorm:"'RELATEDUSERID'"`                 // 关联用户
+	Relatedaccountstatus  uint32    `json:"relatedaccountstatus"  xorm:"'RELATEDACCOUNTSTATUS'"`   // 关联用户交易权限状态 - 1:正常(可交易) 2:受限(可平仓,不可建仓) 3:冻结(不可交易)
+	Taaccounttype         uint32    `json:"taaccounttype"  xorm:"'TAACCOUNTTYPE'"`                 // 账号类型 - 1:外部账号 2:内部账号 3:内部做市自营账号 4:内部做市接单账号
+	Isreckonaccount       uint32    `json:"isreckonaccount"  xorm:"'ISRECKONACCOUNT'"`             // 是否机构分润账号 0:不是 1:是
+	Ismarketaccount       uint32    `json:"ismarketaccount"  xorm:"'ISMARKETACCOUNT'"`             // 是否机构接单账号 0:不是 1:是
+	Balance               float64   `json:"balance"  xorm:"'BALANCE'"`                             // 期初余额
+	Orifreezemargin       float64   `json:"orifreezemargin"  xorm:"'ORIFREEZEMARGIN'"`             // 期初冻结保证金
+	Oriusedmargin         float64   `json:"oriusedmargin"  xorm:"'ORIUSEDMARGIN'"`                 // 期初占用保证金
+	Oriotherfreezemargin  float64   `json:"oriotherfreezemargin"  xorm:"'ORIOTHERFREEZEMARGIN'"`   // 期初其他冻结保证金(出金冻结资金 交割买方冻结 申购冻结 全款买入 商城买入)
+	Orifreezecharge       float64   `json:"orifreezecharge"  xorm:"'ORIFREEZECHARGE'"`             // 期初手续费冻结
+	Orimortgagecredit     float64   `json:"orimortgagecredit"  xorm:"'ORIMORTGAGECREDIT'"`         // 期初授信金额
+	Oriothercredit        float64   `json:"oriothercredit"  xorm:"'ORIOTHERCREDIT'"`               // 期初其它授信金额
+	Orioutamountfreeze    float64   `json:"orioutamountfreeze"  xorm:"'ORIOUTAMOUNTFREEZE'"`       // 期初出金冻结
+	Freezemargin          float64   `json:"freezemargin"  xorm:"'FREEZEMARGIN'"`                   // 冻结保证金
+	Usedmargin            float64   `json:"usedmargin"  xorm:"'USEDMARGIN'"`                       // 占用保证金
+	Otherfreezemargin     float64   `json:"otherfreezemargin"  xorm:"'OTHERFREEZEMARGIN'"`         // 其他冻结保证金(交割买方冻结 申购冻结 全款买入 商城买入)
+	Freezecharge          float64   `json:"freezecharge"  xorm:"'FREEZECHARGE'"`                   // 手续费冻结
+	Mortgagecredit        float64   `json:"mortgagecredit"  xorm:"'MORTGAGECREDIT'"`               // 授信金额
+	Othercredit           float64   `json:"othercredit"  xorm:"'OTHERCREDIT'"`                     // 其它授信金额
+	Outamountfreeze       float64   `json:"outamountfreeze"  xorm:"'OUTAMOUNTFREEZE'"`             // 出金冻结
+	Inamount              float64   `json:"inamount"  xorm:"'INAMOUNT'"`                           // 今日入金金额(包括三方入金)
+	Currentbalance        float64   `json:"currentbalance"  xorm:"'CURRENTBALANCE'"`               // 期末余额
+	Outamount             float64   `json:"outamount"  xorm:"'OUTAMOUNT'"`                         // 今日出金金额(包括三方出金)
+	Paycharge             float64   `json:"paycharge"  xorm:"'PAYCHARGE'"`                         // 今日手续费支出
+	Closepl               float64   `json:"closepl"  xorm:"'CLOSEPL'"`                             // 今日平仓盈亏
+	Creditincrease        float64   `json:"creditincrease"  xorm:"'CREDITINCREASE'"`               // 今日授信增加
+	Creditdecrease        float64   `json:"creditdecrease"  xorm:"'CREDITDECREASE'"`               // 今日授信减少
+	Othercreditincrease   float64   `json:"othercreditincrease"  xorm:"'OTHERCREDITINCREASE'"`     // 今日其它授信增加
+	Othercreditdecrease   float64   `json:"othercreditdecrease"  xorm:"'OTHERCREDITDECREASE'"`     // 今日其它授信减少
+	Transferamount        float64   `json:"transferamount"  xorm:"'TRANSFERAMOUNT'"`               // 今日划转金额(母子账号资金划转,从划入账号为正,从账号划出为负)
+	Otherpay              float64   `json:"otherpay"  xorm:"'OTHERPAY'"`                           // 其他支出(交割付款 申购付款 全款买入 商城买入 卖家退货)
+	Otherincome           float64   `json:"otherincome"  xorm:"'OTHERINCOME'"`                     // 其他收入(交割收款 申购收款 全款卖出 商城卖出 买家退货 会员手续费收入)
+	Outthreshold          float64   `json:"outthreshold"  xorm:"'OUTTHRESHOLD'"`                   // 出金阈值
+	Tradestatuschangetime time.Time `json:"tradestatuschangetime"  xorm:"'TRADESTATUSCHANGETIME'"` // 激活时间
+	Changetime            time.Time `json:"changetime"  xorm:"'CHANGETIME'"`                       // 账户状态变更时间
+	Thirdinamount         float64   `json:"thirdinamount"  xorm:"'THIRDINAMOUNT'"`                 // 今日三方入金
+	Thirdoutamount        float64   `json:"thirdoutamount"  xorm:"'THIRDOUTAMOUNT'"`               // 今日三方出金
+	Capitalbalance        float64   `json:"capitalbalance"  xorm:"'CAPITALBALANCE'"`               // 本金余额[外部子账户实际出入金余额]
+	Fromaccountid         uint64    `json:"fromaccountid"  xorm:"'FROMACCOUNTID'"`                 // 所属上级账户
+	Sublevelpath          string    `json:"sublevelpath"  xorm:"'SUBLEVELPATH'"`                   // 账号层级路径(逗号分隔,首尾加逗号)
+	Serivcegroup          uint64    `json:"serivcegroup"  xorm:"'SERIVCEGROUP'"`                   // 服务分组
+	Accountname           string    `json:"accountname"  xorm:"'ACCOUNTNAME'"`                     // 账户名称
+	Accountflag           uint32    `json:"accountflag"  xorm:"'ACCOUNTFLAG'"`                     // 账户标识 - 0\1 (默认为0, 当上级账户与本账户的关联用户均为自己时更新为1)
+}
+
+// TableName is TAACCOUNT
+func (Taaccount) TableName() string {
+	return "TAACCOUNT"
+}
+
+// Logintaaccount 登录账户资金权限表 - 自营会员
+type Logintaaccount struct {
+	Loginid    uint64    `json:"loginid"  xorm:"'LOGINID'" binding:"required"`     // 登录账号ID
+	Accountid  uint64    `json:"accountid"  xorm:"'ACCOUNTID'" binding:"required"` // 资金账号ID
+	Modifytime time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`                  // 修改时间
+	Modifierid uint64    `json:"modifierid"  xorm:"'MODIFIERID'"`                  // 修改人
+}
+
+// TableName is LOGINTAACCOUNT
+func (Logintaaccount) TableName() string {
+	return "LOGINTAACCOUNT"
+}
+
+// Taaccountmarket 资金账号市场权限表
+type Taaccountmarket struct {
+	Accountid        uint64    `json:"accountid"  xorm:"'ACCOUNTID'" binding:"required"` // 资金账号ID
+	Marketid         uint32    `json:"marketid"  xorm:"'MARKETID'" binding:"required"`   // 市场ID
+	Modifytime       time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`                  // 修改时间
+	Modifierid       uint64    `json:"modifierid"  xorm:"'MODIFIERID'"`                  // 修改人
+	Spotrighttype    uint32    `json:"spotrighttype"  xorm:"'SPOTRIGHTTYPE'"`            // 现货权限类型 - 0:无1:可挂可摘 2:可挂 3:可摘 [现货类](卖大厅)
+	Buyspotrighttype uint32    `json:"buyspotrighttype"  xorm:"'BUYSPOTRIGHTTYPE'"`      // 现货权限类型 - 0:无1:可挂可摘 2:可挂 3:可摘 [现货类](买大厅)
+}
+
+// TableName is TAACCOUNTMARKET
+func (Taaccountmarket) TableName() string {
+	return "TAACCOUNTMARKET"
+}

+ 38 - 0
models/commonModels.go

@@ -0,0 +1,38 @@
+package models
+
+// Tabledefine 列表定义表
+type Tabledefine struct {
+	Tablekey  string `json:"tablekey"  xorm:"'TABLEKEY'" binding:"required"` // 列表Key
+	Tabletype uint32 `json:"tabletype"  xorm:"'TABLETYPE'"`                  // 列表类型 - 1:管理端 2:终端
+	Tablename string `json:"tablename"  xorm:"'TABLENAME'"`                  // 列表名称
+	Tabelmenu string `json:"tabelmenu"  xorm:"'TABELMENU'"`                  // 列表菜单
+	Remark    string `json:"remark"  xorm:"'REMARK'"`                        // Remark
+}
+
+// TableName is TABLEDEFINE
+func (Tabledefine) TableName() string {
+	return "TABLEDEFINE"
+}
+
+// Tablecolumnconfig 列表表头配置表
+type Tablecolumnconfig struct {
+	Autoid          uint64 `json:"autoid"  xorm:"'AUTOID'" binding:"required"` // AutoID
+	Tablekey        string `json:"tablekey"  xorm:"'TABLEKEY'"`                // 列表Key
+	Columnfield     string `json:"columnfield"  xorm:"'COLUMNFIELD'"`          // 列字段
+	Columntitle     string `json:"columntitle"  xorm:"'COLUMNTITLE'"`          // 列Title
+	Columnwidth     string `json:"columnwidth"  xorm:"'COLUMNWIDTH'"`          // 列宽
+	Orderindex      uint32 `json:"orderindex"  xorm:"'ORDERINDEX'"`            // 顺序
+	Isshow          uint32 `json:"isshow"  xorm:"'ISSHOW'"`                    // 是否显示 - 0:不显示 1:显示
+	Aligntype       uint32 `json:"aligntype"  xorm:"'ALIGNTYPE'"`              // 对齐方式 - 1:居中对齐 2:左对齐 3:右对齐
+	Formattertype   string `json:"formattertype"  xorm:"'FORMATTERTYPE'"`      // 格式化类型
+	Formatterstring string `json:"formatterstring"  xorm:"'FORMATTERSTRING'"`  // 格式化字符
+	Remark          string `json:"remark"  xorm:"'REMARK'"`                    // 备注
+	Needsummary     uint32 `json:"needsummary"  xorm:"'NEEDSUMMARY'"`          // 是否需要汇总 - 0:不需要 1:需要
+	Summarytype     uint32 `json:"summarytype"  xorm:"'SUMMARYTYPE'"`          // 汇总类型 - 1:加总 2:最后一个
+	Groupname       string `json:"groupname"  xorm:"'GROUPNAME'"`              // 表头分组名称
+}
+
+// TableName is TABLECOLUMNCONFIG
+func (Tablecolumnconfig) TableName() string {
+	return "TABLECOLUMNCONFIG"
+}

+ 0 - 39
models/goodsModels.go

@@ -55,42 +55,3 @@ type Goods struct {
 func (Goods) TableName() string {
 	return "GOODS"
 }
-
-// Goodsgroup 商品组表 - 品种(通道交易\场外期权)
-type Goodsgroup struct {
-	Goodsgroupid           int64     `json:"goodsgroupid"  xorm:"'GOODSGROUPID'" binding:"required"`         // 商品组ID(自增ID)
-	Goodsgroupname         string    `json:"goodsgroupname"  xorm:"'GOODSGROUPNAME'" binding:"required"`     // 商品组名称
-	Goodsgroupstatus       int64     `json:"goodsgroupstatus"  xorm:"'GOODSGROUPSTATUS'" binding:"required"` // 商品组状态 - 1:正常 2:注销
-	Marketid               int64     `json:"marketid"  xorm:"'MARKETID'" binding:"required"`                 // 所属市场ID
-	Createtime             time.Time `json:"createtime"  xorm:"'CREATETIME'"`                                // 创建时间
-	Creatorid              int64     `json:"creatorid"  xorm:"'CREATORID'"`                                  // 创建人
-	Modifytime             time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`                                // 修改时间
-	Modifierid             int64     `json:"modifierid"  xorm:"'MODIFIERID'"`                                // 修改人
-	Quotesourcegroupid     int64     `json:"quotesourcegroupid"  xorm:"'QUOTESOURCEGROUPID'"`                // 所属行情源分组ID[参考行情市场用\通道交易]
-	Outergroupcode         string    `json:"outergroupcode"  xorm:"'OUTERGROUPCODE'"`                        // 外部商品组代码[通道交易]
-	Canshort               int64     `json:"canshort"  xorm:"'CANSHORT'"`                                    // 是否允许做空[通道交易] - 0:不能做空 1:可以做空
-	Exexchangeid           int64     `json:"exexchangeid"  xorm:"'EXEXCHANGEID'"`                            // 外部交易所ID[通道交易]
-	Currencyid             int64     `json:"currencyid"  xorm:"'CURRENCYID'"`                                // 报价货币ID
-	Goodunitid             int64     `json:"goodunitid"  xorm:"'GOODUNITID'"`                                // 报价单位ID
-	Agreeunit              float64   `json:"agreeunit"  xorm:"'AGREEUNIT'"`                                  // 合约单位
-	Decimalplace           int64     `json:"decimalplace"  xorm:"'DECIMALPLACE'"`                            // 报价小数位
-	Quoteminunit           int64     `json:"quoteminunit"  xorm:"'QUOTEMINUNIT'"`                            // 行情最小变动单位 [整数,报价小数位一起使用]
-	Innerdealmode          int64     `json:"innerdealmode"  xorm:"'INNERDEALMODE'"`                          // 内部成交方式[通道交易] - 1:净头寸 2:开平 3:平今
-	Outerdealmode          int64     `json:"outerdealmode"  xorm:"'OUTERDEALMODE'"`                          // 外部成交方式[通道交易]- 1:净头寸 2:开平 3:平今
-	Syncgoodsqty           int64     `json:"syncgoodsqty"  xorm:"'SYNCGOODSQTY'"`                            // 同步合约数[通道交易-投资管理用] - 0表示不限
-	Closepricemode         int64     `json:"closepricemode"  xorm:"'CLOSEPRICEMODE'"`                        // 强平价格方式 - 1:市价 2:最新价 3:涨跌停(未实现)
-	Closepriceparam        float64   `json:"closepriceparam"  xorm:"'CLOSEPRICEPARAM'"`                      // 强平最新价浮动比例 - 方式为2时使用
-	Qtydecimalplace        int64     `json:"qtydecimalplace"  xorm:"'QTYDECIMALPLACE'"`                      // 成交量小数位
-	Exercisetype           int64     `json:"exercisetype"  xorm:"'EXERCISETYPE'"`                            // 行权类型[场外期权]-1:欧式期权 2:美式期权
-	Premiumdecimalplace    int64     `json:"premiumdecimalplace"  xorm:"'PREMIUMDECIMALPLACE'"`              // 权利金小数位[场外期权]
-	Premiumspreadalgorithm int64     `json:"premiumspreadalgorithm"  xorm:"'PREMIUMSPREADALGORITHM'"`        // 权利金点差方式[场外期权]  1:比率  2:固定
-	Premiumspreadvalue     float64   `json:"premiumspreadvalue"  xorm:"'PREMIUMSPREADVALUE'"`                // 权利金点差值[场外期权]
-	Isbuylimited           int64     `json:"isbuylimited"  xorm:"'ISBUYLIMITED'"`                            // 是否限制建仓量 - 0:不限制 1:限制
-	Quotegear              int64     `json:"quotegear"  xorm:"'QUOTEGEAR'"`                                  // 行情档位(1-10)
-	Quoterid               int64     `json:"quoterid"  xorm:"'QUOTERID'"`                                    // 报价商ID[场外期权]
-}
-
-// TableName is GOODSGROUP
-func (Goodsgroup) TableName() string {
-	return "GOODSGROUP"
-}

+ 111 - 0
models/marketModels.go

@@ -0,0 +1,111 @@
+package models
+
+import "time"
+
+// Market 市场表
+type Market struct {
+	Marketid             uint32  `json:"marketid"  xorm:"'MARKETID'" binding:"required"`                         // 市场ID正常5位,前三位固定:两位表示交易模式, 一位表示交易属性(1:收益权,2:所有权) 其它特殊市场:0-系统 1-交割服务 2-账户服务3-履约服务 4-仓单服务 5-积分服务 6-银行服务
+	Marketname           string  `json:"marketname"  xorm:"'MARKETNAME'"`                                        // 市场名称
+	Exchareaid           uint32  `json:"exchareaid"  xorm:"'EXCHAREAID'"`                                        // 所属交易所,可以没有
+	Markettype           uint32  `json:"markettype"  xorm:"'MARKETTYPE'"`                                        // 市场类型- 1:非交易服务 2:交易服务
+	Trademode            uint32  `json:"trademode"  xorm:"'TRADEMODE'" binding:"required"`                       // 交易模式 - 10:做市 13:竞价 15:通道交易 16:挂牌点选 17:仓单贸易 18:期权 19:竞拍-降价式 20:竞拍-竞价式 21:竞拍-大宗式 22:受托竞价
+	Tradeproperty        uint32  `json:"tradeproperty"  xorm:"'TRADEPROPERTY'" binding:"required"`               // 交易属性 -  1:收益权(可做空) 2:所有权(不可做空) 3:期权 4:现货 5:参考行情 6:通道交易 7:币交易 8:场外期权
+	Openmethod           uint32  `json:"openmethod"  xorm:"'OPENMETHOD'" binding:"required"`                     // 开盘模式 - 0 自动 1手动
+	Reckonpricealgorithm uint32  `json:"reckonpricealgorithm"  xorm:"'RECKONPRICEALGORITHM'" binding:"required"` // 结算价算法: 1:最后多少笔成交价加权平均 2:最后多少秒成交价加权平均 3:全天加权平均 4:最后一口价 5.买一价 6.卖一价 7.买一卖一均价 8.外部结算价
+	Reckonpriceparam     uint32  `json:"reckonpriceparam"  xorm:"'RECKONPRICEPARAM'"`                            // 结算价参数
+	Marketstatus         uint32  `json:"marketstatus"  xorm:"'MARKETSTATUS'" binding:"required"`                 // 生效状态(ValidStatus枚举): 1:待生效 2:正常 3:注销
+	Marketserviceid      uint32  `json:"marketserviceid"  xorm:"'MARKETSERVICEID'"`                              // 市场服务ID
+	Marginformula        uint32  `json:"marginformula"  xorm:"'MARGINFORMULA'"`                                  // 持仓保证金公式 - 1:双边收 2:净头寸收 3:大小边差异收 4:大边收 5:卖持仓收(仅期权)
+	Performancetempid    int64   `json:"performancetempid"  xorm:"'PERFORMANCETEMPID'"`                          // 履约计划模板ID - 作废
+	Clearinterval        uint32  `json:"clearinterval"  xorm:"'CLEARINTERVAL'"`                                  // 待开市间隔(交易市场开盘前多久发市场待开市信号(单位分钟))
+	Matchermode          uint32  `json:"matchermode"  xorm:"'MATCHERMODE'"`                                      // 指定对手模式[仓单贸易模式专用] - 1:任意对手
+	Reckonorder          uint32  `json:"reckonorder"  xorm:"'RECKONORDER'"`                                      // 结算顺序
+	Canpreexercise       uint32  `json:"canpreexercise"  xorm:"'CANPREEXERCISE'"`                                //  [期权]是否可预申报- 0:否 1:是
+	Cangoodsexercise     uint32  `json:"cangoodsexercise"  xorm:"'CANGOODSEXERCISE'"`                            //  [期权]是否可现货行权- 0:否 1:是
+	Goodstype            uint32  `json:"goodstype"  xorm:"'GOODSTYPE'"`                                          // 商品类型 - 1:交易商品 2:仓单商品
+	Roleprioritytype     uint32  `json:"roleprioritytype"  xorm:"'ROLEPRIORITYTYPE'"`                            // 角色优先类型 - 1:无 2:报价商优先 3:非报价商优先 [16:挂牌点选]
+	Isrecordsource       uint32  `json:"isrecordsource"  xorm:"'ISRECORDSOURCE'"`                                // 是否记录成交源 - 0:不记录 1:记录 [所有权]
+	Marginformula2       uint32  `json:"marginformula2"  xorm:"'MARGINFORMULA2'"`                                // 持仓保证金公式(仅受托竞价) - 1:双边收 2:净头寸收 3:大小边差异收 4:大边收 5:卖持仓收(仅期权)
+	Haswr                uint32  `json:"haswr"  xorm:"'HASWR'"`                                                  // [竞拍]是否需要仓单 -  0:不需要  1:需要-作废
+	Premiumquotemode     uint32  `json:"premiumquotemode"  xorm:"'PREMIUMQUOTEMODE'"`                            // 权利金报价方式 - 1:自动 2:手动
+	Cangoodsexercisetype uint32  `json:"cangoodsexercisetype"  xorm:"'CANGOODSEXERCISETYPE'"`                    // 可现货行权期权类型 - 1:认购 2认沽 3:认购认沽 [CanGoodsExercise = 1时可设置]
+	Canacceptquote       uint32  `json:"canacceptquote"  xorm:"'CANACCEPTQUOTE'"`                                // 确认行权是否接收行情 - 0:不接受 1:接受 [可确认权的挂牌期权市场可配置]
+	Canmutistage         uint32  `json:"canmutistage"  xorm:"'CANMUTISTAGE'"`                                    // 是否可多段运行 – 0:不可 1:可 [挂牌期权]
+	Isdeductmargin       uint32  `json:"isdeductmargin"  xorm:"'ISDEDUCTMARGIN'"`                                // 竞拍违约是否扣除保证金[竞拍-降价式] - 0:不扣 1:扣除
+	Canmanualquotestrike uint32  `json:"canmanualquotestrike"  xorm:"'CANMANUALQUOTESTRIKE'"`                    // 是否可手动报行权价- 0:否 1:是 [期权]
+	Tradetype            uint32  `json:"tradetype"  xorm:"'TRADETYPE'"`                                          // 下单方式[通道交易] - 1:直接转单 2:净头寸下单
+	Pendingflag          uint32  `json:"pendingflag"  xorm:"'PENDINGFLAG'"`                                      // 待开市时间标识[通道交易-对冲] -  0:当日 1:上日
+	Pendingtime          string  `json:"pendingtime"  xorm:"'PENDINGTIME'"`                                      // 待开市时间[通道交易-对冲](HH:mm)
+	Reckontime           string  `json:"reckontime"  xorm:"'RECKONTIME'"`                                        // 结算时间[通道交易-对冲](HH:mm)
+	Hastradecredit       uint32  `json:"hastradecredit"  xorm:"'HASTRADECREDIT'"`                                // 是否交易授信[做市收益权] - 0:不授信 1:授信
+	Contracttmp          string  `json:"contracttmp"  xorm:"'CONTRACTTMP'"`                                      // 合同模板[荷兰式][竞价式][仓单贸易]
+	Hasrebate            uint32  `json:"hasrebate"  xorm:"'HASREBATE'"`                                          // 是否返利[竞价式]  0:不返,1:返利 -- 根据系统参数088显示或隐藏
+	Rebateratio          float64 `json:"rebateratio"  xorm:"'REBATERATIO'"`                                      // 返利比率[竞价式]
+	Otcuserid            uint64  `json:"otcuserid"  xorm:"'OTCUSERID'"`                                          // 场外期权做市商[场外期权]
+	Outersynctime        string  `json:"outersynctime"  xorm:"'OUTERSYNCTIME'"`                                  // 外部同步时间点(h24:mi:ss)[场外期权]
+	Auctionwrtype        uint32  `json:"auctionwrtype"  xorm:"'AUCTIONWRTYPE'"`                                  // 竞拍仓单类型 - 1:无仓单 2:有仓单 3;有无仓单均可
+	Isreleasemargin      uint32  `json:"isreleasemargin"  xorm:"'ISRELEASEMARGIN'"`                              // 成交参与保证金是否释放[竞价式] - 0:不释放 1释放
+	Selllistingauditflag uint32  `json:"selllistingauditflag"  xorm:"'SELLLISTINGAUDITFLAG'"`                    // 卖挂牌是否需要审核(仓单贸易) - 0:不需要 1:需要
+	Trademarkettype      uint32  `json:"trademarkettype"  xorm:"'TRADEMARKETTYPE'"`                              // 交易市场类型 - 1:合约市场 2:外部市场 3:仓单市场
+}
+
+// TableName is MARKET
+func (Market) TableName() string {
+	return "MARKET"
+}
+
+// Goodsgroup 商品组表 - 品种(通道交易\场外期权)
+type Goodsgroup struct {
+	Goodsgroupid           int64     `json:"goodsgroupid"  xorm:"'GOODSGROUPID'" binding:"required"`         // 商品组ID(自增ID)
+	Goodsgroupname         string    `json:"goodsgroupname"  xorm:"'GOODSGROUPNAME'" binding:"required"`     // 商品组名称
+	Goodsgroupstatus       int64     `json:"goodsgroupstatus"  xorm:"'GOODSGROUPSTATUS'" binding:"required"` // 商品组状态 - 1:正常 2:注销
+	Marketid               int64     `json:"marketid"  xorm:"'MARKETID'" binding:"required"`                 // 所属市场ID
+	Createtime             time.Time `json:"createtime"  xorm:"'CREATETIME'"`                                // 创建时间
+	Creatorid              int64     `json:"creatorid"  xorm:"'CREATORID'"`                                  // 创建人
+	Modifytime             time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`                                // 修改时间
+	Modifierid             int64     `json:"modifierid"  xorm:"'MODIFIERID'"`                                // 修改人
+	Quotesourcegroupid     int64     `json:"quotesourcegroupid"  xorm:"'QUOTESOURCEGROUPID'"`                // 所属行情源分组ID[参考行情市场用\通道交易]
+	Outergroupcode         string    `json:"outergroupcode"  xorm:"'OUTERGROUPCODE'"`                        // 外部商品组代码[通道交易]
+	Canshort               int64     `json:"canshort"  xorm:"'CANSHORT'"`                                    // 是否允许做空[通道交易] - 0:不能做空 1:可以做空
+	Exexchangeid           int64     `json:"exexchangeid"  xorm:"'EXEXCHANGEID'"`                            // 外部交易所ID[通道交易]
+	Currencyid             int64     `json:"currencyid"  xorm:"'CURRENCYID'"`                                // 报价货币ID
+	Goodunitid             int64     `json:"goodunitid"  xorm:"'GOODUNITID'"`                                // 报价单位ID
+	Agreeunit              float64   `json:"agreeunit"  xorm:"'AGREEUNIT'"`                                  // 合约单位
+	Decimalplace           int64     `json:"decimalplace"  xorm:"'DECIMALPLACE'"`                            // 报价小数位
+	Quoteminunit           int64     `json:"quoteminunit"  xorm:"'QUOTEMINUNIT'"`                            // 行情最小变动单位 [整数,报价小数位一起使用]
+	Innerdealmode          int64     `json:"innerdealmode"  xorm:"'INNERDEALMODE'"`                          // 内部成交方式[通道交易] - 1:净头寸 2:开平 3:平今
+	Outerdealmode          int64     `json:"outerdealmode"  xorm:"'OUTERDEALMODE'"`                          // 外部成交方式[通道交易]- 1:净头寸 2:开平 3:平今
+	Syncgoodsqty           int64     `json:"syncgoodsqty"  xorm:"'SYNCGOODSQTY'"`                            // 同步合约数[通道交易-投资管理用] - 0表示不限
+	Closepricemode         int64     `json:"closepricemode"  xorm:"'CLOSEPRICEMODE'"`                        // 强平价格方式 - 1:市价 2:最新价 3:涨跌停(未实现)
+	Closepriceparam        float64   `json:"closepriceparam"  xorm:"'CLOSEPRICEPARAM'"`                      // 强平最新价浮动比例 - 方式为2时使用
+	Qtydecimalplace        int64     `json:"qtydecimalplace"  xorm:"'QTYDECIMALPLACE'"`                      // 成交量小数位
+	Exercisetype           int64     `json:"exercisetype"  xorm:"'EXERCISETYPE'"`                            // 行权类型[场外期权]-1:欧式期权 2:美式期权
+	Premiumdecimalplace    int64     `json:"premiumdecimalplace"  xorm:"'PREMIUMDECIMALPLACE'"`              // 权利金小数位[场外期权]
+	Premiumspreadalgorithm int64     `json:"premiumspreadalgorithm"  xorm:"'PREMIUMSPREADALGORITHM'"`        // 权利金点差方式[场外期权]  1:比率  2:固定
+	Premiumspreadvalue     float64   `json:"premiumspreadvalue"  xorm:"'PREMIUMSPREADVALUE'"`                // 权利金点差值[场外期权]
+	Isbuylimited           int64     `json:"isbuylimited"  xorm:"'ISBUYLIMITED'"`                            // 是否限制建仓量 - 0:不限制 1:限制
+	Quotegear              int64     `json:"quotegear"  xorm:"'QUOTEGEAR'"`                                  // 行情档位(1-10)
+	Quoterid               int64     `json:"quoterid"  xorm:"'QUOTERID'"`                                    // 报价商ID[场外期权]
+}
+
+// TableName is GOODSGROUP
+func (Goodsgroup) TableName() string {
+	return "GOODSGROUP"
+}
+
+// Externalexchange 外部交易所表
+type Externalexchange struct {
+	Autoid           uint64    `json:"autoid"  xorm:"'AUTOID'" binding:"required"`  // AutoID - SEQ_EXTERNALEXCHANGE
+	Exexchangecode   string    `json:"exexchangecode"  xorm:"'EXEXCHANGECODE'"`     // 外部交易所代码
+	Exexchangename   string    `json:"exexchangename"  xorm:"'EXEXCHANGENAME'"`     // 外部交易所名称(简称)
+	Updatetime       time.Time `json:"updatetime"  xorm:"'UPDATETIME'"`             // 更新时间
+	Quotegear        uint32    `json:"quotegear"  xorm:"'QUOTEGEAR'"`               // 行情档位(1-10)
+	Showbrokerflag   uint32    `json:"showbrokerflag"  xorm:"'SHOWBROKERFLAG'"`     // 是否显示买卖经纪盘 - 0:不显示 1:显示
+	Exchangefullname string    `json:"exchangefullname"  xorm:"'EXCHANGEFULLNAME'"` // 外部交易所全称
+	Ismarketprice    uint32    `json:"ismarketprice"  xorm:"'ISMARKETPRICE'"`       // 是否支持市价 - 0:不支持 1:支持
+}
+
+// TableName is EXTERNALEXCHANGE
+func (Externalexchange) TableName() string {
+	return "EXTERNALEXCHANGE"
+}

+ 0 - 0
sh/mtp2.0_QueryService_linux.sh → res/sh/mtp2.0_QueryService_linux.sh


+ 7 - 0
routers/router.go

@@ -2,6 +2,7 @@ package routers
 
 import (
 	"mtp2_if/controllers/cfg"
+	"mtp2_if/controllers/common"
 	"mtp2_if/controllers/cptrade"
 	"mtp2_if/controllers/delivery"
 	"mtp2_if/controllers/erms2"
@@ -44,6 +45,12 @@ func InitRouter() *gin.Engine {
 	{
 		loginR.GET("/GetLoginID", login.GetLoginID)
 	}
+	// ************************ 通用功能 ************************
+	commonR := apiR.Group("Common")
+	commonR.Use()
+	{
+		commonR.GET("/QueryTraderMenu", common.QueryTraderMenu)
+	}
 	// ************************ 仓单贸易 ************************
 	wrTradeR := apiR.Group("WRTrade")
 	wrTradeR.Use(token.Auth())