@ -2,8 +2,8 @@ package com.engine.organization.service.impl;
import cn.hutool.core.convert.Convert ;
import com.engine.core.impl.Service ;
import com.engine.organization.entity.jingyou. JyChart ;
import com.engine.organization. entity.jingyou.JyOrgSelectItem ;
import com.engine.organization.entity.jingyou. * ;
import com.engine.organization. service.OrgChartService ;
import com.engine.organization.util.HasRightUtil ;
import org.apache.commons.lang3.StringUtils ;
import weaver.conn.RecordSet ;
@ -17,14 +17,13 @@ import java.util.*;
* @date : 2022 / 7 / 7
* @description : 组 织 架 构 图 ServiceImpl
* * /
public class JyChartServiceImpl extends Service {
private RecordSet grs = new RecordSet ( ) ;
public class JyChartServiceImpl extends Service implements OrgChartService {
private static final String COMPANY_RIGHT = "OrgChart:All" ;
private static final String USER_RIGHT = "OrgPerspective:All" ;
RecordSet rs = new RecordSet ( ) ;
@Override
public Map < String , Object > getOptionCondition ( Map < String , Object > request2Map , User user ) {
Map < String , Object > result = new HashMap < > ( ) ;
@ -69,7 +68,7 @@ public class JyChartServiceImpl extends Service {
return result ;
}
@Override
public Map < String , Object > getCompanyData ( Map < String , Object > request2Map , User user ) {
Map < String , Object > result = new HashMap < > ( ) ;
boolean hasRight = HasRightUtil . hasRight ( user , COMPANY_RIGHT , true ) ;
@ -108,11 +107,11 @@ public class JyChartServiceImpl extends Service {
item . setFname ( rs . getString ( "companyname" ) ) ;
item . setFtype ( "0" ) ;
item . setFnumber ( rs . getString ( "companycode" ) ) ;
item . setF obj id( rs . getString ( "id" ) ) ;
item . setF ec id( rs . getString ( "id" ) ) ;
item . setFisvitual ( "0" ) ;
item . setExpand ( "1" ) ;
chartList . add ( item ) ;
buildSubCompanyData ( item . getF obj id( ) , "0" , item . getId ( ) , currentLevel , chartList ) ;
buildSubCompanyData ( item . getF ec id( ) , "0" , item . getId ( ) , currentLevel , chartList ) ;
}
} else if ( root . startsWith ( "s_" ) ) {
// 分部
@ -124,12 +123,12 @@ public class JyChartServiceImpl extends Service {
item . setFname ( rs . getString ( "subcompanyname" ) ) ;
item . setFtype ( "1" ) ;
item . setFnumber ( rs . getString ( "subcompanycode" ) ) ;
item . setF obj id( rs . getString ( "id" ) ) ;
item . setF ec id( rs . getString ( "id" ) ) ;
item . setFisvitual ( "0" ) ;
item . setExpand ( "1" ) ;
chartList . add ( item ) ;
buildSubCompanyData ( rs . getString ( "companyid" ) , item . getF obj id( ) , item . getId ( ) , currentLevel , chartList ) ;
buildDepartmentData ( item . getF obj id( ) , "0" , item . getId ( ) , currentLevel , chartList ) ;
buildSubCompanyData ( rs . getString ( "companyid" ) , item . getF ec id( ) , item . getId ( ) , currentLevel , chartList ) ;
buildDepartmentData ( item . getF ec id( ) , "0" , item . getId ( ) , currentLevel , chartList ) ;
}
}
}
@ -140,6 +139,7 @@ public class JyChartServiceImpl extends Service {
return result ;
}
@Override
public Map < String , Object > asyncCompanyData ( Map < String , Object > request2Map , User user ) {
String ids = ( String ) request2Map . get ( "ids" ) ;
Set < JyChart > chartList = new LinkedHashSet < > ( ) ;
@ -157,12 +157,12 @@ public class JyChartServiceImpl extends Service {
item . setFname ( rs . getString ( "subcompanyname" ) ) ;
item . setFtype ( "1" ) ;
item . setFnumber ( rs . getString ( "subcompanycode" ) ) ;
item . setF obj id( rs . getString ( "id" ) ) ;
item . setF ec id( rs . getString ( "id" ) ) ;
item . setFisvitual ( "0" ) ;
item . setExpand ( "0" ) ;
chartList . add ( item ) ;
buildSubCompanyData ( rs . getString ( "companyid" ) , item . getF obj id( ) , item . getId ( ) , 0 , chartList ) ;
buildDepartmentData ( item . getF obj id( ) , "0" , item . getId ( ) , 0 , chartList ) ;
buildSubCompanyData ( rs . getString ( "companyid" ) , item . getF ec id( ) , item . getId ( ) , 0 , chartList ) ;
buildDepartmentData ( item . getF ec id( ) , "0" , item . getId ( ) , 0 , chartList ) ;
}
} else if ( splitId . startsWith ( "d_" ) ) {
// 分部
@ -175,12 +175,149 @@ public class JyChartServiceImpl extends Service {
jyChart . setFname ( rs . getString ( "departmentmark" ) ) ;
jyChart . setFtype ( "2" ) ;
jyChart . setFnumber ( rs . getString ( "departmentcode" ) ) ;
jyChart . setF obj id( rs . getString ( "id" ) ) ;
jyChart . setF ec id( rs . getString ( "id" ) ) ;
jyChart . setFisvitual ( "0" ) ;
jyChart . setExpand ( "0" ) ;
chartList . add ( jyChart ) ;
String subCompanyId = rs . getString ( "subcompanyid1" ) ;
buildDepartmentData ( subCompanyId , jyChart . getFobjid ( ) , jyChart . getId ( ) , 0 , chartList ) ;
buildDepartmentData ( subCompanyId , jyChart . getFecid ( ) , jyChart . getId ( ) , 0 , chartList ) ;
}
}
}
}
Map < String , Object > result = new HashMap < > ( ) ;
result . put ( "api_status" , true ) ;
result . put ( "data" , chartList ) ;
return result ;
}
@Override
public Map < String , Object > getUserData ( Map < String , Object > request2Map , User user ) {
Map < String , Object > result = new HashMap < > ( ) ;
boolean hasRight = HasRightUtil . hasRight ( user , USER_RIGHT , true ) ;
result . put ( "hasRight" , hasRight ) ;
if ( ! hasRight ) {
return result ;
}
String root = ( String ) request2Map . get ( "root" ) ; // 根节点
String level = ( String ) request2Map . get ( "level" ) ; // 显示层级
int currentLevel = Convert . toInt ( level , 3 ) ;
// 维度
String fclass = ( String ) request2Map . get ( "fclass" ) ;
// 当前维度
boolean currentDimension = "0" . equals ( fclass ) ;
String fisvitual = ( String ) request2Map . get ( "fisvitual" ) ; // 是否显示虚拟组织
if ( StringUtils . isBlank ( fisvitual ) ) {
fisvitual = "0" ;
}
Set < JyChart > chartList = new LinkedHashSet < > ( ) ;
if ( currentDimension ) {
if ( "0" . equals ( root ) ) {
// 集团
rs . executeQuery ( "select * from hrmcompany" ) ;
if ( rs . next ( ) ) {
JyCompanyChart item = new JyCompanyChart ( ) ;
item . setId ( "0" ) ;
item . setFname ( rs . getString ( "companyname" ) ) ;
item . setFtype ( "0" ) ;
item . setFnumber ( rs . getString ( "companycode" ) ) ;
item . setFecid ( rs . getString ( "id" ) ) ;
item . setFisvitual ( "0" ) ;
item . setExpand ( "1" ) ;
chartList . add ( item ) ;
buildSubCompanyUserData ( item . getFecid ( ) , "0" , item . getId ( ) , currentLevel , chartList ) ;
}
} else if ( root . startsWith ( "s_" ) ) {
// 分部
String chartId = getChartId ( root ) ;
rs . executeQuery ( "select * from hrmsubcompany where id = ?" , chartId ) ;
if ( rs . next ( ) ) {
JySubCompanyChart item = new JySubCompanyChart ( ) ;
item . setId ( "s_" + rs . getString ( "id" ) ) ;
item . setFname ( rs . getString ( "subcompanyname" ) ) ;
item . setFtype ( "1" ) ;
item . setFnumber ( rs . getString ( "subcompanycode" ) ) ;
item . setFecid ( rs . getString ( "id" ) ) ;
item . setFisvitual ( "0" ) ;
item . setExpand ( "1" ) ;
chartList . add ( item ) ;
buildSubCompanyUserData ( rs . getString ( "companyid" ) , item . getFecid ( ) , item . getId ( ) , currentLevel , chartList ) ;
buildDepartmentUserData ( item . getFecid ( ) , "0" , item . getId ( ) , currentLevel , chartList ) ;
}
}
}
result . put ( "api_status" , true ) ;
result . put ( "data" , chartList ) ;
return result ;
}
@Override
public Map < String , Object > asyncUserData ( Map < String , Object > request2Map , User user ) {
String ids = ( String ) request2Map . get ( "ids" ) ;
Set < JyChart > chartList = new LinkedHashSet < > ( ) ;
if ( StringUtils . isNotBlank ( ids ) ) {
String [ ] splitIds = ids . split ( "," ) ;
for ( String splitId : splitIds ) {
if ( splitId . startsWith ( "s_" ) ) {
// 分部
String chartId = getChartId ( splitId ) ;
rs . executeQuery ( "select * from hrmsubcompany where id = ?" , chartId ) ;
if ( rs . next ( ) ) {
JySubCompanyChart item = new JySubCompanyChart ( ) ;
item . setId ( "s_" + rs . getString ( "id" ) ) ;
item . setParentId ( splitId ) ;
item . setFname ( rs . getString ( "subcompanyname" ) ) ;
item . setFtype ( "1" ) ;
item . setFnumber ( rs . getString ( "subcompanycode" ) ) ;
item . setFecid ( rs . getString ( "id" ) ) ;
item . setFisvitual ( "0" ) ;
item . setExpand ( "0" ) ;
chartList . add ( item ) ;
buildSubCompanyUserData ( rs . getString ( "companyid" ) , item . getFecid ( ) , item . getId ( ) , 0 , chartList ) ;
buildDepartmentUserData ( item . getFecid ( ) , "0" , item . getId ( ) , 0 , chartList ) ;
}
} else if ( splitId . startsWith ( "d_" ) ) {
// 部门
String chartId = getChartId ( splitId ) ;
rs . executeQuery ( "select * from hrmdepartment where id = ?" , chartId ) ;
if ( rs . next ( ) ) {
JyDepartmentChart jyChart = new JyDepartmentChart ( ) ;
jyChart . setId ( "d_" + rs . getString ( "id" ) ) ;
jyChart . setParentId ( splitId ) ;
jyChart . setFname ( rs . getString ( "departmentmark" ) ) ;
jyChart . setFtype ( "2" ) ;
jyChart . setFnumber ( rs . getString ( "departmentcode" ) ) ;
jyChart . setFecid ( rs . getString ( "id" ) ) ;
jyChart . setFisvitual ( "0" ) ;
jyChart . setExpand ( "0" ) ;
chartList . add ( jyChart ) ;
String subCompanyId = rs . getString ( "subcompanyid1" ) ;
buildDepartmentUserData ( subCompanyId , jyChart . getFecid ( ) , jyChart . getId ( ) , 0 , chartList ) ;
buildJobUserData ( jyChart . getFecid ( ) , jyChart . getId ( ) , 0 , chartList ) ;
}
} else if ( splitId . startsWith ( "j_" ) ) {
// 岗位
String chartId = getChartId ( splitId ) ;
rs . executeQuery ( "select * from jcl_org_job where id = ?" , chartId ) ;
if ( rs . next ( ) ) {
JyJobChart jyChart = new JyJobChart ( ) ;
jyChart . setId ( "j_" + rs . getString ( "id" ) ) ;
jyChart . setParentId ( splitId ) ;
jyChart . setFname ( rs . getString ( "job_name" ) ) ;
jyChart . setFtype ( "3" ) ;
jyChart . setFnumber ( rs . getString ( "job_no" ) ) ;
jyChart . setFecid ( rs . getString ( "id" ) ) ;
jyChart . setFisvitual ( "0" ) ;
jyChart . setExpand ( "0" ) ;
chartList . add ( jyChart ) ;
buildResourceUserData ( jyChart . getFecid ( ) , jyChart . getId ( ) , 0 , chartList ) ;
}
}
}
@ -205,20 +342,17 @@ public class JyChartServiceImpl extends Service {
item . setFname ( rs . getString ( "subcompanyname" ) ) ;
item . setFtype ( "1" ) ;
item . setFnumber ( rs . getString ( "subcompanycode" ) ) ;
item . setF obj id( rs . getString ( "id" ) ) ;
item . setF ec id( rs . getString ( "id" ) ) ;
item . setFisvitual ( "0" ) ;
item . setExpand ( currentLevel > 0 ? "1" : "0" ) ;
chartList . add ( item ) ;
subCompanyList . add ( item ) ;
}
chartList . addAll ( subCompanyList ) ;
for ( JyChart jyChart : subCompanyList ) {
buildSubCompanyData ( companyId , jyChart . getF obj id( ) , jyChart . getId ( ) , currentLevel - 1 , chartList ) ;
buildDepartmentData ( jyChart . getF obj id( ) , "0" , jyChart . getId ( ) , currentLevel - 1 , chartList ) ;
buildSubCompanyData ( companyId , jyChart . getF ec id( ) , jyChart . getId ( ) , currentLevel - 1 , chartList ) ;
buildDepartmentData ( jyChart . getF ec id( ) , "0" , jyChart . getId ( ) , currentLevel - 1 , chartList ) ;
}
}
void buildDepartmentData ( String subCompanyId , String parentId , String chartPid , int currentLevel , Set < JyChart > chartList ) {
@ -234,22 +368,118 @@ public class JyChartServiceImpl extends Service {
item . setFname ( rs . getString ( "departmentmark" ) ) ;
item . setFtype ( "2" ) ;
item . setFnumber ( rs . getString ( "departmentcode" ) ) ;
item . setF obj id( rs . getString ( "id" ) ) ;
item . setF ec id( rs . getString ( "id" ) ) ;
item . setFisvitual ( "0" ) ;
item . setExpand ( currentLevel > 0 ? "1" : "0" ) ;
chartList . add ( item ) ;
departmentList . add ( item ) ;
}
chartList . addAll ( departmentList ) ;
for ( JyChart jyChart : departmentList ) {
buildDepartmentData ( subCompanyId , jyChart . getFobjid ( ) , jyChart . getId ( ) , currentLevel - 1 , chartList ) ;
buildDepartmentData ( subCompanyId , jyChart . getFecid ( ) , jyChart . getId ( ) , currentLevel - 1 , chartList ) ;
}
}
void buildSubCompanyUserData ( String companyId , String parentId , String chartPid , int currentLevel , Set < JyChart > chartList ) {
if ( currentLevel < 0 ) {
return ;
}
rs . executeQuery ( "select * from hrmsubcompany where companyid = " + companyId + " and ifnull(supsubcomid,0) = " + parentId + " and ifnull(canceled,0) = 0 order by showorder ,showOrderOfTree" ) ;
List < JySubCompanyChart > subCompanyList = new ArrayList < > ( ) ;
while ( rs . next ( ) ) {
JySubCompanyChart item = new JySubCompanyChart ( ) ;
item . setId ( "s_" + rs . getString ( "id" ) ) ;
item . setParentId ( chartPid ) ;
item . setFname ( rs . getString ( "subcompanyname" ) ) ;
item . setFtype ( "1" ) ;
item . setFnumber ( rs . getString ( "subcompanycode" ) ) ;
item . setFecid ( rs . getString ( "id" ) ) ;
item . setFisvitual ( "0" ) ;
item . setExpand ( currentLevel > 0 ? "1" : "0" ) ;
subCompanyList . add ( item ) ;
}
chartList . addAll ( subCompanyList ) ;
for ( JySubCompanyChart jyChart : subCompanyList ) {
buildSubCompanyUserData ( companyId , jyChart . getFecid ( ) , jyChart . getId ( ) , currentLevel - 1 , chartList ) ;
buildDepartmentUserData ( jyChart . getFecid ( ) , "0" , jyChart . getId ( ) , currentLevel - 1 , chartList ) ;
}
}
void buildDepartmentUserData ( String subCompanyId , String parentId , String chartPid , int currentLevel , Set < JyChart > chartList ) {
if ( currentLevel < 0 ) {
return ;
}
String sql = "select * from hrmdepartment where subcompanyid1 = " + subCompanyId + " and ifnull(supdepid,0) = " + parentId + " and ifnull(canceled,0) = 0 order by showorder ,showorderoftree" ;
rs . executeQuery ( sql ) ;
List < JyDepartmentChart > departmentList = new ArrayList < > ( ) ;
while ( rs . next ( ) ) {
JyDepartmentChart item = new JyDepartmentChart ( ) ;
item . setId ( "d_" + rs . getString ( "id" ) ) ;
item . setParentId ( chartPid ) ;
item . setFname ( rs . getString ( "departmentmark" ) ) ;
item . setFtype ( "2" ) ;
item . setFnumber ( rs . getString ( "departmentcode" ) ) ;
item . setFecid ( rs . getString ( "id" ) ) ;
item . setFisvitual ( "0" ) ;
item . setExpand ( currentLevel > 0 ? "1" : "0" ) ;
departmentList . add ( item ) ;
}
chartList . addAll ( departmentList ) ;
for ( JyDepartmentChart jyChart : departmentList ) {
buildDepartmentUserData ( subCompanyId , jyChart . getFecid ( ) , jyChart . getId ( ) , currentLevel - 1 , chartList ) ;
buildJobUserData ( jyChart . getFecid ( ) , jyChart . getId ( ) , currentLevel - 1 , chartList ) ;
}
}
void buildJobUserData ( String departmentId , String chartPid , int currentLevel , Set < JyChart > chartList ) {
if ( currentLevel < 0 ) {
return ;
}
rs . executeQuery ( "select * from jcl_org_job where ec_department = ? and ifnull(forbidden_tag,0)=0 order by show_order " , departmentId ) ;
List < JyJobChart > jobList = new ArrayList < > ( ) ;
while ( rs . next ( ) ) {
JyJobChart item = new JyJobChart ( ) ;
item . setId ( "j_" + rs . getString ( "id" ) ) ;
item . setParentId ( chartPid ) ;
item . setFname ( rs . getString ( "job_name" ) ) ;
item . setFtype ( "3" ) ;
item . setFnumber ( rs . getString ( "job_no" ) ) ;
item . setFecid ( rs . getString ( "id" ) ) ;
item . setFisvitual ( "0" ) ;
item . setExpand ( currentLevel > 0 ? "1" : "0" ) ;
jobList . add ( item ) ;
}
chartList . addAll ( jobList ) ;
for ( JyJobChart jyChart : jobList ) {
// 查询人员
buildResourceUserData ( jyChart . getFecid ( ) , jyChart . getId ( ) , currentLevel - 1 , chartList ) ;
}
}
void buildResourceUserData ( String jobId , String chartPid , int currentLevel , Set < JyChart > chartList ) {
if ( currentLevel < 0 ) {
return ;
}
rs . executeQuery ( "select a.id,a.lastname from hrmresource a inner join cus_fielddata b on a.id = b.id and b.scope ='hrmcustomfieldbyinfotype' and b.scopeid ='-1' where b.field100002 = ?" , jobId ) ;
List < JyResourceChart > resourceList = new ArrayList < > ( ) ;
while ( rs . next ( ) ) {
JyResourceChart item = new JyResourceChart ( ) ;
item . setId ( "r_" + rs . getString ( "id" ) ) ;
item . setParentId ( chartPid ) ;
item . setFname ( rs . getString ( "lastname" ) ) ;
item . setFtype ( "4" ) ;
item . setFnumber ( rs . getString ( "hrmresource" ) ) ;
item . setFecid ( rs . getString ( "id" ) ) ;
item . setFisvitual ( "0" ) ;
item . setExpand ( currentLevel > 0 ? "1" : "0" ) ;
resourceList . add ( item ) ;
}
chartList . addAll ( resourceList ) ;
}
private String getChartId ( String id ) {
p ublic static String getChartId ( String id ) {
if ( StringUtils . isNotBlank ( id ) ) {
String [ ] split = id . split ( "_" ) ;
if ( split . length = = 2 ) {