|
@@ -19,6 +19,9 @@ import cn.iocoder.yudao.module.attendance.service.employeesetting.AttendanceEmpl
|
|
import cn.iocoder.yudao.module.attendance.service.leave.AttendanceLeaveService;
|
|
import cn.iocoder.yudao.module.attendance.service.leave.AttendanceLeaveService;
|
|
import cn.iocoder.yudao.module.attendance.service.out.AttendanceOutService;
|
|
import cn.iocoder.yudao.module.attendance.service.out.AttendanceOutService;
|
|
import cn.iocoder.yudao.module.attendance.service.workdaysetting.AttendanceWorkdaySettingService;
|
|
import cn.iocoder.yudao.module.attendance.service.workdaysetting.AttendanceWorkdaySettingService;
|
|
|
|
+import cn.iocoder.yudao.module.employee.api.EmployeeApi;
|
|
|
|
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeQueryReqDTO;
|
|
|
|
+import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
|
|
import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoPageReqVO;
|
|
import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoPageReqVO;
|
|
import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoDO;
|
|
import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoDO;
|
|
import cn.iocoder.yudao.module.employee.service.info.EmployeeInfoService;
|
|
import cn.iocoder.yudao.module.employee.service.info.EmployeeInfoService;
|
|
@@ -34,6 +37,7 @@ import java.text.SimpleDateFormat;
|
|
import java.time.Duration;
|
|
import java.time.Duration;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalTime;
|
|
import java.time.LocalTime;
|
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -70,9 +74,23 @@ public class AttendanceInfoServiceImpl implements AttendanceInfoService {
|
|
private AttendanceOutService attendanceOutService;
|
|
private AttendanceOutService attendanceOutService;
|
|
@Resource
|
|
@Resource
|
|
private AttendanceWorkdaySettingService workdaySettingService;
|
|
private AttendanceWorkdaySettingService workdaySettingService;
|
|
|
|
+ @Resource
|
|
|
|
+ private EmployeeApi employeeApi;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public Long createInfo(AttendanceInfoSaveReqVO createReqVO) {
|
|
public Long createInfo(AttendanceInfoSaveReqVO createReqVO) {
|
|
|
|
+ // 选择员工信息
|
|
|
|
+ EmployeeRespDTO choseEmployee = employeeApi.getEmployeeById(createReqVO.getEmployeeId());
|
|
|
|
+ if (choseEmployee != null) {
|
|
|
|
+ createReqVO.setDeptId(choseEmployee.getDeptId());
|
|
|
|
+ createReqVO.setDeptName(choseEmployee.getDeptName());
|
|
|
|
+ }
|
|
|
|
+ if (createReqVO != null && createReqVO.getAttendanceDate() != null) {
|
|
|
|
+ LocalDate localDate = createReqVO.getAttendanceDate();
|
|
|
|
+ // 使用 DateTimeFormatter 来格式化 LocalDate 为 "yyyy-MM" 格式的字符串
|
|
|
|
+ String formattedMonth = localDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
|
|
|
|
+ createReqVO.setAttendanceMonth(formattedMonth);
|
|
|
|
+ }
|
|
// 插入
|
|
// 插入
|
|
AttendanceInfoDO info = BeanUtils.toBean(createReqVO, AttendanceInfoDO.class);
|
|
AttendanceInfoDO info = BeanUtils.toBean(createReqVO, AttendanceInfoDO.class);
|
|
infoMapper.insert(info);
|
|
infoMapper.insert(info);
|
|
@@ -84,6 +102,18 @@ public class AttendanceInfoServiceImpl implements AttendanceInfoService {
|
|
public void updateInfo(AttendanceInfoSaveReqVO updateReqVO) {
|
|
public void updateInfo(AttendanceInfoSaveReqVO updateReqVO) {
|
|
// 校验存在
|
|
// 校验存在
|
|
validateInfoExists(updateReqVO.getId());
|
|
validateInfoExists(updateReqVO.getId());
|
|
|
|
+ // 选择员工信息
|
|
|
|
+ EmployeeRespDTO choseEmployee = employeeApi.getEmployeeById(updateReqVO.getEmployeeId());
|
|
|
|
+ if (choseEmployee != null) {
|
|
|
|
+ updateReqVO.setDeptId(choseEmployee.getDeptId());
|
|
|
|
+ updateReqVO.setDeptName(choseEmployee.getDeptName());
|
|
|
|
+ }
|
|
|
|
+ if (updateReqVO != null && updateReqVO.getAttendanceDate() != null) {
|
|
|
|
+ LocalDate localDate = updateReqVO.getAttendanceDate();
|
|
|
|
+ // 使用 DateTimeFormatter 来格式化 LocalDate 为 "yyyy-MM" 格式的字符串
|
|
|
|
+ String formattedMonth = localDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
|
|
|
|
+ updateReqVO.setAttendanceMonth(formattedMonth);
|
|
|
|
+ }
|
|
// 更新
|
|
// 更新
|
|
AttendanceInfoDO updateObj = BeanUtils.toBean(updateReqVO, AttendanceInfoDO.class);
|
|
AttendanceInfoDO updateObj = BeanUtils.toBean(updateReqVO, AttendanceInfoDO.class);
|
|
infoMapper.updateById(updateObj);
|
|
infoMapper.updateById(updateObj);
|
|
@@ -140,7 +170,18 @@ public class AttendanceInfoServiceImpl implements AttendanceInfoService {
|
|
try {
|
|
try {
|
|
// 验证员工是否存在
|
|
// 验证员工是否存在
|
|
validateEmployeeExists(importAttendance.getEmployeeName(), importAttendance.getEmployeeMobile(), tenantId);
|
|
validateEmployeeExists(importAttendance.getEmployeeName(), importAttendance.getEmployeeMobile(), tenantId);
|
|
-
|
|
|
|
|
|
+ EmployeeQueryReqDTO reqDTO = new EmployeeQueryReqDTO().setName(importAttendance.getEmployeeName()).setPhone(importAttendance.getEmployeeMobile());
|
|
|
|
+ EmployeeRespDTO choseEmployee = employeeApi.getEmployee(reqDTO);
|
|
|
|
+ if (choseEmployee != null) {
|
|
|
|
+ importAttendance.setDeptId(choseEmployee.getDeptId());
|
|
|
|
+ importAttendance.setDeptName(choseEmployee.getDeptName());
|
|
|
|
+ }
|
|
|
|
+ if (importAttendance != null && importAttendance.getAttendanceDate() != null) {
|
|
|
|
+ LocalDate localDate = importAttendance.getAttendanceDate()[0];
|
|
|
|
+ // 使用 DateTimeFormatter 来格式化 LocalDate 为 "yyyy-MM" 格式的字符串
|
|
|
|
+ String formattedMonth = localDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
|
|
|
|
+ importAttendance.setAttendanceMonth(formattedMonth);
|
|
|
|
+ }
|
|
// 查找并收集要删除的数据
|
|
// 查找并收集要删除的数据
|
|
List<AttendanceInfoDO> existingInfos = infoMapper.selectPage(
|
|
List<AttendanceInfoDO> existingInfos = infoMapper.selectPage(
|
|
new AttendanceInfoPageReqVO().setAttendanceDate(importAttendance.getAttendanceDate()).setEmployeeMobile(importAttendance.getEmployeeMobile())
|
|
new AttendanceInfoPageReqVO().setAttendanceDate(importAttendance.getAttendanceDate()).setEmployeeMobile(importAttendance.getEmployeeMobile())
|
|
@@ -173,10 +214,10 @@ public class AttendanceInfoServiceImpl implements AttendanceInfoService {
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public PageResult<AttendanceDailyInfoRespVO> getDailyInfoPage(AttendanceDailyInfoPageReqVO pageReqVO) {
|
|
public PageResult<AttendanceDailyInfoRespVO> getDailyInfoPage(AttendanceDailyInfoPageReqVO pageReqVO) {
|
|
-// int currentPage = pageReqVO.getPageNo();
|
|
|
|
-// if (currentPage > 0) {
|
|
|
|
-// pageReqVO.setPageNo(currentPage - 1);
|
|
|
|
-// }
|
|
|
|
|
|
+ int currentPage = pageReqVO.getPageNo();
|
|
|
|
+ if (currentPage > 0) {
|
|
|
|
+ pageReqVO.setPageNo(currentPage - 1);
|
|
|
|
+ }
|
|
List<AttendanceDailyInfoRespVO> list = infoMapper.getDailyInfoPage(pageReqVO);
|
|
List<AttendanceDailyInfoRespVO> list = infoMapper.getDailyInfoPage(pageReqVO);
|
|
if (list != null && list.size() > 0) {
|
|
if (list != null && list.size() > 0) {
|
|
for (AttendanceDailyInfoRespVO info : list) {
|
|
for (AttendanceDailyInfoRespVO info : list) {
|
|
@@ -245,6 +286,10 @@ public class AttendanceInfoServiceImpl implements AttendanceInfoService {
|
|
// 创建一个新的月度考勤信息对象
|
|
// 创建一个新的月度考勤信息对象
|
|
AttendanceMonthlyInfoRespVO monthlyInfo = new AttendanceMonthlyInfoRespVO();
|
|
AttendanceMonthlyInfoRespVO monthlyInfo = new AttendanceMonthlyInfoRespVO();
|
|
monthlyInfo.setEmployeeId(employeeDailyInfoList.get(0).getEmployeeId());
|
|
monthlyInfo.setEmployeeId(employeeDailyInfoList.get(0).getEmployeeId());
|
|
|
|
+ monthlyInfo.setEmployeeName(employeeDailyInfoList.get(0).getEmployeeName());
|
|
|
|
+ monthlyInfo.setDeptId(employeeDailyInfoList.get(0).getDeptId());
|
|
|
|
+ monthlyInfo.setDeptName(employeeDailyInfoList.get(0).getDeptName());
|
|
|
|
+ monthlyInfo.setEmployeeMobile(employeeDailyInfoList.get(0).getEmployeeMobile());
|
|
monthlyInfo.setAttendanceMonth(pageReqVO.getAttendanceMonth());
|
|
monthlyInfo.setAttendanceMonth(pageReqVO.getAttendanceMonth());
|
|
|
|
|
|
// 计算月度数据
|
|
// 计算月度数据
|
|
@@ -292,7 +337,8 @@ public class AttendanceInfoServiceImpl implements AttendanceInfoService {
|
|
// 查询该员工考勤规则
|
|
// 查询该员工考勤规则
|
|
AttendanceEmployeeSettingRespVO respVO = attendanceEmployeeSettingService.getByEmployeeId(dailyInfoList.get(0).getEmployeeId());
|
|
AttendanceEmployeeSettingRespVO respVO = attendanceEmployeeSettingService.getByEmployeeId(dailyInfoList.get(0).getEmployeeId());
|
|
if (respVO == null) {
|
|
if (respVO == null) {
|
|
- throw exception(ATTENDANCE_EMPLOYEE_SETTING_NOT_EXISTS);
|
|
|
|
|
|
+ return map;
|
|
|
|
+// throw exception(ATTENDANCE_EMPLOYEE_SETTING_NOT_EXISTS);
|
|
}
|
|
}
|
|
LocalTime ruleStartTime = respVO.getStartTime();
|
|
LocalTime ruleStartTime = respVO.getStartTime();
|
|
LocalTime ruleEndTime = respVO.getEndTime();
|
|
LocalTime ruleEndTime = respVO.getEndTime();
|
|
@@ -303,8 +349,9 @@ public class AttendanceInfoServiceImpl implements AttendanceInfoService {
|
|
LocalDate date = dailyInfo.getAttendanceDate();
|
|
LocalDate date = dailyInfo.getAttendanceDate();
|
|
LocalTime start = dailyInfo.getWorkStartTime();
|
|
LocalTime start = dailyInfo.getWorkStartTime();
|
|
LocalTime end = dailyInfo.getWorkEndTime();
|
|
LocalTime end = dailyInfo.getWorkEndTime();
|
|
-
|
|
|
|
- boolean isWorkDay = workDays.stream().anyMatch(wd -> wd.getWorkDate().equals(date));
|
|
|
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 或者 "yyyy-MM",根据你的需求
|
|
|
|
+ String dateString = date.format(formatter);
|
|
|
|
+ boolean isWorkDay = workDays.stream().anyMatch(wd -> wd.getWorkDate().equals(dateString));
|
|
|
|
|
|
if (isWorkDay) {
|
|
if (isWorkDay) {
|
|
AttendanceBusinessDO businessDO = attendanceBusinessService
|
|
AttendanceBusinessDO businessDO = attendanceBusinessService
|