@ -41,79 +41,123 @@ public class AttendanceAnalysisJob extends BaseCronJob {
@Override
@Override
public void execute ( ) {
public void execute ( ) {
log . info ( "********AttendanceAnalysisJob start********" ) ;
log . info ( "********AttendanceAnalysisJob start********" ) ;
log . info ( "********AttendanceAnalysisJob executeDate :[{}]********" , executeDate ) ;
if ( executeDate = = null | | "" . equals ( executeDate ) ) {
String useDate = com . time . util . DateUtil . getCurrentTime ( "yyyy-MM-dd" ) ;
// if (executeDate != null && !"".equals(executeDate)){
// useDate = executeDate;
// }
log . info ( "********AttendanceAnalysisJob executeDate :[{}]********" , useDate ) ;
executeDate = com . time . util . DateUtil . getCurrentTime ( "yyyy-MM-dd" ) ;
}
String queryUserSql = "select id,departmentid,subcompanyid1 from hrmresource where status <> '5' and status <> '4' and status <> '7'" ;
String queryDepartEmployeeSql = "select resourceid ,changedate from HRMSTATUSHISTORY where type_n = 5 and changedate='" + DateUtil . beforeDay ( useDate , 1 ) + "'" ;
List < String > departEmployeeList = Lists . newArrayList ( DbTools . getSqlToList ( queryDepartEmployeeSql ) . stream ( ) . map ( e - > e . get ( "resourceid" ) . toString ( ) ) . collect ( Collectors . toSet ( ) ) ) ;
List < List < String > > departEmployeePartition = Lists . partition ( departEmployeeList , 200 ) ;
String queryUserSql = "select id,departmentid,subcompanyid1,companystartdate from hrmresource where status <> '5' and status <> '4' and status <> '7'" ;
List < Map < String , Object > > userList = DbTools . getSqlToList ( queryUserSql ) ;
List < Map < String , Object > > userList = DbTools . getSqlToList ( queryUserSql ) ;
for ( List < String > userIdPartition : departEmployeePartition ) {
String sql = "select id,departmentid,subcompanyid1,companystartdate from hrmresource where id (" + String . join ( "," , userIdPartition ) + ")" ;
userList . addAll ( DbTools . getSqlToList ( sql ) ) ;
}
Map < String , Object > getAttendanceparam = Maps . newHashMap ( ) ;
Map < String , Object > getAttendanceparam = Maps . newHashMap ( ) ;
getAttendanceparam . put ( "userList" , userList ) ;
getAttendanceparam . put ( "userList" , userList ) ;
getAttendanceparam . put ( "executeDate" , execut eDate) ;
getAttendanceparam . put ( "executeDate" , us eDate) ;
Map < String , Object > attendanceCycle = utilService . getAttendanceCycle ( getAttendanceparam ) ;
Map < String , Object > attendanceCycle = utilService . getAttendanceCycle ( getAttendanceparam ) ;
Set < String > allDates = Sets . newHashSet ( ) ;
Set < String > allDates = Sets . newHashSet ( ) ;
for ( Map . Entry < String , Object > entry : attendanceCycle . entrySet ( ) ) {
for ( Map . Entry < String , Object > entry : attendanceCycle . entrySet ( ) ) {
allDates . addAll ( ( Set < String > ) entry . getValue ( ) ) ;
Set < String > sets = ( Set < String > ) entry . getValue ( ) ;
for ( String date : sets ) {
if ( DateUtil . getTime ( date ) . compareTo ( DateUtil . getTime ( DateUtil . beforeDay ( useDate , 1 ) ) ) ! = 0 ) {
allDates . add ( date ) ;
allDates . add ( DateUtil . beforeDay ( date , 1 ) ) ;
allDates . add ( DateUtil . AfterDay ( date , 1 ) ) ;
}
}
}
}
List < String > allDateList = Lists . newArrayList ( allDates ) ;
List < String > allDateList = Lists . newArrayList ( allDates ) ;
allDateList = allDateList . stream ( ) . sorted ( Comparator . comparing ( e - > DateUtil . getTime ( e ) . toInstant ( ZoneOffset . of ( "+8" ) ) . toEpochMilli ( ) ) ) . collect ( Collectors . toList ( ) ) ;
allDateList = allDateList . stream ( ) . sorted ( Comparator . comparing ( e - > DateUtil . getTime ( e ) . toInstant ( ZoneOffset . of ( "+8" ) ) . toEpochMilli ( ) ) ) . collect ( Collectors . toList ( ) ) ;
allDateList = allDateList . stream ( ) . map ( e - > "'" + e + "'" ) . collect ( Collectors . toList ( ) ) ;
List < List < String > > needAnalysisDateList = Lists . partition ( allDateList , 200 ) ;
List < Map < String , Object > > dataList = Lists . newArrayList ( ) ;
List < Map < String , Object > > attendaceResult = Lists . newArrayList ( ) ;
for ( List < String > list : needAnalysisDateList ) {
String dateStrs = String . join ( "," , list ) ;
String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and signdate in (" + dateStrs + ") order by signdate,signtime" ;
List < Map < String , Object > > hrmschedulesignList = DbTools . getSqlToList ( sql ) ;
if ( hrmschedulesignList . size ( ) > 0 ) {
dataList . addAll ( hrmschedulesignList ) ;
}
//补打卡记录
sql = "select id,bdkry userid,dkrq signdate,dksj signtime from uf_jcl_kq_bdkjl where dkrq in (" + dateStrs + ") and jlzt=1 order by dkrq,dksj" ;
List < Map < String , Object > > makeUpList = DbTools . getSqlToList ( sql ) ;
if ( makeUpList . size ( ) > 0 ) {
dataList . addAll ( makeUpList ) ;
}
String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and signdate >= ? and signdate <= ? order by signdate,signtime" ;
sql = "select sjzt,sgsj,ygid,rq from uf_jcl_kq_cqjg where rq in (" + dateStrs + ")" ;
List < Map < String , Object > > dataList = DbTools . getSqlToList ( sql , DateUtil . beforeDay ( allDateList . get ( 0 ) , 2 ) , executeDate ) ;
List < Map < String , Object > > resultList = DbTools . getSqlToList ( sql ) ;
//补打卡记录
if ( resultList . size ( ) > 0 ) {
sql = "select id,bdkry userid,dkrq signdate,dksj signtime from uf_jcl_kq_bdkjl where dkrq >= ? and dkrq <= ? and jlzt=1 order by dkrq,dksj" ;
attendaceResult . addAll ( resultList ) ;
List < Map < String , Object > > makeUpList = DbTools . getSqlToList ( sql , DateUtil . beforeDay ( allDateList . get ( 0 ) , 2 ) , executeDate ) ;
}
if ( makeUpList . size ( ) > 0 ) {
dataList . addAll ( makeUpList ) ;
}
}
dataList = dataList . stream ( ) . sorted ( Comparator . comparing ( e - > DateUtil . getTime ( e . get ( "signdate" ) + " " + e . get ( "signtime" ) ) . toInstant ( ZoneOffset . of ( "+8" ) ) . toEpochMilli ( ) ) ) . collect ( Collectors . toList ( ) ) ;
dataList = dataList . stream ( ) . sorted ( Comparator . comparing ( e - > DateUtil . getTime ( e . get ( "signdate" ) + " " + e . get ( "signtime" ) ) . toInstant ( ZoneOffset . of ( "+8" ) ) . toEpochMilli ( ) ) ) . collect ( Collectors . toList ( ) ) ;
Map < String , List < Map < String , Object > > > collect = dataList . stream ( ) . collect ( Collectors . groupingBy ( e - > Util . null2String ( e . get ( "userid" ) ) ) ) ;
Map < String , List < Map < String , Object > > > collect = dataList . stream ( ) . collect ( Collectors . groupingBy ( e - > Util . null2String ( e . get ( "userid" ) ) ) ) ;
sql = "select sjzt,sgsj,ygid,rq from uf_jcl_kq_cqjg where rq in (" + String . join ( "," , allDateList ) + ")" ;
List < Map < String , Object > > attendaceResult = DbTools . getSqlToList ( sql ) ;
Map < String , List < Map < String , Object > > > attendaceGroupById = attendaceResult . stream ( ) . collect ( Collectors . groupingBy ( e - > e . get ( "ygid" ) . toString ( ) ) ) ;
Map < String , List < Map < String , Object > > > attendaceGroupById = attendaceResult . stream ( ) . collect ( Collectors . groupingBy ( e - > e . get ( "ygid" ) . toString ( ) ) ) ;
//初始化扩展类
//初始化扩展类
CommonUtil . initExtensionClassHolder ( ) ;
CommonUtil . initExtensionClassHolder ( ) ;
for ( Map < String , Object > userMap : userList ) {
for ( Map < String , Object > userMap : userList ) {
String userId = Util . null2String ( userMap . get ( "id" ) ) ;
String userId = Util . null2String ( userMap . get ( "id" ) ) ;
//入职日期
String companystartDate = Util . null2String ( userMap . get ( "companystartdate" ) ) ;
List < String > analysisDateList = Lists . newArrayList ( ( Set < String > ) attendanceCycle . get ( userId ) ) ;
List < String > analysisDateList = Lists . newArrayList ( ( Set < String > ) attendanceCycle . get ( userId ) ) ;
analysisDateList = analysisDateList . stream ( ) . sorted ( Comparator . comparing ( e - > DateUtil . getTime ( e ) . toInstant ( ZoneOffset . of ( "+8" ) ) . toEpochMilli ( ) ) ) . collect ( Collectors . toList ( ) ) ;
try {
//日期对应的打卡数据
analysisDateList = analysisDateList . stream ( ) . filter ( e - > "" . equals ( companystartDate ) | | DateUtil . getTime ( e ) . compareTo ( DateUtil . getTime ( companystartDate ) ) > = 0 ) . sorted ( Comparator . comparing ( e - > DateUtil . getTime ( e ) . toInstant ( ZoneOffset . of ( "+8" ) ) . toEpochMilli ( ) ) ) . collect ( Collectors . toList ( ) ) ;
Map < String , Map < String , Object > > clockInTimeMap = Maps . newHashMap ( ) ;
//日期对应的打卡数据
/**获得人员考勤项目*/
Map < String , Map < String , Object > > clockInTimeMap = Maps . newHashMap ( ) ;
Map < String , Object > paramMap = Maps . newHashMap ( ) ;
/**获得人员考勤项目*/
paramMap . put ( "startDate" , executeDate ) ;
Map < String , Object > paramMap = Maps . newHashMap ( ) ;
paramMap . put ( "endDate" , executeDate ) ;
paramMap . put ( "startDate" , DateUtil . beforeDay ( useDate , 1 ) ) ;
paramMap . put ( "resourceId" , userId ) ;
paramMap . put ( "endDate" , DateUtil . beforeDay ( useDate , 1 ) ) ;
Map < String , Object > dataMap = basicsetService . getAttendanceItemsByPerson ( paramMap ) ;
paramMap . put ( "resourceId" , userId ) ;
List < Map < String , Object > > attendanceItems = ( List < Map < String , Object > > ) dataMap . get ( "data" ) ;
Map < String , Object > dataMap = basicsetService . getAttendanceItemsByPerson ( paramMap ) ;
/ * *
List < Map < String , Object > > attendanceItems = ( List < Map < String , Object > > ) dataMap . get ( "data" ) ;
* 获 得 人 员 综 合 工 时
/ * *
* /
* 获 得 人 员 综 合 工 时
Map < String , Object > workHourdataMap = basicsetService . getWorkHoursItemByPerson ( paramMap ) ;
* /
List < Map < String , Object > > workHourItems = ( List < Map < String , Object > > ) workHourdataMap . get ( "data" ) ;
Map < String , Object > workHourdataMap = basicsetService . getWorkHoursItemByPerson ( paramMap ) ;
List < Map < String , Object > > workHourItems = ( List < Map < String , Object > > ) workHourdataMap . get ( "data" ) ;
Map < String , List < Map < String , Object > > > attendaceResultMap = Maps . newHashMap ( ) ;
List < Map < String , Object > > attendaceResultByUser = attendaceGroupById . get ( userId ) ;
Map < String , List < Map < String , Object > > > attendaceResultMap = Maps . newHashMap ( ) ;
if ( attendaceResultByUser ! = null & & attendaceResultByUser . size ( ) > 0 ) {
List < Map < String , Object > > attendaceResultByUser = attendaceGroupById . get ( userId ) ;
attendaceResultMap = attendaceResultByUser . stream ( ) . collect ( Collectors . groupingBy ( e - > e . get ( "rq" ) . toString ( ) ) ) ;
if ( attendaceResultByUser ! = null & & attendaceResultByUser . size ( ) > 0 ) {
attendaceResultMap = attendaceResultByUser . stream ( ) . collect ( Collectors . groupingBy ( e - > e . get ( "rq" ) . toString ( ) ) ) ;
}
attendanceAnalysisService . attendanceAnalysis ( userId , analysisDateList , collect . get ( userMap . get ( "id" ) ) , attendanceItems , workHourItems , clockInTimeMap , attendaceResultMap ) ;
} catch ( Exception e ) {
log . error ( "AttendanceAnalysisJob userId:[{}],analysisDateList: [{}]" , userId , analysisDateList ) ;
log . error ( "AttendanceAnalysisJob error : [{}]" , e ) ;
}
}
attendanceAnalysisService . attendanceAnalysis ( userId , analysisDateList , collect . get ( userMap . get ( "id" ) ) , attendanceItems , workHourItems , clockInTimeMap , attendaceResultMap ) ;
}
}
Map < String , Object > param = Maps . newHashMap ( ) ;
Map < String , Object > param = Maps . newHashMap ( ) ;
param . put ( "startDate" , DateUtil . beforeDay ( allDateList . get ( 0 ) , 2 ) ) ;
param . put ( "startDate" , DateUtil . beforeDay ( useDate, 3 ) ) ;
param . put ( "endDate" , execut eDate) ;
param . put ( "endDate" , us eDate) ;
allowanceService . addAllowanceRecords ( param ) ;
allowanceService . addAllowanceRecords ( param ) ;
log . info ( "********AttendanceAnalysisJob end********" ) ;
log . info ( "********AttendanceAnalysisJob end********" ) ;
}
}
}
}