===》分析领导的实现过程。心得笔记。
#业务场景:不同企业下有各自的角色。角色下有权限(角色:权限=多对多,有中间表)和用户(角色:用户=一对多,用户表有个角色id)
#表结构:看文件。
#需求:登录用户所属企业id,
#1
SELECT a.PB_ROL_code,a.PB_ROL_name, b.PB_UCT_nickname,COUNT(b.PB_UCT_no) -- , c.PB_PER_code,COUNT(c.PB_PER_code)
from pb_combaseinfo m
INNER JOIN pb_role a ON m.PB_CMB_comno = a.PB_ROL_ownedcomno AND a.PB_ROL_ownedcomno = 8000002
LEFT JOIN pb_usract b ON b.PB_UCT_roleno = a.PB_ROL_code AND b.PB_UCT_ownedcom = a.PB_ROL_ownedcomno GROUP BY a.PB_ROL_code
#1 V2
SELECT a.PB_ROL_code,a.PB_ROL_name, b.PB_UCT_nickname,COUNT(b.PB_UCT_no) -- , c.PB_PER_code,COUNT(c.PB_PER_code)
from pb_combaseinfo m
INNER JOIN pb_role a ON m.PB_CMB_comno = a.PB_ROL_ownedcomno
LEFT JOIN pb_usract b ON b.PB_UCT_roleno = a.PB_ROL_code AND b.PB_UCT_ownedcom = a.PB_ROL_ownedcomno GROUP BY a.PB_ROL_code
-- WHERE a.PB_ROL_ownedcomno = 8000002 #语法报错。
WHERE m.PB_CMB_comno = 8000002 #语法报错。
#1 V3
SELECT a.PB_ROL_code,a.PB_ROL_name, b.PB_UCT_nickname,COUNT(b.PB_UCT_no) -- , c.PB_PER_code,COUNT(c.PB_PER_code)
from pb_combaseinfo m
INNER JOIN pb_role a ON m.PB_CMB_comno = a.PB_ROL_ownedcomno
LEFT JOIN pb_usract b ON b.PB_UCT_roleno = a.PB_ROL_code AND b.PB_UCT_ownedcom = a.PB_ROL_ownedcomno
WHERE a.PB_ROL_ownedcomno = 8000002 # 或 WHERE m.PB_CMB_comno = 8000002 都一样。
-- 只要条件加对了,就行!!!(条件的位置调整+SQL基础语法)【where提取到最后(不放在查询角色后面),group by 必须要放到where后面。】
GROUP BY a.PB_ROL_code
#1 V3 》基础上 添加 统计 权限个数。ok
SELECT a.PB_ROL_code,a.PB_ROL_name, b.PB_UCT_nickname,COUNT( DISTINCT b.PB_UCT_no), c.PB_PER_code,COUNT(DISTINCT c.PB_PER_code)
from pb_combaseinfo m
INNER JOIN pb_role a ON m.PB_CMB_comno = a.PB_ROL_ownedcomno
LEFT JOIN pb_usract b ON b.PB_UCT_roleno = a.PB_ROL_code AND b.PB_UCT_ownedcom = a.PB_ROL_ownedcomno
LEFT JOIN pb_perole c ON c.PB_ROL_code = a.PB_ROL_code #1 V3 基础上 添加 统计 权限。
WHERE a.PB_ROL_ownedcomno = 8000002 # 或 WHERE m.PB_CMB_comno = 8000002 都一样。
-- 只要条件加对了,就行!!!(条件的位置调整+SQL基础语法)【where提取到最后(不放在查询角色后面),group by 必须要放到where后面。】
-- 【再关联 角色权限表后,统计的用户个数,也变化了!》》》使用distinct 约束后恢复原样。
-- 》》》###要写出来这个约束,###必须很清楚自己现在查出来的用户个数的数据是如何出来的:
-- 统计用户个数有几个,相当于后面可以扩展出多少条用户记录。所以因为之前统计的用户个数比较少,可以猜到:用户记录一定是重复了!】
GROUP BY a.PB_ROL_code
#2
SELECT a.PB_ROL_code,a.PB_ROL_name
-- , b.PB_UCT_nickname,COUNT(b.PB_UCT_no)
, c.PB_PER_code,COUNT(c.PB_PER_code)
from pb_combaseinfo m
INNER JOIN pb_role a ON m.PB_CMB_comno = a.PB_ROL_ownedcomno AND a.PB_ROL_ownedcomno = 8000002
-- LEFT JOIN pb_usract b ON b.PB_UCT_roleno = a.PB_ROL_code AND b.PB_UCT_ownedcom = a.PB_ROL_ownedcomno GROUP BY a.PB_ROL_code
LEFT JOIN pb_perole c ON c.PB_ROL_code = a.PB_ROL_code GROUP BY c.PB_ROL_code
#3 【简单的多个join放到一起,不行。】
SELECT a.PB_ROL_code,a.PB_ROL_name
, b.PB_UCT_nickname,COUNT(b.PB_UCT_no)
, c.PB_PER_code,COUNT(c.PB_PER_code)
from pb_combaseinfo m
INNER JOIN pb_role a ON m.PB_CMB_comno = a.PB_ROL_ownedcomno AND a.PB_ROL_ownedcomno = 8000002
LEFT JOIN pb_usract b ON b.PB_UCT_roleno = a.PB_ROL_code AND b.PB_UCT_ownedcom = a.PB_ROL_ownedcomno GROUP BY a.PB_ROL_code
-- LEFT JOIN pb_perole c ON c.PB_ROL_code = a.PB_ROL_code GROUP BY c.PB_ROL_code
LEFT JOIN pb_perole c ON c.PB_ROL_code = b.PB_ROL_code
#answer 领导
SELECT
c.PB_ROL_code as roleID
,c.PB_ROL_name as roleName
,c.PB_ROL_desc as roleDesc
,count(DISTINCT a.PB_UCT_no) AS peoCount
,count(DISTINCT d.PB_PER_code) as perCount
FROM
pb_combaseinfo b
LEFT JOIN pb_role c ON c.PB_ROL_ownedcomno = b.PB_CMB_comno
LEFT JOIN pb_usract a ON a.PB_UCT_roleno = c.PB_ROL_code AND a.PB_UCT_ownedcom = b.PB_CMB_comno
LEFT JOIN pb_perole d ON d.PB_ROL_code = c.PB_ROL_code AND a.PB_UCT_roleno = d.PB_ROL_code
WHERE b.PB_CMB_comno = 8000002 #{enterpriseId,jdbcType=VARCHAR}
GROUP BY
c.PB_ROL_name
===》语雀接口文档。
查看企业角色
请求方式
GET
调用的url
modules/intersert/action/getRolesForEnterprise.htm |
传参
无。(已登录用户才能调用此接口,登录用户从Redis取查询条件:企业编号:Redis key:"ENTERUUID")
逻辑
-
判断Redis里“是否是管理员”key的值,判断登录用户是不是管理员。是管理员才继续查询。不是返回错误提示“不是管理员”。
-
从Redis取查询条件:企业编号:Redis key:"ENTERUUID"。(因为Redis的key是token,首先要获取token。app登录请求有参数token,web登录需要从session里取token。逻辑封装到了BaseAction的getToken方法。)
-
根据企业编号查询:当前登录用户所在的企业下所有的角色列表。
-
同时查询出每个角色拥有的权限个数、每个角色对应的当前企业的用户个数。
返回值
已经存在数据
,返回json:
[ {
"roleID" : 0,
"roleName" : "管理员",
"roleDesc" : null,
"peoCount" : 10001,
"perCount" : 1
}, {
"roleID" : 0,
"roleName" : "经办员",
"roleDesc" : null,
"peoCount" : 10001,
"perCount" : 1
} ]
其他错误
{
"msg": "PB0000-系统发生错误",
"code": 400
}