@ -216,7 +216,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
//请假人的请假区间内每一天的日期类型信息
//请假人的请假区间内每一天的日期类型信息
Map < String , List < String > > restDayInfo = removeNonWorkDayRange ? getRestDayWithEmpId ( leaveEmpIdList , leaveType , startDate , endDate ) : new HashMap < > ( ) ;
Map < String , List < String > > restDayInfo = removeNonWorkDayRange ? getRestDayWithEmpId ( leaveEmpIdList , leaveType , startDate , endDate ) : new HashMap < > ( ) ;
//请假人的请假区间内的排班结果
//请假人的请假区间内的排班结果
Map < String , List < Map < String , Object > > > scheduleInfoMap = ( removeNonWorkDayRange | | removeNonWorkTimeRange ) ? getScheduleInfoWithEmpId ( leaveEmpIdList , startDate , endDate) : new HashMap < > ( ) ;
Map < String , List < Map < String , Object > > > scheduleInfoMap = ( removeNonWorkDayRange | | removeNonWorkTimeRange ) ? getScheduleInfoWithEmpId ( leaveEmpIdList , startDate , DateUtil. AfterDay ( endDate, 1 ) ) : new HashMap < > ( ) ;
//收集未关联假期余额的请假明细数据
//收集未关联假期余额的请假明细数据
List < Map < String , String > > simpleLeaveDetailList = createSimpleLeaveDetailList ( leaveEmpIdList , leaveDateList , removeNonWorkDayRange , scheduleInfoMap ,
List < Map < String , String > > simpleLeaveDetailList = createSimpleLeaveDetailList ( leaveEmpIdList , leaveDateList , removeNonWorkDayRange , scheduleInfoMap ,
@ -373,22 +373,67 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
simpleLeaveDetailItem . put ( "jsrq" , leaveDate ) ;
simpleLeaveDetailItem . put ( "jsrq" , leaveDate ) ;
simpleLeaveDetailItem . put ( "kssj" , startTime ) ;
simpleLeaveDetailItem . put ( "kssj" , startTime ) ;
simpleLeaveDetailItem . put ( "jssj" , endTime ) ;
simpleLeaveDetailItem . put ( "jssj" , endTime ) ;
//获取班次id
//获取当天班次id
String bcId = Util . null2String ( dateToBcxxMap . get ( leaveDate ) ) . split ( "-" ) [ 0 ] ;
String currentDayBcId = Util . null2String ( dateToBcxxMap . get ( leaveDate ) ) . split ( "-" ) [ 0 ] ;
//需要自动移除时间区间内的非工作时长,且请假方式为“指定时间区间”时,去除当前明细中开始时间、结束时间之间的非工作时长
String sql = "" ;
if ( "" . equals ( bcId ) ) {
List < Map < String , Object > > bcDetailData ;
String endDate = leaveDate ;
int scMinutes = 0 ;
//开始时时和结束时间存在跨天情况时,即开始时间大于等于结束时间
if ( startTime . compareTo ( endTime ) > = 0 ) {
String nextDay = DateUtil . AfterDay ( leaveDate , 1 ) ;
endDate = nextDay ;
//获取次日班次id
String nextDayBcId = Util . null2String ( dateToBcxxMap . get ( nextDay ) ) . split ( "-" ) [ 0 ] ;
simpleLeaveDetailItem . put ( "jsrq" , nextDay ) ;
int currentDayScMinutes = 0 ;
int nextDayScMinutes = 0 ;
//需要自动移除时间区间内的非工作时长,且请假方式为“指定时间区间”时,去除当前明细中开始时间、结束时间之间的非工作时长
if ( ! "" . equals ( currentDayBcId ) ) {
//查询当天班次明细
sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + currentDayBcId ;
bcDetailData = DbTools . getSqlToList ( sql ) ;
bcDetailData = bcDetailData . stream ( ) . filter ( e - > countBdlxList . contains ( Util . null2String ( e . get ( "bdlx" ) ) ) ) . collect ( Collectors . toList ( ) ) ;
//获取需要累计的班段时长区间和请假区间存在交集的分钟数
currentDayScMinutes = Utils . removeTime ( leaveDate + " " + startTime , nextDay + " " + "00:00" , bcDetailData , leaveDate ) ;
} else {
currentDayScMinutes = DateUtil . getBetWeenMinutes ( leaveDate + " " + startTime , nextDay + " " + "00:00" ) ;
}
if ( ! "" . equals ( nextDayBcId ) ) {
//查询次日班次明细
sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + nextDayBcId ;
bcDetailData = DbTools . getSqlToList ( sql ) ;
bcDetailData = bcDetailData . stream ( ) . filter ( e - > countBdlxList . contains ( Util . null2String ( e . get ( "bdlx" ) ) ) ) . collect ( Collectors . toList ( ) ) ;
//获取需要累计的班段时长区间和请假区间存在交集的分钟数
nextDayScMinutes = Utils . removeTime ( nextDay + " " + "00:00" , nextDay + " " + endTime , bcDetailData , nextDay ) ;
} else {
nextDayScMinutes = DateUtil . getBetWeenMinutes ( nextDay + " " + "00:00" , nextDay + " " + endTime ) ;
}
//组装初步的请假时长
//组装初步的请假时长
simpleLeaveDetailItem . put ( "qjsc" , String . format ( "%.2f" , DateUtil . getBetWeenMinutes ( leaveDate + " " + startTime , leaveDate + " " + endTime ) / 60.0 ) ) ;
s cMinutes = currentDayScMinutes + nextDayScMinutes ;
} else {
} else {
//查询班次明细
//需要自动移除时间区间内的非工作时长,且请假方式为“指定时间区间”时,去除当前明细中开始时间、结束时间之间的非工作时长
String sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + bcId ;
if ( "" . equals ( currentDayBcId ) ) {
List < Map < String , Object > > bcDetailData = DbTools . getSqlToList ( sql ) ;
//组装初步的请假时长
bcDetailData = bcDetailData . stream ( ) . filter ( e - > countBdlxList . contains ( Util . null2String ( e . get ( "bdlx" ) ) ) ) . collect ( Collectors . toList ( ) ) ;
scMinutes = DateUtil . getBetWeenMinutes ( leaveDate + " " + startTime , leaveDate + " " + endTime ) ;
//获取需要累计的班段时长区间和请假区间存在交集的分钟数
} else {
int scMinutes = Utils . removeTime ( leaveDate + " " + startTime , leaveDate + " " + endTime , bcDetailData , leaveDate ) ;
//查询班次明细
//组装初步的请假时长
sql = "select id, bdlx, gsrq, kssj as dtkssj, jssj as dtjssj from uf_jcl_kq_bcxx_dt1 where mainid = " + currentDayBcId ;
simpleLeaveDetailItem . put ( "qjsc" , String . format ( "%.2f" , scMinutes / 60.0 ) ) ;
bcDetailData = DbTools . getSqlToList ( sql ) ;
bcDetailData = bcDetailData . stream ( ) . filter ( e - > countBdlxList . contains ( Util . null2String ( e . get ( "bdlx" ) ) ) ) . collect ( Collectors . toList ( ) ) ;
//获取需要累计的班段时长区间和请假区间存在交集的分钟数
scMinutes = Utils . removeTime ( leaveDate + " " + startTime , leaveDate + " " + endTime , bcDetailData , leaveDate ) ;
}
}
//增加加班计划中的数据,加班计划明细中的数据作为“加班计划”班段类型数据的补充
if ( countBdlxList . contains ( ClassSegmentTypeEnum . OVERTIME_PLAN . getKey ( ) ) ) {
sql = "select b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry =? and b.ksrq>=? and b.jsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1" ;
List < Map < String , Object > > overtimePlanList = DbTools . getSqlToList ( sql , leaveEmpId , leaveDate , leaveDate ) ;
int scMinutesInOvertimePlan = Utils . removeTimeWithOvertimePlan ( leaveDate + " " + startTime , endDate + " " + endTime , overtimePlanList ) ;
scMinutes = scMinutes + scMinutesInOvertimePlan ;
}
}
//组装初步的请假时长
simpleLeaveDetailItem . put ( "qjsc" , String . format ( "%.2f" , scMinutes / 60.0 ) ) ;
simpleLeaveDetailList . add ( simpleLeaveDetailItem ) ;
simpleLeaveDetailList . add ( simpleLeaveDetailItem ) ;
} else if ( leaveMode . equals ( AskAndEvctionWayEnum . HOUR . getKey ( ) ) ) {
} else if ( leaveMode . equals ( AskAndEvctionWayEnum . HOUR . getKey ( ) ) ) {
simpleLeaveDetailItem = new HashMap < > ( ) ;
simpleLeaveDetailItem = new HashMap < > ( ) ;