|
|
@@ -125,31 +125,56 @@ func getQuoteMenu(loginID int) ([]QuotePrimaryMenu, error) {
|
|
|
}
|
|
|
if userAccount.Usertype == 5 {
|
|
|
// 如果账户类型为5(投资者),则需要通过其所属经济会员来获取市场权限(表:AreaRoleMarket, 条件:对应市场状态为正常;角色类型:经济会员)
|
|
|
- if err := engine.Table("AREAROLEMARKET").Cols("AREAROLEMARKET.MARKETID").Join("INNER", "MARKET", "MARKET.MARKETID = AREAROLEMARKET.MARKETID").Where("MARKET.MARKETSTATUS = 2 and AREAROLEMARKET.ROLETYPE = 7 and AREAROLEMARKET.AREAUSERID = ?", userAccount.Memberuserid).Find(&marketIDs); err != nil {
|
|
|
+ if err := engine.Table("AREAROLEMARKET").
|
|
|
+ Cols("AREAROLEMARKET.MARKETID").
|
|
|
+ Join("INNER", "MARKET", "MARKET.MARKETID = AREAROLEMARKET.MARKETID").
|
|
|
+ Where("MARKET.MARKETSTATUS = 2 and AREAROLEMARKET.ROLETYPE = 7 and AREAROLEMARKET.AREAUSERID = ?", userAccount.Memberuserid).Find(&marketIDs); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
} else {
|
|
|
// 非投资者账号直接通过资金账号获取市场权限(表:TAAccountMarket)
|
|
|
var taAccounts []string // 账户下所有资金账户
|
|
|
|
|
|
- // 先要获取当前登录账户对应的资金账户
|
|
|
- if err := engine.SQL(fmt.Sprintf(`select to_char(AccountID) from LoginTAAccount where LoginID = %d`, loginID)).Find(&taAccounts); err != nil {
|
|
|
+ // 先要获取当前登录账户对应的资金账户;如果为外部子资金账号(TaAccount.TaAccountType = 1),则使用TaAccount.FromAccountID来获取市场权限
|
|
|
+ type taAccount struct {
|
|
|
+ AccountID int `xorm:"ACCOUNTID"`
|
|
|
+ TaAccountType int `xorm:"TAACCOUNTTYPE"`
|
|
|
+ FromAccountID int `xorm:"FROMACCOUNTID"`
|
|
|
+ }
|
|
|
+ datas := make([]taAccount, 0)
|
|
|
+ if err := engine.Table("LOGINTAACCOUNT").
|
|
|
+ Join("INNER", "TAACCOUNT", "LOGINTAACCOUNT.ACCOUNTID = TAACCOUNT.ACCOUNTID").
|
|
|
+ Cols("TAACCOUNT.ACCOUNTID", "TAACCOUNT.TAACCOUNTTYPE", "TAACCOUNT.FROMACCOUNTID").
|
|
|
+ Where("LOGINTAACCOUNT.LOGINID = ?", loginID).Find(&datas); 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 {
|
|
|
+ // 如果一条记录都没有(未配置自营会员资金账户)则直接通过资金账户表获取
|
|
|
+ if len(datas) == 0 {
|
|
|
+ // 这里要注意,TaAccount表与LoginAccount表关联时,要使用TaAccount.RelatedUserID
|
|
|
+ if err := engine.Table("TAACCOUNT").
|
|
|
+ Join("INNER", "LOGINACCOUNT", "TAACCOUNT.RELATEDUSERID = LOGINACCOUNT.USERID").
|
|
|
+ Cols("TAACCOUNT.ACCOUNTID", "TAACCOUNT.TAACCOUNTTYPE", "TAACCOUNT.FROMACCOUNTID").
|
|
|
+ Where("LOGINACCOUNT.LOGINID = ?", loginID).Find(&datas); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
}
|
|
|
+ for _, v := range datas {
|
|
|
+ if v.TaAccountType == 1 {
|
|
|
+ // 外部资金账户使用TaAccount.FromAccountID来获取市场权限
|
|
|
+ taAccounts = append(taAccounts, strconv.Itoa(v.FromAccountID))
|
|
|
+ } else {
|
|
|
+ taAccounts = append(taAccounts, strconv.Itoa(v.AccountID))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 获取资金账户对应的市场权限(有权限的市场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 {
|
|
|
+ if err := engine.Table("TAACCOUNTMARKET").
|
|
|
+ Join("INNER", "MARKET", "MARKET.MARKETID = TAACCOUNTMARKET.MARKETID").
|
|
|
+ Cols("TAACCOUNTMARKET.MARKETID").
|
|
|
+ In("TAACCOUNTMARKET.ACCOUNTID", taAccountStr).
|
|
|
+ And("MARKET.MARKETSTATUS = 2").Find(&marketIDs); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
}
|
|
|
@@ -157,25 +182,32 @@ func getQuoteMenu(loginID int) ([]QuotePrimaryMenu, error) {
|
|
|
|
|
|
// ********************* 构建行情报价牌菜单 *********************
|
|
|
// 获取一级菜单列表
|
|
|
- datas := make([]models.Tablecolumnconfig, 0)
|
|
|
- if err := engine.Where("TableKey = 'trader_master_menu' and IsShow = 1").Find(&datas); err != nil {
|
|
|
+ // datas := make([]models.Tablecolumnconfig, 0)
|
|
|
+ // if err := engine.Where("TableKey = 'trader_master_menu' and IsShow = 1").Find(&datas); err != nil {
|
|
|
+ // return nil, err
|
|
|
+ // }
|
|
|
+ datas := make([]models.Funcmenulist, 0)
|
|
|
+ if err := engine.Join("INNER", "ROLEFUNCMENU", "FUNCMENULIST.RESOURCECODE = ROLEFUNCMENU.RESOURCECODE").
|
|
|
+ Where("FUNCMENULIST.PARENTCODE = 'trader_master_menu'").
|
|
|
+ Asc("SORT").
|
|
|
+ Find(&datas); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
// 构建一级菜单对象
|
|
|
for i, v := range datas {
|
|
|
quotePrimaryMenu := QuotePrimaryMenu{
|
|
|
Index: i,
|
|
|
- Key: v.Columnfield,
|
|
|
- Name: v.Columntitle,
|
|
|
+ Key: v.Resourcecode,
|
|
|
+ Name: v.Resourcename,
|
|
|
SubMenus: make([]QuoteSecondaryMenu, 0),
|
|
|
}
|
|
|
// 跳过自选
|
|
|
- if v.Columnfield == "optional" {
|
|
|
+ if v.Resourcecode == "optional" {
|
|
|
rst = append(rst, quotePrimaryMenu)
|
|
|
continue
|
|
|
}
|
|
|
- // FormatterString:模式,0-使用市场名称,1-使用外部交易所名称;Remark:包含市场交易模式
|
|
|
- quotePrimaryMenu.SubTitleType, _ = strconv.Atoi(v.Formatterstring)
|
|
|
+ // URL:模式,0-使用市场名称,1-使用外部交易所名称;Remark:包含市场交易模式
|
|
|
+ quotePrimaryMenu.SubTitleType, _ = strconv.Atoi(v.URL)
|
|
|
quotePrimaryMenu.TradeModes = v.Remark
|
|
|
|
|
|
// 如果传入的LoginID获取不到有权限的市场ID列表(有可能LoginID是错误的),则不构建二级子菜单
|
|
|
@@ -186,7 +218,6 @@ func getQuoteMenu(loginID int) ([]QuotePrimaryMenu, error) {
|
|
|
|
|
|
// 构建二级子菜单对象
|
|
|
marketIDsStr := utils.JoinItoString(marketIDs, ",")
|
|
|
-
|
|
|
if quotePrimaryMenu.SubTitleType == 0 {
|
|
|
// 获取目标交易模式的市场信息
|
|
|
markets := make([]models.Market, 0)
|
|
|
@@ -251,38 +282,47 @@ func getOperationMenu() ([]OperationPrimaryMenu, error) {
|
|
|
rst := make([]OperationPrimaryMenu, 0)
|
|
|
|
|
|
// 获取一级功能菜单
|
|
|
- opm := make([]models.Tablecolumnconfig, 0)
|
|
|
- if err := engine.Where("IsShow = 1 and TableKey = ?", "trader_operation_master_menu").Asc("ORDERINDEX").Find(&opm); err != nil {
|
|
|
+ opm := make([]models.Funcmenulist, 0)
|
|
|
+ if err := engine.Join("INNER", "ROLEFUNCMENU", "FUNCMENULIST.RESOURCECODE = ROLEFUNCMENU.RESOURCECODE").
|
|
|
+ Where("FUNCMENULIST.PARENTCODE = 'trader_operation_master_menu'").
|
|
|
+ Asc("SORT").
|
|
|
+ Find(&opm); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
for _, pv := range opm {
|
|
|
var operationPrimaryMenu = OperationPrimaryMenu{
|
|
|
- Key: pv.Columnfield,
|
|
|
- Label: pv.Columntitle,
|
|
|
+ Key: pv.Resourcecode,
|
|
|
+ Label: pv.Resourcename,
|
|
|
Children: make([]OperationSecondaryMenu, 0),
|
|
|
}
|
|
|
|
|
|
// 获取二级功能菜单
|
|
|
- osm := make([]models.Tablecolumnconfig, 0)
|
|
|
- if err := engine.Where("IsShow = 1 and Remark = ?", operationPrimaryMenu.Key).Asc("ORDERINDEX").Find(&osm); err != nil {
|
|
|
+ osm := make([]models.Funcmenulist, 0)
|
|
|
+ if err := engine.Join("INNER", "ROLEFUNCMENU", "FUNCMENULIST.RESOURCECODE = ROLEFUNCMENU.RESOURCECODE").
|
|
|
+ Where("FUNCMENULIST.PARENTCODE = ?", operationPrimaryMenu.Key).
|
|
|
+ Asc("SORT").
|
|
|
+ Find(&osm); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
for _, sv := range osm {
|
|
|
var operationSecondaryMenu = OperationSecondaryMenu{
|
|
|
- Key: sv.Columnfield,
|
|
|
- Label: sv.Columntitle,
|
|
|
+ Key: sv.Resourcecode,
|
|
|
+ Label: sv.Resourcename,
|
|
|
TabList: make([]OperationTabMenu, 0),
|
|
|
}
|
|
|
|
|
|
// 获取三级功能菜单
|
|
|
- otm := make([]models.Tablecolumnconfig, 0)
|
|
|
- if err := engine.Where("IsShow = 1 and Remark = ?", operationSecondaryMenu.Key).Asc("ORDERINDEX").Find(&otm); err != nil {
|
|
|
+ otm := make([]models.Funcmenulist, 0)
|
|
|
+ if err := engine.Join("INNER", "ROLEFUNCMENU", "FUNCMENULIST.RESOURCECODE = ROLEFUNCMENU.RESOURCECODE").
|
|
|
+ Where("FUNCMENULIST.PARENTCODE = ?", operationSecondaryMenu.Key).
|
|
|
+ Asc("SORT").
|
|
|
+ Find(&otm); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
for _, tv := range otm {
|
|
|
var operationTabMenu = OperationTabMenu{
|
|
|
- Key: tv.Columnfield,
|
|
|
- Label: tv.Columntitle,
|
|
|
+ Key: tv.Resourcecode,
|
|
|
+ Label: tv.Resourcename,
|
|
|
}
|
|
|
|
|
|
operationSecondaryMenu.TabList = append(operationSecondaryMenu.TabList, operationTabMenu)
|