|
@@ -51,7 +51,9 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
|
|
|
@Override
|
|
|
public HttpRespMsg refreshData(String month) {
|
|
|
HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ long l1 = System.currentTimeMillis();
|
|
|
this.remove(new QueryWrapper<AttendanceStaff>().eq("month", month));
|
|
|
+ long l2 = System.currentTimeMillis();
|
|
|
|
|
|
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
|
|
@@ -60,13 +62,20 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
|
|
|
|
|
|
LocalDate startDate = yearMonth.atDay(1);//本月开始日期
|
|
|
LocalDate endDate = yearMonth.atEndOfMonth();//本月结束日期
|
|
|
+ LocalDate nextMonthDate = startDate.plusMonths(1);//下月开始第一天
|
|
|
ArrayList<LocalDate> localDates = new ArrayList<>();//本月所有日期
|
|
|
for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) {
|
|
|
localDates.add(date);
|
|
|
}
|
|
|
|
|
|
List<Attendance> attendanceList = attendanceService.list(new QueryWrapper<Attendance>()
|
|
|
- .eq("month", month).or().le("clock_time", localDate).orderByAsc("job_number","clock_time"));
|
|
|
+ .eq("month", month)
|
|
|
+// .eq("job_number","LEW2322")
|
|
|
+ .or().le("clock_time", localDate)
|
|
|
+// .between("clock_time",LocalDate.of(2025,3,8),LocalDate.of(2025,3,11))
|
|
|
+ .orderByAsc("job_number","clock_time"));
|
|
|
+ //获取申请单数据
|
|
|
+ List<ApplyForm> applyFormList=applyFormService.getAllListByFirstDateAndLastDate(startDate,nextMonthDate);
|
|
|
|
|
|
List<AttendanceStaff> addList = new ArrayList<>();
|
|
|
Map<String, List<Attendance>> listMap = attendanceList.stream().collect(Collectors.groupingBy(Attendance::getJobNumber));
|
|
@@ -79,67 +88,200 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
|
|
|
//遍历本月的日期,根据考勤记录,确定考勤的上班打卡时间,下班打卡时间,上班时间, 班次类型:白班,中班,小夜班,大夜班
|
|
|
for (LocalDate date : localDates) {
|
|
|
|
|
|
-
|
|
|
- LocalDateTime dayStartTime = date.atStartOfDay();//当日的最早时间
|
|
|
- LocalDateTime dayEndTime = date.plusDays(1).atStartOfDay().plusHours(10);//假设的当日大夜班到第二天的下班最晚时间
|
|
|
int year = date.getYear();
|
|
|
int monthValue = date.getMonthValue();
|
|
|
int dayValue = date.getDayOfMonth();
|
|
|
+
|
|
|
+ AttendanceStaff staff = new AttendanceStaff();
|
|
|
+ staff.setJobNumber(jobNumber);
|
|
|
+ staff.setMonth(month);
|
|
|
+ staff.setName(attendance.getName());
|
|
|
+ staff.setDeptName(attendance.getDeptName());
|
|
|
+ staff.setClockDate(date);
|
|
|
+
|
|
|
+ Optional<ApplyForm> first = applyFormList.stream().filter(a -> !a.getStartTime().toLocalDate().isAfter(date)
|
|
|
+ && !a.getEndTime().toLocalDate().isBefore(date)&&a.getApplyId().equals(jobNumber)).findFirst();
|
|
|
+
|
|
|
+ if (first.isPresent()&&first.get().getType()!=6) {
|
|
|
+ ApplyForm applyForm = first.get();
|
|
|
+ //请假
|
|
|
+ if (applyForm.getType()==3){
|
|
|
+ //请假8小时
|
|
|
+ if (applyForm.getSumTime().compareTo(BigDecimal.valueOf(8))>=0
|
|
|
+ ||(applyForm.getSumTime().compareTo(BigDecimal.valueOf(8)) < 0 &&applyForm.getStartTime().equals(LocalDateTime.of(date, LocalTime.of(8, 0)))) //请早上的假
|
|
|
+ ||(applyForm.getSumTime().compareTo(BigDecimal.valueOf(8)) < 0 &&applyForm.getEndTime().equals(LocalDateTime.of(date, LocalTime.of(17, 0)))) //请下午的假
|
|
|
+ ){
|
|
|
+ staff.setClockStartTime(LocalDateTime.of(date, LocalTime.of(8, 0)));
|
|
|
+ staff.setClockEndTime(LocalDateTime.of(date, LocalTime.of(17, 0)));
|
|
|
+ staff.setWorkHour(BigDecimal.valueOf(8));
|
|
|
+ staff.setAttendanceType(QING_JIA);
|
|
|
+ staff.setAttendanceTypeName(applyForm.getApplyBillName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //加班申请
|
|
|
+ else if (applyForm.getType()==4){
|
|
|
+ //一天都加班
|
|
|
+ if (applyForm.getSumTime().compareTo(BigDecimal.valueOf(8))>=0){
|
|
|
+ staff.setClockStartTime(LocalDateTime.of(date, LocalTime.of(8, 0)));
|
|
|
+ staff.setClockEndTime(LocalDateTime.of(date, LocalTime.of(17, 0)));
|
|
|
+ staff.setWorkHour(BigDecimal.valueOf(8));
|
|
|
+ staff.setAttendanceType(JIA_BAN);
|
|
|
+ staff.setAttendanceTypeName("加班");
|
|
|
+ }
|
|
|
+ //加班几个小时
|
|
|
+ else if (applyForm.getSumTime().compareTo(BigDecimal.valueOf(8)) < 0 &&applyForm.getStartTime().equals(LocalDateTime.of(date, LocalTime.of(17, 0)))){
|
|
|
+ staff.setClockStartTime(LocalDateTime.of(date, LocalTime.of(8, 0)));
|
|
|
+ staff.setClockEndTime(applyForm.getEndTime());
|
|
|
+ staff.setWorkHour(BigDecimal.valueOf(8).add(applyForm.getSumTime()));
|
|
|
+ staff.setAttendanceType(JIA_BAN);
|
|
|
+ staff.setAttendanceTypeName("加班");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //提前下班申请
|
|
|
+ else if (applyForm.getType()==5){
|
|
|
+ //大夜班提前下班
|
|
|
+ if(!applyForm.getEndTime().toLocalTime().isAfter(LocalTime.of(8, 0)) &&applyForm.getStartTime().toLocalTime().isAfter(LocalTime.of(0, 0))){
|
|
|
+ staff.setClockStartTime(LocalDateTime.of(date, LocalTime.of(0, 0)));
|
|
|
+ staff.setClockEndTime(LocalDateTime.of(date, LocalTime.of(8, 0)));
|
|
|
+ staff.setWorkHour(BigDecimal.valueOf(8).subtract(applyForm.getSumTime()));
|
|
|
+ staff.setClockDate(date.plusDays(-1));
|
|
|
+ staff.setAttendanceType(TI_QIAN_XIA_BAN);
|
|
|
+ staff.setAttendanceTypeName("提前下班");
|
|
|
+ }
|
|
|
+ //白班提前下班
|
|
|
+ else if(applyForm.getEndTime().toLocalTime().equals(LocalTime.of(17, 0))){
|
|
|
+ staff.setClockStartTime(LocalDateTime.of(date, LocalTime.of(8, 0)));
|
|
|
+ staff.setClockEndTime(LocalDateTime.of(date, LocalTime.of(17, 0)));
|
|
|
+ staff.setWorkHour(BigDecimal.valueOf(8).subtract(applyForm.getSumTime()));
|
|
|
+ staff.setAttendanceType(TI_QIAN_XIA_BAN);
|
|
|
+ staff.setAttendanceTypeName("提前下班");
|
|
|
+ }
|
|
|
+ //中班提前下班
|
|
|
+ else if(applyForm.getEndTime().toLocalTime().equals(LocalTime.of(21, 0))){
|
|
|
+ staff.setClockStartTime(LocalDateTime.of(date, LocalTime.of(13, 0)));
|
|
|
+ staff.setClockEndTime(LocalDateTime.of(date, LocalTime.of(21, 0)));
|
|
|
+ staff.setWorkHour(BigDecimal.valueOf(8).subtract(applyForm.getSumTime()));
|
|
|
+ staff.setAttendanceType(TI_QIAN_XIA_BAN);
|
|
|
+ staff.setAttendanceTypeName("提前下班");
|
|
|
+ }
|
|
|
+ //小夜班提前下班
|
|
|
+ else if(applyForm.getEndTime().toLocalTime().equals(LocalTime.of(0, 0))&&applyForm.getStartTime().isAfter(LocalDateTime.of(date, LocalTime.of(16, 0)))){
|
|
|
+ staff.setClockStartTime(LocalDateTime.of(date, LocalTime.of(13, 0)));
|
|
|
+ staff.setClockEndTime(applyForm.getStartTime());
|
|
|
+ staff.setWorkHour(BigDecimal.valueOf(8).subtract(applyForm.getSumTime()));
|
|
|
+ staff.setAttendanceType(TI_QIAN_XIA_BAN);
|
|
|
+ staff.setAttendanceTypeName("提前下班");
|
|
|
+ }
|
|
|
+ else if(applyForm.getEndTime().toLocalTime().equals(LocalTime.of(1, 0))&&applyForm.getStartTime().isAfter(LocalDateTime.of(date, LocalTime.of(17, 0)))){
|
|
|
+ staff.setClockStartTime(LocalDateTime.of(date, LocalTime.of(14, 0)));
|
|
|
+ staff.setClockEndTime(applyForm.getStartTime());
|
|
|
+ staff.setWorkHour(BigDecimal.valueOf(8).subtract(applyForm.getSumTime()));
|
|
|
+ staff.setAttendanceType(TI_QIAN_XIA_BAN);
|
|
|
+ staff.setAttendanceTypeName("提前下班");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ addList.add(staff);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ else if (first.isPresent()&&first.get().getType()==6) {
|
|
|
+ ApplyForm applyForm = first.get();
|
|
|
+ Attendance a1 = new Attendance();
|
|
|
+ a1.setClockTime(applyForm.getStartTime());
|
|
|
+ attendances.add(a1);
|
|
|
+ attendances = attendances.stream()
|
|
|
+ .sorted(Comparator.comparing(Attendance::getClockTime))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
//早班上下班时间判断
|
|
|
- Optional<Attendance> zaoShangCount = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 7, 0))
|
|
|
+ Optional<Attendance> zaoShangCount = attendances.stream().filter(a ->!a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 7, 0))
|
|
|
+ &&!a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 8, 0))
|
|
|
+ ).findFirst();
|
|
|
+ Optional<Attendance> zaoXiaCount = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 16, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 20, 30))
|
|
|
+ ).findFirst();
|
|
|
+ //异常早班1时间判断
|
|
|
+ Optional<Attendance> zaoShangYiChang1Count = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 8, 0))
|
|
|
&& a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 9, 0))
|
|
|
).findFirst();
|
|
|
- Optional<Attendance> zaoXiaCount = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 16, 0))
|
|
|
- && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 19, 0))
|
|
|
- ).max(Comparator.comparing(Attendance::getClockTime));
|
|
|
+ Optional<Attendance> zaoXiaYiChang1Count = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 16, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 20, 30))).findFirst();
|
|
|
+
|
|
|
+ //异常早班2时间判断
|
|
|
+ Optional<Attendance> zaoShangYiChang2Count = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 9, 0))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 10, 0))
|
|
|
+ ).findFirst();
|
|
|
+ Optional<Attendance> zaoXiaYiChang2Count = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 16, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 20, 30))
|
|
|
+ ).findFirst();
|
|
|
+
|
|
|
//中班上下班时间判断
|
|
|
- Optional<Attendance> zhongShangCount = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 12, 0))
|
|
|
- && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 14, 0))
|
|
|
+ Optional<Attendance> zhongShangCount = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 12, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 13, 30))
|
|
|
).findFirst();
|
|
|
|
|
|
- Optional<Attendance> zhongXiaCount = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 20, 0))
|
|
|
- && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 23, 0))
|
|
|
- ).max(Comparator.comparing(Attendance::getClockTime));
|
|
|
- //小夜班上下班时间判断
|
|
|
- Optional<Attendance> xiaoYeShangCount = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 15, 0))
|
|
|
- && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 19, 0))
|
|
|
+ Optional<Attendance> zhongXiaCount = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 20, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 21, 30))
|
|
|
+ ).findFirst();
|
|
|
+ //小夜班(1)上下班时间判断
|
|
|
+ Optional<Attendance> xiaoYeShangCount = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 15, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 16, 30))
|
|
|
).findFirst();
|
|
|
|
|
|
boolean isLastDay = endDate.isEqual(LocalDate.of(year, monthValue, dayValue));//是否是该月份最后一天
|
|
|
Optional<Attendance> xiaoYeXiaCount = isLastDay ?
|
|
|
- attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 22, 0))
|
|
|
- && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue+1, 1, 3, 0))
|
|
|
- ).max(Comparator.comparing(Attendance::getClockTime)) :
|
|
|
- attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 22, 0))
|
|
|
- && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue+1, 3, 0))
|
|
|
- ).max(Comparator.comparing(Attendance::getClockTime));
|
|
|
- //大夜班上下班时间判断
|
|
|
- Optional<Attendance> daYeShangCount =isLastDay?
|
|
|
- attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 23, 0))
|
|
|
- && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue+1, 1, 1, 0))
|
|
|
+ attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 23, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue+1, 1, 0, 30))
|
|
|
+ ).findFirst():
|
|
|
+ attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 23, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue+1, 0, 30))
|
|
|
+ ).findFirst();
|
|
|
+
|
|
|
+ //小夜班(2)上下班时间判断
|
|
|
+ Optional<Attendance> xiaoYeShang2Count = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 16, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 17, 30))
|
|
|
+ ).findFirst();
|
|
|
+ Optional<Attendance> xiaoYeXia2Count = isLastDay ?
|
|
|
+ attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue+1, 1, 0, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue+1, 1, 1, 30))
|
|
|
).findFirst():
|
|
|
- attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 23, 0))
|
|
|
- && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue + 1, 1, 0))
|
|
|
+ attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue+1, 0, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue+1, 1, 30))
|
|
|
+ ).findFirst();
|
|
|
+
|
|
|
+ //异常小夜班(1)上下班时间判断
|
|
|
+ Optional<Attendance> xiaoYeShangYiChang1Count = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 13, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 14, 30))
|
|
|
).findFirst();
|
|
|
+ Optional<Attendance> xiaoYeXiaYiChang1Count =attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 21, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 22, 30))).findFirst();
|
|
|
|
|
|
- Optional<Attendance> daYeXiaCount =isLastDay?
|
|
|
- attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue+1, 1, 6, 0))
|
|
|
- && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue+1, 1, 10, 0))
|
|
|
- ).max(Comparator.comparing(Attendance::getClockTime))
|
|
|
- :
|
|
|
- attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue + 1, 6, 0))
|
|
|
- && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue + 1, 10, 0))
|
|
|
- ).max(Comparator.comparing(Attendance::getClockTime));
|
|
|
+ //异常小夜班(2)上下班时间判断
|
|
|
+ Optional<Attendance> xiaoYeShangYiChang2Count = attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 14, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 15, 30))
|
|
|
+ ).findFirst();
|
|
|
+ Optional<Attendance> xiaoYeXiaYiChang2Count =attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 22, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue, 23, 30))).findFirst();
|
|
|
|
|
|
- AttendanceStaff staff = new AttendanceStaff();
|
|
|
- staff.setJobNumber(jobNumber);
|
|
|
- staff.setMonth(month);
|
|
|
- staff.setName(attendance.getName());
|
|
|
- staff.setDeptName(attendance.getDeptName());
|
|
|
- staff.setClockDate(date);
|
|
|
- /**
|
|
|
- * 考勤状态 0白班,1大夜班,2小夜班,3中班,4班次异常,5休息,6调休,7请假
|
|
|
- */
|
|
|
+ //大夜班上下班时间判断
|
|
|
+ Optional<Attendance> daYeShangCount =isLastDay ?
|
|
|
+ attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 23, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue+1, 1, 0, 30))
|
|
|
+ ).findFirst():
|
|
|
+ attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue, 23, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue+1, 0, 30))
|
|
|
+ ).findFirst();
|
|
|
+
|
|
|
+ Optional<Attendance> daYeXiaCount =isLastDay ?
|
|
|
+ attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue+1, 1, 7, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue+1, 1, 8, 30))
|
|
|
+ ).findFirst():
|
|
|
+ attendances.stream().filter(a -> a.getClockTime().isAfter(LocalDateTime.of(year, monthValue, dayValue+1, 7, 30))
|
|
|
+ && a.getClockTime().isBefore(LocalDateTime.of(year, monthValue, dayValue+1, 8, 30))
|
|
|
+ ).findFirst();
|
|
|
|
|
|
//1先判断白班
|
|
|
if (zaoShangCount.isPresent()&&zaoXiaCount.isPresent()) {
|
|
@@ -150,8 +292,30 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
|
|
|
BigDecimal bigDecimal = calculateWorkHours(startClockTime, endClockTime);
|
|
|
staff.setWorkHour(bigDecimal);
|
|
|
staff.setAttendanceType(BAI_BAN);
|
|
|
+ staff.setAttendanceTypeName("白班");
|
|
|
+ }
|
|
|
+ //异常白班1
|
|
|
+ else if (zaoShangYiChang1Count.isPresent()&&zaoXiaYiChang1Count.isPresent()) {
|
|
|
+ LocalDateTime startClockTime = zaoShangYiChang1Count.get().getClockTime();
|
|
|
+ LocalDateTime endClockTime = zaoXiaYiChang1Count.get().getClockTime();
|
|
|
+ staff.setClockStartTime(startClockTime);
|
|
|
+ staff.setClockEndTime(endClockTime);
|
|
|
+ BigDecimal bigDecimal = calculateWorkHours(startClockTime, endClockTime);
|
|
|
+ staff.setWorkHour(bigDecimal);
|
|
|
+ staff.setAttendanceType(BAI_BAN_YI_CHANG_1);
|
|
|
+ staff.setAttendanceTypeName("异常白班1");
|
|
|
+ }
|
|
|
+ //异常白班2
|
|
|
+ else if (zaoShangYiChang2Count.isPresent()&&zaoXiaYiChang2Count.isPresent()) {
|
|
|
+ LocalDateTime startClockTime = zaoShangYiChang2Count.get().getClockTime();
|
|
|
+ LocalDateTime endClockTime = zaoXiaYiChang2Count.get().getClockTime();
|
|
|
+ staff.setClockStartTime(startClockTime);
|
|
|
+ staff.setClockEndTime(endClockTime);
|
|
|
+ BigDecimal bigDecimal = calculateWorkHours(startClockTime, endClockTime);
|
|
|
+ staff.setWorkHour(bigDecimal);
|
|
|
+ staff.setAttendanceType(BAI_BAN_YI_CHANG_2);
|
|
|
+ staff.setAttendanceTypeName("异常白班2");
|
|
|
}
|
|
|
-
|
|
|
//2再判断中班
|
|
|
else if (zhongShangCount.isPresent()&&zhongXiaCount.isPresent()) {
|
|
|
LocalDateTime startClockTime = zhongShangCount.get().getClockTime();
|
|
@@ -161,8 +325,8 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
|
|
|
BigDecimal bigDecimal = calculateWorkHours(startClockTime, endClockTime);
|
|
|
staff.setWorkHour(bigDecimal);
|
|
|
staff.setAttendanceType(ZHONG_BAN);
|
|
|
+ staff.setAttendanceTypeName("中班");
|
|
|
}
|
|
|
-
|
|
|
//3判断小夜班
|
|
|
else if (xiaoYeShangCount.isPresent()&&xiaoYeXiaCount.isPresent()) {
|
|
|
LocalDateTime startClockTime = xiaoYeShangCount.get().getClockTime();
|
|
@@ -172,8 +336,42 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
|
|
|
BigDecimal bigDecimal = calculateWorkHours(startClockTime, endClockTime);
|
|
|
staff.setWorkHour(bigDecimal);
|
|
|
staff.setAttendanceType(XIAO_YE_BAN);
|
|
|
+ staff.setAttendanceTypeName("小夜班");
|
|
|
+ }
|
|
|
+ //3判断小夜班2
|
|
|
+ else if (xiaoYeShang2Count.isPresent()&&xiaoYeXia2Count.isPresent()) {
|
|
|
+ LocalDateTime startClockTime = xiaoYeShang2Count.get().getClockTime();
|
|
|
+ LocalDateTime endClockTime = xiaoYeXia2Count.get().getClockTime();
|
|
|
+ staff.setClockStartTime(startClockTime);
|
|
|
+ staff.setClockEndTime(endClockTime);
|
|
|
+ BigDecimal bigDecimal = calculateWorkHours(startClockTime, endClockTime);
|
|
|
+ staff.setWorkHour(bigDecimal);
|
|
|
+ staff.setAttendanceType(XIAO_YE_BAN);
|
|
|
+ staff.setAttendanceTypeName("小夜班");
|
|
|
}
|
|
|
+ //3判断小夜班异常1
|
|
|
+ else if (xiaoYeShangYiChang1Count.isPresent()&&xiaoYeXiaYiChang1Count.isPresent()) {
|
|
|
+ LocalDateTime startClockTime = xiaoYeShangYiChang1Count.get().getClockTime();
|
|
|
+ LocalDateTime endClockTime = xiaoYeXiaYiChang1Count.get().getClockTime();
|
|
|
+ staff.setClockStartTime(startClockTime);
|
|
|
+ staff.setClockEndTime(endClockTime);
|
|
|
+ BigDecimal bigDecimal = calculateWorkHours(startClockTime, endClockTime);
|
|
|
+ staff.setWorkHour(bigDecimal);
|
|
|
+ staff.setAttendanceType(XIAO_YE_BAN_YI_CHANG_1);
|
|
|
+ staff.setAttendanceTypeName("异常小夜班1");
|
|
|
|
|
|
+ }
|
|
|
+ //3判断小夜班异常2
|
|
|
+ else if (xiaoYeShangYiChang2Count.isPresent()&&xiaoYeXiaYiChang2Count.isPresent()) {
|
|
|
+ LocalDateTime startClockTime = xiaoYeShangYiChang2Count.get().getClockTime();
|
|
|
+ LocalDateTime endClockTime = xiaoYeXiaYiChang2Count.get().getClockTime();
|
|
|
+ staff.setClockStartTime(startClockTime);
|
|
|
+ staff.setClockEndTime(endClockTime);
|
|
|
+ BigDecimal bigDecimal = calculateWorkHours(startClockTime, endClockTime);
|
|
|
+ staff.setWorkHour(bigDecimal);
|
|
|
+ staff.setAttendanceType(XIAO_YE_BAN_YI_CHANG_2);
|
|
|
+ staff.setAttendanceTypeName("异常小夜班2");
|
|
|
+ }
|
|
|
//4判断大夜班
|
|
|
else if (daYeShangCount.isPresent()&&daYeXiaCount.isPresent()) {
|
|
|
LocalDateTime startClockTime = daYeShangCount.get().getClockTime();
|
|
@@ -183,16 +381,24 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
|
|
|
BigDecimal bigDecimal = calculateWorkHours(startClockTime, endClockTime);
|
|
|
staff.setWorkHour(bigDecimal);
|
|
|
staff.setAttendanceType(DA_YE_BAN);
|
|
|
+ staff.setAttendanceTypeName("大夜班");
|
|
|
}
|
|
|
+ //过滤掉空数据
|
|
|
if (staff.getClockStartTime()!=null){
|
|
|
addList.add(staff);
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
+
|
|
|
+ long l3 = System.currentTimeMillis();
|
|
|
+
|
|
|
saveBatch(addList);
|
|
|
+
|
|
|
+ long l4 = System.currentTimeMillis();
|
|
|
+ System.out.println("l2-l1-->" + (l2 - l1));
|
|
|
+ System.out.println("l3-l2-->"+(l3-l2));
|
|
|
+ System.out.println("l4-l3-->"+(l4-l3));
|
|
|
return msg;
|
|
|
}
|
|
|
|
|
@@ -246,17 +452,17 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
|
|
|
if (d.getDayOfWeek() == DayOfWeek.SATURDAY
|
|
|
|| d.getDayOfWeek() == DayOfWeek.SUNDAY
|
|
|
|| customHolidays.contains(d)) {
|
|
|
- staff.setAttendanceType(5);//休息
|
|
|
+ staff.setAttendanceType(XIU_XI);//休息
|
|
|
staff.setAttendanceTypeName("休息");
|
|
|
staff.setColor("#2e2e2e");
|
|
|
}
|
|
|
if (freeDays.contains(d)) {
|
|
|
- staff.setAttendanceType(6);//调休
|
|
|
+ staff.setAttendanceType(TIAO_XIU);//调休
|
|
|
staff.setAttendanceTypeName("调休");
|
|
|
staff.setColor("#2e2e2e");
|
|
|
}
|
|
|
if (workdays.contains(d)){
|
|
|
- staff.setAttendanceType(0);//白班
|
|
|
+ staff.setAttendanceType(BAI_BAN);//白班
|
|
|
staff.setAttendanceTypeName("白班");
|
|
|
staff.setColor("#2e2e2e");
|
|
|
}
|
|
@@ -283,24 +489,42 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
|
|
|
if (first.isPresent()) {
|
|
|
AttendanceStaff s = first.get();
|
|
|
BeanUtils.copyProperties(s,staff);
|
|
|
- if (staff.getAttendanceType()==0){
|
|
|
- staff.setAttendanceTypeName("白班");
|
|
|
+ if (staff.getAttendanceType()==BAI_BAN){
|
|
|
staff.setColor("#2e2e2e");
|
|
|
- }else if (staff.getAttendanceType()==1){
|
|
|
- staff.setAttendanceTypeName("大夜班");
|
|
|
+ }
|
|
|
+ else if (staff.getAttendanceType()==BAI_BAN_YI_CHANG_1){
|
|
|
+ staff.setColor("#2e2e2e");//绿色
|
|
|
+ }
|
|
|
+ else if (staff.getAttendanceType()==BAI_BAN_YI_CHANG_2){
|
|
|
+ staff.setColor("#2e2e2e");//绿色
|
|
|
+ }
|
|
|
+ else if (staff.getAttendanceType()==DA_YE_BAN){
|
|
|
staff.setColor("#67C23A");//绿色
|
|
|
}
|
|
|
- else if (staff.getAttendanceType()==2){
|
|
|
- staff.setAttendanceTypeName("小夜班");
|
|
|
+ else if (staff.getAttendanceType()==XIAO_YE_BAN){
|
|
|
staff.setColor("#67C23A");//绿色
|
|
|
}
|
|
|
- else if (staff.getAttendanceType()==3){
|
|
|
- staff.setAttendanceTypeName("中班");
|
|
|
+ else if (staff.getAttendanceType()==XIAO_YE_BAN_YI_CHANG_1){
|
|
|
+ staff.setColor("#67C23A");//绿色
|
|
|
+ }
|
|
|
+ else if (staff.getAttendanceType()==XIAO_YE_BAN_YI_CHANG_2){
|
|
|
+ staff.setColor("#67C23A");//绿色
|
|
|
+ }
|
|
|
+ else if (staff.getAttendanceType()==ZHONG_BAN){
|
|
|
+ staff.setColor("#909399");
|
|
|
+ }
|
|
|
+ else if (staff.getAttendanceType()==QING_JIA){
|
|
|
+ staff.setColor("#909399");
|
|
|
+ }
|
|
|
+ else if (staff.getAttendanceType()==JIA_BAN){
|
|
|
+ staff.setColor("#909399");
|
|
|
+ }
|
|
|
+ else if (staff.getAttendanceType()==TI_QIAN_XIA_BAN){
|
|
|
staff.setColor("#909399");
|
|
|
}
|
|
|
}else {
|
|
|
if (staff.getId()==null&&staff.getAttendanceType()==null) {
|
|
|
- staff.setAttendanceType(4);//班次异常
|
|
|
+ staff.setAttendanceType(YI_CHANG);//班次异常
|
|
|
staff.setAttendanceTypeName("班次异常");
|
|
|
staff.setColor("#F56C6C");
|
|
|
} else if (staff.getAttendanceType() == 5 || staff.getAttendanceType() == 6){
|
|
@@ -308,7 +532,6 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
for (AttendanceStaff staff : allList) {
|
|
|
Integer type = staff.getAttendanceType();
|
|
|
LocalDate clockDate = staff.getClockDate();
|
|
@@ -464,7 +687,7 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
|
|
|
if (endTime.isBefore(LocalTime.of(8, 0, 0))) {
|
|
|
HashMap<String, Object> map = new HashMap<>();
|
|
|
map.put("res", "早退");
|
|
|
- String str = endTime + "下班考勤打卡:";
|
|
|
+ String str = endTime + " 下班考勤打卡:";
|
|
|
Duration duration = Duration.between(endTime,LocalTime.of(8,0, 0) );
|
|
|
long v = duration.toMinutes();
|
|
|
str+= "(早退"+v+"分钟)";
|
|
@@ -483,6 +706,167 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
|
|
|
}
|
|
|
staff.setAttendanceTypeName("大夜班");
|
|
|
}
|
|
|
+ else if (type==BAI_BAN_YI_CHANG_1) {
|
|
|
+ if (startTime.isAfter(LocalTime.of(9, 0, 0))) {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("res", "晚点");
|
|
|
+ String str = startTime + "上班考勤打卡:";
|
|
|
+ Duration duration = Duration.between(LocalTime.of(9,0,0),startTime );
|
|
|
+ long v = duration.toMinutes();
|
|
|
+ str+= "(晚点"+v+"分钟)";
|
|
|
+ map.put("msg",str );
|
|
|
+ map.put("color","#F56C6C");
|
|
|
+ maplist.add(map);
|
|
|
+ } else {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("msg", startTime + "上班考勤打卡");
|
|
|
+ map.put("res", "正常");
|
|
|
+ maplist.add(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (endTime.isBefore(LocalTime.of(18, 0, 0))) {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("res", "早退");
|
|
|
+ String str = endTime + "下班考勤打卡:";
|
|
|
+ Duration duration = Duration.between(endTime,LocalTime.of(18,0,0) );
|
|
|
+ long v = duration.toMinutes();
|
|
|
+ str+= "(早退"+v+"分钟)";
|
|
|
+ map.put("msg",str );
|
|
|
+ map.put("color","#F56C6C");
|
|
|
+ maplist.add(map);
|
|
|
+ } else {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("res", "正常");
|
|
|
+ String str = endTime + "下班考勤打卡:";
|
|
|
+ double v = calculateOvertimeHours(LocalTime.of(18, 0), endTime);
|
|
|
+ if (v>0) {
|
|
|
+ str += "(18:00-" + endTime + "加班" + v + "小时)";
|
|
|
+ }
|
|
|
+ map.put("msg", str);
|
|
|
+ maplist.add(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ else if (type==BAI_BAN_YI_CHANG_2) {
|
|
|
+ if (startTime.isAfter(LocalTime.of(10, 0, 0))) {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("res", "晚点");
|
|
|
+ String str = startTime + "上班考勤打卡:";
|
|
|
+ Duration duration = Duration.between(LocalTime.of(10,0,0),startTime );
|
|
|
+ long v = duration.toMinutes();
|
|
|
+ str+= "(晚点"+v+"分钟)";
|
|
|
+ map.put("msg",str );
|
|
|
+ map.put("color","#F56C6C");
|
|
|
+ maplist.add(map);
|
|
|
+ } else {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("msg", startTime + "上班考勤打卡");
|
|
|
+ map.put("res", "正常");
|
|
|
+ maplist.add(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (endTime.isBefore(LocalTime.of(19, 0, 0))) {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("res", "早退");
|
|
|
+ String str = endTime + "下班考勤打卡:";
|
|
|
+ Duration duration = Duration.between(endTime,LocalTime.of(19,0,0) );
|
|
|
+ long v = duration.toMinutes();
|
|
|
+ str+= "(早退"+v+"分钟)";
|
|
|
+ map.put("msg",str );
|
|
|
+ map.put("color","#F56C6C");
|
|
|
+ maplist.add(map);
|
|
|
+ } else {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("res", "正常");
|
|
|
+ String str = endTime + "下班考勤打卡:";
|
|
|
+ double v = calculateOvertimeHours(LocalTime.of(19, 0), endTime);
|
|
|
+ if (v>0) {
|
|
|
+ str += "(19:00-" + endTime + "加班" + v + "小时)";
|
|
|
+ }
|
|
|
+ map.put("msg", str);
|
|
|
+ maplist.add(map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (type == XIAO_YE_BAN_YI_CHANG_1) {
|
|
|
+ if (startTime.isAfter(LocalTime.of(14, 0, 0))) {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("res", "晚点");
|
|
|
+ String str = startTime + "上班考勤打卡:";
|
|
|
+ Duration duration = Duration.between(LocalTime.of(14,0,0),startTime );
|
|
|
+ long v = duration.toMinutes();
|
|
|
+ str+= "(晚点"+v+"分钟)";
|
|
|
+ map.put("msg",str );
|
|
|
+ map.put("color","#F56C6C");
|
|
|
+ maplist.add(map);
|
|
|
+ } else {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("msg", startTime + "上班考勤打卡");
|
|
|
+ map.put("res", "正常");
|
|
|
+ maplist.add(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (endTime.isBefore(LocalTime.of(22, 0, 0))) {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("res", "早退");
|
|
|
+ String str = endTime + "下班考勤打卡:";
|
|
|
+ Duration duration = Duration.between(endTime,LocalTime.of(22,0, 0) );
|
|
|
+ long v = duration.toMinutes();
|
|
|
+ str+= "(早退"+v+"分钟)";
|
|
|
+ map.put("msg",str );
|
|
|
+ map.put("color","#F56C6C");
|
|
|
+ maplist.add(map);
|
|
|
+ } else {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("msg", endTime + "下班考勤打卡");
|
|
|
+ map.put("res", "正常");
|
|
|
+ double v = calculateOvertimeHours(LocalTime.of(22, 0, 0), endTime);
|
|
|
+ if (v > 0) {
|
|
|
+ map.put("extra", "(22:00-" + endTime + "加班" + v + "小时)");
|
|
|
+ }
|
|
|
+ maplist.add(map);
|
|
|
+ }
|
|
|
+ staff.setAttendanceTypeName("异常小夜班1");
|
|
|
+ }
|
|
|
+ else if (type == XIAO_YE_BAN_YI_CHANG_2) {
|
|
|
+ if (startTime.isAfter(LocalTime.of(15, 0, 0))) {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("res", "晚点");
|
|
|
+ String str = startTime + "上班考勤打卡:";
|
|
|
+ Duration duration = Duration.between(LocalTime.of(15,0,0),startTime );
|
|
|
+ long v = duration.toMinutes();
|
|
|
+ str+= "(晚点"+v+"分钟)";
|
|
|
+ map.put("msg",str );
|
|
|
+ map.put("color","#F56C6C");
|
|
|
+ maplist.add(map);
|
|
|
+ } else {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("msg", startTime + "上班考勤打卡");
|
|
|
+ map.put("res", "正常");
|
|
|
+ maplist.add(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (endTime.isBefore(LocalTime.of(23, 0, 0))) {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("res", "早退");
|
|
|
+ String str = endTime + "下班考勤打卡:";
|
|
|
+ Duration duration = Duration.between(endTime,LocalTime.of(23,0, 0) );
|
|
|
+ long v = duration.toMinutes();
|
|
|
+ str+= "(早退"+v+"分钟)";
|
|
|
+ map.put("msg",str );
|
|
|
+ map.put("color","#F56C6C");
|
|
|
+ maplist.add(map);
|
|
|
+ } else {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("msg", endTime + "下班考勤打卡");
|
|
|
+ map.put("res", "正常");
|
|
|
+ double v = calculateOvertimeHours(LocalTime.of(23, 0, 0), endTime);
|
|
|
+ if (v > 0) {
|
|
|
+ map.put("extra", "(23:00-" + endTime + "加班" + v + "小时)");
|
|
|
+ }
|
|
|
+ maplist.add(map);
|
|
|
+ }
|
|
|
+ staff.setAttendanceTypeName("异常小夜班1");
|
|
|
+ }
|
|
|
if (!maplist.isEmpty()) {
|
|
|
if (!applyFormList.isEmpty()){
|
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
@@ -511,6 +895,31 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
|
|
|
}
|
|
|
maplist.add(1,map);
|
|
|
}
|
|
|
+ }else {
|
|
|
+ if (!applyFormList.isEmpty()){
|
|
|
+ StringBuilder stringBuilder = new StringBuilder();
|
|
|
+ for (ApplyForm applyForm : applyFormList) {
|
|
|
+ if (applyForm.getType()==3) {
|
|
|
+ stringBuilder
|
|
|
+ .append(applyForm.getStartTime().format(formatter2))
|
|
|
+ .append("-").append(applyForm.getEndTime().format(formatter2))
|
|
|
+ .append(applyForm.getApplyBillName())
|
|
|
+ .append(" 时长")
|
|
|
+ .append(applyForm.getSumTime()).append("小时");
|
|
|
+ }else {
|
|
|
+ stringBuilder
|
|
|
+ .append(applyForm.getStartTime().format(formatter2))
|
|
|
+ .append("-").append(applyForm.getEndTime().format(formatter2))
|
|
|
+ .append(applyForm.getTypeName())
|
|
|
+ .append(" 时长")
|
|
|
+ .append(applyForm.getSumTime()).append("小时");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ map.put("res", stringBuilder.toString());
|
|
|
+ map.put("color","#F56C6C");
|
|
|
+ maplist.add(map);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
staff.setMaplist(maplist);
|
|
@@ -525,13 +934,14 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
|
|
|
if (applyForm.getType()==3) {
|
|
|
stringBuilder.append(applyForm.getApplyBillName());
|
|
|
if ((applyForm.getStartTime().getHour()==8||applyForm.getEndTime().getHour()==17)&&staff.getAttendanceTypeName().equals("班次异常")){
|
|
|
- staff.setAttendanceType(0);
|
|
|
+ staff.setAttendanceType(QING_JIA);
|
|
|
if (applyForm.getStartTime().getHour()==8) {
|
|
|
staff.setClockStartTime(LocalDateTime.of(clockDate, LocalTime.of(8, 0)));
|
|
|
- } else if (applyForm.getEndTime().getHour()==17) {
|
|
|
- staff.setClockStartTime(LocalDateTime.of(clockDate, LocalTime.of(17, 0)));
|
|
|
}
|
|
|
- staff.setAttendanceTypeName("白班");
|
|
|
+ if (applyForm.getEndTime().getHour()==17) {
|
|
|
+ staff.setClockEndTime(LocalDateTime.of(clockDate, LocalTime.of(17, 0)));
|
|
|
+ }
|
|
|
+ staff.setAttendanceTypeName(applyForm.getApplyBillName());
|
|
|
}
|
|
|
|
|
|
}else {
|