Explorar el Código

交易端菜单数据迁移后相关接口支持

Simon Zhou hace 5 años
padre
commit
86d77174d6
Se han modificado 3 ficheros con 102 adiciones y 33 borrados
  1. 2 2
      config/config.xml
  2. 71 31
      controllers/common/table.go
  3. 29 0
      models/commonModels.go

+ 2 - 2
config/config.xml

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

+ 71 - 31
controllers/common/table.go

@@ -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)

+ 29 - 0
models/commonModels.go

@@ -1,5 +1,34 @@
 package models
 
+// Funcmenulist 功能菜单表
+type Funcmenulist struct {
+	Resourcecode  string `json:"resourcecode"  xorm:"'RESOURCECODE'" binding:"required"` // 资源代码 - M001 一级菜单编码   0001 二级菜单编码   0001 三级菜单M00100000000  系统管理M00100010000  参数管理M00100010001  参数管理--修改M00100010002  参数管理--删除M00100020000  区域管理
+	Resourcename  string `json:"resourcename"  xorm:"'RESOURCENAME'"`                    // 资源名
+	Resourcelevel uint32 `json:"resourcelevel"  xorm:"'RESOURCELEVEL'"`                  // 级别1-一级 2-二级 3-三级4-四级
+	Menutype      uint32 `json:"menutype"  xorm:"'MENUTYPE'"`                            // 1- 管理端   2-  交易端 3 - 已失效
+	Parentcode    string `json:"parentcode"  xorm:"'PARENTCODE'"`                        // 上级资源代码
+	URL           string `json:"url"  xorm:"'URL'"`                                      // URL
+	Sort          uint32 `json:"sort"  xorm:"'SORT'"`                                    // 排序 - 一级时,是所有一级菜单的排序顺序;二级时是所属同一个一级菜单下的排序、三级时是同一个二级菜单下的排序
+	Iconame       string `json:"iconame"  xorm:"'ICONAME'"`                              // 菜单图标
+	Remark        string `json:"remark"  xorm:"'REMARK'"`                                // Remark
+}
+
+// TableName is FUNCMENULIST
+func (Funcmenulist) TableName() string {
+	return "FUNCMENULIST"
+}
+
+// Rolefuncmenu 角色菜单表
+type Rolefuncmenu struct {
+	Roleid       uint32 `json:"roleid"  xorm:"'ROLEID'" binding:"required"`             // 角色权限ID
+	Resourcecode string `json:"resourcecode"  xorm:"'RESOURCECODE'" binding:"required"` // 菜单代码
+}
+
+// TableName is ROLEFUNCMENU
+func (Rolefuncmenu) TableName() string {
+	return "ROLEFUNCMENU"
+}
+
 // Tabledefine 列表定义表
 type Tabledefine struct {
 	Tablekey  string `json:"tablekey"  xorm:"'TABLEKEY'" binding:"required"` // 列表Key