优化
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