@ -1,8 +1,11 @@
package com.engine.jclproduct.service.impl ;
import cn.hutool.core.collection.CollectionUtil ;
import com.cloudstore.eccom.result.WeaResultMsg ;
import com.engine.core.impl.Service ;
import com.engine.jclproduct.component.WeaverWeaTable ;
import com.engine.jclproduct.entity.param.TransferParam ;
import com.engine.jclproduct.entity.vo.CaluResourceVo ;
import com.engine.jclproduct.entity.vo.LeaveResourceVo ;
import com.engine.jclproduct.entity.vo.TimeResourceVo ;
import com.engine.jclproduct.entity.vo.TransferResourceVo ;
@ -10,10 +13,16 @@ import com.engine.jclproduct.service.EmployeeRecordReportService;
import com.engine.jclproduct.utils.EmploymentUtil ;
import org.apache.commons.lang3.StringUtils ;
import weaver.common.DateUtil ;
import weaver.conn.RecordSet ;
import weaver.general.Util ;
import weaver.hrm.company.DepartmentComInfo ;
import java.util.ArrayList ;
import java.util.HashMap ;
import java.util.List ;
import java.util.Map ;
import java.util.function.Function ;
import java.util.stream.Collectors ;
/ * *
* @Author liang . cheng
@ -37,6 +46,9 @@ public class EmployeeRecordReportServiceImpl extends Service implements Employee
case "2" :
result = transferResourece ( params ) ;
break ;
case "3" :
result = caluResourece ( params ) ;
break ;
default :
break ;
}
@ -51,6 +63,7 @@ public class EmployeeRecordReportServiceImpl extends Service implements Employee
WeaverWeaTable < TimeResourceVo > table = new WeaverWeaTable < > ( user , TimeResourceVo . class ) ;
String sqlWhere = buildtimeResoureceSql ( params ) ;
//sqlWhere += " order by userid asc";
table . setSqlwhere ( sqlWhere ) ;
WeaResultMsg result = new WeaResultMsg ( false ) ;
result . putAll ( table . makeDataResult ( ) ) ;
@ -89,6 +102,98 @@ public class EmployeeRecordReportServiceImpl extends Service implements Employee
return resultMap ;
}
@Override
public Map < String , Object > caluResourece ( Map < String , Object > params ) {
RecordSet rs = new RecordSet ( ) ;
Map < String , Object > resultMap = new HashMap < > ( 4 ) ;
List < CaluResourceVo > caluResourceVos = new ArrayList < > ( ) ;
String departmentId = Util . null2String ( params . get ( "departmentId" ) ) ;
String date = Util . null2String ( params . get ( "date" ) ) ;
DepartmentComInfo departmentComInfo = new DepartmentComInfo ( ) ;
String sql = "select id,supdepid,departmentname from hrmdepartment where (canceled is null or canceled != 1) " ;
if ( ! "" . equals ( departmentId ) ) {
ArrayList < String > lists = new ArrayList < > ( ) ;
lists . add ( departmentId ) ;
departmentComInfo . getAllChildDeptByDepId ( lists , departmentId ) ;
String join = CollectionUtil . join ( lists , "," ) ;
sql + = " and id in (" + join + ")" ;
}
sql + = " order by showorder,id asc" ;
//1.获取部门数据信息
rs . executeQuery ( sql ) ;
while ( rs . next ( ) ) {
caluResourceVos . add ( CaluResourceVo . builder ( )
. key ( Util . getIntValue ( rs . getString ( "id" ) ) )
. superKey ( Util . getIntValue ( rs . getString ( "supdepid" ) , 0 ) )
. departmentName ( Util . null2String ( rs . getString ( "departmentname" ) ) )
. build ( ) ) ;
}
//2.人数统计计算
String firstDayOfMonth = EmploymentUtil . firstDayOfMonth ( date ) ;
String lastDayOfMonth = EmploymentUtil . lastDayOfMonth ( date ) ;
//期初人数
Map < Integer , Integer > startMap = EmploymentUtil . sumPerson ( firstDayOfMonth , "0,1,2,3" ) ;
//期末人数
Map < Integer , Integer > endMap = EmploymentUtil . sumPerson ( lastDayOfMonth , "0,1,2,3" ) ;
//入职人数
Map < Integer , Integer > entryMap = EmploymentUtil . rangePerson ( firstDayOfMonth , lastDayOfMonth , "0" ) ;
//转正人数
Map < Integer , Integer > transferMap = EmploymentUtil . rangePerson ( firstDayOfMonth , lastDayOfMonth , "1" ) ;
//离职人数
Map < Integer , Integer > leaveMap = EmploymentUtil . rangePerson ( firstDayOfMonth , lastDayOfMonth , "4,5" ) ;
//调动信息
List < TransferParam > transferList = EmploymentUtil . transferPerson ( firstDayOfMonth , lastDayOfMonth ) ;
caluResourceVos . forEach ( e - > {
e . setStartNumber ( startMap . getOrDefault ( e . getKey ( ) , 0 ) ) ;
e . setEntryNumber ( entryMap . getOrDefault ( e . getKey ( ) , 0 ) ) ;
e . setTransferNumber ( transferMap . getOrDefault ( e . getKey ( ) , 0 ) ) ;
e . setLeaveNumber ( leaveMap . getOrDefault ( e . getKey ( ) , 0 ) ) ;
int oldCount = ( int ) transferList . stream ( )
. filter ( param - > param . getChangeOldDept ( ) ! = null & & param . getChangeOldDept ( ) . equals ( e . getKey ( ) ) )
. count ( ) ;
int newCount = ( int ) transferList . stream ( )
. filter ( param - > param . getChangeNewDept ( ) ! = null & & param . getChangeNewDept ( ) . equals ( e . getKey ( ) ) )
. count ( ) ;
e . setOnNumber ( newCount ) ;
e . setOutNumber ( oldCount ) ;
e . setEndNumber ( endMap . getOrDefault ( e . getKey ( ) , 0 ) ) ;
} ) ;
//3.构建上下级关系
List < CaluResourceVo > topLevelResources = new ArrayList < > ( ) ;
Map < Integer , CaluResourceVo > resourceMap = caluResourceVos . stream ( )
. collect ( Collectors . toMap ( CaluResourceVo : : getKey , Function . identity ( ) ) ) ;
caluResourceVos . forEach ( resource - > {
if ( resource . getSuperKey ( ) = = 0 | | String . valueOf ( resource . getKey ( ) ) . equals ( departmentId ) ) {
// 如果 superKey 为 0, 说明是顶级元素 或者departmentId出现
topLevelResources . add ( resource ) ;
} else {
CaluResourceVo parent = resourceMap . get ( resource . getSuperKey ( ) ) ;
if ( parent ! = null ) {
if ( parent . getChildren ( ) = = null ) {
parent . setChildren ( new ArrayList < > ( ) ) ;
}
parent . getChildren ( ) . add ( resource ) ;
}
}
} ) ;
resultMap . put ( "dataSource" , topLevelResources ) ;
return resultMap ;
}
private String buildtransferResoureceSql ( Map < String , Object > params ) {
String pointValue = Util . null2String ( params . get ( "pointValue" ) ) ;
String startDate = Util . null2String ( params . get ( "startDate" ) ) ;