@ -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,  否则返回 false 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					 */ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					 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 .  Locale. 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 ) ;