From d0482904fe2ae2f49b3624acb0dc5e928f5d5144 Mon Sep 17 00:00:00 2001 From: yangkunan Date: Tue, 19 Nov 2024 11:33:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=8F=E6=9C=8D=E6=AF=94=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=8C=87=E6=A0=87+=E6=98=8E=E7=BB=86=E8=A1=A8=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/codeStyles/Project.xml | 10 + .../xiazuan/2_operation/住服比异常项目.sql | 149 ++++++- .../xiazuan/5_manpower/2_员工满编率明细.sql | 29 ++ .../xiazuan/5_manpower/3_员工离职率明细.sql | 13 + .../5_manpower/4_人力行政成本费率明细.sql | 34 +- .../xiazuan/5_manpower/5_在职人员明细.sql | 408 +++++++++++------- 6 files changed, 487 insertions(+), 156 deletions(-) create mode 100644 .idea/codeStyles/Project.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..e285616 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/finereport/xiazuan/2_operation/住服比异常项目.sql b/finereport/xiazuan/2_operation/住服比异常项目.sql index f6087bf..2db5158 100644 --- a/finereport/xiazuan/2_operation/住服比异常项目.sql +++ b/finereport/xiazuan/2_operation/住服比异常项目.sql @@ -238,4 +238,151 @@ group by a.comm_name -${if(len(p_area) > 0,"","*/")} \ No newline at end of file +${if(len(p_area) > 0,"","*/")} + + + + +-- ====================================== +-- 住服比异常项目数 +-- ====================================== + + + + + +with one_to_many AS( +SELECT +a.username AS username -- 用户名 +,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 +FROM ods_one_to_many_perm a +JOIN mysql.help_topic b +on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) +WHERE a.username = '${fine_username}' +),hr_date AS +( + + +SELECT + B.organ_code AS organ_code +,B.organ_name AS organ_name +,B.comm_id AS comm_id +,B.comm_name AS comm_name +,SUM(A.bzs) AS bzs +,SUM(zzs) AS zzs -- 在职人数 +FROM +( + SELECT + A1.pq AS pq + ,A1.xm AS xm + ,SUM(A1.zzs) AS zzs + ,sum(A1.bzs) AS bzs + FROM + ( + SELECT + pq -- 片区 + ,ny + ,xm + ,SUM(zzs) AS zzs -- 在职数 + ,SUM(bzs) AS bzs -- 编制数 + FROM ods_hr_view_mbl_d + WHERE pq not in('89','267') -- 排除了佳美、悦汇 + GROUP BY pq,ny,xm + -- 没有项目的历史数据 + -- UNION ALL + -- SELECT + -- organ_code as pq + -- ,concat(left(ym,4),'-',right(ym,2)) as ny + -- ,'' AS xm + -- ,SUM(zzs) AS zzs + -- ,SUM(bzs) AS bzs + -- FROM ods_hr_history_bz_num + -- WHERE 1 = 1 + -- GROUP BY ym,organ_code + )A1 + WHERE A1.ny = '${p_ym}' + group by A1.pq,A1.xm +)A +RIGHT JOIN +( + SELECT + organ_code -- erp片区编码 + ,organ_name -- erp片区名称 + ,hr_organ_id -- hr片区编码 + ,hr_organ_name -- hr片区名称 + ,hr_comm_id -- hr项目id + ,hr_comm_name -- hr项目名称 + ,comm_id + ,comm_name + FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 + GROUP BY + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + ,comm_id + ,comm_name +)B +ON A.pq = B.hr_organ_id +AND A.xm = B.hr_comm_id +group by B.organ_code, B.organ_name, B.comm_id, B.comm_name + +) +SELECT +count(1) AS CNT +FROM +( +select + a.comm_name as p_area -- 片区/项目 + -- organ_name -- 片区名称 + -- ,comm_name -- 项目名称 + ,sum(room_num) as room_num -- 房间总数 【总户数】 + ,sum(check_ins_num) as check_ins_num -- 入住数 【入住户数】 + ,case when sum(check_ins_num) = 0 + then 0 + else sum(check_ins_num) / sum(room_num) + end as occupancy_rate -- 入住率 + ,SUM(IFNULL(b.zzs,0)) AS zzs -- 在职数 + ,CASE WHEN sum(check_ins_num) = 0 + THEN 0 ELSE SUM(IFNULL(b.zzs,0)) / sum(check_ins_num) END AS zfb -- 住服比 + ,CASE WHEN SUM(b.bzs) = 0 THEN 0 ELSE SUM(b.zzs) / SUM(b.bzs) END AS full_rate -- 满编率 +from +( + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,SUM(room_num) AS room_num + ,SUM(check_ins_num) AS check_ins_num + FROM dws_operation_room_park_info_d + WHERE 1 = 1 +-- ${if(left(fine_role,2)=="项目","and comm_name = '"+GETUSERDEPARTMENTS(3)+"'","")} +AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}') + ELSE ${if(left(fine_role,2)=="项目","comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END + + group by + organ_code + ,organ_name + ,comm_id + ,comm_name +) a +left join hr_date b +on a.organ_code = b.organ_code +and a.comm_id = b.comm_id +where 1=1 +${IF(LEN(p_area)!=0," and a.organ_code IN ('"+JOINARRAY(p_area,"','")+"')","")} +-- ${if(left(fine_role,2)=="项目","and comm_name = '"+GETUSERDEPARTMENTS(3)+"'","")} +AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN a.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}') + ELSE ${if(left(fine_role,2)=="项目","a.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END + +group by +a.comm_name +)T +where T.zfb > 0.1 + diff --git a/finereport/xiazuan/5_manpower/2_员工满编率明细.sql b/finereport/xiazuan/5_manpower/2_员工满编率明细.sql index efd0f42..21dc434 100644 --- a/finereport/xiazuan/5_manpower/2_员工满编率明细.sql +++ b/finereport/xiazuan/5_manpower/2_员工满编率明细.sql @@ -83,6 +83,15 @@ ${if(len(p_area)=0,"", "*/")} -- 项目 ${if(len(p_area)>0,"", "/*")} +with one_to_many AS( +SELECT +a.username AS username -- 用户名 +,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 +FROM ods_one_to_many_perm a +JOIN mysql.help_topic b +on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) +WHERE a.username = '${fine_username}' +) SELECT B.hr_comm_name AS comm_organ_name -- 片区 ,SUM(IFNULL(A.bzs,0)) AS bzs -- 编制数 @@ -253,12 +262,32 @@ ON B.organ_code = C.organ_code AND B.hr_comm_id = C.comm_id WHERE 1=1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('" + p_area +"')", "")} +AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}') + ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END GROUP BY B.hr_comm_name ${if(len(p_area)>0,"", "*/")} +-- 满编率整体目标 +${if(len(p_area)=0,"", "/*")} +SELECT +full_rate_target -- 满编率目标 +FROM ods_hr_collection_target_overall +WHERE ym = '${p_ym}' +${if(len(p_area)=0,"", "*/")} + +-- 片区整体目标 +${if(len(p_area) =1,"", "/*")} +SELECT +full_rate_target -- 满编率目标 +FROM ods_hr_collection_target_organ +WHERE ym = '${p_ym}' +AND organ_code = '${p_area}' +${if(len(p_area)=1,"", "*/")} + -- ====================================== -- 编制历史数据 -- ====================================== diff --git a/finereport/xiazuan/5_manpower/3_员工离职率明细.sql b/finereport/xiazuan/5_manpower/3_员工离职率明细.sql index 5ee6c93..f5f2bc2 100644 --- a/finereport/xiazuan/5_manpower/3_员工离职率明细.sql +++ b/finereport/xiazuan/5_manpower/3_员工离职率明细.sql @@ -1,3 +1,12 @@ +with one_to_many AS( +SELECT +a.username AS username -- 用户名 +,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 +FROM ods_one_to_many_perm a +JOIN mysql.help_topic b +on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) +WHERE a.username = '${fine_username}' +) SELECT ${IF(LEN(p_area)>0,"B.hr_comm_name", "hr_organ_name")} AS hr_organ_name ,SUM(A.StartOfmonth_zzrs) AS StartOfmonth_zzrs -- 月初在职人数 @@ -170,6 +179,9 @@ RIGHT JOIN ,hr_comm_name -- hr项目名称 FROM dim_organ_mapping WHERE length(hr_comm_id) > 0 + AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}') + ELSE ${if(left(fine_role,2)=="项目","comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END GROUP BY organ_code ,organ_name @@ -191,6 +203,7 @@ ON A.pq = B.hr_organ_id and A.xm = b.hr_comm_id where 1 = 1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('" + p_area +"')", "")} + GROUP BY ${IF(LEN(p_area)>0,"B.hr_comm_name", "hr_organ_name")} ORDER BY ${IF(LEN(p_area)>0,"B.hr_comm_name", "hr_organ_name")} diff --git a/finereport/xiazuan/5_manpower/4_人力行政成本费率明细.sql b/finereport/xiazuan/5_manpower/4_人力行政成本费率明细.sql index d315f26..9b8a1ae 100644 --- a/finereport/xiazuan/5_manpower/4_人力行政成本费率明细.sql +++ b/finereport/xiazuan/5_manpower/4_人力行政成本费率明细.sql @@ -363,7 +363,15 @@ ${if(and(len(p_area)=0,p_type='行政')," -- 片区排名开始", "*/")} ${if(and(len(p_area)>0,p_type='人力'),"", "/*")} - +with one_to_many AS( +SELECT +a.username AS username -- 用户名 +,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 +FROM ods_one_to_many_perm a +JOIN mysql.help_topic b +on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) +WHERE a.username = '${fine_username}' +) SELECT A1.hr_comm_name AS organ_comm -- 片区 ,SUM(C.lc_fee_rate_target) AS year_fee_rate_target -- 人力费率年度目标值 @@ -397,6 +405,7 @@ SELECT organ_code ,organ_name ,comm_id + ,comm_name ,hr_organ_id ,hr_organ_name ,hr_comm_id @@ -407,6 +416,7 @@ SELECT organ_code ,organ_name ,comm_id + ,comm_name ,hr_organ_id ,hr_organ_name ,hr_comm_id @@ -416,6 +426,7 @@ SELECT '0000' AS organ_code -- erp片区编码 ,'' AS organ_name -- erp片区名称 ,'' AS comm_id + ,'' AS comm_name ,'153' AS hr_organ_id -- hr片区编码 ,'领悦集团总部' AS hr_organ_name -- hr片区名称 ,'153' AS hr_comm_id @@ -487,6 +498,9 @@ SELECT AND A1.hr_comm_id = D.comm_id where 1 = 1 ${IF(LEN(p_area)>0," AND A1.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN A1.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}') + ELSE ${if(left(fine_role,2)=="项目","A1.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END GROUP BY A1.hr_comm_name @@ -494,9 +508,15 @@ SELECT ${if(and(len(p_area)>0,p_type='行政'),"", "/*")} - - - +with one_to_many AS( +SELECT +a.username AS username -- 用户名 +,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 +FROM ods_one_to_many_perm a +JOIN mysql.help_topic b +on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) +WHERE a.username = '${fine_username}' +) SELECT A1.hr_comm_name AS organ_comm -- 片区 ,SUM(C.ac_fee_rate_target) AS year_fee_rate_target -- 人力费率年度目标值 @@ -530,6 +550,7 @@ SELECT organ_code ,organ_name ,comm_id + ,comm_name ,hr_organ_id ,hr_organ_name ,hr_comm_id @@ -540,6 +561,7 @@ SELECT organ_code ,organ_name ,comm_id + ,comm_name ,hr_organ_id ,hr_organ_name ,hr_comm_id @@ -549,6 +571,7 @@ SELECT '0000' AS organ_code -- erp片区编码 ,'' AS organ_name -- erp片区名称 ,'' AS comm_id + ,'' AS comm_name ,'153' AS hr_organ_id -- hr片区编码 ,'领悦集团总部' AS hr_organ_name -- hr片区名称 ,'153' AS hr_comm_id @@ -620,6 +643,9 @@ SELECT AND A1.hr_comm_id = D.comm_id where 1 = 1 ${IF(LEN(p_area)>0," AND A1.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN A1.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}') + ELSE ${if(left(fine_role,2)=="项目","A1.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END GROUP BY A1.hr_comm_name diff --git a/finereport/xiazuan/5_manpower/5_在职人员明细.sql b/finereport/xiazuan/5_manpower/5_在职人员明细.sql index 121eff8..0a13177 100644 --- a/finereport/xiazuan/5_manpower/5_在职人员明细.sql +++ b/finereport/xiazuan/5_manpower/5_在职人员明细.sql @@ -45,6 +45,15 @@ GROUP BY nld -- 年龄分布 -- 年龄<30岁;30岁≤年龄<40岁;40岁≤年龄<50岁;50岁≤年龄<60岁;60岁≤年龄<65岁;年龄≥65岁; +with one_to_many AS( +SELECT +a.username AS username -- 用户名 +,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 +FROM ods_one_to_many_perm a +JOIN mysql.help_topic b +on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) +WHERE a.username = '${fine_username}' +) SELECT CASE WHEN A.nl < 30.00 THEN '年龄<30岁' WHEN A.nl >= 30.00 AND A.nl < 40.00 THEN '30岁≤年龄<40岁' @@ -66,36 +75,44 @@ FROM )A LEFT JOIN ( - SELECT - organ_code -- erp片区编码 - ,organ_name -- erp片区名称 - ,hr_organ_id -- hr片区编码 - ,hr_organ_name -- hr片区名称 - ,hr_comm_id -- hr项目id - ,hr_comm_name -- hr项目名称 - FROM dim_organ_mapping - WHERE length(hr_comm_id) > 0 - GROUP BY - organ_code - ,organ_name - ,hr_organ_id - ,hr_organ_name - ,hr_comm_id - ,hr_comm_name - UNION ALL - SELECT - '0000' AS organ_code -- erp片区编码 - ,'' AS organ_name -- erp片区名称 - ,'153' AS hr_organ_id -- hr片区编码 - ,'领悦集团总部' AS hr_organ_name -- hr片区名称 - ,'153' AS hr_comm_id -- hr项目id - ,'领悦集团总部' AS hr_comm_name -- hr项目名称 - FROM dual + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 + GROUP BY + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'' AS comm_id + ,'' AS comm_name + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + ,'153' AS hr_comm_id + ,'领悦集团总部' AS hr_comm_name )B ON A.pq = B.hr_organ_id and A.xm = b.hr_comm_id where 1 = 1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} + AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}') + ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END GROUP BY CASE WHEN nl < 30.00 THEN '年龄<30岁' WHEN nl >= 30.00 AND nl < 40.00 THEN '30岁≤年龄<40岁' @@ -149,7 +166,15 @@ where 1 = 1 GROUP BY sld -- 司龄<3个月内;3个月≤司龄<1年;1年≤司龄<3年;3年≤司龄<5年;5年≤司龄<10年;10年≤司龄<15年;司龄≥15年; - +with one_to_many AS( +SELECT +a.username AS username -- 用户名 +,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 +FROM ods_one_to_many_perm a +JOIN mysql.help_topic b +on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) +WHERE a.username = '${fine_username}' +) SELECT CASE WHEN A.sl < 0.30 THEN '司龄<3个月内' WHEN A.sl >= 0.30 AND A.sl < 1.00 THEN '3个月≤司龄<1年' @@ -173,35 +198,44 @@ FROM LEFT JOIN ( SELECT - organ_code -- erp片区编码 - ,organ_name -- erp片区名称 - ,hr_organ_id -- hr片区编码 - ,hr_organ_name -- hr片区名称 - ,hr_comm_id -- hr项目id - ,hr_comm_name -- hr项目名称 - FROM dim_organ_mapping - WHERE length(hr_comm_id) > 0 - GROUP BY - organ_code - ,organ_name - ,hr_organ_id - ,hr_organ_name - ,hr_comm_id - ,hr_comm_name - UNION ALL - SELECT - '0000' AS organ_code -- erp片区编码 - ,'' AS organ_name -- erp片区名称 - ,'153' AS hr_organ_id -- hr片区编码 - ,'领悦集团总部' AS hr_organ_name -- hr片区名称 - ,'153' AS hr_comm_id -- hr项目id - ,'领悦集团总部' AS hr_comm_name -- hr项目名称 - FROM dual + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 + GROUP BY + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'' AS comm_id + ,'' AS comm_name + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + ,'153' AS hr_comm_id + ,'领悦集团总部' AS hr_comm_name )B ON A.pq = B.hr_organ_id and A.xm = b.hr_comm_id where 1 = 1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} + AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}') + ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END + GROUP BY CASE WHEN A.sl < 0.30 THEN '司龄<3个月内' WHEN A.sl >= 0.30 AND A.sl < 1.00 THEN '3个月≤司龄<1年' @@ -256,6 +290,16 @@ where 1 = 1 GROUP BY xl + +with one_to_many AS( +SELECT +a.username AS username -- 用户名 +,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 +FROM ods_one_to_many_perm a +JOIN mysql.help_topic b +on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) +WHERE a.username = '${fine_username}' +) SELECT A.xlmc ,count(1) AS sl @@ -271,36 +315,45 @@ FROM )A LEFT JOIN ( - SELECT - organ_code -- erp片区编码 - ,organ_name -- erp片区名称 - ,hr_organ_id -- hr片区编码 - ,hr_organ_name -- hr片区名称 - ,hr_comm_id -- hr项目id - ,hr_comm_name -- hr项目名称 - FROM dim_organ_mapping - WHERE length(hr_comm_id) > 0 - GROUP BY - organ_code - ,organ_name - ,hr_organ_id - ,hr_organ_name - ,hr_comm_id - ,hr_comm_name - UNION ALL - SELECT - '0000' AS organ_code -- erp片区编码 - ,'' AS organ_name -- erp片区名称 - ,'153' AS hr_organ_id -- hr片区编码 - ,'领悦集团总部' AS hr_organ_name -- hr片区名称 - ,'153' AS hr_comm_id -- hr项目id - ,'领悦集团总部' AS hr_comm_name -- hr项目名称 - FROM dual + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 + GROUP BY + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'' AS comm_id + ,'' AS comm_name + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + ,'153' AS hr_comm_id + ,'领悦集团总部' AS hr_comm_name )B ON A.pq = B.hr_organ_id and A.xm = b.hr_comm_id where 1 = 1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} + AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}') + ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END + GROUP BY A.xlmc @@ -358,6 +411,15 @@ GROUP BY zwje -- 案场部门负责人 -- 员工 +with one_to_many AS( +SELECT +a.username AS username -- 用户名 +,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 +FROM ods_one_to_many_perm a +JOIN mysql.help_topic b +on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) +WHERE a.username = '${fine_username}' +) SELECT zwmc AS zwje ,count(1) AS sl @@ -374,35 +436,44 @@ FROM LEFT JOIN ( SELECT - organ_code -- erp片区编码 - ,organ_name -- erp片区名称 - ,hr_organ_id -- hr片区编码 - ,hr_organ_name -- hr片区名称 - ,hr_comm_id -- hr项目id - ,hr_comm_name -- hr项目名称 - FROM dim_organ_mapping - WHERE length(hr_comm_id) > 0 - GROUP BY - organ_code - ,organ_name - ,hr_organ_id - ,hr_organ_name - ,hr_comm_id - ,hr_comm_name - UNION ALL - SELECT - '0000' AS organ_code -- erp片区编码 - ,'' AS organ_name -- erp片区名称 - ,'153' AS hr_organ_id -- hr片区编码 - ,'领悦集团总部' AS hr_organ_name -- hr片区名称 - ,'153' AS hr_comm_id -- hr项目id - ,'领悦集团总部' AS hr_comm_name -- hr项目名称 - FROM dual + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 + GROUP BY + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'' AS comm_id + ,'' AS comm_name + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + ,'153' AS hr_comm_id + ,'领悦集团总部' AS hr_comm_name )B ON A.pq = B.hr_organ_id and A.xm = b.hr_comm_id where 1 = 1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} + AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}') + ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END + GROUP BY A.zwmc @@ -453,7 +524,15 @@ GROUP BY swtx - +with one_to_many AS( +SELECT +a.username AS username -- 用户名 +,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 +FROM ods_one_to_many_perm a +JOIN mysql.help_topic b +on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) +WHERE a.username = '${fine_username}' +) SELECT A.zycjname ,count(1) AS sl @@ -469,36 +548,46 @@ FROM )A LEFT JOIN ( - SELECT - organ_code -- erp片区编码 - ,organ_name -- erp片区名称 - ,hr_organ_id -- hr片区编码 - ,hr_organ_name -- hr片区名称 - ,hr_comm_id -- hr项目id - ,hr_comm_name -- hr项目名称 - FROM dim_organ_mapping - WHERE length(hr_comm_id) > 0 - GROUP BY - organ_code - ,organ_name - ,hr_organ_id - ,hr_organ_name - ,hr_comm_id - ,hr_comm_name - UNION ALL - SELECT - '0000' AS organ_code -- erp片区编码 - ,'' AS organ_name -- erp片区名称 - ,'153' AS hr_organ_id -- hr片区编码 - ,'领悦集团总部' AS hr_organ_name -- hr片区名称 - ,'153' AS hr_comm_id -- hr项目id - ,'领悦集团总部' AS hr_comm_name -- hr项目名称 - FROM dual + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 + GROUP BY + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'' AS comm_id + ,'' AS comm_name + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + ,'153' AS hr_comm_id + ,'领悦集团总部' AS hr_comm_name )B ON A.pq = B.hr_organ_id and A.xm = b.hr_comm_id where 1 = 1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} + ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} + AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}') + ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END + GROUP BY A.zycjname @@ -550,7 +639,15 @@ GROUP BY zytx - +with one_to_many AS( +SELECT +a.username AS username -- 用户名 +,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 +FROM ods_one_to_many_perm a +JOIN mysql.help_topic b +on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) +WHERE a.username = '${fine_username}' +) SELECT A.zytxmc ,count(1) AS sl @@ -567,35 +664,44 @@ FROM LEFT JOIN ( SELECT - organ_code -- erp片区编码 - ,organ_name -- erp片区名称 - ,hr_organ_id -- hr片区编码 - ,hr_organ_name -- hr片区名称 - ,hr_comm_id -- hr项目id - ,hr_comm_name -- hr项目名称 - FROM dim_organ_mapping - WHERE length(hr_comm_id) > 0 - GROUP BY - organ_code - ,organ_name - ,hr_organ_id - ,hr_organ_name - ,hr_comm_id - ,hr_comm_name - UNION ALL - SELECT - '0000' AS organ_code -- erp片区编码 - ,'' AS organ_name -- erp片区名称 - ,'153' AS hr_organ_id -- hr片区编码 - ,'领悦集团总部' AS hr_organ_name -- hr片区名称 - ,'153' AS hr_comm_id -- hr项目id - ,'领悦集团总部' AS hr_comm_name -- hr项目名称 - FROM dual + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 + GROUP BY + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'' AS comm_id + ,'' AS comm_name + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + ,'153' AS hr_comm_id + ,'领悦集团总部' AS hr_comm_name )B ON A.pq = B.hr_organ_id and A.xm = b.hr_comm_id where 1 = 1 - ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} + ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} + AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}') + ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END + GROUP BY A.zytxmc