|
@@ -239,7 +239,7 @@ public class AttendanceSheetServiceImpl implements AttendanceSheetService {
|
|
|
//第一次打卡时间在下午下班打卡时间之后
|
|
|
if (morningSheetDO.getAttendanceTime().toLocalTime().compareTo(finishPmFlag) >= 0) {
|
|
|
afternoonSheetDO = buildAttendanceSheet(adminUserRespDTO, adminUserRespDTO.getUsername(), lastRecord, ATTENDANCE_STATUS_ABSENT, ATTENDANCE_TYPE_PM, null, year, month, day);
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
//最后一次打卡时间在下午上班时间之前算旷工
|
|
|
afternoonSheetDO = getAttendanceAfternoonSheetDO(normalTimePm, finishPmFlag, adminUserRespDTO.getUsername(), lastRecord, adminUserRespDTO, year, month, day);
|
|
|
}
|
|
@@ -370,42 +370,52 @@ public class AttendanceSheetServiceImpl implements AttendanceSheetService {
|
|
|
Instant instant = parse.toInstant();
|
|
|
ZoneId zoneId = ZoneId.systemDefault();
|
|
|
LocalDateTime dateTime = instant.atZone(zoneId).toLocalDateTime();
|
|
|
- updateOneDaySheet(dateTime,attendanceRecordDOS);
|
|
|
+ updateOneDaySheet(dateTime, attendanceRecordDOS);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ private boolean localTimeIsIn(LocalTime localTime, LocalTime startTime, LocalTime endTime) {
|
|
|
+ return localTime.compareTo(startTime) >= 0 && localTime.compareTo(endTime) <= 0;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void updateByWorkflow(String userId, Integer attendanceStatus, List<LocalDateTime[]> leaveTimeList) {
|
|
|
+ //早上上班时间
|
|
|
+ String morningTime = configApi.getConfigKey("adm.morningTime").getCheckedData();
|
|
|
//早上下班时间
|
|
|
String morningFinishTime = configApi.getConfigKey("adm.morningFinishTime").getCheckedData();
|
|
|
+ //下午上班时间
|
|
|
+ String afternoonTime = configApi.getConfigKey("adm.afternoonTime").getCheckedData();
|
|
|
//下午下班时间
|
|
|
String afternoonFinishTime = configApi.getConfigKey("adm.afternoonFinishTime").getCheckedData();
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
|
|
|
+ LocalTime normalTimeAm = LocalTime.parse(morningTime, formatter);
|
|
|
LocalTime finishAmFlag = LocalTime.parse(morningFinishTime, formatter);
|
|
|
+ LocalTime normalTimePm = LocalTime.parse(afternoonTime, formatter);
|
|
|
LocalTime finishPmFlag = LocalTime.parse(afternoonFinishTime, formatter);
|
|
|
leaveTimeList.forEach(localDateTimes -> {
|
|
|
LocalDateTime startTime = localDateTimes[0];
|
|
|
LocalDateTime endTime = localDateTimes[1];
|
|
|
//请假时间段在同一天
|
|
|
- if(LocalDateTimeUtil.isSameDay(startTime,endTime)){
|
|
|
- //请假开始时间在早上下班之前,结束时间在早上下班之前,请假状态修改当天早上考勤状态
|
|
|
- if (startTime.toLocalTime().compareTo(finishAmFlag) <= 0 && endTime.toLocalTime().compareTo(finishAmFlag) <=0){
|
|
|
+ if (LocalDateTimeUtil.isSameDay(startTime, endTime)) {
|
|
|
+ //请假开始时间在早上上下班之间,结束时间在早上上下班之间,请假状态修改当天早上考勤状态
|
|
|
+ if (localTimeIsIn(startTime.toLocalTime(), normalTimeAm, finishAmFlag) && localTimeIsIn(endTime.toLocalTime(), normalTimeAm, finishAmFlag)) {
|
|
|
updateSheet(userId, attendanceStatus, endTime, ATTENDANCE_TYPE_AM);
|
|
|
}
|
|
|
//请假开始时间在早上下班之前,结束时间在下午下班之前,请假状态修改当天早上、下午考勤状态
|
|
|
- if (startTime.toLocalTime().compareTo(finishAmFlag) <= 0 && endTime.toLocalTime().compareTo(finishPmFlag) <=0){
|
|
|
+ if (localTimeIsIn(startTime.toLocalTime(), normalTimeAm, finishAmFlag) && localTimeIsIn(endTime.toLocalTime(), normalTimePm, finishPmFlag)) {
|
|
|
updateSheet(userId, attendanceStatus, endTime, ATTENDANCE_TYPE_AM);
|
|
|
updateSheet(userId, attendanceStatus, endTime, ATTENDANCE_TYPE_PM);
|
|
|
}
|
|
|
//请假开始时间在下午下班之前,结束时间在下午下班之前,请假状态修改当天下午考勤状态
|
|
|
- if (startTime.toLocalTime().compareTo(finishPmFlag) <= 0 && endTime.toLocalTime().compareTo(finishPmFlag) <=0){
|
|
|
+ if (localTimeIsIn(startTime.toLocalTime(), normalTimePm, finishPmFlag) && localTimeIsIn(endTime.toLocalTime(), normalTimePm, finishPmFlag)) {
|
|
|
updateSheet(userId, attendanceStatus, endTime, ATTENDANCE_TYPE_AM);
|
|
|
}
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
//请假开始时间在早上下班之前,结束时间在早上下班之前,请假状态修改多天(1~n)全天考勤状态和结束日期当天早上考勤状态
|
|
|
- if (startTime.toLocalTime().compareTo(finishAmFlag) <= 0 && endTime.toLocalTime().compareTo(finishAmFlag) <=0){
|
|
|
+ if (localTimeIsIn(startTime.toLocalTime(), normalTimePm, finishPmFlag) && localTimeIsIn(endTime.toLocalTime(), normalTimeAm, finishAmFlag)) {
|
|
|
LocalDateTime flagTime = startTime;
|
|
|
- while(LocalDateTimeUtil.isSameDay(flagTime,endTime)){
|
|
|
+ while (LocalDateTimeUtil.isSameDay(flagTime, endTime)) {
|
|
|
updateSheet(userId, attendanceStatus, flagTime, ATTENDANCE_TYPE_AM);
|
|
|
updateSheet(userId, attendanceStatus, flagTime, ATTENDANCE_TYPE_PM);
|
|
|
flagTime = startTime.plusDays(1);
|
|
@@ -413,18 +423,18 @@ public class AttendanceSheetServiceImpl implements AttendanceSheetService {
|
|
|
updateSheet(userId, attendanceStatus, endTime, ATTENDANCE_TYPE_AM);
|
|
|
}
|
|
|
//请假开始时间在早上下班之前,结束时间在下午下班之前,请假状态修改多天(1~n)全天考勤状态
|
|
|
- if (startTime.toLocalTime().compareTo(finishAmFlag) <= 0 && endTime.toLocalTime().compareTo(finishPmFlag) <=0){
|
|
|
+ if (localTimeIsIn(startTime.toLocalTime(), normalTimePm, finishPmFlag) && localTimeIsIn(endTime.toLocalTime(), normalTimePm, finishPmFlag)) {
|
|
|
LocalDateTime flagTime = startTime;
|
|
|
- while(LocalDateTimeUtil.isSameDay(flagTime,endTime)){
|
|
|
+ while (LocalDateTimeUtil.isSameDay(flagTime, endTime)) {
|
|
|
updateSheet(userId, attendanceStatus, flagTime, ATTENDANCE_TYPE_AM);
|
|
|
updateSheet(userId, attendanceStatus, flagTime, ATTENDANCE_TYPE_PM);
|
|
|
flagTime = startTime.plusDays(1);
|
|
|
}
|
|
|
}
|
|
|
//请假开始时间在下午下班之前,结束时间在下午下班之前,请假状态修改修改多天(1~n)全天考勤状态和起始日期当天下午考勤状态
|
|
|
- if (startTime.toLocalTime().compareTo(finishPmFlag) <= 0 && endTime.toLocalTime().compareTo(finishPmFlag) <=0){
|
|
|
+ if (localTimeIsIn(startTime.toLocalTime(), normalTimePm, finishPmFlag) && localTimeIsIn(endTime.toLocalTime(), normalTimePm, finishPmFlag)) {
|
|
|
LocalDateTime flagTime = startTime;
|
|
|
- while(LocalDateTimeUtil.isSameDay(flagTime,endTime)){
|
|
|
+ while (LocalDateTimeUtil.isSameDay(flagTime, endTime)) {
|
|
|
updateSheet(userId, attendanceStatus, flagTime, ATTENDANCE_TYPE_AM);
|
|
|
updateSheet(userId, attendanceStatus, flagTime, ATTENDANCE_TYPE_PM);
|
|
|
flagTime = startTime.plusDays(1);
|
|
@@ -432,10 +442,10 @@ public class AttendanceSheetServiceImpl implements AttendanceSheetService {
|
|
|
updateSheet(userId, attendanceStatus, startTime, ATTENDANCE_TYPE_AM);
|
|
|
}
|
|
|
//请假开始时间在下午下班之前,结束时间在早上下班之前,请假状态修改多天(0~n)全天考勤状态和结束日期当天早上考勤状态和起始日期当天下午考勤状态
|
|
|
- if (startTime.toLocalTime().compareTo(finishPmFlag) <= 0 && endTime.toLocalTime().compareTo(finishAmFlag) <=0){
|
|
|
+ if (localTimeIsIn(startTime.toLocalTime(), normalTimePm, finishPmFlag) && localTimeIsIn(endTime.toLocalTime(), normalTimeAm, finishAmFlag)) {
|
|
|
updateSheet(userId, attendanceStatus, startTime, ATTENDANCE_TYPE_PM);
|
|
|
LocalDateTime flagTime = startTime.plusDays(1);
|
|
|
- while(LocalDateTimeUtil.isSameDay(flagTime,endTime)){
|
|
|
+ while (LocalDateTimeUtil.isSameDay(flagTime, endTime)) {
|
|
|
updateSheet(userId, attendanceStatus, flagTime, ATTENDANCE_TYPE_AM);
|
|
|
updateSheet(userId, attendanceStatus, flagTime, ATTENDANCE_TYPE_PM);
|
|
|
flagTime = startTime.plusDays(1);
|
|
@@ -453,6 +463,7 @@ public class AttendanceSheetServiceImpl implements AttendanceSheetService {
|
|
|
|
|
|
/**
|
|
|
* 更新某一天考勤记录
|
|
|
+ *
|
|
|
* @param dateTime
|
|
|
* @param attendanceRecordDOS
|
|
|
*/
|
|
@@ -486,17 +497,17 @@ public class AttendanceSheetServiceImpl implements AttendanceSheetService {
|
|
|
AttendanceRecordDO lastRecord = attendanceRecordList.get(attendanceRecordList.size() - 1);
|
|
|
//计算早上考勤记录
|
|
|
//第一次打卡时间在上班时间+不计入迟到时间之前
|
|
|
- AttendanceSheetDO morningSheetDO = getAttendanceMorningSheetDO(normalTimeAm, lateFlag, finishAmFlag, firstRecord.getUsername().replace("'",""), firstRecord, null, year, month, day);
|
|
|
+ AttendanceSheetDO morningSheetDO = getAttendanceMorningSheetDO(normalTimeAm, lateFlag, finishAmFlag, firstRecord.getUsername().replace("'", ""), firstRecord, null, year, month, day);
|
|
|
//计算下午考勤记录
|
|
|
//最后一次打卡时间在下午上班时间之前算旷工
|
|
|
- AttendanceSheetDO afternoonSheetDO = getAttendanceAfternoonSheetDO(normalTimePm, finishPmFlag, lastRecord.getUsername().replace("'",""), lastRecord, null, year, month, day);
|
|
|
+ AttendanceSheetDO afternoonSheetDO = getAttendanceAfternoonSheetDO(normalTimePm, finishPmFlag, lastRecord.getUsername().replace("'", ""), lastRecord, null, year, month, day);
|
|
|
attendanceSheetDOList.add(morningSheetDO);
|
|
|
attendanceSheetDOList.add(afternoonSheetDO);
|
|
|
});
|
|
|
for (AttendanceSheetDO sheetDO : list) {
|
|
|
for (AttendanceSheetDO updateSheetDO : attendanceSheetDOList) {
|
|
|
//用户工号和考勤类型一样做修改
|
|
|
- if(sheetDO.getAttendanceType().equals(updateSheetDO.getAttendanceType()) &&sheetDO.getUsername().equals(updateSheetDO.getUsername())){
|
|
|
+ if (sheetDO.getAttendanceType().equals(updateSheetDO.getAttendanceType()) && sheetDO.getUsername().equals(updateSheetDO.getUsername())) {
|
|
|
sheetDO.setAttendanceTime(updateSheetDO.getAttendanceTime()).setAttendanceStatus(updateSheetDO.getAttendanceStatus()).setOtherMinute(updateSheetDO.getOtherMinute());
|
|
|
sheetDO.setUpdateTime(null);
|
|
|
sheetDO.setUpdater(null);
|
|
@@ -504,7 +515,7 @@ public class AttendanceSheetServiceImpl implements AttendanceSheetService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- if(CollUtil.isNotEmpty(updateList)){
|
|
|
+ if (CollUtil.isNotEmpty(updateList)) {
|
|
|
attendanceSheetMapper.updateBatch(updateList);
|
|
|
}
|
|
|
}
|
|
@@ -530,12 +541,12 @@ public class AttendanceSheetServiceImpl implements AttendanceSheetService {
|
|
|
|
|
|
private AttendanceSheetDO buildAttendanceSheet(AdminUserRespDTO user, String username, AttendanceRecordDO firstRecord, Integer attendanceStatus, Integer attendanceType, Integer otherMinute, int year, int month, int day) {
|
|
|
AttendanceSheetDO sheetDO = new AttendanceSheetDO();
|
|
|
- if(user!=null){
|
|
|
+ if (user != null) {
|
|
|
sheetDO.setUserId(user.getId());
|
|
|
sheetDO.setDeptId(user.getDeptId());
|
|
|
sheetDO.setNickname(user.getNickname());
|
|
|
}
|
|
|
- if(StringUtils.isNotBlank(username)){
|
|
|
+ if (StringUtils.isNotBlank(username)) {
|
|
|
sheetDO.setUsername(username);
|
|
|
}
|
|
|
sheetDO.setAttendanceTime(firstRecord.getStrutime());
|