Kaynağa Gözat

1.增加查菜单和权限接口(根据loginid查)
2. fix bug: #96413 #96400

zou.yingbin 4 yıl önce
ebeveyn
işleme
f14c72af65

+ 16 - 0
controllers/ermcp/qryAccMgr.go

@@ -124,6 +124,22 @@ func QueryAccMgrRoleMenu(c *gin.Context) {
 	a.DoGetDataI(&m)
 }
 
+// QueryRoleMenu
+// @Summary 查询角色菜单和权限
+// @Produce json
+// @Security ApiKeyAuth
+// @Param loginid query int true "登录ID"
+// @Success 200 {array} models.RoleMenu
+// @Failure 500 {object} app.Response
+// @Router /Ermcp/QueryRoleMenu [get]
+// @Tags 企业风险管理(app)
+func QueryRoleMenu(c *gin.Context) {
+	a := app.GinUtils{Gin: app.Gin{C: c}}
+	m := models.RoleMenu{}
+	a.DoBindReq(&m)
+	a.DoGetDataI(&m)
+}
+
 // QueryAccMgrBizGroupSet
 // @Summary 查询业务类型分组(账户管理/账户设置)
 // @Produce json

+ 123 - 1
docs/docs.go

@@ -2797,6 +2797,48 @@ var doc = `{
                 }
             }
         },
+        "/Ermcp/QueryRoleMenu": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "企业风险管理(app)"
+                ],
+                "summary": "查询角色菜单和权限",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "登录ID",
+                        "name": "loginid",
+                        "in": "query",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/models.RoleMenu"
+                            }
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/Ermcp/QueryTradeConfigTMP": {
             "get": {
                 "security": [
@@ -22635,6 +22677,10 @@ var doc = `{
                 "loginid"
             ],
             "properties": {
+                "accountname": {
+                    "description": "账户名称",
+                    "type": "string"
+                },
                 "canoutin": {
                     "description": "是否可出入金 - 0:不可 1:可",
                     "type": "integer"
@@ -22684,25 +22730,41 @@ var doc = `{
                     "type": "integer"
                 },
                 "loginstatus": {
-                    "description": "登录账号状态 1:正常 2:冻结 3:无效",
+                    "description": "登录账号状态 1:正常 2:冻结(停用) 3:无效(注销)",
                     "type": "integer"
                 },
                 "loginusertype": {
                     "description": "登录账号类型 - 1:投资者 2:机构交易员",
                     "type": "integer"
                 },
+                "mobile": {
+                    "description": "手机号码(加密存储)",
+                    "type": "string"
+                },
                 "modifierid": {
                     "description": "修改人",
                     "type": "integer"
                 },
+                "modifysrc": {
+                    "description": "审核来源 - 1:管理端 2:终端",
+                    "type": "integer"
+                },
                 "modifytime": {
                     "description": "修改时间",
                     "type": "string"
                 },
+                "password": {
+                    "description": "登陆密码",
+                    "type": "string"
+                },
                 "pwdwrongcount": {
                     "description": "密码错误次数",
                     "type": "integer"
                 },
+                "relateduserid": {
+                    "description": "关联用户ID(机构)",
+                    "type": "integer"
+                },
                 "taaccountrighttype": {
                     "description": "资金账号权限类型 - 1:不选默认为所有权限 2:不选默认为无权限",
                     "type": "integer"
@@ -27306,6 +27368,66 @@ var doc = `{
                 }
             }
         },
