Commit bf74e50e authored by 赵啸非's avatar 赵啸非

修改请假计算考勤

parent 8fd1ba6e
...@@ -313,12 +313,10 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -313,12 +313,10 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
private String getRuleCode(AttendanceRecordErrorEntity entity) { private String getRuleCode(AttendanceRecordErrorEntity entity) {
//请假时间段排除 //请假时间段排除
//判断当天是否请假 请假分为多个区间段与请假类型。 //判断当天是否请假 请假分为多个区间段与请假类型。
boolean isLeave = false;
AttendanceLeaveRecordQuery leaveRecordQuery = new AttendanceLeaveRecordQuery(); AttendanceLeaveRecordQuery leaveRecordQuery = new AttendanceLeaveRecordQuery();
leaveRecordQuery.setLeavePersonId(entity.getStaffId()); leaveRecordQuery.setLeavePersonId(entity.getStaffId());
/* leaveRecordQuery.setStartTimeStart(DateUtil.formatDate(entity.getErrorDateTime()));
leaveRecordQuery.setStartTimeEnd(DateUtil.formatDate(entity.getErrorDateTime()));*/
leaveRecordQuery.setAuditResultList(Arrays.asList(1, 4)); leaveRecordQuery.setAuditResultList(Arrays.asList(1, 4));
boolean isLeave = false;
List<AttendanceLeaveRecordEntity> leaveRecordEntities = attendanceLeaveRecordService.find(leaveRecordQuery); List<AttendanceLeaveRecordEntity> leaveRecordEntities = attendanceLeaveRecordService.find(leaveRecordQuery);
List<AttendanceLeaveRecordEntity> leaveRecords = null; List<AttendanceLeaveRecordEntity> leaveRecords = null;
...@@ -339,12 +337,8 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -339,12 +337,8 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
} }
} }
Long shiftsId = entity.getShiftsId();
if (!ObjectUtils.isEmpty(leaveRecords)) { AttendanceClassDetailEntity attendanceClassDetailEntity = classDetailService.get(shiftsId);
//当前日期范围内 存在请假。判断请假计入考勤。目前只有事件计入
isLeave = true;
}
String ruleCode = ""; String ruleCode = "";
if (ErrorStatusEnum.早退.getValue() == DataUtil.converStr2Int(entity.getProcessResult(), 3)) { if (ErrorStatusEnum.早退.getValue() == DataUtil.converStr2Int(entity.getProcessResult(), 3)) {
if (!ObjectUtils.isEmpty(entity.getErrorDateTime()) && !ObjectUtils.isEmpty(entity.getGoOffDateTime())) { if (!ObjectUtils.isEmpty(entity.getErrorDateTime()) && !ObjectUtils.isEmpty(entity.getGoOffDateTime())) {
...@@ -352,35 +346,32 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -352,35 +346,32 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
//判断如果有请假记录记录。这计算早退时间与请假记录开始时间的差值 //判断如果有请假记录记录。这计算早退时间与请假记录开始时间的差值
if (isLeave) { if (isLeave) {
List<Long> earlyMinList = new ArrayList<>(); List<Long> earlyMinList = new ArrayList<>();
Date goOffDateTime = entity.getGoOffDateTime();
if (!ObjectUtils.isEmpty(attendanceClassDetailEntity) && attendanceClassDetailEntity.getOffWorkDateBefore() > 0) {
goOffDateTime = DateUtil.offsetMinute(goOffDateTime, -attendanceClassDetailEntity.getOffWorkDateBefore());
}
for (AttendanceLeaveRecordEntity leaveRecord : leaveRecords) { for (AttendanceLeaveRecordEntity leaveRecord : leaveRecords) {
long between = DateUtil.between(leaveRecord.getStartTime(), leaveRecord.getEndTime(), DateUnit.DAY); long between = DateUtil.between(leaveRecord.getStartTime(), leaveRecord.getEndTime(), DateUnit.DAY);
if (between == 0) { if (between == 0) {
//非跨 //
// 1.判断异常时间与请假结束时间那个大。取大那个与当前班次下班时间比较差值,去正向值 // 1.判断异常时间与请假结束时间那个大。取大那个与当前班次下班时间比较差值,去正向值 偏移后的时间计算
int compare = DateUtil.compare(entity.getErrorDateTime(), leaveRecord.getEndTime()); int compare = DateUtil.compare(entity.getErrorDateTime(), leaveRecord.getEndTime());
if (compare < 0) { if (compare < 0) {
//异常时间小于请假结束时间,早退则计算假期结束时间与班次下班时间差值 //异常时间小于请假结束时间,早退则计算假期结束时间与班次下班时间还有前置时间差值
long tempEarly = DateUtil.between(leaveRecord.getEndTime(), entity.getGoOffDateTime(), DateUnit.MINUTE, false); long tempEarly = DateUtil.between(leaveRecord.getEndTime(), goOffDateTime, DateUnit.MINUTE, false);
if (tempEarly > 0L) { if (tempEarly > 0L) {
earlyMinList.add(tempEarly); earlyMinList.add(tempEarly);
} }
} }
if (compare >= 0) {
if (compare > 0) {
//异常时间大于请假结束时间,早退则计算异常时间与班次下班时间差值 //异常时间大于请假结束时间,早退则计算异常时间与班次下班时间差值
long tempEarly = DateUtil.between(entity.getErrorDateTime(), entity.getGoOffDateTime(), DateUnit.MINUTE, false); long tempEarly = DateUtil.between(entity.getErrorDateTime(), goOffDateTime, DateUnit.MINUTE, false);
if (tempEarly > 0L) {
earlyMinList.add(tempEarly);
}
} else {
//异常时间小于请假结束时间,早退则计算异常时间与班次下班时间差值
long tempEarly = DateUtil.between(entity.getErrorDateTime(), entity.getGoOffDateTime(), DateUnit.MINUTE, false);
if (tempEarly > 0L) { if (tempEarly > 0L) {
earlyMinList.add(tempEarly); earlyMinList.add(tempEarly);
} }
} }
} }
if (between > 0) { /* if (between > 0) {
//跨天 2024-07-01---2024-07-03 //跨天 2024-07-01---2024-07-03
// 判断当前异常日期是否在请假全天, // 判断当前异常日期是否在请假全天,
long betweened = DateUtil.between(DateUtil.parseDate(DateUtil.formatDate(entity.getErrorDateTime())), leaveRecord.getEndTime(), DateUnit.DAY); long betweened = DateUtil.between(DateUtil.parseDate(DateUtil.formatDate(entity.getErrorDateTime())), leaveRecord.getEndTime(), DateUnit.DAY);
...@@ -389,17 +380,15 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -389,17 +380,15 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
int compare = DateUtil.compare(entity.getErrorDateTime(), leaveRecord.getEndTime()); int compare = DateUtil.compare(entity.getErrorDateTime(), leaveRecord.getEndTime());
} }
} }*/
} }
if (!ObjectUtils.isEmpty(earlyMinList)) { if (!ObjectUtils.isEmpty(earlyMinList)) {
//去列表中最小值赋值给earlyMin //去列表中最小值赋值给earlyMin
earlyMin = earlyMinList.stream().min(Comparator.comparing(x -> x)).orElse(0L); earlyMin = earlyMinList.stream().min(Comparator.comparing(x -> x)).orElse(0L);
} else { } else {
//请假不满足条件 //请假不满足条件
earlyMin = DateUtil.between(entity.getErrorDateTime(), entity.getGoOffDateTime(), DateUnit.MINUTE); earlyMin = DateUtil.between(entity.getErrorDateTime(), goOffDateTime, DateUnit.MINUTE);
} }
} else { } else {
...@@ -421,22 +410,58 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -421,22 +410,58 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
ruleCode = "ATTEND1006"; ruleCode = "ATTEND1006";
} }
} else { } else {
ruleCode = "ATTEND1002"; ruleCode = "ATTEND1002";
} }
} else if (ErrorStatusEnum.迟到.getValue() == DataUtil.converStr2Int(entity.getProcessResult(), 3)) { } else if (ErrorStatusEnum.迟到.getValue() == DataUtil.converStr2Int(entity.getProcessResult(), 3)) {
if (!ObjectUtils.isEmpty(entity.getErrorDateTime()) && !ObjectUtils.isEmpty(entity.getGoOffDateTime())) { if (!ObjectUtils.isEmpty(entity.getErrorDateTime()) && !ObjectUtils.isEmpty(entity.getGoOffDateTime())) {
//判断如果有请假记录记录。这计算早退时间与请假记录开始时间的差值 //判断如果有请假记录记录。这计算早退时间与请假记录开始时间的差值
List<Long> lateMinList = new ArrayList<>();
Long lateMin = 0L; Long lateMin = 0L;
if (isLeave) { if (isLeave) {
Date goOffDateTime = entity.getGoOffDateTime();
if (!ObjectUtils.isEmpty(attendanceClassDetailEntity) && attendanceClassDetailEntity.getGoWorkDateAfter() > 0) {
goOffDateTime = DateUtil.offsetMinute(goOffDateTime, attendanceClassDetailEntity.getGoWorkDateAfter());
}
} for (AttendanceLeaveRecordEntity leaveRecord : leaveRecords) {
long between = DateUtil.between(leaveRecord.getStartTime(), leaveRecord.getEndTime(), DateUnit.DAY);
if (between == 0) {
//当天
// 1.判断异常时间与请假开始时间那个大。
int compare = DateUtil.compare(entity.getErrorDateTime(), leaveRecord.getStartTime());
if (compare < 0) {
//异常时间小于请假结束时间,迟到则计算异常时间与班次班次班时间还有前置时间差值
long tempLate = DateUtil.between(goOffDateTime, entity.getErrorDateTime(), DateUnit.MINUTE, false);
if (tempLate > 0L) {
lateMinList.add(tempLate);
}
}
if (compare >= 0) {
//异常时间小于请假结束时间,迟到则计算异常时间与班次班次班时间还有前置时间差值
long tempLate = DateUtil.between(goOffDateTime, leaveRecord.getEndTime(), DateUnit.MINUTE, false);
if (tempLate > 0L) {
lateMinList.add(tempLate);
}
}
lateMin = DateUtil.between(entity.getErrorDateTime(), entity.getGoOffDateTime(), DateUnit.MINUTE); }
if (between > 0) {
//todo 跨天
}
}
if (!ObjectUtils.isEmpty(lateMinList)) {
lateMin = lateMinList.stream().min(Comparator.comparing(x -> x)).orElse(0L);
} else {
lateMin = DateUtil.between(entity.getErrorDateTime(), entity.getGoOffDateTime(), DateUnit.MINUTE);
}
}else{
lateMin = DateUtil.between(entity.getErrorDateTime(), entity.getGoOffDateTime(), DateUnit.MINUTE);
}
if (lateMin >= 0L && lateMin < 5L) { if (lateMin >= 0L && lateMin < 5L) {
//迟到5分钟内 //迟到5分钟内
ruleCode = "ATTEND1001"; ruleCode = "ATTEND1001";
...@@ -450,7 +475,7 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -450,7 +475,7 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
ruleCode = "ATTEND1005"; ruleCode = "ATTEND1005";
} }
} else { } else {
//早退5分钟内 //迟到5分钟内
ruleCode = "ATTEND1001"; ruleCode = "ATTEND1001";
} }
} else if (ErrorStatusEnum.缺卡.getValue() == DataUtil.converStr2Int(entity.getProcessResult(), 3)) { } else if (ErrorStatusEnum.缺卡.getValue() == DataUtil.converStr2Int(entity.getProcessResult(), 3)) {
......
...@@ -37,8 +37,8 @@ POST {{baseUrl}}/attendance/record/hik/addAttendanceRecord ...@@ -37,8 +37,8 @@ POST {{baseUrl}}/attendance/record/hik/addAttendanceRecord
Content-Type: application/json Content-Type: application/json
{ {
"attendanceDateStart": "2024-07-01", "attendanceDateStart": "2024-07-08",
"attendanceDateEnd": "2024-07-31" "attendanceDateEnd": "2024-07-10"
} }
###海康考勤打卡记录计算1 ###海康考勤打卡记录计算1
...@@ -46,9 +46,9 @@ POST {{baseUrl}}/attendance/record/hik/addAttendanceRecord ...@@ -46,9 +46,9 @@ POST {{baseUrl}}/attendance/record/hik/addAttendanceRecord
Content-Type: application/json Content-Type: application/json
{ {
"attendanceDateStart": "2024-07-03", "attendanceDateStart": "2024-07-01",
"attendanceDateEnd": "2024-07-03", "attendanceDateEnd": "2024-07-31",
"staffId": 365 "staffId": 737
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment