考勤列表详情bug修改
This commit is contained in:
@ -6,8 +6,8 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import jakarta.validation.constraints.*;
|
import jakarta.validation.constraints.*;
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
import org.dromara.project.domain.dto.attendance.AttendanceExportDto;
|
import org.dromara.project.domain.dto.attendance.*;
|
||||||
import org.dromara.project.domain.vo.attendance.BusAttendanceClockDateForTwoWeekVo;
|
import org.dromara.project.domain.vo.attendance.*;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||||
@ -47,6 +47,15 @@ public class BusAttendanceController extends BaseController {
|
|||||||
return busAttendanceService.queryPageList(bo, pageQuery);
|
return busAttendanceService.queryPageList(bo, pageQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询施工人员月份考勤列表
|
||||||
|
*/
|
||||||
|
@SaCheckPermission("project:attendance:list")
|
||||||
|
@GetMapping("/list/month/byUserId")
|
||||||
|
public R<List<BusAttendanceMonthByUserIdVo>> listAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req) {
|
||||||
|
return R.ok(busAttendanceService.listAttendanceMonthListByUserId(req));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出考勤列表
|
* 导出考勤列表
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import lombok.Data;
|
|||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -29,7 +30,7 @@ public class BusAttendanceMonthByUserIdVo implements Serializable {
|
|||||||
@JsonFormat(shape = JsonFormat.Shape.STRING,
|
@JsonFormat(shape = JsonFormat.Shape.STRING,
|
||||||
pattern = "yyyy-MM-dd",
|
pattern = "yyyy-MM-dd",
|
||||||
timezone = "GMT+8")
|
timezone = "GMT+8")
|
||||||
private Date clockDate;
|
private LocalDate clockDate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 当天打卡状态
|
* 当天打卡状态
|
||||||
|
|||||||
@ -3,10 +3,7 @@ package org.dromara.project.service;
|
|||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import org.dromara.common.core.domain.R;
|
import org.dromara.common.core.domain.R;
|
||||||
import org.dromara.project.domain.dto.attendance.AttendanceCountDto;
|
import org.dromara.project.domain.dto.attendance.*;
|
||||||
import org.dromara.project.domain.dto.attendance.AttendanceExportDto;
|
|
||||||
import org.dromara.project.domain.dto.attendance.AttendanceUserCountDto;
|
|
||||||
import org.dromara.project.domain.dto.attendance.BusAttendancePunchCardByFaceReq;
|
|
||||||
import org.dromara.project.domain.vo.BusAttendanceVo;
|
import org.dromara.project.domain.vo.BusAttendanceVo;
|
||||||
import org.dromara.project.domain.bo.BusAttendanceBo;
|
import org.dromara.project.domain.bo.BusAttendanceBo;
|
||||||
import org.dromara.project.domain.BusAttendance;
|
import org.dromara.project.domain.BusAttendance;
|
||||||
@ -41,6 +38,14 @@ public interface IBusAttendanceService extends IService<BusAttendance>{
|
|||||||
*/
|
*/
|
||||||
BusAttendanceVo queryById(Long id);
|
BusAttendanceVo queryById(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询用户每月考勤列表
|
||||||
|
*
|
||||||
|
* @param req 查询条件
|
||||||
|
* @return 考勤列表
|
||||||
|
*/
|
||||||
|
List<BusAttendanceMonthByUserIdVo> listAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询考勤列表
|
* 分页查询考勤列表
|
||||||
*
|
*
|
||||||
|
|||||||
@ -16,9 +16,11 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
import org.apache.poi.ss.util.CellRangeAddress;
|
import org.apache.poi.ss.util.CellRangeAddress;
|
||||||
|
import org.dromara.common.core.constant.DateConstant;
|
||||||
import org.dromara.common.core.constant.HttpStatus;
|
import org.dromara.common.core.constant.HttpStatus;
|
||||||
import org.dromara.common.core.domain.R;
|
import org.dromara.common.core.domain.R;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
import org.dromara.common.core.exception.ServiceException;
|
||||||
|
import org.dromara.common.core.utils.DateUtils;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
import org.dromara.common.core.utils.MapstructUtils;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.domain.GeoPoint;
|
import org.dromara.common.domain.GeoPoint;
|
||||||
@ -33,12 +35,10 @@ import org.dromara.contractor.service.ISubUserSalaryDetailService;
|
|||||||
import org.dromara.gps.domain.vo.ConstructionUser;
|
import org.dromara.gps.domain.vo.ConstructionUser;
|
||||||
import org.dromara.project.domain.*;
|
import org.dromara.project.domain.*;
|
||||||
import org.dromara.project.domain.bo.BusAttendanceBo;
|
import org.dromara.project.domain.bo.BusAttendanceBo;
|
||||||
import org.dromara.project.domain.dto.attendance.AttendanceCountDto;
|
import org.dromara.project.domain.dto.attendance.*;
|
||||||
import org.dromara.project.domain.dto.attendance.AttendanceExportDto;
|
|
||||||
import org.dromara.project.domain.dto.attendance.AttendanceUserCountDto;
|
|
||||||
import org.dromara.project.domain.dto.attendance.BusAttendancePunchCardByFaceReq;
|
|
||||||
import org.dromara.project.domain.enums.BusAttendanceClockStatusEnum;
|
import org.dromara.project.domain.enums.BusAttendanceClockStatusEnum;
|
||||||
import org.dromara.project.domain.enums.BusAttendanceCommuterEnum;
|
import org.dromara.project.domain.enums.BusAttendanceCommuterEnum;
|
||||||
|
import org.dromara.project.domain.enums.BusAttendanceStatusEnum;
|
||||||
import org.dromara.project.domain.vo.BusAttendanceRuleVo;
|
import org.dromara.project.domain.vo.BusAttendanceRuleVo;
|
||||||
import org.dromara.project.domain.vo.BusAttendanceVo;
|
import org.dromara.project.domain.vo.BusAttendanceVo;
|
||||||
import org.dromara.project.domain.vo.BusMonthAttendanceVo;
|
import org.dromara.project.domain.vo.BusMonthAttendanceVo;
|
||||||
@ -138,6 +138,86 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
|
|||||||
return TableDataInfo.build(result);
|
return TableDataInfo.build(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询用户每月考勤列表
|
||||||
|
*
|
||||||
|
* @param req 查询条件
|
||||||
|
* @return 考勤列表
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<BusAttendanceMonthByUserIdVo> listAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req) {
|
||||||
|
Long userId = req.getUserId();
|
||||||
|
String clockMonth = req.getClockMonth();
|
||||||
|
SubConstructionUser constructionUser = constructionUserService.getById(userId);
|
||||||
|
if ( constructionUser == null) {
|
||||||
|
throw new ServiceException("施工人员信息不存在", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
// 解析月份
|
||||||
|
YearMonth yearMonth;
|
||||||
|
if (StringUtils.isNotBlank(clockMonth)) {
|
||||||
|
// 校验月份格式
|
||||||
|
if (!DateConstant.YEAR_MONTH_PATTERN.matcher(clockMonth).matches()) {
|
||||||
|
throw new ServiceException("月份格式不正确", HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
yearMonth = YearMonth.parse(clockMonth);
|
||||||
|
} else {
|
||||||
|
// 如果月份为空,则默认查询当前月份
|
||||||
|
yearMonth = YearMonth.now();
|
||||||
|
}
|
||||||
|
// 计算当月第一天 / 最后一天
|
||||||
|
Date start = DateUtils.toDate(yearMonth.atDay(1));
|
||||||
|
Date end = DateUtils.toDate(yearMonth.atEndOfMonth());
|
||||||
|
// 查询当月考勤记录
|
||||||
|
Map<LocalDate, List<BusAttendance>> dateListMap = this.lambdaQuery()
|
||||||
|
.eq(BusAttendance::getUserId, constructionUser.getSysUserId())
|
||||||
|
.between(BusAttendance::getClockDate, start, end)
|
||||||
|
.list()
|
||||||
|
.stream().collect(Collectors.groupingBy(BusAttendance::getClockDate));
|
||||||
|
// 遍历每天,计算考勤状态
|
||||||
|
List<BusAttendanceMonthByUserIdVo> respList = new ArrayList<>();
|
||||||
|
dateListMap.forEach((date, attendanceList) -> {
|
||||||
|
BusAttendanceMonthByUserIdVo resp = new BusAttendanceMonthByUserIdVo();
|
||||||
|
resp.setId(userId);
|
||||||
|
resp.setClockDate(date);
|
||||||
|
List<BusAttendanceListByDay> attendanceListByDayList = new ArrayList<>();
|
||||||
|
String clockInStatus = null;
|
||||||
|
String clockOutStatus = null;
|
||||||
|
String clockAllDayStatus = null;
|
||||||
|
String status;
|
||||||
|
for (BusAttendance attendance : attendanceList) {
|
||||||
|
// 获取考勤记录
|
||||||
|
BusAttendanceListByDay day = BusAttendanceListByDay.build(attendance);
|
||||||
|
attendanceListByDayList.add(day);
|
||||||
|
// 获取上下班状态
|
||||||
|
if (BusAttendanceCommuterEnum.CLOCKIN.getValue().equals(attendance.getClockType())) {
|
||||||
|
clockInStatus = attendance.getClockStatus();
|
||||||
|
} else if (BusAttendanceCommuterEnum.CLOCKOUT.getValue().equals(attendance.getClockType())) {
|
||||||
|
clockOutStatus = attendance.getClockStatus();
|
||||||
|
} else {
|
||||||
|
clockAllDayStatus = attendance.getClockStatus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 统计当天考勤状态
|
||||||
|
if (BusAttendanceClockStatusEnum.LEAVE.getValue().equals(clockAllDayStatus)) {
|
||||||
|
return;
|
||||||
|
} else if (BusAttendanceClockStatusEnum.NORMAL.getValue().equals(clockInStatus)
|
||||||
|
&& BusAttendanceClockStatusEnum.NORMAL.getValue().equals(clockOutStatus)) {
|
||||||
|
status = BusAttendanceStatusEnum.NORMAL.getValue();
|
||||||
|
} else if (BusAttendanceClockStatusEnum.REISSUE.getValue().equals(clockInStatus)
|
||||||
|
|| BusAttendanceClockStatusEnum.REISSUE.getValue().equals(clockOutStatus)) {
|
||||||
|
status = BusAttendanceStatusEnum.REISSUE.getValue();
|
||||||
|
} else {
|
||||||
|
status = BusAttendanceStatusEnum.ERROR.getValue();
|
||||||
|
}
|
||||||
|
resp.setStatus(status);
|
||||||
|
resp.setAttendanceList(attendanceListByDayList);
|
||||||
|
respList.add(resp);
|
||||||
|
});
|
||||||
|
// 按打卡日期正序排列
|
||||||
|
respList.sort(Comparator.comparing(BusAttendanceMonthByUserIdVo::getClockDate));
|
||||||
|
return respList;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询符合条件的考勤列表
|
* 查询符合条件的考勤列表
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user