@ -45,7 +45,6 @@ import org.springframework.transaction.annotation.Transactional;
 
		
	
		
			
				import   java.math.BigDecimal ;  
		
	
		
			
				import   java.math.RoundingMode ;  
		
	
		
			
				import   java.text.DecimalFormat ;  
		
	
		
			
				import   java.text.SimpleDateFormat ;  
		
	
		
			
				import   java.time.* ;  
		
	
		
			
				import   java.time.format.DateTimeFormatter ;  
		
	
		
			
				import   java.time.temporal.TemporalAdjusters ;  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -63,7 +62,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
				 
		
	
		
			
					 //上班打卡状态 0上 1下  
		
	
		
			
					 public   static   final   String   Clocking   =   " 0 " ;  
		
	
		
			
					 public   static   final   String   OffDuty =   " 1 " ;  
		
	
		
			
					 public   static   final   String   OffDuty   =   " 1 " ;  
		
	
		
			
				 
		
	
		
			
					 @Autowired  
		
	
		
			
					 private   IBgtProjectRecruitApplyService   iBgtProjectRecruitApplyService ;  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -72,7 +71,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
					 private   IBgtProjectRecruitService   iBgtProjectRecruitService ;  
		
	
		
			
				 
		
	
		
			
					 @Autowired  
		
	
		
			
					 private    IWgzLeaveService   iWgzLeaveService ;  
		
	
		
			
					 private   IWgzLeaveService   iWgzLeaveService ;  
		
	
		
			
				 
		
	
		
			
					 @Autowired  
		
	
		
			
					 private   IFbsProjectTaskService   taskService ;  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -82,72 +81,72 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
				 
		
	
		
			
				 
		
	
		
			
					 @Override  
		
	
		
			
				     public   WgzAttendance   queryById ( Long   id ) {  
		
	
		
			
				         return   getById ( id ) ;  
		
	
		
			
				     }  
		
	
		
			
					 public   WgzAttendance   queryById ( Long   id )   {  
		
	
		
			
						 return   getById ( id ) ;  
		
	
		
			
					 }  
		
	
		
			
				 
		
	
		
			
				     @Override  
		
	
		
			
				     public   TableDataInfo < WgzAttendance >   queryPageList ( WgzAttendanceQueryBo   bo )   {  
		
	
		
			
				         Page < WgzAttendance >   result   =   page ( PageUtils . buildPage ( ) ,   buildQueryWrapper ( bo ) ) ;  
		
	
		
			
				         return   PageUtils . buildDataInfo ( result ) ;  
		
	
		
			
				     }  
		
	
		
			
					 @Override  
		
	
		
			
					 public   TableDataInfo < WgzAttendance >   queryPageList ( WgzAttendanceQueryBo   bo )   {  
		
	
		
			
						 Page < WgzAttendance >   result   =   page ( PageUtils . buildPage ( ) ,   buildQueryWrapper ( bo ) ) ;  
		
	
		
			
						 return   PageUtils . buildDataInfo ( result ) ;  
		
	
		
			
					 }  
		
	
		
			
				 
		
	
		
			
				     @Override  
		
	
		
			
				     public   List < WgzAttendance >   queryList ( WgzAttendanceQueryBo   bo )   {  
		
	
		
			
				         return   list ( buildQueryWrapper ( bo ) ) ;  
		
	
		
			
				     }  
		
	
		
			
					 @Override  
		
	
		
			
					 public   List < WgzAttendance >   queryList ( WgzAttendanceQueryBo   bo )   {  
		
	
		
			
						 return   list ( buildQueryWrapper ( bo ) ) ;  
		
	
		
			
					 }  
		
	
		
			
				 
		
	
		
			
				     private   LambdaQueryWrapper < WgzAttendance >   buildQueryWrapper ( WgzAttendanceQueryBo   bo )   {  
		
	
		
			
				         Map < String ,   Object >   params   =   bo . getParams ( ) ;  
		
	
		
			
				         LambdaQueryWrapper < WgzAttendance >   lqw   =   Wrappers . lambdaQuery ( ) ;  
		
	
		
			
				         lqw . eq ( bo . getRecruitId ( )   ! =   null ,   WgzAttendance : : getRecruitId ,   bo . getRecruitId ( ) ) ;  
		
	
		
			
				         lqw . eq ( bo . getUserId ( )   ! =   null ,   WgzAttendance : : getUserId ,   bo . getUserId ( ) ) ;  
		
	
		
			
				         lqw . eq ( bo . getLeaveMarkId ( )   ! =   null ,   WgzAttendance : : getLeaveMarkId ,   bo . getLeaveMarkId ( ) ) ;  
		
	
		
			
				         lqw . eq ( bo . getDailyWage ( )   ! =   null ,   WgzAttendance : : getDailyWage ,   bo . getDailyWage ( ) ) ;  
		
	
		
			
				         lqw . eq ( bo . getDate ( )   ! =   null ,   WgzAttendance : : getDate ,   bo . getDate ( ) ) ;  
		
	
		
			
				         lqw . eq ( StrUtil . isNotBlank ( bo . getPnchOsition ( ) ) ,   WgzAttendance : : getPnchOsition ,   bo . getPnchOsition ( ) ) ;  
		
	
		
			
				         lqw . eq ( bo . getClockInTime ( )   ! =   null ,   WgzAttendance : : getClockInTime ,   bo . getClockInTime ( ) ) ;  
		
	
		
			
				         lqw . eq ( bo . getClockOutTime ( )   ! =   null ,   WgzAttendance : : getClockOutTime ,   bo . getClockOutTime ( ) ) ;  
		
	
		
			
				         lqw . eq ( bo . getLate ( )   ! =   null ,   WgzAttendance : : getLate ,   bo . getLate ( ) ) ;  
		
	
		
			
				         lqw . eq ( bo . getLateTime ( )   ! =   null ,   WgzAttendance : : getLateTime ,   bo . getLateTime ( ) ) ;  
		
	
		
			
				         lqw . eq ( bo . getEarlyLeave ( )   ! =   null ,   WgzAttendance : : getEarlyLeave ,   bo . getEarlyLeave ( ) ) ;  
		
	
		
			
				         lqw . eq ( bo . getEarlyLeaveTime ( )   ! =   null ,   WgzAttendance : : getEarlyLeaveTime ,   bo . getEarlyLeaveTime ( ) ) ;  
		
	
		
			
				         lqw . eq ( bo . getMissedIn ( )   ! =   null ,   WgzAttendance : : getMissedIn ,   bo . getMissedIn ( ) ) ;  
		
	
		
			
				         lqw . eq ( bo . getMissedOut ( )   ! =   null ,   WgzAttendance : : getMissedOut ,   bo . getMissedOut ( ) ) ;  
		
	
		
			
				         lqw . eq ( StrUtil . isNotBlank ( bo . getExceptionType ( ) ) ,   WgzAttendance : : getExceptionType ,   bo . getExceptionType ( ) ) ;  
		
	
		
			
				         return   lqw ;  
		
	
		
			
				     }  
		
	
		
			
					 private   LambdaQueryWrapper < WgzAttendance >   buildQueryWrapper ( WgzAttendanceQueryBo   bo )   {  
		
	
		
			
						 Map < String ,   Object >   params   =   bo . getParams ( ) ;  
		
	
		
			
						 LambdaQueryWrapper < WgzAttendance >   lqw   =   Wrappers . lambdaQuery ( ) ;  
		
	
		
			
						 lqw . eq ( bo . getRecruitId ( )   ! =   null ,   WgzAttendance : : getRecruitId ,   bo . getRecruitId ( ) ) ;  
		
	
		
			
						 lqw . eq ( bo . getUserId ( )   ! =   null ,   WgzAttendance : : getUserId ,   bo . getUserId ( ) ) ;  
		
	
		
			
						 lqw . eq ( bo . getLeaveMarkId ( )   ! =   null ,   WgzAttendance : : getLeaveMarkId ,   bo . getLeaveMarkId ( ) ) ;  
		
	
		
			
						 lqw . eq ( bo . getDailyWage ( )   ! =   null ,   WgzAttendance : : getDailyWage ,   bo . getDailyWage ( ) ) ;  
		
	
		
			
						 lqw . eq ( bo . getDate ( )   ! =   null ,   WgzAttendance : : getDate ,   bo . getDate ( ) ) ;  
		
	
		
			
						 lqw . eq ( StrUtil . isNotBlank ( bo . getPnchOsition ( ) ) ,   WgzAttendance : : getPnchOsition ,   bo . getPnchOsition ( ) ) ;  
		
	
		
			
						 lqw . eq ( bo . getClockInTime ( )   ! =   null ,   WgzAttendance : : getClockInTime ,   bo . getClockInTime ( ) ) ;  
		
	
		
			
						 lqw . eq ( bo . getClockOutTime ( )   ! =   null ,   WgzAttendance : : getClockOutTime ,   bo . getClockOutTime ( ) ) ;  
		
	
		
			
						 lqw . eq ( bo . getLate ( )   ! =   null ,   WgzAttendance : : getLate ,   bo . getLate ( ) ) ;  
		
	
		
			
						 lqw . eq ( bo . getLateTime ( )   ! =   null ,   WgzAttendance : : getLateTime ,   bo . getLateTime ( ) ) ;  
		
	
		
			
						 lqw . eq ( bo . getEarlyLeave ( )   ! =   null ,   WgzAttendance : : getEarlyLeave ,   bo . getEarlyLeave ( ) ) ;  
		
	
		
			
						 lqw . eq ( bo . getEarlyLeaveTime ( )   ! =   null ,   WgzAttendance : : getEarlyLeaveTime ,   bo . getEarlyLeaveTime ( ) ) ;  
		
	
		
			
						 lqw . eq ( bo . getMissedIn ( )   ! =   null ,   WgzAttendance : : getMissedIn ,   bo . getMissedIn ( ) ) ;  
		
	
		
			
						 lqw . eq ( bo . getMissedOut ( )   ! =   null ,   WgzAttendance : : getMissedOut ,   bo . getMissedOut ( ) ) ;  
		
	
		
			
						 lqw . eq ( StrUtil . isNotBlank ( bo . getExceptionType ( ) ) ,   WgzAttendance : : getExceptionType ,   bo . getExceptionType ( ) ) ;  
		
	
		
			
						 return   lqw ;  
		
	
		
			
					 }  
		
	
		
			
				 
		
	
		
			
				     @Override  
		
	
		
			
				     public   Boolean   insert ( WgzAttendance   bo )   {  
		
	
		
			
				         WgzAttendance   add   =   BeanUtil . toBean ( bo ,   WgzAttendance . class ) ;  
		
	
		
			
				         validEntityBeforeSave ( add ) ;  
		
	
		
			
				         return   save ( add ) ;  
		
	
		
			
				     }  
		
	
		
			
					 @Override  
		
	
		
			
					 public   Boolean   insert ( WgzAttendance   bo )   {  
		
	
		
			
						 WgzAttendance   add   =   BeanUtil . toBean ( bo ,   WgzAttendance . class ) ;  
		
	
		
			
						 validEntityBeforeSave ( add ) ;  
		
	
		
			
						 return   save ( add ) ;  
		
	
		
			
					 }  
		
	
		
			
				 
		
	
		
			
				     @Override  
		
	
		
			
				     public   Boolean   update ( WgzAttendance   bo )   {  
		
	
		
			
				         WgzAttendance   update   =   BeanUtil . toBean ( bo ,   WgzAttendance . class ) ;  
		
	
		
			
				         validEntityBeforeSave ( update ) ;  
		
	
		
			
				         return   updateById ( update ) ;  
		
	
		
			
				     }  
		
	
		
			
					 @Override  
		
	
		
			
					 public   Boolean   update ( WgzAttendance   bo )   {  
		
	
		
			
						 WgzAttendance   update   =   BeanUtil . toBean ( bo ,   WgzAttendance . class ) ;  
		
	
		
			
						 validEntityBeforeSave ( update ) ;  
		
	
		
			
						 return   updateById ( update ) ;  
		
	
		
			
					 }  
		
	
		
			
				 
		
	
		
			
				     /**  
		
	
		
			
				      * 保存前的数据校验 
		
	
		
			
				      * 
		
	
		
			
				      * @param entity 实体类数据 
		
	
		
			
				      */ 
		
	
		
			
				     private   void   validEntityBeforeSave ( WgzAttendance   entity ) {  
		
	
		
			
				         //TODO 做一些数据校验,如唯一约束  
		
	
		
			
				     }  
		
	
		
			
					 /**  
		
	
		
			
					  * 保存前的数据校验 
		
	
		
			
					  * 
		
	
		
			
					  * @param entity 实体类数据 
		
	
		
			
					  */ 
		
	
		
			
					 private   void   validEntityBeforeSave ( WgzAttendance   entity )   {  
		
	
		
			
						 //TODO 做一些数据校验,如唯一约束  
		
	
		
			
					 }  
		
	
		
			
				 
		
	
		
			
				     @Override  
		
	
		
			
				     public   Boolean   deleteWithValidByIds ( Collection < Long >   ids ,   Boolean   isValid )   {  
		
	
		
			
				         if ( isValid ) {  
		
	
		
			
				             //TODO 做一些业务上的校验,判断是否需要校验  
		
	
		
			
				         }  
		
	
		
			
				         return   removeByIds ( ids ) ;  
		
	
		
			
				     }  
		
	
		
			
					 @Override  
		
	
		
			
					 public   Boolean   deleteWithValidByIds ( Collection < Long >   ids ,   Boolean   isValid )   {  
		
	
		
			
						 if   ( isValid )   {  
		
	
		
			
							 //TODO 做一些业务上的校验,判断是否需要校验  
		
	
		
			
						 }  
		
	
		
			
						 return   removeByIds ( ids ) ;  
		
	
		
			
					 }  
		
	
		
			
				 
		
	
		
			
				 
		
	
		
			
					 /**  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -177,8 +176,8 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
						 //5、查看当前人、当前工地、当天的打卡记录  
		
	
		
			
						 String   formattedDate   =   LocalDate . now ( ) . format ( DateTimeFormatter . ofPattern ( " yyyy-MM-dd " ) ) ;  
		
	
		
			
						 WgzAttendance   we   =   publicFindByUserIdWait ( appUserId ,   by . getRecruitId ( ) ,   formattedDate ) ;  
		
	
		
			
						 if   ( we   ! = null   & &   we . getLeaveMarkId ( )   ! =   null   & &   we . getLeaveMarkId ( ) ! =   0 )   {  
		
	
		
			
							 throw   new   RuntimeException ( " 您有已通过的请假申请,请假时间为: " + formattedDate ) ;  
		
	
		
			
						 if   ( we   ! =   null   & &   we . getLeaveMarkId ( )   ! =   null   & &   we . getLeaveMarkId ( )   ! =   0 )   {  
		
	
		
			
							 throw   new   RuntimeException ( " 您有已通过的请假申请,请假时间为: "   +   formattedDate ) ;  
		
	
		
			
						 }  
		
	
		
			
						 //6、组装完整的打卡信息  
		
	
		
			
						 WgzAttendance   wgzAttendance   =   new   WgzAttendance ( ) .  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -188,10 +187,10 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
							 setDate ( LocalDate . now ( ) ) ;  
		
	
		
			
						 LocalDateTime   now   =   LocalDateTime . now ( ) ;   //当前完整年月日时分秒  
		
	
		
			
						 LocalTime   localTime   =   now . toLocalTime ( ) ;   //获取时分秒  
		
	
		
			
						 if   ( we   ! = null )   {  
		
	
		
			
						 if   ( we   ! =   null )   {  
		
	
		
			
							 //获取上次打卡时间与这次打卡时间的间隔是否超过3分钟  
		
	
		
			
							 boolean   flag   =   isMinutesDifferenceGreaterThanThree ( we . getClockInTime ( ) ,   now ) ;  
		
	
		
			
							 if   ( ! flag ) {  
		
	
		
			
							 if   ( ! flag )   {  
		
	
		
			
								 throw   new   RuntimeException ( " 打卡时间间隔不能少于3分钟 " ) ;  
		
	
		
			
							 }  
		
	
		
			
							 wgzAttendance . setClockOutTime ( now ) ;  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -201,11 +200,11 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
								 wgzAttendance . setId ( we . getId ( ) ) ;  
		
	
		
			
								 wgzAttendance . setEarlyLeave ( 1 ) ;   //早退  
		
	
		
			
								 wgzAttendance . setEarlyLeaveTime ( now ) ;  
		
	
		
			
								 wgzAttendance . setExceptionType ( exceptionType + " 2, " ) ;  
		
	
		
			
								 wgzAttendance . setExceptionType ( exceptionType   +   " 2, " ) ;  
		
	
		
			
								 wgzAttendance . setPnchOsitionX ( req . getPnchOsition ( ) ) ;  
		
	
		
			
							 }  
		
	
		
			
							 return   baseMapper . updateById ( wgzAttendance )   >   0 ;  
		
	
		
			
						 } else {  
		
	
		
			
						 }   else   {  
		
	
		
			
							 wgzAttendance . setClockInTime ( now ) ;  
		
	
		
			
							 LocalTime   beginWorkTime   =   appById . getBeginWorkTime ( ) ;   //上班  
		
	
		
			
							 if   ( ! localTime . isBefore ( beginWorkTime ) )   {  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -220,8 +219,9 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
				 
		
	
		
			
					 /**  
		
	
		
			
					 * 判断两个 LocalDateTime 之间的差值分钟数是否超过 3  
		
	
		
			
					 *  
		
	
		
			
					 * @param startTime 开始时间  
		
	
		
			
					 * @param endTime 结束时间  
		
	
		
			
					 * @param endTime    结束时间  
		
	
		
			
					 * @return 如果差值分钟数超过 3 返回 true,   
		
	
		
			
					 */  
		
	
		
			
					 public   static   boolean   isMinutesDifferenceGreaterThanThree ( LocalDateTime   startTime ,   LocalDateTime   endTime )   {  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -244,17 +244,17 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
						 //2、获取今日用户打卡状态  
		
	
		
			
						 if   ( wgzAttendance   = =   null )   {  
		
	
		
			
							 res . setClockingCondition ( 0 ) ;   //上班  
		
	
		
			
						 } else {  
		
	
		
			
						 }   else   {  
		
	
		
			
							 res . setClockingCondition ( 1 ) ;   //下班  
		
	
		
			
							 if   ( wgzAttendance . getLeaveMarkId ( )   = =   null   & &   wgzAttendance . getClockInTime ( ) ! = null   & &   wgzAttendance . getClockOutTime ( ) ! = null ) {  
		
	
		
			
							 if   ( wgzAttendance . getLeaveMarkId ( )   = =   null   & &   wgzAttendance . getClockInTime ( )   ! =   null   & &   wgzAttendance . getClockOutTime ( )   ! =   null )   {  
		
	
		
			
								 res . setClockingCondition ( 3 ) ;   //已完成  
		
	
		
			
							 }  
		
	
		
			
							 if   ( wgzAttendance . getLeaveMarkId ( )   ! =   null   & &   wgzAttendance . getLeaveMarkId ( ) ! =   0 )   {  
		
	
		
			
							 if   ( wgzAttendance . getLeaveMarkId ( )   ! =   null   & &   wgzAttendance . getLeaveMarkId ( )   ! =   0 )   {  
		
	
		
			
								 res . setClockingCondition ( 2 ) ;   //请假  
		
	
		
			
							 }  
		
	
		
			
						 }  
		
	
		
			
						 //3、获取上下班状态  
		
	
		
			
						 if   ( wgzAttendance ! =   null )   {  
		
	
		
			
						 if   ( wgzAttendance   ! =   null )   {  
		
	
		
			
							 String   exceptionType   =   wgzAttendance . getExceptionType ( ) ;  
		
	
		
			
							 if   ( exceptionType . contains ( " 0 " ) )   {  
		
	
		
			
								 res . setIn ( 0 ) ;  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -329,7 +329,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
								 mp . put ( date ,   two ) ;  
		
	
		
			
							 }  
		
	
		
			
						 }  
		
	
		
			
						 return    new   WgzAppPunchTheCalendarRecordRes ( ) . setMp ( mp ) ;  
		
	
		
			
						 return   new   WgzAppPunchTheCalendarRecordRes ( ) . setMp ( mp ) ;  
		
	
		
			
					 }  
		
	
		
			
				 
		
	
		
			
					 @Override  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -381,7 +381,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
					 }  
		
	
		
			
				 
		
	
		
			
					 @Override  
		
	
		
			
					 public   Integer   attendanceDetail ( Long   userId , Long   recruitId ,   Integer   num ) {  
		
	
		
			
					 public   Integer   attendanceDetail ( Long   userId ,   Long   recruitId ,   Integer   num )   {  
		
	
		
			
						 LambdaQueryWrapper < WgzAttendance >   apply   =   new   LambdaQueryWrapper < WgzAttendance > ( ) .  
		
	
		
			
							 eq ( WgzAttendance : : getUserId ,   userId ) .  
		
	
		
			
							 eq ( WgzAttendance : : getRecruitId ,   recruitId ) . and ( wrapper   - >   wrapper  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -390,7 +390,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
								 . isNotNull ( WgzAttendance : : getClockOutTime )  
		
	
		
			
							 ) ;  
		
	
		
			
						 apply . orderByAsc ( WgzAttendance : : getDate ) ;  
		
	
		
			
						 if   ( num ! = null   & &   num > 0 )   {   //表示查询指定天数的打卡记录,否则查询所有  
		
	
		
			
						 if   ( num   ! =   null   & &   num   >   0 )   {   //表示查询指定天数的打卡记录,否则查询所有  
		
	
		
			
							 apply . last ( " LIMIT  "   +   num ) ;  
		
	
		
			
						 }  
		
	
		
			
						 return   baseMapper . selectCount ( apply ) ;  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -402,6 +402,16 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
						 return   baseMapper . countByTaskId ( taskId ,   beginDate ,   endDate ) ;  
		
	
		
			
					 }  
		
	
		
			
				 
		
	
		
			
					 @Override  
		
	
		
			
					 public   Integer   dayTotalNum ( Long   taskId , LocalDate   date ) {  
		
	
		
			
						 return   baseMapper . dayTotalNum ( taskId , date ) ;  
		
	
		
			
					 }  
		
	
		
			
				 
		
	
		
			
					 @Override  
		
	
		
			
					 public   Integer   monthTotalNum ( Long   taskId , LocalDate   beginDate ,   LocalDate   endDate ) {  
		
	
		
			
						 return   baseMapper . monthTotalNum ( taskId , beginDate , endDate ) ;  
		
	
		
			
					 }  
		
	
		
			
				 
		
	
		
			
					 @Override  
		
	
		
			
					 public   BgtAttendanceVO   attendanceDetail ( BgtAttendanceDTO   dto )   {  
		
	
		
			
						 BgtAttendanceVO   bgtAttendanceVO   =   new   BgtAttendanceVO ( ) ;  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -412,57 +422,94 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
				 
		
	
		
			
						 LocalDate   startData   =   null ;  
		
	
		
			
						 LocalDate   endData   =   null ;  
		
	
		
			
						 LocalDate   now   =   LocalDate . now ( ) ;  
		
	
		
			
				 
		
	
		
			
						 if ( dto . getDateType ( ) . equals ( DateUtils . DAY ) ) {  
		
	
		
			
						 if   ( dto . getDateType ( ) . equals ( DateUtils . DAY ) )   {  
		
	
		
			
							 // 获取本月开始日期  
		
	
		
			
							 startData   =   date . with ( TemporalAdjusters . firstDayOfMonth ( ) ) ;  
		
	
		
			
							 endData   =   date ;  
		
	
		
			
				 
		
	
		
			
							 List < BgtAttendanceCountVO >   countVOS   =   countByTaskId ( dto . getTaskId ( ) ,   startData ,   endData ) ;  
		
	
		
			
							 b gtAttendanceVO . setCountVOs ( DataUtil . fillMissingDates ( countVOS ,   startData ,   endData ) )  
		
	
		
			
							 if ( CollectionUtil . isNotEmpty ( countVOS ) ) {  
		
	
		
			
								 BgtAttendanceCountVO   countVO   =   countVOS . stream ( )  
		
	
		
			
									 . filter ( vo   - >   vo . getDate ( ) . isEqual ( date ) )  
		
	
		
			
									 . findFirst ( ) . orElse ( null ) ;  
		
	
		
			
								 if   ( countVO   ! =   null )   {  
		
	
		
			
									 bgtAttendanceVO . setReportToDutyNum ( countVO . getReportToDutyNum ( ) ) ;  
		
	
		
			
									 bgtAttendanceVO . setTotalNum ( countVO . getTotalNum ( ) ) ;  
		
	
		
			
									 bgtAttendanceVO . setAbsenceDutyNum ( countVO . getTotalNum ( ) - countVO . getReportToDutyNum ( ) ) ;  
		
	
		
			
									 if ( bgtAttendanceVO . getTotalNum ( ) ! = 0 ) {  
		
	
		
			
										 int   rate   =   new   BigDecimal ( bgtAttendanceVO . getReportToDutyNum ( ) ) . divide ( new   BigDecimal ( bgtAttendanceVO . getTotalNum ( ) ) ,   2 ,   RoundingMode . HALF_UP )  
		
	
		
			
											 . multiply ( new   BigDecimal ( 100 ) ) . intValue ( ) ;  
		
	
		
			
										 bgtAttendanceVO . setReportToDutyRate ( rate ) ;  
		
	
		
			
									 }  
		
	
		
			
								 }  
		
	
		
			
							 List < B gtAttendanceCountVO >   bgtAttendanceCountVOS   =   DataUtil . fillMissingDates ( countVOS ,   startData ,   endData ) ;  
		
	
		
			
				 
		
	
		
			
							 // 因为当天可能还没有生成所有人的考勤数据,所以应到的总人数需要单独查询  
		
	
		
			
							 // 判断当天是否在开始日期和结束日期之间(包含开始和结束日期)  
		
	
		
			
							 boolean   isBetween   =   ( now . isAfter ( startData )   | |   now . isEqual ( startData ) )  
		
	
		
			
								 & &   ( now . isBefore ( endData )   | |   now . isEqual ( endData ) ) ;  
		
	
		
			
							 if   ( isBetween )   {  
		
	
		
			
								 Integer   i   =   dayTotalNum ( task . getId ( ) ,   now ) ;  
		
	
		
			
								 BgtAttendanceCountVO   countVO   =   bgtAttendanceCountVOS . stream ( )  
		
	
		
			
									 . filter ( vo   - >   vo . getDate ( ) . isEqual ( now ) )  
		
	
		
			
									 . findFirst ( ) . orElse ( null ) ;  
		
	
		
			
								 countVO . setTotalNum ( i ) ;  
		
	
		
			
							 }  
		
	
		
			
						 } else   if ( dto . getDateType ( ) . equals ( DateUtils . MONTH ) ) {  
		
	
		
			
				 
		
	
		
			
							 bgtAttendanceVO . setCountVOs ( bgtAttendanceCountVOS ) ;  
		
	
		
			
							 // 找出查询日期的考勤数据  
		
	
		
			
							 BgtAttendanceCountVO   countVO   =   bgtAttendanceCountVOS . stream ( )  
		
	
		
			
								 . filter ( vo   - >   vo . getDate ( ) . isEqual ( date ) )  
		
	
		
			
								 . findFirst ( ) . orElse ( null ) ;  
		
	
		
			
							 if   ( countVO   ! =   null )   {  
		
	
		
			
								 bgtAttendanceVO . setReportToDutyNum ( countVO . getReportToDutyNum ( ) ) ;  
		
	
		
			
								 bgtAttendanceVO . setTotalNum ( countVO . getTotalNum ( ) ) ;  
		
	
		
			
								 bgtAttendanceVO . setAbsenceDutyNum ( countVO . getTotalNum ( )   -   countVO . getReportToDutyNum ( ) ) ;  
		
	
		
			
								 if   ( bgtAttendanceVO . getTotalNum ( )   ! =   0 )   {  
		
	
		
			
									 int   rate   =   new   BigDecimal ( bgtAttendanceVO . getReportToDutyNum ( ) ) . divide ( new   BigDecimal ( bgtAttendanceVO . getTotalNum ( ) ) ,   2 ,   RoundingMode . HALF_UP )  
		
	
		
			
										 . multiply ( new   BigDecimal ( 100 ) ) . intValue ( ) ;  
		
	
		
			
									 bgtAttendanceVO . setReportToDutyRate ( rate ) ;  
		
	
		
			
								 }  
		
	
		
			
							 }  
		
	
		
			
						 }   else   if   ( dto . getDateType ( ) . equals ( DateUtils . MONTH ) )   {  
		
	
		
			
							 // 获取本年开始日期  
		
	
		
			
							 startData   =   date . with ( TemporalAdjusters . firstDayOfYear ( ) ) ;  
		
	
		
			
							 endData   =   date . with ( TemporalAdjusters . lastDayOfMonth ( ) ) ;  
		
	
		
			
							 if ( endData . isAfter ( now ) ) {  
		
	
		
			
								 endData =   now ;  
		
	
		
			
							 }  
		
	
		
			
							 List < BgtAttendanceCountVO >   countVOS   =   countByTaskId ( dto . getTaskId ( ) ,   startData ,   endData ) ;  
		
	
		
			
							 bgtAttendanceVO . setCountVOs ( DataUtil . statisticsByMonth ( countVOS , startData ,   endData ) ) ;  
		
	
		
			
							 BgtAttendanceCountVO   countVO   =   countVOS . stream ( )  
		
	
		
			
				 
		
	
		
			
							 // 因为当天可能还没有生成所有人的考勤数据,所以应到的总人数需要单独查询  
		
	
		
			
							 // 判断当天是否在开始日期和结束日期之间(包含开始和结束日期)  
		
	
		
			
							 boolean   isBetween   =   ( now . isAfter ( startData )   | |   now . isEqual ( startData ) )  
		
	
		
			
								 & &   ( now . isBefore ( endData )   | |   now . isEqual ( endData ) ) ;  
		
	
		
			
							 if   ( isBetween )   {  
		
	
		
			
								 Integer   i   =   dayTotalNum ( task . getId ( ) ,   now ) ;  
		
	
		
			
								 BgtAttendanceCountVO   countVO   =   countVOS . stream ( )  
		
	
		
			
									 . filter ( vo   - >   vo . getDate ( ) . isEqual ( now ) )  
		
	
		
			
									 . findFirst ( ) . orElse ( null ) ;  
		
	
		
			
								 if   ( countVO   ! =   null )   {  
		
	
		
			
									 countVO . setTotalNum ( i ) ;  
		
	
		
			
								 } else   {  
		
	
		
			
									 BgtAttendanceCountVO   bgtAttendanceCountVO   =   new   BgtAttendanceCountVO ( 0 ,   i ,   now ,   0 ,   0 ,   0 ) ;  
		
	
		
			
									 countVOS . add ( bgtAttendanceCountVO ) ;  
		
	
		
			
								 }  
		
	
		
			
							 }  
		
	
		
			
							 List < BgtAttendanceCountVO >   bgtAttendanceCountVOS   =   DataUtil . statisticsByMonth ( countVOS ,   startData ,   endData ) ;  
		
	
		
			
							 bgtAttendanceVO . setCountVOs ( bgtAttendanceCountVOS ) ;  
		
	
		
			
							 BgtAttendanceCountVO   countVO   =   bgtAttendanceCountVOS . stream ( )  
		
	
		
			
								 . filter ( vo   - >   YearMonth . from ( vo . getDate ( ) ) . equals ( YearMonth . from ( date ) ) )  
		
	
		
			
								 . findFirst ( ) . orElse ( null ) ;  
		
	
		
			
							 if   ( countVO   ! =   null )   {  
		
	
		
			
								 bgtAttendanceVO . setReportToDutyNum ( countVO . getReportToDutyNum ( ) ) ;  
		
	
		
			
								 bgtAttendanceVO . setTotalNum ( countVO . getTotalNum ( ) ) ;  
		
	
		
			
								 bgtAttendanceVO . setAbsenceDutyNum ( countVO . getAbsenceDutyNum ( ) ) ;  
		
	
		
			
								 int   rate   =   new   BigDecimal ( countVO . getRateSum ( ) ) . divide ( new   BigDecimal ( countVO . getRateDay ( ) ) ,   2 ,   RoundingMode . HALF_UP ) . intValue ( ) ;  
		
	
		
			
								 bgtAttendanceVO . setReportToDutyRate ( rate ) ;  
		
	
		
			
							 }  
		
	
		
			
				 
		
	
		
			
							 //设置本月的总人数  
		
	
		
			
							 bgtAttendanceVO . setTotalNum ( monthTotalNum ( task . getId ( ) ,   date . with ( TemporalAdjusters . firstDayOfMonth ( ) ) ,   endData ) ) ;  
		
	
		
			
						 }  
		
	
		
			
						 getLateAndLeave ( bgtAttendanceVO ,   startData ,   endData ) ;  
		
	
		
			
						 return   bgtAttendanceVO ;  
		
	
		
			
					 }  
		
	
		
			
				 
		
	
		
			
					 public   void   getLateAndLeave ( BgtAttendanceVO   vo , LocalDate   startDate ,   LocalDate   endDate ) {  
		
	
		
			
					 public   void   getLateAndLeave ( BgtAttendanceVO   vo ,   LocalDate   startDate ,   LocalDate   endDate )   {  
		
	
		
			
						 List < BgtProjectRecruit >   bgtProjectRecruits   =   iBgtProjectRecruitService . getBaseMapper ( ) . selectList ( Wrappers . < BgtProjectRecruit > lambdaQuery ( )  
		
	
		
			
							 . eq ( BgtProjectRecruit : : getTaskId ,   vo . getTaskId ( ) ) ) ;  
		
	
		
			
						 List < Long >   recruitIds   =   bgtProjectRecruits . stream ( ) . map ( BgtProjectRecruit : : getId ) . collect ( Collectors . toList ( ) ) ;  
		
	
		
			
						 if ( CollectionUtil . isNotEmpty ( recruitIds ) ) {  
		
	
		
			
						 if   ( CollectionUtil . isNotEmpty ( recruitIds ) )   {  
		
	
		
			
							 Integer   late   =   baseMapper . selectCount ( Wrappers . < WgzAttendance > lambdaQuery ( ) . eq ( WgzAttendance : : getLate ,   1 )  
		
	
		
			
								 . in ( WgzAttendance : : getRecruitId ,   recruitIds ) . between ( WgzAttendance : : getDate ,   startDate ,   endDate ) ) ;  
		
	
		
			
								 . eq ( WgzAttendance : : getRecruitId ,   recruitIds ) . between ( WgzAttendance : : getDate ,   startDate ,   endDate ) ) ;  
		
	
		
			
							 Integer   leave   =   baseMapper . selectCount ( Wrappers . < WgzAttendance > lambdaQuery ( ) . isNotNull ( WgzAttendance : : getLeaveMarkId )  
		
	
		
			
								 . in ( WgzAttendance : : getRecruitId ,   recruitIds ) . between ( WgzAttendance : : getDate ,   startDate ,   endDate ) ) ;  
		
	
		
			
							 vo . setLateNum ( late ) ;  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -480,16 +527,17 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
				 
		
	
		
			
					 /**  
		
	
		
			
					 * 获取指定人、指定工地、指定日期的打卡记录  
		
	
		
			
					 *  
		
	
		
			
					 * @param appUserId 务工者用户id  
		
	
		
			
					 * @param recruitId 工地id  
		
	
		
			
					 * @param date	 具体日期  
		
	
		
			
					 * @param date       具体日期  
		
	
		
			
					 * @return WgzAttendance  
		
	
		
			
					 */  
		
	
		
			
					 public   WgzAttendance   publicFindByUserIdWait ( Long   appUserId ,   Long   recruitId ,   String   date )   {  
		
	
		
			
						 LambdaQueryWrapper < WgzAttendance >   qw   =   new   LambdaQueryWrapper < > ( ) ;  
		
	
		
			
						 qw . eq ( WgzAttendance : : getRecruitId , recruitId ) ;  
		
	
		
			
						 qw . eq ( WgzAttendance : : getUserId , appUserId ) ;  
		
	
		
			
						 qw . eq ( WgzAttendance : : getDate , date ) ;  
		
	
		
			
						 qw . eq ( WgzAttendance : : getRecruitId ,   recruitId ) ;  
		
	
		
			
						 qw . eq ( WgzAttendance : : getUserId ,   appUserId ) ;  
		
	
		
			
						 qw . eq ( WgzAttendance : : getDate ,   date ) ;  
		
	
		
			
						 return   baseMapper . selectOne ( qw ) ;  
		
	
		
			
					 }  
		
	
		
			
				 
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -520,21 +568,22 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
				 
		
	
		
			
					 /**  
		
	
		
			
					 * 组装上班、下班打卡记录  
		
	
		
			
					 * @param wa 打卡记录   
		
	
		
			
					 *  
		
	
		
			
					 * @param wa  打卡记录  
		
	
		
			
					 * @param num 1上班 2下班  
		
	
		
			
					 * @return WgzAppPunchTheCalendarRecordThree  
		
	
		
			
					 */  
		
	
		
			
					 public   WgzAppPunchTheCalendarRecordThree   sbOrXb (   WgzAttendance   wa , int   num )   {  
		
	
		
			
					 public   WgzAppPunchTheCalendarRecordThree   sbOrXb ( WgzAttendance   wa ,   int   num )   {  
		
	
		
			
						 WgzAppPunchTheCalendarRecordThree   sbb   =   new   WgzAppPunchTheCalendarRecordThree ( ) .  
		
	
		
			
							 setClockingTime ( wa . getClockInTime ( ) ) .  
		
	
		
			
							 setPnchOsition ( wa . getPnchOsition ( ) ) .  
		
	
		
			
							 setPnchOsitionX ( wa . getPnchOsitionX ( ) ) .  
		
	
		
			
							 setClockingCondition ( 0 ) ;   //正常  
		
	
		
			
						 //判断是否请假  
		
	
		
			
						 if   ( wa . getLeaveMarkId ( ) ! = null   & &   wa . getLeaveMarkId ( ) ! = 0 )   {  
		
	
		
			
						 if   ( wa . getLeaveMarkId ( )   ! =   null   & &   wa . getLeaveMarkId ( )   ! =   0 )   {  
		
	
		
			
							 sbb . setClockingCondition ( 7 ) ;  
		
	
		
			
						 }  
		
	
		
			
						 if   ( num   = =   1 ) {  
		
	
		
			
						 if   ( num   = =   1 )   {  
		
	
		
			
							 //判断上班迟到  
		
	
		
			
							 if   ( wa . getLate ( )   = =   1 )   {  
		
	
		
			
								 sbb . setClockingCondition ( 1 ) ;  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -544,7 +593,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
								 sbb . setClockingCondition ( 5 ) ;  
		
	
		
			
							 }  
		
	
		
			
						 }  
		
	
		
			
						 if   ( num   = =   2 ) {  
		
	
		
			
						 if   ( num   = =   2 )   {  
		
	
		
			
							 //判断下班早退  
		
	
		
			
							 if   ( wa . getEarlyLeave ( )   = =   1 )   {  
		
	
		
			
								 sbb . setClockingCondition ( 2 ) ;  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -559,10 +608,11 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
				 
		
	
		
			
					 /**  
		
	
		
			
					 * 补卡  
		
	
		
			
					 * @param wgzAttendance 打卡记录   
		
	
		
			
					 * @param type 1上班 2下班   
		
	
		
			
					 *  
		
	
		
			
					 * @param wgzAttendance   打卡记录   
		
	
		
			
					 * @param type            1上班 2下班  
		
	
		
			
					 * @param fillingDataTime 补卡时间  
		
	
		
			
					 * @param list 补卡记录  
		
	
		
			
					 * @param list             补卡记录  
		
	
		
			
					 */  
		
	
		
			
					 private   void   addRecord ( WgzAttendance   wgzAttendance ,   int   type ,   LocalDateTime   fillingDataTime ,   List < WgzAppCardReplacementApplicationTwo >   list )   {  
		
	
		
			
						 LocalDate   date   =   wgzAttendance . getDate ( ) ;  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -581,7 +631,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
					 public   BgtAttendanceDetailVO   bgtAttendanceDetail ( BgtAttendanceDetailDTO   dto )   {  
		
	
		
			
						 BgtAttendanceDetailVO   bgtAttendanceDetailVO   =   new   BgtAttendanceDetailVO ( ) ;  
		
	
		
			
				 
		
	
		
			
						 WgzUser   wgzUser   =   wgzUserService . getBy Id( dto . getUserId ( ) ) ;  
		
	
		
			
						 WgzUser   wgzUser   =   wgzUserService . findByUser Id( dto . getUserId ( ) ) ;  
		
	
		
			
						 bgtAttendanceDetailVO . setUserId ( wgzUser . getUserId ( ) ) ;  
		
	
		
			
						 bgtAttendanceDetailVO . setUsername ( wgzUser . getUsername ( ) ) ;  
		
	
		
			
						 bgtAttendanceDetailVO . setAvatarName ( wgzUser . getAvatarName ( ) ) ;  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -590,43 +640,43 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
							 . eq ( BgtProjectRecruit : : getTaskId ,   dto . getTaskId ( ) ) ) ;  
		
	
		
			
						 List < Long >   recruitIds   =   bgtProjectRecruits . stream ( ) . map ( BgtProjectRecruit : : getId ) . collect ( Collectors . toList ( ) ) ;  
		
	
		
			
				 
		
	
		
			
						 BgtProjectRecruitApply   recruitApply   =   iBgtProjectRecruitApplyService . getById  ( recruitIds . get ( 0 ) ) ;  
		
	
		
			
						 BgtProjectRecruitApply   recruitApply   =   iBgtProjectRecruitApplyService . getOne  ( recruitIds . get ( 0 ) , wgzUser . getUserId ( ) ;  
		
	
		
			
						 bgtAttendanceDetailVO . setEntryTime ( recruitApply . getEntryTime ( ) ) ;  
		
	
		
			
						 bgtAttendanceDetailVO . setStatus ( recruitApply . getStatus ( ) ) ;  
		
	
		
			
				 
		
	
		
			
						 LambdaQueryWrapper < WgzAttendance >   wrapper   =   new   LambdaQueryWrapper < > ( ) ;  
		
	
		
			
						 wrapper . eq ( WgzAttendance : : getUserId , dto . getUserId ( ) ) ;  
		
	
		
			
						 wrapper . eq ( WgzAttendance : : getUserId ,   dto . getUserId ( ) ) ;  
		
	
		
			
				 
		
	
		
			
						 wrapper . in ( WgzAttendance : : getRecruitId , recruitIds ) ;  
		
	
		
			
						 wrapper . in ( WgzAttendance : : getRecruitId ,   recruitIds ) ;  
		
	
		
			
						 LocalDate   date   =   dto . getDate ( ) ;  
		
	
		
			
						 LocalDate   startDate   =   date . with ( TemporalAdjusters . firstDayOfMonth ( ) ) ;  
		
	
		
			
						 LocalDate   endData   =   date . with ( TemporalAdjusters . lastDayOfMonth ( ) ) ;  
		
	
		
			
						 wrapper . between ( WgzAttendance : : getDate , startDate , endData ) ;  
		
	
		
			
						 wrapper . between ( WgzAttendance : : getDate ,   startDate ,   endData ) ;  
		
	
		
			
						 List < WgzAttendance >   wgzAttendances   =   baseMapper . selectList ( wrapper ) ;  
		
	
		
			
						 // 创建SimpleDateFormat对象,   
		
	
		
			
						 SimpleDat eFormat  sdf   =   new   SimpleDateFormat ( " EEEE " ,   java . util . . CHINESE  ) ;  
		
	
		
			
						 DateTim eFormatter   formatter   =   DateTimeFormatter . ofPattern ( " EEEE " ,   Locale . CHINA  ) ;  
		
	
		
			
				 
		
	
		
			
						 //获取招工打卡时间  
		
	
		
			
						 List < BgtProjectRecruit >   list   =   iBgtProjectRecruitService . list ( Wrappers . < BgtProjectRecruit > lambdaQuery ( ) . in ( BgtProjectRecruit : : getId ) ) ;  
		
	
		
			
						 List < BgtProjectRecruit >   list   =   iBgtProjectRecruitService . list ( Wrappers . < BgtProjectRecruit > lambdaQuery ( ) . in ( BgtProjectRecruit : : getId , recruitIds ) ;  
		
	
		
			
						 Map < Long ,   BgtProjectRecruit >   recruitMap   =   list . stream ( ) . collect ( Collectors . toMap ( BgtProjectRecruit : : getId ,   recruit   - >   recruit ) ) ;  
		
	
		
			
				 
		
	
		
			
				 
		
	
		
			
						 List < WgzAttendanceRecordVO >   lateRecords   =   new   ArrayList < > ( ) ;  
		
	
		
			
						 List < WgzAttendanceRecordVO >   earlyLeaveRecords =   new   ArrayList < > ( ) ;  
		
	
		
			
						 List < WgzAttendanceRecordVO >   missRecords =   new   ArrayList < > ( ) ;  
		
	
		
			
						 List < WgzAttendanceRecordVO >   records =   new   ArrayList < > ( ) ;  
		
	
		
			
						 List < WgzAttendanceRecordVO >   earlyLeaveRecords   =   new   ArrayList < > ( ) ;  
		
	
		
			
						 List < WgzAttendanceRecordVO >   missRecords   =   new   ArrayList < > ( ) ;  
		
	
		
			
						 List < WgzAttendanceRecordVO >   records   =   new   ArrayList < > ( ) ;  
		
	
		
			
				 
		
	
		
			
				 
		
	
		
			
						 for   ( WgzAttendance   wgzAttendance : wgzAttendances ) {  
		
	
		
			
						 for   ( WgzAttendance   wgzAttendance   :   wgzAttendances )   {  
		
	
		
			
							 WgzAttendanceRecordVO   recordVO   =   new   WgzAttendanceRecordVO ( ) ;  
		
	
		
			
							 recordVO . setDate ( wgzAttendance . getDate ( ) ) ;  
		
	
		
			
							 recordVO . setWeek ( sdf . format ( da te) ) ;  
		
	
		
			
							 if ( wgzAttendance . getMissedIn ( ) = = 0   & &   wgzAttendance . getMissedOut ( ) = = 0 ) {  
		
	
		
			
							 recordVO . setWeek ( wgzAttendance . getDate ( ) . format ( format ter ) ) ;  
		
	
		
			
							 if   ( wgzAttendance . getMissedIn ( )   = =   0   & &   wgzAttendance . getMissedOut ( )   = =   0 )   {  
		
	
		
			
								 recordVO . setDay ( 1D ) ;  
		
	
		
			
								 records . add ( recordVO ) ;  
		
	
		
			
							 } else   if ( wgzAttendance . getMissedIn ( ) = = 1   & &   wgzAttendance . getMissedOut ( ) = = 1 ) {  
		
	
		
			
							 }   else   if   ( wgzAttendance . getMissedIn ( )   = =   1   & &   wgzAttendance . getMissedOut ( )   = =   1 )   {  
		
	
		
			
								 recordVO . setDay ( 0D ) ;  
		
	
		
			
							 } else   {  
		
	
		
			
							 }   else   {  
		
	
		
			
								 recordVO . setDay ( 0 . 5D ) ;  
		
	
		
			
								 records . add ( recordVO ) ;  
		
	
		
			
							 }  
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -638,13 +688,13 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
							 if   ( wgzAttendance . getLate ( )   = =   1 )   {  
		
	
		
			
								 WgzAttendanceRecordVO   LateRecordVO   =   BeanUtil . copyProperties ( recordVO ,   WgzAttendanceRecordVO . class ) ;  
		
	
		
			
								 LateRecordVO . setTime ( clockInTime . toLocalTime ( ) ) ;  
		
	
		
			
								 LateRecordVO . setMinutes ( DataUtil . getMinutes ( clockInTime , beginWorkTime ) ) ;  
		
	
		
			
								 LateRecordVO . setMinutes ( DataUtil . getMinutes ( clockInTime ,   beginWorkTime ) ) ;  
		
	
		
			
								 lateRecords . add ( LateRecordVO ) ;  
		
	
		
			
							 }  
		
	
		
			
							 if   ( wgzAttendance . getEarlyLeave ( )   = =   1 )   {  
		
	
		
			
								 WgzAttendanceRecordVO   earlyLeaveRecordVO   =   BeanUtil . copyProperties ( recordVO ,   WgzAttendanceRecordVO . class ) ;  
		
	
		
			
								 earlyLeaveRecordVO . setTime ( clockOutTime . toLocalTime ( ) ) ;  
		
	
		
			
								 earlyLeaveRecordVO . setMinutes ( DataUtil . getMinutes ( clockOutTime , endWorkTime ) ) ;  
		
	
		
			
								 earlyLeaveRecordVO . setMinutes ( DataUtil . getMinutes ( clockOutTime ,   endWorkTime ) ) ;  
		
	
		
			
								 earlyLeaveRecords . add ( earlyLeaveRecordVO ) ;  
		
	
		
			
							 }  
		
	
		
			
				 
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -670,12 +720,11 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
						 bgtAttendanceDetailVO . setEarlyLeaveMinute ( earlyLeaveRecords . stream ( ) . mapToInt ( WgzAttendanceRecordVO : : getMinutes ) . sum ( ) ) ;  
		
	
		
			
						 bgtAttendanceDetailVO . setEarlyLeaveRecords ( earlyLeaveRecords ) ;  
		
	
		
			
				 
		
	
		
			
						 bgtAttendanceDetailVO . setMissNum ( earlyLeave Records. size ( ) ) ;  
		
	
		
			
						 bgtAttendanceDetailVO . setMissRecords ( earlyLeave Records) ;  
		
	
		
			
						 bgtAttendanceDetailVO . setMissNum ( miss Records. size ( ) ) ;  
		
	
		
			
						 bgtAttendanceDetailVO . setMissRecords ( miss Records) ;  
		
	
		
			
						 return   bgtAttendanceDetailVO ;  
		
	
		
			
				 
		
	
		
			
				 
		
	
		
			
				 
		
	
		
			
					 }  
		
	
		
			
				 
		
	
		
			
				 
		
	
	
		
			
				
					
					
						
					 
				
			
			@ -686,12 +735,13 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 
		
	
		
			
				 
		
	
		
			
					 /**  
		
	
		
			
					 * 获取对应用户指定天数的工资结算日期  
		
	
		
			
					 *  
		
	
		
			
					 * @param userId  
		
	
		
			
					 * @param recruitId  
		
	
		
			
					 * @param num 结算天数  
		
	
		
			
					 * @param num        结算天数  
		
	
		
			
					 * @return  
		
	
		
			
					 */  
		
	
		
			
					 public   LocalDate   findByNumGetDate ( Long   userId ,   Long   recruitId , Integer   num )   {  
		
	
		
			
					 public   LocalDate   findByNumGetDate ( Long   userId ,   Long   recruitId ,   Integer   num )   {  
		
	
		
			
						 LambdaQueryWrapper < WgzAttendance >   wra   =   new   LambdaQueryWrapper < > ( ) ;  
		
	
		
			
						 wra . eq ( WgzAttendance : : getRecruitId ,   recruitId ) ;  
		
	
		
			
						 wra . eq ( WgzAttendance : : getUserId ,   userId ) ;