+        "models.RoleMenu": {
+            "type": "object",
+            "properties": {
+                "hasright": {
+                    "description": "是否有权限 0-没有权限 1-有权限",
+                    "type": "integer"
+                },
+                "iconame": {
+                    "description": "菜单图标",
+                    "type": "string"
+                },
+                "menutype": {
+                    "description": "菜单类型 1:管理端 2:交易端 3:终端(企业云平台)",
+                    "type": "integer"
+                },
+                "parentcode": {
+                    "description": "上级资源代码",
+                    "type": "string"
+                },
+                "remark": {
+                    "description": "菜单备注",
+                    "type": "string"
+                },
+                "resourcecode": {
+                    "description": "菜单代码",
+                    "type": "string"
+                },
+                "resourcelevel": {
+                    "description": "级别",
+                    "type": "integer"
+                },
+                "resourcename": {
+                    "description": "菜单名称",
+                    "type": "string"
+                },
+                "roleid": {
+                    "description": "角色id",
+                    "type": "integer"
+                },
+                "sort": {
+                    "description": "排序",
+                    "type": "integer"
+                },
+                "subMenu": {
+                    "description": "子级菜单(结构同上层一样, swag解析不出来)",
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/models.RoleMenu"
+                    }
+                },
+                "url": {
+                    "description": "URL",
+                    "type": "string"
+                },
+                "userid": {
+                    "description": "用户id",
+                    "type": "integer"
+                }
+            }
+        },
         "models.SearchGoods": {
             "type": "object",
             "required": [

+ 123 - 1
docs/swagger.json

@@ -2781,6 +2781,48 @@
                 }
             }
         },
