优化
This commit is contained in:
		@ -3,7 +3,7 @@ package com.ruoyi.wgz.service;
 | 
			
		||||
import com.ruoyi.bgt.domain.dto.BgtAttendanceDTO;
 | 
			
		||||
import com.ruoyi.bgt.domain.dto.BgtAttendanceDetailDTO;
 | 
			
		||||
import com.ruoyi.bgt.domain.vo.BgtAttendanceCountVO;
 | 
			
		||||
import com.ruoyi.bgt.domain.vo.BgtAttendanceDetailVO;
 | 
			
		||||
import com.ruoyi.bgt.domain.vo.BgtAttendancePersonCountVO;
 | 
			
		||||
import com.ruoyi.bgt.domain.vo.BgtAttendanceVO;
 | 
			
		||||
import com.ruoyi.bgt.domain.vo.BgtDayAttendanceCountVO;
 | 
			
		||||
import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
 | 
			
		||||
@ -121,9 +121,9 @@ public interface IWgzAttendanceService extends IServicePlus<WgzAttendance> {
 | 
			
		||||
	/**
 | 
			
		||||
	 * 总体考勤情况-统计
 | 
			
		||||
	 */
 | 
			
		||||
	BgtAttendanceVO attendanceDetail(BgtAttendanceDTO dto);
 | 
			
		||||
	BgtAttendanceVO allCount(BgtAttendanceDTO dto);
 | 
			
		||||
 | 
			
		||||
	List<BgtDayAttendanceCountVO> attendanceList(BgtAttendanceDTO dto);
 | 
			
		||||
	List<BgtDayAttendanceCountVO> histogram(BgtAttendanceDTO dto);
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 考勤详情,查询指定用户指定项目的指定天数考勤情况统计(如若用户输入20,但实际只有2天出勤);
 | 
			
		||||
@ -132,9 +132,9 @@ public interface IWgzAttendanceService extends IServicePlus<WgzAttendance> {
 | 
			
		||||
	Integer attendanceDetail(Long userId,Long recruitId, Integer num);
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 考勤统计详情
 | 
			
		||||
	 * 务工者个人考勤统计
 | 
			
		||||
	 */
 | 
			
		||||
	BgtAttendanceDetailVO bgtAttendanceDetail(BgtAttendanceDetailDTO dto);
 | 
			
		||||
	BgtAttendancePersonCountVO personCount(BgtAttendanceDetailDTO dto);
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 添加缺卡记录
 | 
			
		||||
 | 
			
		||||
@ -31,7 +31,6 @@ import com.ruoyi.wgz.bo.rests.WgzAppCardReplacementApplicationTwo;
 | 
			
		||||
import com.ruoyi.wgz.bo.rests.WgzAppPunchTheCalendarRecordThree;
 | 
			
		||||
import com.ruoyi.wgz.bo.rests.WgzAppPunchTheCalendarRecordTwo;
 | 
			
		||||
import com.ruoyi.wgz.domain.WgzAttendance;
 | 
			
		||||
import com.ruoyi.wgz.domain.WgzUser;
 | 
			
		||||
import com.ruoyi.wgz.mapper.WgzAttendanceMapper;
 | 
			
		||||
import com.ruoyi.wgz.service.IWgzAttendanceService;
 | 
			
		||||
import com.ruoyi.wgz.service.IWgzLeaveService;
 | 
			
		||||
@ -416,9 +415,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public BgtAttendanceVO attendanceDetail(BgtAttendanceDTO dto) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	public BgtAttendanceVO allCount(BgtAttendanceDTO dto) {
 | 
			
		||||
 | 
			
		||||
		BgtAttendanceVO bgtAttendanceVO = new BgtAttendanceVO();
 | 
			
		||||
		FbsProjectTask task = taskService.getById(dto.getTaskId());
 | 
			
		||||
@ -467,7 +464,7 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public List<BgtDayAttendanceCountVO> attendanceList(BgtAttendanceDTO dto) {
 | 
			
		||||
	public List<BgtDayAttendanceCountVO> histogram(BgtAttendanceDTO dto) {
 | 
			
		||||
		FbsProjectTask task = taskService.getById(dto.getTaskId());
 | 
			
		||||
		validTaskTime(task, dto.getDate());
 | 
			
		||||
 | 
			
		||||
@ -604,103 +601,100 @@ public class WgzAttendanceServiceImpl extends ServicePlusImpl<WgzAttendanceMappe
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public BgtAttendanceDetailVO bgtAttendanceDetail(BgtAttendanceDetailDTO dto) {
 | 
			
		||||
		BgtAttendanceDetailVO bgtAttendanceDetailVO = new BgtAttendanceDetailVO();
 | 
			
		||||
 | 
			
		||||
		WgzUser wgzUser = wgzUserService.findByUserId(dto.getUserId());
 | 
			
		||||
		bgtAttendanceDetailVO.setUserId(wgzUser.getUserId());
 | 
			
		||||
		bgtAttendanceDetailVO.setUsername(wgzUser.getUsername());
 | 
			
		||||
		bgtAttendanceDetailVO.setAvatarName(wgzUser.getAvatarName());
 | 
			
		||||
	public BgtAttendancePersonCountVO personCount(BgtAttendanceDetailDTO dto) {
 | 
			
		||||
		BgtAttendancePersonCountVO bgtAttendanceDetailVO = new BgtAttendancePersonCountVO();
 | 
			
		||||
 | 
			
		||||
		//获取任务下的所有招工
 | 
			
		||||
		List<BgtProjectRecruit> bgtProjectRecruits = iBgtProjectRecruitService.getBaseMapper().selectList(Wrappers.<BgtProjectRecruit>lambdaQuery()
 | 
			
		||||
			.eq(BgtProjectRecruit::getTaskId, dto.getTaskId()));
 | 
			
		||||
		List<Long> recruitIds = bgtProjectRecruits.stream().map(BgtProjectRecruit::getId).collect(Collectors.toList());
 | 
			
		||||
 | 
			
		||||
		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.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);
 | 
			
		||||
		List<WgzAttendance> wgzAttendances = baseMapper.selectList(wrapper);
 | 
			
		||||
		// 创建SimpleDateFormat对象,格式化日期为中文星期
 | 
			
		||||
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE", Locale.CHINA);
 | 
			
		||||
 | 
			
		||||
		//获取招工打卡时间
 | 
			
		||||
		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));
 | 
			
		||||
 | 
			
		||||
		// 创建SimpleDateFormat对象,格式化日期为中文星期
 | 
			
		||||
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE", Locale.CHINA);
 | 
			
		||||
 | 
			
		||||
		//考勤数据分类
 | 
			
		||||
		List<WgzAttendanceRecordVO> lateRecords = new ArrayList<>();
 | 
			
		||||
		List<WgzAttendanceRecordVO> earlyLeaveRecords = new ArrayList<>();
 | 
			
		||||
		List<WgzAttendanceRecordVO> missRecords = new ArrayList<>();
 | 
			
		||||
		List<WgzAttendanceRecordVO> records = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		for (WgzAttendance wgzAttendance : wgzAttendances) {
 | 
			
		||||
 | 
			
		||||
			//上下班时间
 | 
			
		||||
			BgtProjectRecruit recruit = recruitMap.get(wgzAttendance.getRecruitId());
 | 
			
		||||
			LocalTime beginWorkTime = recruit.getBeginWorkTime();
 | 
			
		||||
			LocalTime endWorkTime = recruit.getEndWorkTime();
 | 
			
		||||
			//上下班打卡时间
 | 
			
		||||
			LocalDateTime clockInTime = wgzAttendance.getClockInTime();
 | 
			
		||||
			LocalDateTime clockOutTime = wgzAttendance.getClockOutTime();
 | 
			
		||||
 | 
			
		||||
			WgzAttendanceRecordVO recordVO = new WgzAttendanceRecordVO();
 | 
			
		||||
			recordVO.setDate(wgzAttendance.getDate());
 | 
			
		||||
			recordVO.setWeek(wgzAttendance.getDate().format(formatter));
 | 
			
		||||
			if (wgzAttendance.getMissedIn() == 0 && wgzAttendance.getMissedOut() == 0) {
 | 
			
		||||
			//统计出勤天数
 | 
			
		||||
			if (clockInTime != null && clockOutTime != null) {
 | 
			
		||||
				recordVO.setDay(1D);
 | 
			
		||||
				records.add(recordVO);
 | 
			
		||||
			} else if (wgzAttendance.getMissedIn() == 1 && wgzAttendance.getMissedOut() == 1) {
 | 
			
		||||
			} else if (clockInTime == null && clockOutTime == null) {
 | 
			
		||||
				recordVO.setDay(0D);
 | 
			
		||||
			} else {
 | 
			
		||||
				recordVO.setDay(0.5D);
 | 
			
		||||
				records.add(recordVO);
 | 
			
		||||
			}
 | 
			
		||||
			BgtProjectRecruit recruit = recruitMap.get(wgzAttendance.getRecruitId());
 | 
			
		||||
			LocalDateTime clockInTime = wgzAttendance.getClockInTime();
 | 
			
		||||
			LocalDateTime clockOutTime = wgzAttendance.getClockOutTime();
 | 
			
		||||
			LocalTime beginWorkTime = recruit.getBeginWorkTime();
 | 
			
		||||
			LocalTime endWorkTime = recruit.getEndWorkTime();
 | 
			
		||||
			//统计迟到天数
 | 
			
		||||
			if (wgzAttendance.getLate() == 1) {
 | 
			
		||||
				WgzAttendanceRecordVO LateRecordVO = BeanUtil.copyProperties(recordVO, WgzAttendanceRecordVO.class);
 | 
			
		||||
				LateRecordVO.setTime(clockInTime.toLocalTime());
 | 
			
		||||
				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));
 | 
			
		||||
				earlyLeaveRecords.add(earlyLeaveRecordVO);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			//统计缺卡天数
 | 
			
		||||
			if (wgzAttendance.getMissedIn() == 1) {
 | 
			
		||||
				WgzAttendanceRecordVO missRecordVO = BeanUtil.copyProperties(recordVO, WgzAttendanceRecordVO.class);
 | 
			
		||||
				missRecordVO.setTime(beginWorkTime);
 | 
			
		||||
				missRecords.add(missRecordVO);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (wgzAttendance.getMissedOut() == 1) {
 | 
			
		||||
				WgzAttendanceRecordVO missRecordVO = BeanUtil.copyProperties(recordVO, WgzAttendanceRecordVO.class);
 | 
			
		||||
				missRecordVO.setTime(endWorkTime);
 | 
			
		||||
				missRecords.add(missRecordVO);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		//出勤数据
 | 
			
		||||
		bgtAttendanceDetailVO.setDayNum(records.stream().mapToDouble(WgzAttendanceRecordVO::getDay).sum());
 | 
			
		||||
 | 
			
		||||
		//迟到数据
 | 
			
		||||
		bgtAttendanceDetailVO.setLateNum(lateRecords.size());
 | 
			
		||||
		bgtAttendanceDetailVO.setLateMinute(lateRecords.stream().mapToInt(WgzAttendanceRecordVO::getMinutes).sum());
 | 
			
		||||
		bgtAttendanceDetailVO.setLateRecords(lateRecords);
 | 
			
		||||
 | 
			
		||||
		//早退数据
 | 
			
		||||
		bgtAttendanceDetailVO.setEarlyLeaveNum(earlyLeaveRecords.size());
 | 
			
		||||
		bgtAttendanceDetailVO.setEarlyLeaveMinute(earlyLeaveRecords.stream().mapToInt(WgzAttendanceRecordVO::getMinutes).sum());
 | 
			
		||||
		bgtAttendanceDetailVO.setEarlyLeaveRecords(earlyLeaveRecords);
 | 
			
		||||
 | 
			
		||||
		//缺卡数据
 | 
			
		||||
		bgtAttendanceDetailVO.setMissNum(missRecords.size());
 | 
			
		||||
		bgtAttendanceDetailVO.setMissRecords(missRecords);
 | 
			
		||||
		return bgtAttendanceDetailVO;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -251,12 +251,18 @@ public class WgzReissueacardServiceImpl extends ServicePlusImpl<WgzReissueacardM
 | 
			
		||||
			attendance.setExceptionType(exceptionType);
 | 
			
		||||
			attendance.setLate(1);
 | 
			
		||||
			attendance.setMissedIn(1);
 | 
			
		||||
		} else {
 | 
			
		||||
			if(attendance.getClockInTime() == null){
 | 
			
		||||
				attendance.setClockInTime(byId.getNowTime());
 | 
			
		||||
			}
 | 
			
		||||
		} else { //下班补卡
 | 
			
		||||
			exceptionType = exceptionType.replace("\\b2\\b", "6");
 | 
			
		||||
			exceptionType = exceptionType.replace("\\b4\\b", "6");
 | 
			
		||||
			attendance.setExceptionType(exceptionType);
 | 
			
		||||
			attendance.setEarlyLeave(1);
 | 
			
		||||
			attendance.setMissedOut(1);
 | 
			
		||||
			if(attendance.getClockOutTime() == null){
 | 
			
		||||
				attendance.setClockOutTime(byId.getNowTime());
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		iWgzAttendanceService.updateById(attendance);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user