@ -1,8 +1,12 @@
package com.engine.kq.job ;
import com.engine.kq.biz.KQReportBiz ;
import com.engine.kq.biz.KQTimesArrayComInfo ;
import org.apache.commons.lang3.StringUtils ;
import weaver.conn.RecordSet ;
import weaver.general.TimeUtil ;
import weaver.general.Util ;
import weaver.hrm.User ;
import weaver.interfaces.schedule.BaseCronJob ;
import java.text.SimpleDateFormat ;
@ -28,7 +32,9 @@ public class SynClockInTimeJob extends BaseCronJob {
String lastdatetime = lastdate + " " + currenttime ;
try {
RecordSet rs1 = new RecordSet ( ) ;
rs . executeQuery ( "select * from uf_jbtz where ksrq>=? and jsrq<=?" , lastdate , currentdate ) ;
//只查询 来源 是 导入的
// rs.executeQuery("select * from uf_jbtz where ly=1 and ksrq>=? and jsrq<=?",lastdate,currentdate);
rs . executeQuery ( "select * from uf_jbtz where ksrq>=? and jsrq<=?" , lastdate , currentdate ) ;
while ( rs . next ( ) ) {
String mainid = Util . null2String ( rs . getString ( "id" ) ) ;
String userid = Util . null2String ( rs . getString ( "jbr" ) ) ;
@ -36,19 +42,39 @@ public class SynClockInTimeJob extends BaseCronJob {
String kssj = Util . null2String ( rs . getString ( "kssj" ) ) ;
String jsrq = Util . null2String ( rs . getString ( "jsrq" ) ) ;
String jssj = Util . null2String ( rs . getString ( "jssj" ) ) ;
String gzrq = Util . null2String ( rs . getString ( "gzrq" ) ) ;
String starttime = ksrq + " " + kssj + ":00" ;
String endtime = jsrq + " " + jssj + ":00" ;
User user = new User ( Integer . parseInt ( userid ) ) ;
String beforetwohours_starttime = addDateHour ( starttime , - 2 ) ;
String aftertwohours_endtime = addDateHour ( endtime , 2 ) ;
String earlystarttime = getEarlyStartTime ( beforetwohours_starttime , starttime , ksrq , userid ) ;
String afterendtime = getAfterEndTime ( endtime , aftertwohours_endtime , jsrq , userid ) ;
// String earlystarttime = getEarlyStartTime(beforetwohours_starttime,starttime,ksrq,userid);
// String afterendtime = getAfterEndTime(endtime,aftertwohours_endtime,jsrq,userid);
String earlystarttime = getEarlyStartTime ( gzrq , userid , user ) ;
String afterendtime = "" ;
if ( checkIsNightSerial ( userid , gzrq ) ) {
afterendtime = getAfterEndTime ( gzrq , userid , user ) ;
} else {
afterendtime = getAfterEndTime ( jsrq , userid , user ) ;
}
boolean bool = rs1 . executeUpdate ( "update uf_jbtz set zzdksj=?,zwdkrq=? where id=?" , earlystarttime , afterendtime , mainid ) ;
if ( bool ) {
rs . writeLog ( userid + " ------------ " + kssj + " ------------ " + jsrq + " ---------- " + bool ) ;
// 计算有效时长
rs . writeLog ( "计算有效时长开始" ) ;
rs . writeLog ( "earlystarttime===" + earlystarttime + ",afterendtime===" + afterendtime + ",gzrq===" + gzrq ) ;
// 来源为导入,且最早、最晚打卡时间,归属日期不为空的数据
if ( StringUtils . isNoneBlank ( earlystarttime , afterendtime , gzrq ) ) {
UpdateEffectiveDuration . execute ( mainid , userid , gzrq , earlystarttime , afterendtime , starttime , endtime ) ;
}
rs . writeLog ( "计算有效时长结束" ) ;
}
}
} catch ( Exception e ) {
@ -58,6 +84,182 @@ public class SynClockInTimeJob extends BaseCronJob {
rs . writeLog ( "---------- end to syn overtime work card time ----------" ) ;
}
public static String getEarlyStartTime ( String kqDate , String resourceId , User user ) {
String result = "" ;
Map < String , Object > data = null ;
Map < String , Object > signStatusInfo = null ;
RecordSet rs = new RecordSet ( ) ;
try {
String sql = " select kqdate, resourceid,groupid,serialid,serialnumber,workbegindate,workbegintime, " +
" workenddate,workendtime,workmins,signindate,signintime,signinid,signoutdate,signouttime,signoutid, " +
" attendanceMins,belatemins,graveBeLateMins,leaveearlymins,graveLeaveEarlyMins,absenteeismmins," +
" forgotcheckmins,forgotBeginWorkCheckMins,leaveMins,leaveInfo,evectionMins,outMins,otherinfo " +
" from kq_format_detail b " +
" where resourceid = " + resourceId + " and kqdate ='" + kqDate + "' " +
" order by serialnumber " ;
rs . execute ( sql ) ;
while ( rs . next ( ) ) {
String serialid = Util . null2String ( rs . getString ( "serialid" ) ) ;
String workbegindate = Util . null2String ( rs . getString ( "workbegindate" ) ) . trim ( ) ;
String workbegintime = Util . null2String ( rs . getString ( "workbegintime" ) ) . trim ( ) ;
String signinid = Util . null2String ( rs . getString ( "signinid" ) ) . trim ( ) ;
String signintime = Util . null2String ( rs . getString ( "signintime" ) ) . trim ( ) ;
String beLateMins = Util . null2String ( rs . getString ( "beLateMins" ) ) . trim ( ) ;
String graveBeLateMins = Util . null2String ( rs . getString ( "graveBeLateMins" ) ) . trim ( ) ;
String absenteeismMins = Util . null2String ( rs . getString ( "absenteeismMins" ) ) . trim ( ) ;
String forgotBeginWorkCheckMins = Util . null2String ( rs . getString ( "forgotBeginWorkCheckMins" ) ) . trim ( ) ;
int leaveMins = rs . getInt ( "leaveMins" ) ;
String leaveInfo = Util . null2String ( rs . getString ( "leaveInfo" ) ) ;
int evectionMins = rs . getInt ( "evectionMins" ) ;
int outMins = rs . getInt ( "outMins" ) ;
if ( serialid . length ( ) > 0 ) {
if ( workbegintime . length ( ) > 0 ) {
signStatusInfo = new HashMap ( ) ;
signStatusInfo . put ( "workdate" , workbegindate ) ;
signStatusInfo . put ( "worktime" , workbegintime ) ;
signStatusInfo . put ( "signtime" , signintime ) ;
signStatusInfo . put ( "beLateMins" , beLateMins ) ;
signStatusInfo . put ( "forgotBeginWorkCheckMins" , forgotBeginWorkCheckMins ) ;
signStatusInfo . put ( "graveBeLateMins" , graveBeLateMins ) ;
signStatusInfo . put ( "absenteeismMins" , absenteeismMins ) ;
signStatusInfo . put ( "leaveMins" , leaveMins ) ;
signStatusInfo . put ( "leaveInfo" , leaveInfo ) ;
signStatusInfo . put ( "evectionMins" , evectionMins ) ;
signStatusInfo . put ( "outMins" , outMins ) ;
data = new HashMap < > ( ) ;
data . put ( "workTime" , workbegintime ) ;
data . put ( "signTime" , signintime . length ( ) = = 0 ? "" : signintime ) ;
data . put ( "signStatus" , KQReportBiz . getSignStatus ( signStatusInfo , user , "on" ) ) ;
Map < String , Object > signDetailInfo = getSignDetailInfo ( signinid ) ;
data . put ( "addr" , Util . null2String ( signDetailInfo . get ( "addr" ) ) ) ;
}
} else {
signStatusInfo = new HashMap ( ) ;
signStatusInfo . put ( "leaveMins" , leaveMins ) ;
signStatusInfo . put ( "leaveInfo" , leaveInfo ) ;
signStatusInfo . put ( "evectionMins" , evectionMins ) ;
signStatusInfo . put ( "outMins" , outMins ) ;
if ( signinid . length ( ) > 0 ) {
data = new HashMap < > ( ) ;
data . put ( "signStatus" , KQReportBiz . getSignStatus ( signStatusInfo , user , "" ) ) ;
data . put ( "signTime" , signintime . length ( ) = = 0 ? "" : signintime ) ;
Map < String , Object > signDetailInfo = getSignDetailInfo ( signinid ) ;
data . put ( "addr" , Util . null2String ( signDetailInfo . get ( "addr" ) ) ) ;
} else {
data = new HashMap < > ( ) ;
data . put ( "signStatus" , KQReportBiz . getSignStatus ( signStatusInfo , user , "" ) ) ;
}
}
}
if ( data . containsKey ( "signTime" ) ) {
String signTime = data . get ( "signTime" ) . toString ( ) ;
if ( signTime ! = null & & ! "" . equals ( signTime ) ) {
result = kqDate + " " + signTime ;
}
}
} catch ( Exception e ) {
rs . writeLog ( e ) ;
}
return result ;
}
public static String getAfterEndTime ( String kqDate , String resourceId , User user ) {
String result = "" ;
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo ( ) ;
Map < String , Object > data = null ;
Map < String , Object > signStatusInfo = null ;
RecordSet rs = new RecordSet ( ) ;
try {
String sql = " select kqdate, resourceid,groupid,serialid,serialnumber,workbegindate,workbegintime, " +
" workenddate,workendtime,workmins,signindate,signintime,signinid,signoutdate,signouttime,signoutid, " +
" attendanceMins,belatemins,graveBeLateMins,leaveearlymins,graveLeaveEarlyMins,absenteeismmins," +
" forgotcheckmins,forgotBeginWorkCheckMins,leaveMins,leaveInfo,evectionMins,outMins,otherinfo " +
" from kq_format_detail b " +
" where resourceid = " + resourceId + " and kqdate ='" + kqDate + "' " +
" order by serialnumber " ;
rs . execute ( sql ) ;
while ( rs . next ( ) ) {
String serialid = Util . null2String ( rs . getString ( "serialid" ) ) ;
String workenddate = Util . null2String ( rs . getString ( "workenddate" ) ) . trim ( ) ;
String workendtime = Util . null2String ( rs . getString ( "workendtime" ) ) . trim ( ) ;
String signoutid = Util . null2String ( rs . getString ( "signoutid" ) ) . trim ( ) ;
String signouttime = Util . null2String ( rs . getString ( "signouttime" ) ) . trim ( ) ;
String leaveEarlyMins = Util . null2String ( rs . getString ( "leaveEarlyMins" ) ) . trim ( ) ;
String graveLeaveEarlyMins = Util . null2String ( rs . getString ( "graveLeaveEarlyMins" ) ) . trim ( ) ;
String absenteeismMins = Util . null2String ( rs . getString ( "absenteeismMins" ) ) . trim ( ) ;
String forgotCheckMins = Util . null2String ( rs . getString ( "forgotCheckMins" ) ) . trim ( ) ;
int leaveMins = rs . getInt ( "leaveMins" ) ;
String leaveInfo = Util . null2String ( rs . getString ( "leaveInfo" ) ) ;
int evectionMins = rs . getInt ( "evectionMins" ) ;
int outMins = rs . getInt ( "outMins" ) ;
if ( serialid . length ( ) > 0 ) {
if ( workendtime . length ( ) > 0 ) {
signStatusInfo = new HashMap ( ) ;
signStatusInfo . put ( "workdate" , workenddate ) ;
signStatusInfo . put ( "worktime" , kqTimesArrayComInfo . turn48to24Time ( workendtime ) ) ;
signStatusInfo . put ( "signtime" , signouttime ) ;
signStatusInfo . put ( "leaveEarlyMins" , leaveEarlyMins ) ;
signStatusInfo . put ( "graveLeaveEarlyMins" , graveLeaveEarlyMins ) ;
signStatusInfo . put ( "forgotCheckMins" , forgotCheckMins ) ;
signStatusInfo . put ( "absenteeismMins" , absenteeismMins ) ;
signStatusInfo . put ( "leaveMins" , leaveMins ) ;
signStatusInfo . put ( "leaveInfo" , leaveInfo ) ;
signStatusInfo . put ( "evectionMins" , evectionMins ) ;
signStatusInfo . put ( "outMins" , outMins ) ;
data = new HashMap < > ( ) ;
data . put ( "workTime" , kqTimesArrayComInfo . turn48to24Time ( workendtime ) ) ;
data . put ( "signTime" , signouttime . length ( ) = = 0 ? "" : signouttime ) ;
data . put ( "signStatus" , KQReportBiz . getSignStatus ( signStatusInfo , user , "off" ) ) ;
Map < String , Object > signDetailInfo = getSignDetailInfo ( signoutid ) ;
data . put ( "addr" , Util . null2String ( signDetailInfo . get ( "addr" ) ) ) ;
}
} else {
signStatusInfo = new HashMap ( ) ;
signStatusInfo . put ( "leaveMins" , leaveMins ) ;
signStatusInfo . put ( "leaveInfo" , leaveInfo ) ;
signStatusInfo . put ( "evectionMins" , evectionMins ) ;
signStatusInfo . put ( "outMins" , outMins ) ;
if ( signoutid . length ( ) > 0 ) {
data = new HashMap < > ( ) ;
data . put ( "signStatus" , KQReportBiz . getSignStatus ( signStatusInfo , user , "" ) ) ;
data . put ( "signTime" , signouttime . length ( ) = = 0 ? "" : signouttime ) ;
Map < String , Object > signDetailInfo = getSignDetailInfo ( signoutid ) ;
data . put ( "addr" , Util . null2String ( signDetailInfo . get ( "addr" ) ) ) ;
} else {
data = new HashMap < > ( ) ;
data . put ( "signStatus" , KQReportBiz . getSignStatus ( signStatusInfo , user , "" ) ) ;
}
}
}
if ( data . containsKey ( "signTime" ) ) {
String signTime = data . get ( "signTime" ) . toString ( ) ;
if ( signTime ! = null & & ! "" . equals ( signTime ) ) {
result = kqDate + " " + signTime ;
}
}
} catch ( Exception e ) {
rs . writeLog ( e ) ;
}
return result ;
}
public static Map < String , Object > getSignDetailInfo ( String id ) {
Map < String , Object > resultMap = new HashMap < > ( ) ;
RecordSet rs = new RecordSet ( ) ;
String sql = "" ;
try {
sql = " select addr from hrmschedulesign where id = ? " ;
rs . executeQuery ( sql , id ) ;
if ( rs . next ( ) ) {
resultMap . put ( "addr" , Util . null2String ( rs . getString ( "addr" ) ) ) ;
}
} catch ( Exception e ) {
rs . writeLog ( e ) ;
}
return resultMap ;
}
/ * *
* 获 取 最 早 开 始 日 期 时 间
* @param beforetwohours_starttime
@ -88,10 +290,10 @@ public class SynClockInTimeJob extends BaseCronJob {
String signTime = Util . null2String ( rs . getString ( "signTime" ) ) ;
String signdatetime = signDate + " " + signTime ;
boolean bool = belongCalendar ( signdatetime , beforetwohours_starttime , starttime ) ;
if ( bool ) {
list . add ( format . parse ( signdatetime ) ) ;
}
// boolean bool = belongCalendar(signdatetime, beforetwohours_starttime, starttime);
// if (bool) {
list . add ( format . parse ( signdatetime ) ) ;
// }
}
if ( list . size ( ) > 0 ) {
if ( list . size ( ) > 1 ) {
@ -127,7 +329,7 @@ public class SynClockInTimeJob extends BaseCronJob {
" and (signDate is not null and signDate>='" + jsrq + "') " +
" and (signDate is not null and signDate<='" + jsrq + "') " +
" and (loginId is not null and loginId<>'') " +
" and signType= 1 "+
" and signType= 2 "+
" and (b.status = 0 or b.status = 1 or b.status = 2 or b.status = 3)" +
" and userId in (" + userid + ")" +
" order by signDate,signTime" ) ;
@ -137,10 +339,10 @@ public class SynClockInTimeJob extends BaseCronJob {
String signTime = Util . null2String ( rs . getString ( "signTime" ) ) ;
String signdatetime = signDate + " " + signTime ;
boolean bool = belongCalendar ( signdatetime , endtime , aftertwohours_endtime ) ;
if ( bool ) {
list . add ( format . parse ( signdatetime ) ) ;
}
// boolean bool = belongCalendar(signdatetime, endtime, aftertwohours_endtime);
// if (bool) {
list . add ( format . parse ( signdatetime ) ) ;
// }
}
if ( list . size ( ) > 0 ) {
if ( list . size ( ) > 1 ) {
@ -167,17 +369,23 @@ public class SynClockInTimeJob extends BaseCronJob {
boolean b = false ;
SimpleDateFormat format = new SimpleDateFormat ( "yyyy-MM-dd HH:mm:ss" ) ;
try {
Date nowTime = format . parse ( nowString ) ;
Calendar date = Calendar . getInstance ( ) ;
date . setTime ( nowTime ) ;
Date beginTime = format . parse ( beginString ) ;
Calendar begin = Calendar . getInstance ( ) ;
begin . setTime ( beginTime ) ;
Date endTime = format . parse ( endString ) ;
Calendar end = Calendar . getInstance ( ) ;
end . setTime ( endTime ) ;
if ( date . after ( begin ) & & date . before ( end ) ) { //在时间段内
if ( nowString . equals ( beginString ) ) {
b = true ;
} else if ( nowString . equals ( endString ) ) {
b = true ;
} else {
Date nowTime = format . parse ( nowString ) ;
Calendar date = Calendar . getInstance ( ) ;
date . setTime ( nowTime ) ;
Date beginTime = format . parse ( beginString ) ;
Calendar begin = Calendar . getInstance ( ) ;
begin . setTime ( beginTime ) ;
Date endTime = format . parse ( endString ) ;
Calendar end = Calendar . getInstance ( ) ;
end . setTime ( endTime ) ;
if ( date . after ( begin ) & & date . before ( end ) ) { //在时间段内
b = true ;
}
}
} catch ( Exception e ) {
e . printStackTrace ( ) ;
@ -237,4 +445,24 @@ public class SynClockInTimeJob extends BaseCronJob {
return "" ;
}
/ * *
* 判 断 班 次 是 否 是 跨 夜 班 次
* @param userid
* @param date
* @return
* /
public static boolean checkIsNightSerial ( String userid , String date ) {
boolean bool = false ;
RecordSet rs = new RecordSet ( ) ;
String night_serialids = rs . getPropValue ( "nbjh_ygdjblc" , "night_serialids" ) ;
rs . executeQuery ( "select * from kq_format_detail where resourceid = ? and kqdate = ? " , userid , date ) ;
while ( rs . next ( ) ) {
String serialid = Util . null2String ( rs . getString ( "serialid" ) ) ;
if ( ( "," + night_serialids + "," ) . contains ( ( "," + serialid + "," ) ) ) {
bool = true ;
}
}
return bool ;
}
}