2024-04-24 16:46:47 +08:00
package com.engine.organization.service.impl ;
import cn.hutool.core.collection.CollectionUtil ;
import com.engine.core.impl.Service ;
import com.engine.organization.entity.chart.ChartPO ;
2024-04-29 17:18:23 +08:00
import com.engine.organization.entity.chart.DetailConditionVO ;
2024-04-24 16:46:47 +08:00
import com.engine.organization.entity.chart.ResourceListColumns ;
import com.engine.organization.entity.chart.params.ModeHrmResourceParam ;
import com.engine.organization.entity.hrmresource.po.ResourceChartPO ;
import com.engine.organization.entity.hrmresource.vo.ResourceChartVO ;
import com.engine.organization.mapper.hrmresource.SystemDataMapper ;
import com.engine.organization.service.ModeHrmResourceService ;
import com.engine.organization.util.db.MapperProxyFactory ;
import lombok.SneakyThrows ;
import org.apache.commons.lang3.StringUtils ;
import weaver.conn.RecordSet ;
import weaver.general.Util ;
import weaver.hrm.company.DepartmentComInfo ;
import weaver.hrm.company.SubCompanyComInfo ;
import weaver.hrm.resource.ResourceComInfo ;
import java.util.* ;
2024-04-29 17:18:23 +08:00
import java.util.stream.Collectors ;
2024-04-24 16:46:47 +08:00
/ * *
* @Author liang . cheng
* @Date 2024 / 4 / 24 2 : 01 PM
* @Description : uf_zsygrzbdd 正式员工档案 uf_qlwbrydngljmb 外部人员档案
* @Version 1 . 0
* /
public class ModeHrmResourceServiceImpl extends Service implements ModeHrmResourceService {
@Override
public Map < String , Object > chartResourceList ( ModeHrmResourceParam param ) {
Map < String , Object > dataMap = new HashMap < > ( 4 ) ;
List < ResourceListColumns > resourceListColumns = getTableColumns ( ) ;
List < Integer > allSupDepartment = getAllSupDepartment ( param . getDepartmentId ( ) ) ;
2024-09-13 16:22:08 +08:00
List < ResourceChartVO > resourceChartVOS = new ArrayList < > ( ) ;
if ( " 0 " . equals ( param . getVersionId ( ) ) ) {
List < ResourceChartPO > resourceChartNb = new ArrayList < > ( selectNbPerson ( allSupDepartment , param . getNbValue ( ) ) ) ;
resourceChartVOS . addAll ( convertToVO ( resourceChartNb , " 1 " ) ) ;
List < ResourceChartPO > resourceChartWb = new ArrayList < > ( selectWbPerson ( allSupDepartment , param . getWbValue ( ) ) ) ;
resourceChartVOS . addAll ( convertToVO ( resourceChartWb , " 2 " ) ) ;
} else {
//历史版本
List < String > results = new ArrayList < > ( ) ;
if ( StringUtils . isNotEmpty ( param . getNbValue ( ) ) ) {
results . addAll ( Arrays . asList ( param . getNbValue ( ) . split ( " , " ) ) ) ;
}
2024-04-24 16:46:47 +08:00
2024-09-13 16:22:08 +08:00
if ( StringUtils . isNotEmpty ( param . getWbValue ( ) ) ) {
results . addAll ( Arrays . asList ( param . getWbValue ( ) . split ( " , " ) ) ) ;
}
resourceChartVOS = selectPersonHt ( allSupDepartment , results , param . getVersionId ( ) ) ;
}
2024-04-24 16:46:47 +08:00
dataMap . put ( " columns " , resourceListColumns ) ;
dataMap . put ( " dataSource " , resourceChartVOS ) ;
return dataMap ;
}
2024-09-13 16:22:08 +08:00
/ * *
* 历史版本列表
* @param allSupDepartment
* @param versionId
* @return
* /
private List < ResourceChartVO > selectPersonHt ( Collection < Integer > allSupDepartment , List < String > result , String versionId ) {
//历史版本
List < ResourceChartVO > resourceChartVOS = new ArrayList < > ( ) ;
if ( CollectionUtil . isEmpty ( result ) ) {
return resourceChartVOS ;
}
String workType = result . stream ( )
. map ( s - > " ' " + s + " ' " )
. collect ( Collectors . joining ( " , " ) ) ;
RecordSet rs = new RecordSet ( ) ;
String join = CollectionUtil . join ( allSupDepartment , " , " ) ;
rs . executeQuery ( " select id,workcode,lastname,sex,subcompany,department,jobtitle,mobile,usekind,status,versionid \ n " +
" from jcl_chart_resource where status < 4 and versionid = " + versionId + " and departmentid in ( " + join + " ) and usekind in ( " + workType + " ) " ) ;
while ( rs . next ( ) ) {
ResourceChartVO build = ResourceChartVO . builder ( )
. id ( ( long ) Util . getIntValue ( rs . getString ( " id " ) ) )
. workCode ( Util . null2String ( rs . getString ( " workcode " ) ) )
. lastName ( Util . null2String ( rs . getString ( " lastname " ) ) )
. sex ( " 1 " . equals ( Util . null2String ( rs . getString ( " sex " ) ) ) ? " 女 " : " 男 " )
. subcompanyName ( Util . null2String ( rs . getString ( " subcompany " ) ) )
. departmentName ( Util . null2String ( rs . getString ( " department " ) ) )
. jobTitle ( Util . null2String ( rs . getString ( " jobtitle " ) ) )
. mobile ( Util . null2String ( rs . getString ( " mobile " ) ) )
. build ( ) ;
resourceChartVOS . add ( build ) ;
}
return resourceChartVOS ;
}
2024-04-24 16:46:47 +08:00
@Override
public Map < String , Object > chartResourceChart ( ModeHrmResourceParam param ) {
List < ChartPO > dataList = new ArrayList < > ( ) ;
String departmentId = param . getDepartmentId ( ) ;
RecordSet rs = new RecordSet ( ) ;
rs . executeQuery ( " select a.id,a.departmentname as name,b.bmfzr \ n " +
" from hrmdepartment a left join hrmdepartmentdefined b on a.id = b.deptid \ n " +
" where a.id = ? " , param . getDepartmentId ( ) ) ;
//部门
ChartPO departmentChartPO = new ChartPO ( ) ;
if ( rs . next ( ) ) {
String fLeader = Util . null2String ( rs . getString ( " bmfzr " ) ) ;
departmentChartPO . setFtype ( " 2 " ) ;
departmentChartPO . setFobjid ( departmentId ) ;
departmentChartPO . setExpand ( " 1 " ) ;
departmentChartPO . setId ( " d_ " + departmentId ) ;
departmentChartPO . setFname ( rs . getString ( " name " ) ) ;
departmentChartPO . setFleader ( getDepartmentLeader ( fLeader ) ) ;
try {
departmentChartPO . setFleaderimg ( new ResourceComInfo ( ) . getMessagerUrls ( fLeader ) ) ;
} catch ( Exception e ) {
throw new RuntimeException ( e ) ;
}
}
//人员
List < Integer > allSupDepartment = getAllSupDepartment ( param . getDepartmentId ( ) ) ;
2024-04-29 17:18:23 +08:00
List < ResourceChartPO > resourceChartNb = new ArrayList < > ( selectNbPerson ( allSupDepartment , param . getNbValue ( ) ) ) ;
2024-04-28 15:20:59 +08:00
List < ResourceChartVO > resourceChartVOS = convertToVO ( resourceChartNb , " 1 " ) ;
2024-04-29 17:18:23 +08:00
List < ResourceChartPO > resourceChartWb = new ArrayList < > ( selectWbPerson ( allSupDepartment , param . getWbValue ( ) ) ) ;
2024-04-28 15:20:59 +08:00
resourceChartVOS . addAll ( convertToVO ( resourceChartWb , " 2 " ) ) ;
2024-04-24 16:46:47 +08:00
resourceChartVOS . forEach ( item - > {
ChartPO chartPO = getResourceChartPO ( item , departmentChartPO . getId ( ) ) ;
dataList . add ( chartPO ) ;
} ) ;
departmentChartPO . setFonjob ( resourceChartVOS . size ( ) ) ;
dataList . add ( departmentChartPO ) ;
Map < String , Object > result = new HashMap < > ( 4 ) ;
result . put ( " api_status " , true ) ;
result . put ( " data " , dataList ) ;
return result ;
}
2024-04-26 16:45:47 +08:00
@Override
public int selcetPersonCount ( String departmentIds ) {
RecordSet rs = new RecordSet ( ) ;
int totalCount = 0 ;
rs . executeQuery ( " select count(1) as total_count from uf_zsygrzbdd where zt < 4 and bm in ( " + departmentIds + " ) " ) ;
if ( rs . next ( ) ) {
totalCount = Util . getIntValue ( rs . getString ( " total_count " ) ) ;
}
rs . executeQuery ( " select count(1) as total_count from uf_qlwbrydngljmb where zt < 4 and bmbz in ( " + departmentIds + " ) " ) ;
if ( rs . next ( ) ) {
totalCount + = Util . getIntValue ( rs . getString ( " total_count " ) ) ;
}
return totalCount ;
}
2024-04-29 17:18:23 +08:00
@Override
public Map < String , Object > getDeptDetailCondition ( ) {
RecordSet rs = new RecordSet ( ) ;
List < DetailConditionVO > nbCondition = new ArrayList < > ( ) ;
List < String > nbValue = new ArrayList < > ( ) ;
List < DetailConditionVO > wbCondition = new ArrayList < > ( ) ;
//内部职工
rs . executeQuery ( " select mc,bh from uf_ygxz where sfqy = 0 and syfw = 0 " ) ;
while ( rs . next ( ) ) {
String mc = Util . null2String ( rs . getString ( " mc " ) ) ;
String bh = Util . null2String ( rs . getString ( " bh " ) ) ;
nbCondition . add ( DetailConditionVO . builder ( ) . label ( mc ) . value ( bh ) . build ( ) ) ;
nbValue . add ( bh ) ;
}
//外部人员
rs . executeQuery ( " select mc,bh from uf_ygxz where sfqy = 0 and syfw = 1 " ) ;
while ( rs . next ( ) ) {
String mc = Util . null2String ( rs . getString ( " mc " ) ) ;
String bh = Util . null2String ( rs . getString ( " bh " ) ) ;
wbCondition . add ( DetailConditionVO . builder ( ) . label ( mc ) . value ( bh ) . build ( ) ) ;
}
Map < String , Object > datas = new HashMap < > ( 4 ) ;
datas . put ( " nbCondition " , nbCondition ) ;
datas . put ( " nbValue " , nbValue ) ;
datas . put ( " wbCondition " , wbCondition ) ;
return datas ;
}
2024-04-24 16:46:47 +08:00
/ * *
* 正式员工
* @param allSupDepartment
* @return
* /
2024-04-29 17:18:23 +08:00
private List < ResourceChartPO > selectNbPerson ( Collection < Integer > allSupDepartment , String workType ) {
2024-04-24 16:46:47 +08:00
List < ResourceChartPO > resourceChartPOS = new ArrayList < > ( ) ;
2024-04-29 17:18:23 +08:00
if ( StringUtils . isEmpty ( workType ) ) {
return resourceChartPOS ;
}
List < String > result = Arrays . asList ( workType . split ( " , " ) ) ;
workType = result . stream ( )
. map ( s - > " ' " + s + " ' " )
. collect ( Collectors . joining ( " , " ) ) ;
RecordSet rs = new RecordSet ( ) ;
2024-04-24 16:46:47 +08:00
String join = CollectionUtil . join ( allSupDepartment , " , " ) ;
2024-09-13 16:22:08 +08:00
2024-04-29 17:18:23 +08:00
rs . executeQuery ( " select id,gh,xm,xb,bm,gw,sjhm from uf_zsygrzbdd where zt < 4 and bm in ( " + join + " ) and ygxz in ( " + workType + " ) " ) ;
2024-04-24 16:46:47 +08:00
while ( rs . next ( ) ) {
ResourceChartPO build = ResourceChartPO . builder ( )
. id ( ( long ) Util . getIntValue ( rs . getString ( " id " ) ) )
. workCode ( Util . null2String ( rs . getString ( " gh " ) ) )
. lastName ( Util . null2String ( rs . getString ( " xm " ) ) )
. sex ( Util . null2String ( rs . getString ( " xb " ) ) )
. departmentId ( Util . getIntValue ( rs . getString ( " bm " ) ) )
. jobBrowser ( Util . null2String ( rs . getString ( " gw " ) ) )
. mobile ( Util . null2String ( rs . getString ( " sjhm " ) ) )
. build ( ) ;
resourceChartPOS . add ( build ) ;
}
return resourceChartPOS ;
}
/ * *
* 外部员工
* @param allSupDepartment
* @return
* /
2024-04-29 17:18:23 +08:00
private List < ResourceChartPO > selectWbPerson ( Collection < Integer > allSupDepartment , String workType ) {
2024-04-24 16:46:47 +08:00
List < ResourceChartPO > resourceChartPOS = new ArrayList < > ( ) ;
2024-04-29 17:18:23 +08:00
if ( StringUtils . isEmpty ( workType ) ) {
return resourceChartPOS ;
}
List < String > result = Arrays . asList ( workType . split ( " , " ) ) ;
workType = result . stream ( )
. map ( s - > " ' " + s + " ' " )
. collect ( Collectors . joining ( " , " ) ) ;
RecordSet rs = new RecordSet ( ) ;
2024-04-24 16:46:47 +08:00
String join = CollectionUtil . join ( allSupDepartment , " , " ) ;
2024-04-29 17:18:23 +08:00
rs . executeQuery ( " select id,gh,xm,xb,bmbz,gw,lxfs from uf_qlwbrydngljmb where zt < 4 and bmbz in ( " + join + " ) and ygxz in ( " + workType + " ) " ) ;
2024-04-24 16:46:47 +08:00
while ( rs . next ( ) ) {
ResourceChartPO build = ResourceChartPO . builder ( )
. id ( ( long ) Util . getIntValue ( rs . getString ( " id " ) ) )
. workCode ( Util . null2String ( rs . getString ( " gh " ) ) )
. lastName ( Util . null2String ( rs . getString ( " xm " ) ) )
. sex ( Util . null2String ( rs . getString ( " xb " ) ) )
. departmentId ( Util . getIntValue ( rs . getString ( " bmbz " ) ) )
. jobBrowser ( Util . null2String ( rs . getString ( " gw " ) ) )
. mobile ( Util . null2String ( rs . getString ( " lxfs " ) ) )
. build ( ) ;
resourceChartPOS . add ( build ) ;
}
return resourceChartPOS ;
}
/ * *
* 列表表头
* @return
* /
private List < ResourceListColumns > getTableColumns ( ) {
List < ResourceListColumns > list = new ArrayList < > ( ) ;
list . add ( ResourceListColumns . builder ( ) . title ( " 序号 " ) . dataIndex ( " id " ) . key ( " id " ) . build ( ) ) ;
list . add ( ResourceListColumns . builder ( ) . title ( " 工号 " ) . dataIndex ( " workCode " ) . key ( " workCode " ) . build ( ) ) ;
list . add ( ResourceListColumns . builder ( ) . title ( " 姓名 " ) . dataIndex ( " lastName " ) . key ( " lastName " ) . build ( ) ) ;
list . add ( ResourceListColumns . builder ( ) . title ( " 性别 " ) . dataIndex ( " sex " ) . key ( " sex " ) . build ( ) ) ;
list . add ( ResourceListColumns . builder ( ) . title ( " 部门 " ) . dataIndex ( " departmentName " ) . key ( " departmentName " ) . build ( ) ) ;
list . add ( ResourceListColumns . builder ( ) . title ( " 分部 " ) . dataIndex ( " subcompanyName " ) . key ( " subcompanyName " ) . build ( ) ) ;
list . add ( ResourceListColumns . builder ( ) . title ( " 岗位 " ) . dataIndex ( " jobTitle " ) . key ( " jobTitle " ) . build ( ) ) ;
list . add ( ResourceListColumns . builder ( ) . title ( " 手机号 " ) . dataIndex ( " mobile " ) . key ( " mobile " ) . build ( ) ) ;
return list ;
}
/ * *
* 获取所有子部门和当前部门集合
* @param departmentId
* @return
* /
@SneakyThrows
private List < Integer > getAllSupDepartment ( String departmentId ) {
DepartmentComInfo departmentComInfo = new DepartmentComInfo ( ) ;
ArrayList subList = new ArrayList ( ) ;
departmentComInfo . getAllChildDeptByDepId ( subList , departmentId ) ;
subList . add ( departmentId ) ;
return subList ;
}
/ * *
* 转换
* @param resourceChartPOS
* @return
* /
@SneakyThrows
2024-04-28 15:20:59 +08:00
private List < ResourceChartVO > convertToVO ( List < ResourceChartPO > resourceChartPOS , String type ) {
2024-04-24 16:46:47 +08:00
List < ResourceChartVO > resourceChartVOS = new ArrayList < > ( ) ;
DepartmentComInfo departmentComInfo = new DepartmentComInfo ( ) ;
SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo ( ) ;
for ( ResourceChartPO item : resourceChartPOS ) {
ResourceChartVO resourceChartVO = new ResourceChartVO ( ) ;
String departmentId = String . valueOf ( item . getDepartmentId ( ) ) ;
String subCompanyname = subCompanyComInfo . getSubCompanyname ( departmentComInfo . getSubcompanyid1 ( departmentId ) ) ;
resourceChartVO . setId ( item . getId ( ) ) ;
resourceChartVO . setWorkCode ( item . getWorkCode ( ) ) ;
resourceChartVO . setLastName ( item . getLastName ( ) ) ;
resourceChartVO . setSex ( " 1 " . equals ( item . getSex ( ) ) ? " 女 " : " 男 " ) ;
resourceChartVO . setDepartmentName ( departmentComInfo . getDepartmentName ( departmentId ) ) ;
resourceChartVO . setSubcompanyName ( subCompanyname ) ;
2024-04-28 15:20:59 +08:00
resourceChartVO . setJobTitle ( getJobBrowserName ( item . getJobBrowser ( ) , type ) ) ;
2024-04-24 16:46:47 +08:00
resourceChartVO . setStatus ( item . getStatus ( ) ) ;
resourceChartVO . setMobile ( item . getMobile ( ) ) ;
resourceChartVOS . add ( resourceChartVO ) ;
}
return resourceChartVOS ;
}
/ * *
* 自定义岗位名称
* @param code
2024-04-28 15:20:59 +08:00
* @param code
2024-04-24 16:46:47 +08:00
* @return
* /
2024-04-28 15:20:59 +08:00
private String getJobBrowserName ( String code , String type ) {
String gwmc ;
2024-04-24 16:46:47 +08:00
RecordSet rs = new RecordSet ( ) ;
2024-04-28 15:20:59 +08:00
if ( " 1 " . equals ( type ) ) {
rs . executeQuery ( " select gwmc from uf_zsyggwbd where id = ? " , code ) ;
rs . next ( ) ;
gwmc = Util . null2String ( rs . getString ( " gwmc " ) ) ;
} else {
rs . executeQuery ( " select gwmc from uf_gwmc where gwbm = ? " , code ) ;
rs . next ( ) ;
gwmc = Util . null2String ( rs . getString ( " gwmc " ) ) ;
}
return gwmc ;
2024-04-24 16:46:47 +08:00
}
/ * *
* 获取部门负责人
*
* @param ids 部门负责人ID
* @return 人员名称
* /
private String getDepartmentLeader ( String ids ) {
if ( StringUtils . isBlank ( ids ) ) {
return " " ;
}
List < String > leaderList = new ArrayList < > ( ) ;
String [ ] split = ids . split ( " , " ) ;
for ( String s : split ) {
String lastName = MapperProxyFactory . getProxy ( SystemDataMapper . class ) . getScHrmResourceNameById ( s ) ;
if ( StringUtils . isNotBlank ( lastName ) ) {
leaderList . add ( lastName ) ;
}
}
return StringUtils . join ( leaderList , " , " ) ;
}
/ * *
* 构建人员图谱元素
* @param item
* @return
* /
private ChartPO getResourceChartPO ( ResourceChartVO item , String parentId ) {
ChartPO chartPO = new ChartPO ( ) ;
chartPO . setFtype ( " 4 " ) ;
chartPO . setFobjid ( String . valueOf ( item . getId ( ) ) ) ;
chartPO . setId ( chartPO . getFobjid ( ) ) ;
chartPO . setFname ( item . getLastName ( ) ) ;
chartPO . setParentId ( parentId ) ;
chartPO . setLocalDeptName ( item . getDepartmentName ( ) ) ;
chartPO . setJobTitle ( item . getJobTitle ( ) ) ;
chartPO . setExpand ( " 1 " ) ;
2024-04-29 17:18:23 +08:00
chartPO . setHasChildren ( " false " ) ;
2024-04-24 16:46:47 +08:00
try {
2024-04-28 15:20:59 +08:00
String resourceId = getResourceIdByWorkCode ( item . getWorkCode ( ) ) ;
chartPO . setFleaderimg ( new ResourceComInfo ( ) . getMessagerUrls ( resourceId ) ) ;
2024-04-24 16:46:47 +08:00
} catch ( Exception e ) {
throw new RuntimeException ( e ) ;
}
return chartPO ;
}
2024-04-28 15:20:59 +08:00
/ * *
* 获取人员id
* @param workCode
* @return
* /
private String getResourceIdByWorkCode ( String workCode ) {
RecordSet rs = new RecordSet ( ) ;
rs . executeQuery ( " select id from hrmresource where workcode = ? " , workCode ) ;
rs . next ( ) ;
return Util . null2String ( rs . getString ( " id " ) ) ;
}
2024-09-13 16:22:08 +08:00
public Map < String , Object > chartResourceChartHt ( ModeHrmResourceParam param ) {
List < ChartPO > dataList = new ArrayList < > ( ) ;
String departmentId = param . getDepartmentId ( ) ;
RecordSet rs = new RecordSet ( ) ;
rs . executeQuery ( " select departmentid,departmentname,fleader from jcl_chart_department where departmentid = ? and versionid = ? " , param . getDepartmentId ( ) , param . getVersionId ( ) ) ;
//部门
ChartPO departmentChartPO = new ChartPO ( ) ;
if ( rs . next ( ) ) {
String fLeader = Util . null2String ( rs . getString ( " fleader " ) ) ;
departmentChartPO . setFtype ( " 2 " ) ;
departmentChartPO . setFobjid ( departmentId ) ;
departmentChartPO . setExpand ( " 1 " ) ;
departmentChartPO . setId ( " d_ " + departmentId ) ;
departmentChartPO . setFname ( rs . getString ( " departmentname " ) ) ;
departmentChartPO . setFleader ( fLeader ) ;
try {
departmentChartPO . setFleaderimg ( new ResourceComInfo ( ) . getMessagerUrls ( fLeader ) ) ;
} catch ( Exception e ) {
throw new RuntimeException ( e ) ;
}
}
//人员
List < Integer > allSupDepartment = getAllSupDepartment ( param . getDepartmentId ( ) ) ;
List < String > results = new ArrayList < > ( ) ;
if ( StringUtils . isNotEmpty ( param . getNbValue ( ) ) ) {
results . addAll ( Arrays . asList ( param . getNbValue ( ) . split ( " , " ) ) ) ;
}
if ( StringUtils . isNotEmpty ( param . getWbValue ( ) ) ) {
results . addAll ( Arrays . asList ( param . getWbValue ( ) . split ( " , " ) ) ) ;
}
List < ResourceChartVO > resourceChartVOS = selectPersonHt ( allSupDepartment , results , param . getVersionId ( ) ) ;
resourceChartVOS . forEach ( item - > {
ChartPO chartPO = getResourceChartPO ( item , departmentChartPO . getId ( ) ) ;
dataList . add ( chartPO ) ;
} ) ;
departmentChartPO . setFonjob ( resourceChartVOS . size ( ) ) ;
dataList . add ( departmentChartPO ) ;
Map < String , Object > result = new HashMap < > ( 4 ) ;
result . put ( " api_status " , true ) ;
result . put ( " data " , dataList ) ;
return result ;
}
2024-04-24 16:46:47 +08:00
}