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

修改请假计算考勤

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