|
|
@@ -3,6 +3,7 @@ package models
|
|
|
import (
|
|
|
"errors"
|
|
|
"mtp2_if/db"
|
|
|
+ "strconv"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
@@ -298,3 +299,78 @@ func FindMarketRunStepDetails(marketID int) ([]Marketrunstepdetail, error) {
|
|
|
|
|
|
return runSteps, nil
|
|
|
}
|
|
|
+
|
|
|
+// GetMarketIDsByLoginID 获取登录账号有权限的市场ID列表
|
|
|
+func GetMarketIDsByLoginID(loginID int) ([]int, error) {
|
|
|
+ engine := db.GetEngine()
|
|
|
+
|
|
|
+ // 账户下有权限的市场ID列表
|
|
|
+ var marketIDs []int
|
|
|
+
|
|
|
+ // 获取账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户 (目前可能登录交易端的账号类型为 2 5)
|
|
|
+ userAccount := new(Useraccount)
|
|
|
+ has, err := engine.Join("INNER", "LOGINACCOUNT", "USERACCOUNT.UserID = LOGINACCOUNT.UserID").
|
|
|
+ Where("LOGINACCOUNT.LoginID = ?", loginID).
|
|
|
+ Get(userAccount)
|
|
|
+ if err != nil || !has {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ if userAccount.Usertype == 5 {
|
|
|
+ // 如果账户类型为5(投资者),则需要通过其所属经济会员来获取市场权限(表:AreaRoleMarket, 条件:对应市场状态为正常;角色类型:经济会员)
|
|
|
+ if err := engine.Table("AREAROLEMARKET A").
|
|
|
+ Cols("v.MARKETID").
|
|
|
+ Join("INNER", "MARKET M", "M.MARKETID = A.MARKETID").
|
|
|
+ Where("M.MARKETSTATUS = 2 and A.ROLETYPE = 7 and A.AREAUSERID = ?", userAccount.Memberuserid).Find(&marketIDs); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 非投资者账号直接通过资金账号获取市场权限(表:TAAccountMarket)
|
|
|
+ var taAccounts []string // 账户下所有资金账户
|
|
|
+
|
|
|
+ // 先要获取当前登录账户对应的资金账户;如果为外部子资金账号(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(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.Table("TAACCOUNTMARKET").
|
|
|
+ Join("INNER", "MARKET", "MARKET.MARKETID = TAACCOUNTMARKET.MARKETID").
|
|
|
+ Cols("TAACCOUNTMARKET.MARKETID").
|
|
|
+ In("TAACCOUNTMARKET.ACCOUNTID", taAccounts).
|
|
|
+ And("MARKET.MARKETSTATUS = 2").Find(&marketIDs); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return marketIDs, nil
|
|
|
+}
|