This commit is contained in:
zt
2025-03-07 14:45:49 +08:00
parent b0e8333724
commit 3ec18b78ae
50 changed files with 511 additions and 188 deletions

View File

@ -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);
/**
* 添加缺卡记录

View File

@ -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;
}

View File

@ -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);