+        "/Ermcp/QueryRoleMenu": {
+            "get": {
+                "security": [
+                    {
+                        "ApiKeyAuth": []
+                    }
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "企业风险管理(app)"
+                ],
+                "summary": "查询角色菜单和权限",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "登录ID",
+                        "name": "loginid",
+                        "in": "query",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/models.RoleMenu"
+                            }
+                        }
+                    },
+                    "500": {
+                        "description": "Internal Server Error",
+                        "schema": {
+                            "$ref": "#/definitions/app.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/Ermcp/QueryTradeConfigTMP": {
             "get": {
                 "security": [
@@ -22619,6 +22661,10 @@
                 "loginid"
             ],
             "properties": {
+                "accountname": {
+                    "description": "账户名称",
+                    "type": "string"
+                },
                 "canoutin": {
                     "description": "是否可出入金 - 0:不可 1:可",
                     "type": "integer"
@@ -22668,25 +22714,41 @@
                     "type": "integer"
                 },
                 "loginstatus": {
-                    "description": "登录账号状态 1:正常 2:冻结 3:无效",
+                    "description": "登录账号状态 1:正常 2:冻结(停用) 3:无效(注销)",
                     "type": "integer"
                 },
                 "loginusertype": {
                     "description": "登录账号类型 - 1:投资者 2:机构交易员",
                     "type": "integer"
                 },
+                "mobile": {
+                    "description": "手机号码(加密存储)",
+                    "type": "string"
+                },
                 "modifierid": {
                     "description": "修改人",
                     "type": "integer"
                 },
+                "modifysrc": {
+                    "description": "审核来源 - 1:管理端 2:终端",
+                    "type": "integer"
+                },
                 "modifytime": {
                     "description": "修改时间",
                     "type": "string"
                 },
+                "password": {
+                    "description": "登陆密码",
+                    "type": "string"
+                },
                 "pwdwrongcount": {
                     "description": "密码错误次数",
                     "type": "integer"
                 },
+                "relateduserid": {
+                    "description": "关联用户ID(机构)",
+                    "type": "integer"
+                },
                 "taaccountrighttype": {
                     "description": "资金账号权限类型 - 1:不选默认为所有权限 2:不选默认为无权限",
                     "type": "integer"
@@ -27290,6 +27352,66 @@
                 }
             }
         },
+        "models.RoleMenu": {
+            "type": "object",
+            "properties": {
+                "hasright": {
+                    "description": "是否有权限 0-没有权限 1-有权限",
+                    "type": "integer"
+                },
+                "iconame": {
+                    "description": "菜单图标",
+                    "type": "string"
+                },
+                "menutype": {
+                    "description": "菜单类型 1:管理端 2:交易端 3:终端(企业云平台)",
+                    "type": "integer"
+                },
+                "parentcode": {
+                    "description": "上级资源代码",
+                    "type": "string"
+                },
+                "remark": {
+                    "description": "菜单备注",
+                    "type": "string"
+                },
+                "resourcecode": {
+                    "description": "菜单代码",
+                    "type": "string"
+                },
+                "resourcelevel": {
+                    "description": "级别",
+                    "type": "integer"
+                },
+                "resourcename": {
+                    "description": "菜单名称",
+                    "type": "string"
+                },
+                "roleid": {
+                    "description": "角色id",
+                    "type": "integer"
+                },
+                "sort": {
+                    "description": "排序",
+                    "type": "integer"
+                },
+                "subMenu": {
+                    "description": "子级菜单(结构同上层一样, swag解析不出来)",
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/models.RoleMenu"
+                    }
+                },
+                "url": {
+                    "description": "URL",
+                    "type": "string"
+                },
+                "userid": {
+                    "description": "用户id",
+                    "type": "integer"
+                }
+            }
+        },
         "models.SearchGoods": {
             "type": "object",
             "required": [

+ 86 - 1
docs/swagger.yaml

@@ -8778,6 +8778,9 @@ definitions:
     type: object
   models.Loginaccount:
     properties:
+      accountname:
+        description: 账户名称
+        type: string
       canoutin:
         description: 是否可出入金 - 0:不可 1:可
         type: integer
@@ -8816,20 +8819,32 @@ definitions:
         description: 最新登录端口
         type: integer
       loginstatus:
-        description: 登录账号状态 1:正常 2:冻结 3:无效
+        description: 登录账号状态 1:正常 2:冻结(停用) 3:无效(注销)
         type: integer
       loginusertype:
         description: 登录账号类型 - 1:投资者 2:机构交易员
         type: integer
+      mobile:
+        description: 手机号码(加密存储)
+        type: string
       modifierid:
         description: 修改人
         type: integer
+      modifysrc:
+        description: 审核来源 - 1:管理端 2:终端
+        type: integer
       modifytime:
         description: 修改时间
         type: string
+      password:
+        description: 登陆密码
+        type: string
       pwdwrongcount:
         description: 密码错误次数
         type: integer
+      relateduserid:
+        description: 关联用户ID(机构)
+        type: integer
       taaccountrighttype:
         description: 资金账号权限类型 - 1:不选默认为所有权限 2:不选默认为无权限
         type: integer
@@ -12267,6 +12282,50 @@ definitions:
         description: 交易模式
         type: integer
     type: object
+  models.RoleMenu:
+    properties:
+      hasright:
+        description: 是否有权限 0-没有权限 1-有权限
+        type: integer
+      iconame:
+        description: 菜单图标
+        type: string
+      menutype:
+        description: 菜单类型 1:管理端 2:交易端 3:终端(企业云平台)
+        type: integer
+      parentcode:
+        description: 上级资源代码
+        type: string
+      remark:
+        description: 菜单备注
+        type: string
+      resourcecode:
+        description: 菜单代码
+        type: string
+      resourcelevel:
+        description: 级别
+        type: integer
+      resourcename:
+        description: 菜单名称
+        type: string
+      roleid:
+        description: 角色id
+        type: integer
+      sort:
+        description: 排序
+        type: integer
+      subMenu:
+        description: 子级菜单(结构同上层一样, swag解析不出来)
+        items:
+          $ref: '#/definitions/models.RoleMenu'
+        type: array
+      url:
+        description: URL
+        type: string
+      userid:
+        description: 用户id
+        type: integer
+    type: object
   models.SearchGoods:
     properties:
       goodscode:
@@ -16853,6 +16912,32 @@ paths:
       summary: 查询实时敞口期货头寸明细(菜单:实时敞口/期货明细)
       tags:
       - 企业风险管理(app)
+  /Ermcp/QueryRoleMenu:
+    get:
+      parameters:
+      - description: 登录ID
+        in: query
+        name: loginid
+        required: true
+        type: integer
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            items:
+              $ref: '#/definitions/models.RoleMenu'
+            type: array
+        "500":
+          description: Internal Server Error
+          schema:
+            $ref: '#/definitions/app.Response'
+      security:
+      - ApiKeyAuth: []
+      summary: 查询角色菜单和权限
+      tags:
+      - 企业风险管理(app)
   /Ermcp/QueryTradeConfigTMP:
     get:
       parameters:

+ 3 - 3
models/ermcp3Report.go

@@ -687,7 +687,7 @@ type Ermcp3ExposureContractDetail struct {
 }
 
 func (r *Ermcp3ExposureContractDetail) calc() {
-	r.CurQty = r.QTY
+	r.CurQty = r.PRICEDQTY
 	r.DiffQty = r.QTY * r.CONVERTRATIO
 	r.DiffHedgeQty = r.TODAYPRICEDQTY * r.CONVERTRATIO * r.CONVERTFACTOR
 	if r.BIZTYPE == 1 {
@@ -2721,8 +2721,8 @@ type Ermcp3ExposureParamChLog struct {
 	AFTERVALUE       float64 `json:"aftervalue"  xorm:"AFTERVALUE"`             // 应套保\套利量变更后(调整后应套保总量)
 	LOGDATETIME      string  `json:"logdatetime"  xorm:"LOGDATETIME"`           // 流水日期
 	TRADEDATE        string  `json:"tradedate"  xorm:"TRADEDATE"`               // 交易日(yyyyMMdd)
-	MIDDLEGOODSCODE  string  `json:"middlegoodscode"`                           // 套保品种代码
-	MIDDLEGOODSNAME  string  `json:"middlegoodsname"`                           // 套保品种名称
+	MIDDLEGOODSCODE  string  `json:"middlegoodscode"  xorm:"'MIDDLEGOODSCODE'"` // 套保品种代码
+	MIDDLEGOODSNAME  string  `json:"middlegoodsname"  xorm:"'MIDDLEGOODSNAME'"` // 套保品种名称
 
 	DiffValue float64 `json:"diffvalue"` // 应套保总量变化量
 	BeginDate string  `json:"begindate"` // 开始交易日

+ 112 - 0
models/ermcpAccMgr.go

@@ -915,3 +915,115 @@ func (r *ErmcpLoginTaAccount) GetData() ([]ErmcpLoginTaAccount, error) {
 	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
 	return sData, err
 }
+
+// RoleMenu 角色菜单
+type RoleMenu struct {
+	USERID        int64  `json:"userid"  xorm:"'USERID'"`               // 用户id
+	ROLEID        int32  `json:"roleid"  xorm:"'ROLEID'"`               // 角色id
+	RESOURCECODE  string `json:"resourcecode"  xorm:"'RESOURCECODE'"`   // 菜单代码
+	RESOURCENAME  string `json:"resourcename"  xorm:"'RESOURCENAME'"`   // 菜单名称
+	RESOURCELEVEL int32  `json:"resourcelevel"  xorm:"'RESOURCELEVEL'"` // 级别
+	MENUTYPE      int32  `json:"menutype"  xorm:"'MENUTYPE'"`           // 菜单类型 1:管理端 2:交易端 3:终端(企业云平台)
+	PARENTCODE    string `json:"parentcode"  xorm:"'PARENTCODE'"`       // 上级资源代码
+	URL           string `json:"url"  xorm:"'URL'"`                     // URL
+	SORT          int32  `json:"sort"  xorm:"'SORT'"`                   // 排序
+	ICONAME       string `json:"iconame"  xorm:"'ICONAME'"`             // 菜单图标
+	REMARK        string `json:"remark"  xorm:"'REMARK'"`               // 菜单备注
+	HASRIGHT      int32  `json:"hasright"  xorm:"'HASRIGHT'"`           // 是否有权限 0-没有权限 1-有权限
+
+	LOGINID int64 `json:"-" form:"loginid" binding:"required"` // 登录id
+
+	SubMenu []RoleMenu // 子级菜单(结构同上层一样, swag解析不出来)
+}
+
+func (r *RoleMenu) calc() {
+
+}
+
+func (r *RoleMenu) buildSql() string {
+	var sqlId utils.SQLVal = "with tmp as" +
+		" (select *" +
+		"    from (select count(*) over() cnt," +
+		"                 t.userid," +
+		"                 case" +
+		"                   when t.clientroleid is not null then" +
+		"                    t.clientroleid" +
+		"                   else" +
+		"                    decode(a.roletype, 20, 0, a.roletype)" +
+		"                 end roleid," +
+		"                 t.accountname loginName," +
+		"                 t.logincode," +
+		"                 u.accountname userName," +
+		"                 u.usertype," +
+		"                 u.rootuserid" +
+		"            from loginaccount t" +
+		"            left join useraccount u" +
+		"              on t.userid = u.userid" +
+		"            left join arearole a" +
+		"              on t.userid = a.userid" +
+		"           where 1 = 1" +
+		"             and t.loginid = %v) k" +
+		"   where (cnt > 1 and roleid != 0)" +
+		"      or cnt = 1)," +
+		"tmpMenu as" +
+		" (select distinct resourcecode" +
+		"    from ermcp_memberfuncmenu m" +
+		"   inner join tmp" +
+		"      on m.userid = tmp.rootuserid" +
+		"     and m.roleid = tmp.roleid)" +
+		"select f.resourcecode," +
+		"       f.resourcename," +
+		"       f.resourcelevel," +
+		"       f.menutype," +
+		"       f.parentcode," +
+		"       f.url," +
+		"       f.sort," +
+		"       f.iconame," +
+		"       f.remark," +
+		"       case" +
+		"         when f.resourcecode in (select resourcecode from tmpMenu) then" +
+		"          1" +
+		"         else" +
+		"          0" +
+		"       end hasRight" +
+		"  from funcmenulist f" +
+		" where f.menutype = 3" +
+		"   and f.resourcelevel <> 0" +
+		" order by f.resourcelevel, f.sort"
+	sqlId.FormatParam(r.LOGINID)
+	return sqlId.String()
+}
+
+func (r *RoleMenu) addSub(lst []RoleMenu) {
+	for i := range lst {
+		if r.RESOURCECODE == lst[i].PARENTCODE {
+			v := lst[i]
+			v.SubMenu = make([]RoleMenu, 0)
+			v.addSub(lst)
+			r.SubMenu = append(r.SubMenu, v)
+		}
+	}
+}
+
+// GetDataEx 获取角色菜单
+func (r *RoleMenu) GetDataEx() (interface{}, error) {
+	sData := make([]RoleMenu, 0)
+	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
+	for i := range sData {
+		sData[i].calc()
+	}
+
+	// 构建层级关系
+	sData2 := make([]RoleMenu, 0)
+	for _, v := range sData {
+		if v.RESOURCELEVEL == 1 {
+			v.SubMenu = make([]RoleMenu, 0)
+			sData2 = append(sData2, v)
+		}
+	}
+
+	for i := range sData2 {
+		sData2[i].addSub(sData)
+	}
+	return sData2, err
+}

+ 1 - 0
routers/router.go

@@ -373,6 +373,7 @@ func InitRouter() *gin.Engine {
 		ermcpR.GET("/QueryAccMgrMainAccountInfo", ermcp.QueryAccMgrMainAccountInfo)
 		ermcpR.GET("/QueryAccMgrRole", ermcp.QueryAccMgrRole)
 		ermcpR.GET("/QueryAccMgrRoleMenu", ermcp.QueryAccMgrRoleMenu)
+		ermcpR.GET("/QueryRoleMenu", ermcp.QueryRoleMenu)
 		ermcpR.GET("/QueryAccMgrBizGroupSet", ermcp.QueryAccMgrBizGroupSet)
 		ermcpR.GET("/QueryAccMgrTaAccountInfo", ermcp.QueryAccMgrTaAccountInfo)
 		ermcpR.GET("/QuerySpotGoodsPrice", ermcp.QuerySpotGoodsPrice)