Ver Fonte

“获取终端菜单”接口增加"菜单类型"输入参数

zhou.xiaoning há 3 anos atrás
pai
commit
b48f6b3895
5 ficheiros alterados com 128 adições e 5 exclusões
  1. 4 2
      controllers/common/menu.go
  2. 7 0
      docs/docs.go
  3. 7 0
      docs/swagger.json
  4. 5 0
      docs/swagger.yaml
  5. 105 3
      models/common.go

+ 4 - 2
controllers/common/menu.go

@@ -516,7 +516,8 @@ func DeleteNewFuncmenu(c *gin.Context) {
 }
 
 type GetClientNewFuncmenuReq struct {
-	LoginID int `form:"loginid" binding:"required"`
+	LoginID  int `form:"loginid" binding:"required"`
+	MenuType int `form:"menutype" binding:"required"`
 }
 
 // GetClientNewFuncmenu 获取终端菜单
@@ -524,6 +525,7 @@ type GetClientNewFuncmenuReq struct {
 // @Produce json
 // @Security ApiKeyAuth
 // @Param loginid query int true "登录账号"
+// @Param menutype query int true "菜单类型 - 1:管理端 2:PC(C#) 3:移动(云平台) 4:终端(交易所) 5:PC(云平台)"
 // @Success 200 {array} models.NewFuncmenulist
 // @Failure 500 {object} app.Response
 // @Router /Common/GetClientNewFuncmenu [get]
@@ -539,7 +541,7 @@ func GetClientNewFuncmenu(c *gin.Context) {
 		return
 	}
 
-	rst, err := models.GetErmcpRoleFuncMenuLists(req.LoginID, "")
+	rst, err := models.GetNewErmcpRoleFuncMenuLists(req.LoginID, req.MenuType)
 	if err != nil {
 		// 查询失败
 		logger.GetLogger().Errorf("GetClientNewFuncmenu failed: %s", err.Error())

+ 7 - 0
docs/docs.go

@@ -580,6 +580,13 @@ var doc = `{
                         "name": "loginid",
                         "in": "query",
                         "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "菜单类型 - 1:管理端 2:PC(C#) 3:移动(云平台) 4:终端(交易所) 5:PC(云平台)",
+                        "name": "menutype",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {

+ 7 - 0
docs/swagger.json

@@ -564,6 +564,13 @@
                         "name": "loginid",
                         "in": "query",
                         "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "菜单类型 - 1:管理端 2:PC(C#) 3:移动(云平台) 4:终端(交易所) 5:PC(云平台)",
+                        "name": "menutype",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {

+ 5 - 0
docs/swagger.yaml

@@ -22207,6 +22207,11 @@ paths:
         name: loginid
         required: true
         type: integer
+      - description: 菜单类型 - 1:管理端 2:PC(C#) 3:移动(云平台) 4:终端(交易所) 5:PC(云平台)
+        in: query
+        name: menutype
+        required: true
+        type: integer
       produces:
       - application/json
       responses:

+ 105 - 3
models/common.go

@@ -813,8 +813,8 @@ func GetRoleFuncMenuLists(loginID int, resourceCode string) ([]Funcmenulist, err
 }
 
 // GetErmcpRoleFuncMenuLists 获取终端权限(企业风管专用,区分企业和企业成员)
-func GetErmcpRoleFuncMenuLists(loginID int, resourceCode string) ([]NewFuncmenulist, error) {
-	funcMenuLists := make([]NewFuncmenulist, 0)
+func GetErmcpRoleFuncMenuLists(loginID int, resourceCode string) ([]Funcmenulist, error) {
+	funcMenuLists := make([]Funcmenulist, 0)
 
 	// 获取对应的Loginaccount信息
 	var loginAccount Loginaccount
@@ -894,7 +894,7 @@ func GetErmcpRoleFuncMenuLists(loginID int, resourceCode string) ([]NewFuncmenul
 			}
 			if len(areaRoles) == 0 {
 				// 无角色,返回空数组s
-				return make([]NewFuncmenulist, 0), nil
+				return make([]Funcmenulist, 0), nil
 			}
 			// 构建RoleID列表
 			roleIDs := ""
@@ -1036,3 +1036,105 @@ func (r *NewFuncmenulist) Delete() error {
 	_, err := db.GetEngine().Where("RESOURCECODE = ?", r.RESOURCECODE).Delete(r)
 	return err
 }
+
+// GetNewErmcpRoleFuncMenuLists
+func GetNewErmcpRoleFuncMenuLists(loginID int, menuType int) ([]NewFuncmenulist, error) {
+	funcMenuLists := make([]NewFuncmenulist, 0)
+
+	// 获取对应的Loginaccount信息
+	var loginAccount Loginaccount
+	has, err := db.GetEngine().Where("LOGINID = ?", loginID).Get(&loginAccount)
+	if err != nil {
+		return nil, err
+	}
+	if !has {
+		return nil, errors.New("没有对应的登录用户信息")
+	}
+
+	// 获取对应的Useraccount信息
+	var userAccount Useraccount
+	has, err = db.GetEngine().Table("USERACCOUNT U").
+		Join("INNER", "LOGINACCOUNT L", "L.USERID = U.USERID").
+		Where("L.LOGINID = ?", loginID).Get(&userAccount)
+	if err != nil {
+		return nil, err
+	}
+	if !has {
+		return nil, errors.New("没有对应的用户信息")
+	}
+
+	// 是否企业
+	isEnterprise := false
+	// 是否自营会员
+	isTrader := false
+	// 查询机构角色表
+	var arearole Arearole
+	arearoles, err := arearole.GetAreaRoles(int(userAccount.Userid), 0)
+	if err != nil {
+		return nil, err
+	}
+	for _, v := range arearoles {
+		if v.Roletype == 6 {
+			isTrader = true
+		} else if v.Roletype == 20 {
+			arearole = arearoles[0]
+			if arearole.Suborgtype == 0 {
+				isEnterprise = true
+			}
+		}
+	}
+
+	if userAccount.Usertype == 5 || (userAccount.Usertype == 2 && isTrader) {
+		// 交易所,自营会员及投资者的权限不进行判断
+		sql := fmt.Sprintf("select F.* from FUNCMENULIST F where F.MENUTYPE = %d", menuType)
+		if err := db.GetEngine().SQL(sql).Find(&funcMenuLists); err != nil {
+			return nil, err
+		}
+	} else {
+		// 判断是企业还是企业成员
+		// 账户类型 -  1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户 7:企业成员(云平台)
+		if userAccount.Usertype == 2 && isEnterprise {
+			// UserType=2:企业。原逻辑:根据LoginAccount表"ClientRoleID"查询”ERMCP_MemberFuncMenu“表中该用户对应角色的菜单权限
+			sql := fmt.Sprintf(`select F.* from FUNCMENULIST F where F.MENUTYPE = %d 
+							and 
+							F.RESOURCECODE in 
+							(select R.RESOURCECODE from ERMCP_MEMBERFUNCMENU R 
+								where R.ISVALID = 1 and R.USERID = %d and R.ROLEID = %d)`, menuType, loginAccount.Userid, loginAccount.Clientroleid)
+			if err := db.GetEngine().SQL(sql).Find(&funcMenuLists); err != nil {
+				return nil, err
+			}
+		} else if userAccount.Usertype == 6 || userAccount.Usertype == 7 || (userAccount.Usertype == 2 && !isEnterprise) {
+			// UserType=7:企业成员
+			// 查询本用户的角色ID  - AreaRole表
+			// 根据 Rootuserid 和 自己的角色查询 ERMCP_MemberFuncMenu 表中的菜单权限
+			areaRoles := make([]Arearole, 0)
+			if err := db.GetEngine().Where("USERID = ?", loginAccount.Userid).Find(&areaRoles); err != nil {
+				return nil, err
+			}
+			if len(areaRoles) == 0 {
+				// 无角色,返回空数组s
+				return make([]NewFuncmenulist, 0), nil
+			}
+			// 构建RoleID列表
+			roleIDs := ""
+			for _, areaRole := range areaRoles {
+				roleIDs += "," + strconv.Itoa(int(areaRole.Roletype))
+			}
+			if len(roleIDs) > 0 {
+				roleIDs = roleIDs[1:]
+			}
+			sql := fmt.Sprintf(`select F.* from FUNCMENULIST F where F.MENUTYPE = %d 
+							and 
+							F.RESOURCECODE in 
+							(select R.RESOURCECODE from ERMCP_MEMBERFUNCMENU R 
+								where R.ISVALID = 1 and R.USERID = %d and R.ROLEID in (%s))`, menuType, userAccount.Rootuserid, roleIDs)
+			if err := db.GetEngine().SQL(sql).Find(&funcMenuLists); err != nil {
+				return nil, err
+			}
+		} else {
+			return nil, errors.New("错误的用户类型")
+		}
+	}
+
+	return funcMenuLists, nil
+}