|
|
@@ -72,7 +72,7 @@ class AttendanceRecordTaskTest {
|
|
|
@Test
|
|
|
public void execute() {
|
|
|
|
|
|
- LocalDateTime now = LocalDateTime.of(2024, 12, 6, 0, 0, 0);
|
|
|
+ LocalDateTime now = LocalDateTime.of(2025, 5, 22, 0, 0, 0);
|
|
|
for (int i = 0; i < 1; i ++){
|
|
|
LocalDateTime startDateTime = now.plusDays(i).withHour(0).withMinute(0).withSecond(0).withNano(0);
|
|
|
LocalDateTime endDateTime = startDateTime.plusDays(i).withHour(23).withMinute(59).withSecond(59);
|
|
|
@@ -89,15 +89,12 @@ class AttendanceRecordTaskTest {
|
|
|
* @param startDateTime 开始时间
|
|
|
* @param endDateTime 结束时间
|
|
|
*/
|
|
|
- public void teacherAttendanceRecord(LocalDateTime startDateTime, LocalDateTime endDateTime, Integer timePeriod){
|
|
|
- List<String> nameList = new ArrayList<>();
|
|
|
- nameList.add("彭佳佳");
|
|
|
+ public void teacherAttendanceRecord(LocalDateTime startDateTime, LocalDateTime endDateTime, Integer timePeriod) {
|
|
|
List<User> teacherList = userService.list(
|
|
|
new MPJLambdaWrapper<User>()
|
|
|
.select(User::getId)
|
|
|
.select(User.class, x -> VoToColumnUtil.fieldsToColumns(User.class).contains(x.getProperty()))
|
|
|
.innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
|
|
|
- //.in(User::getName, nameList)
|
|
|
);
|
|
|
List<Long> userIds = teacherList.stream().map(User::getId).collect(Collectors.toList());
|
|
|
Map<Long, AttendanceRuleDetailsUserVo> teacherTodyRuleByUserId = ruleCategoryService.getTeacherTodyRuleByUserId(userIds);
|
|
|
@@ -111,7 +108,7 @@ class AttendanceRecordTaskTest {
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
LocalDate queryDate = startDateTime.toLocalDate();
|
|
|
List<TeacherAttendanceRecord> insertList = new ArrayList<>();
|
|
|
- List<String> weekList =Arrays.asList("SUNDAY", "SATURDAY");
|
|
|
+ List<String> weekList = Arrays.asList("SUNDAY", "SATURDAY");
|
|
|
|
|
|
List<HolidayDate> workHolidayDates = holidayDateService.list(
|
|
|
new QueryWrapper<HolidayDate>().lambda()
|
|
|
@@ -127,14 +124,14 @@ class AttendanceRecordTaskTest {
|
|
|
record.setTimeInterval(timePeriod);
|
|
|
AttendanceRuleDetailsUserVo detailsUserVo = teacherTodyRuleByUserId.get(user.getId());
|
|
|
|
|
|
- if(detailsUserVo == null){
|
|
|
+ if (detailsUserVo == null) {
|
|
|
record.setAttendanceStatus("不考勤");
|
|
|
insertList.add(record);
|
|
|
continue;
|
|
|
}
|
|
|
AttendanceRuleDetails holidayRule = ruleCategoryService.getHolidayRuleByParam(user.getId());
|
|
|
- if(((!workHolidayDateListg.contains(queryDate.format(formatter)) && weekList.contains(queryDate.getDayOfWeek().name()))
|
|
|
- || holidayDateList.contains(queryDate.format(formatter))) && (holidayRule.getIsAttendance() == null || holidayRule.getIsAttendance() == 0)){
|
|
|
+ if (((!workHolidayDateListg.contains(queryDate.format(formatter)) && weekList.contains(queryDate.getDayOfWeek().name()))
|
|
|
+ || holidayDateList.contains(queryDate.format(formatter))) && (holidayRule.getIsAttendance() == null || holidayRule.getIsAttendance() == 0)) {
|
|
|
record.setAttendanceStatus("不考勤");
|
|
|
insertList.add(record);
|
|
|
continue;
|
|
|
@@ -142,49 +139,52 @@ class AttendanceRecordTaskTest {
|
|
|
|
|
|
LocalDateTime startTime, endTime, amEndTime = null;
|
|
|
|
|
|
- if(timePeriod == 1){
|
|
|
+ if (timePeriod == 1) {
|
|
|
startTime = queryDate.atTime(5, 0, 0);
|
|
|
- if(detailsUserVo.getAmStartTime() != null){
|
|
|
+ if (detailsUserVo.getAmStartTime() != null) {
|
|
|
startTime = queryDate.atTime(detailsUserVo.getAmStartTime());
|
|
|
}
|
|
|
endTime = queryDate.atTime(12, 0, 0);
|
|
|
- if(detailsUserVo.getAmEndTime() != null){
|
|
|
+ if (detailsUserVo.getAmEndTime() != null) {
|
|
|
endTime = queryDate.atTime(detailsUserVo.getAmEndTime());
|
|
|
}
|
|
|
- }else if(timePeriod == 2){
|
|
|
+ } else if (timePeriod == 2) {
|
|
|
startTime = queryDate.atTime(12, 0, 0);
|
|
|
- if(detailsUserVo.getPmStartTime() != null){
|
|
|
+ if (detailsUserVo.getPmStartTime() != null) {
|
|
|
startTime = queryDate.atTime(detailsUserVo.getPmStartTime());
|
|
|
}
|
|
|
endTime = queryDate.atTime(18, 0, 0);
|
|
|
- if(detailsUserVo.getPmEndTime() != null){
|
|
|
+ if (detailsUserVo.getPmEndTime() != null) {
|
|
|
endTime = queryDate.atTime(detailsUserVo.getPmEndTime());
|
|
|
}
|
|
|
- amEndTime = queryDate.atTime(12, 0, 0);
|
|
|
- if(detailsUserVo.getAmEndTime() != null){
|
|
|
+ amEndTime = queryDate.atTime(12, 0, 0);
|
|
|
+ if (detailsUserVo.getAmEndTime() != null) {
|
|
|
amEndTime = queryDate.atTime(detailsUserVo.getAmEndTime());
|
|
|
}
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
startTime = queryDate.atTime(0, 0, 0);
|
|
|
- if(detailsUserVo.getEveningStartTime() != null){
|
|
|
+ if (detailsUserVo.getEveningStartTime() != null) {
|
|
|
startTime = queryDate.atTime(detailsUserVo.getEveningStartTime());
|
|
|
}
|
|
|
endTime = queryDate.atTime(23, 59, 59);
|
|
|
- if(detailsUserVo.getEveningEndTime() != null){
|
|
|
+ if (detailsUserVo.getEveningEndTime() != null) {
|
|
|
endTime = queryDate.atTime(detailsUserVo.getEveningEndTime());
|
|
|
}
|
|
|
}
|
|
|
record.setStartTime(startTime);
|
|
|
record.setEndTime(endTime);
|
|
|
-
|
|
|
+ if("叶灵".equals(user.getName())){
|
|
|
+ System.out.println(user.getName());
|
|
|
+ }
|
|
|
WfTeacherleave studentLeave = wfTeacherleaveService.getLeaveByUserId(startTime, endTime, user.getId());
|
|
|
- if(studentLeave != null){
|
|
|
+ if (studentLeave != null) {
|
|
|
record.setAttendanceStatus(studentLeave.getLeaveType());
|
|
|
insertList.add(record);
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
TeacherOutInRecordDto outInDto = new TeacherOutInRecordDto();
|
|
|
+ outInDto.setTimePeriod(timePeriod);
|
|
|
outInDto.setQueryDate(startTime.toLocalDate());
|
|
|
outInDto.setEndTime(endTime);
|
|
|
outInDto.setStartTime(startTime);
|
|
|
@@ -208,42 +208,42 @@ class AttendanceRecordTaskTest {
|
|
|
);
|
|
|
//最早进入方式:1人脸 2车辆
|
|
|
Integer inStatus = 0;
|
|
|
- if(!outInRecords.isEmpty() && !list.isEmpty()){
|
|
|
+ if (!outInRecords.isEmpty() && !list.isEmpty()) {
|
|
|
TeacherOutInRecord teacherOutInRecord = outInRecords.get(0);
|
|
|
CarOutInRecord carOutInRecord = list.get(0);
|
|
|
int result = teacherOutInRecord.getRecordTime().compareTo(carOutInRecord.getRecordTime());
|
|
|
- if(result < 0){//人脸进入
|
|
|
+ if (result < 0) {//人脸进入
|
|
|
inStatus = 1;
|
|
|
- }else if(result == 0){//同时
|
|
|
+ } else if (result == 0) {//同时
|
|
|
inStatus = 0;
|
|
|
- }else{//车辆进入
|
|
|
+ } else {//车辆进入
|
|
|
inStatus = 2;
|
|
|
}
|
|
|
- }else if(!outInRecords.isEmpty()){
|
|
|
+ } else if (!outInRecords.isEmpty()) {
|
|
|
inStatus = 1;
|
|
|
- }else if(!list.isEmpty()){
|
|
|
+ } else if (!list.isEmpty()) {
|
|
|
inStatus = 2;
|
|
|
}
|
|
|
|
|
|
- if(inStatus == 1){
|
|
|
+ if (inStatus == 1) {
|
|
|
TeacherOutInRecord outInRecord = outInRecords.get(0);
|
|
|
- if(outInRecord != null && outInRecord.getRecordTime().isBefore(startTime)){
|
|
|
+ if (outInRecord != null && outInRecord.getRecordTime().isBefore(startTime)) {
|
|
|
record.setRecordTime(outInRecord.getRecordTime());
|
|
|
record.setAttendanceStatus("到校");
|
|
|
record.setAttendanceMode(inStatus);
|
|
|
- }else if(outInRecord != null && outInRecord.getRecordTime().isAfter(startTime)){
|
|
|
+ } else if (outInRecord != null && outInRecord.getRecordTime().isAfter(startTime)) {
|
|
|
record.setRecordTime(outInRecord.getRecordTime());
|
|
|
record.setAttendanceStatus("迟到");
|
|
|
record.setAttendanceMode(inStatus);
|
|
|
}
|
|
|
- }else if(inStatus == 2){
|
|
|
+ } else if (inStatus == 2) {
|
|
|
CarOutInRecord outInRecord = list.get(0);
|
|
|
- if(outInRecord != null && outInRecord.getRecordTime().isBefore(startTime)){
|
|
|
+ if (outInRecord != null && outInRecord.getRecordTime().isBefore(startTime)) {
|
|
|
record.setRecordTime(outInRecord.getRecordTime());
|
|
|
record.setAttendanceStatus("到校");
|
|
|
record.setAttendanceMode(inStatus);
|
|
|
record.setCarNumber(outInRecord.getPlanNo());
|
|
|
- }else if(outInRecord != null && outInRecord.getRecordTime().isAfter(startTime)){
|
|
|
+ } else if (outInRecord != null && outInRecord.getRecordTime().isAfter(startTime)) {
|
|
|
record.setRecordTime(outInRecord.getRecordTime());
|
|
|
record.setAttendanceStatus("迟到");
|
|
|
record.setAttendanceMode(inStatus);
|
|
|
@@ -251,14 +251,14 @@ class AttendanceRecordTaskTest {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if(record.getAttendanceStatus() == null){
|
|
|
+ if (record.getAttendanceStatus() == null) {
|
|
|
record.setAttendanceStatus("缺勤");
|
|
|
}
|
|
|
|
|
|
insertList.add(record);
|
|
|
}
|
|
|
|
|
|
- if(!insertList.isEmpty()){
|
|
|
+ if (!insertList.isEmpty()) {
|
|
|
recordService.remove(
|
|
|
new QueryWrapper<TeacherAttendanceRecord>().lambda()
|
|
|
.eq(TeacherAttendanceRecord::getTimeInterval, timePeriod)
|
|
|
@@ -267,4 +267,182 @@ class AttendanceRecordTaskTest {
|
|
|
recordService.saveBatch(insertList);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ public void teacherAttendanceRecord(LocalDateTime startDateTime, Integer timePeriod,
|
|
|
+ IUserService userService,
|
|
|
+ IAttendanceRuleCategoryService ruleCategoryService,
|
|
|
+ IHolidayDateService holidayDateService,
|
|
|
+ IWfTeacherleaveService wfTeacherleaveService,
|
|
|
+ ITeacherOutInRecordService teacherOutInRecordService,
|
|
|
+ ICarOutInRecordService carOutInRecordService,
|
|
|
+ ITeacherAttendanceRecordService recordService) {
|
|
|
+ List<User> teacherList = userService.list(
|
|
|
+ new MPJLambdaWrapper<User>()
|
|
|
+ .select(User::getId)
|
|
|
+ .select(User.class, x -> VoToColumnUtil.fieldsToColumns(User.class).contains(x.getProperty()))
|
|
|
+ .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
|
|
|
+ );
|
|
|
+ List<Long> userIds = teacherList.stream().map(User::getId).collect(Collectors.toList());
|
|
|
+ Map<Long, AttendanceRuleDetailsUserVo> teacherTodyRuleByUserId = ruleCategoryService.getTeacherTodyRuleByUserId(userIds);
|
|
|
+
|
|
|
+ List<Integer> holidayTypes = Arrays.asList(1, 3);
|
|
|
+ List<HolidayDate> holidayDates = holidayDateService.list(
|
|
|
+ new QueryWrapper<HolidayDate>().lambda()
|
|
|
+ .in(HolidayDate::getStatus, holidayTypes)
|
|
|
+ );
|
|
|
+ List<String> holidayDateList = holidayDates.stream().map(HolidayDate::getDate).collect(Collectors.toList());
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+ LocalDate queryDate = startDateTime.toLocalDate();
|
|
|
+ List<TeacherAttendanceRecord> insertList = new ArrayList<>();
|
|
|
+ List<String> weekList = Arrays.asList("SUNDAY", "SATURDAY");
|
|
|
+
|
|
|
+ List<HolidayDate> workHolidayDates = holidayDateService.list(
|
|
|
+ new QueryWrapper<HolidayDate>().lambda()
|
|
|
+ .eq(HolidayDate::getStatus, 2)
|
|
|
+ );
|
|
|
+ List<String> workHolidayDateListg = workHolidayDates.stream().map(HolidayDate::getDate).collect(Collectors.toList());
|
|
|
+
|
|
|
+ for (User user : teacherList) {
|
|
|
+ TeacherAttendanceRecord record = new TeacherAttendanceRecord();
|
|
|
+ record.setCreateDate(LocalDateTime.now());
|
|
|
+ record.setAttendanceDate(queryDate);
|
|
|
+ record.setUserId(user.getId());
|
|
|
+ record.setTimeInterval(timePeriod);
|
|
|
+ AttendanceRuleDetailsUserVo detailsUserVo = teacherTodyRuleByUserId.get(user.getId());
|
|
|
+
|
|
|
+ if (detailsUserVo == null) {
|
|
|
+ record.setAttendanceStatus("不考勤");
|
|
|
+ insertList.add(record);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ AttendanceRuleDetails holidayRule = ruleCategoryService.getHolidayRuleByParam(user.getId());
|
|
|
+ if (((!workHolidayDateListg.contains(queryDate.format(formatter)) && weekList.contains(queryDate.getDayOfWeek().name()))
|
|
|
+ || holidayDateList.contains(queryDate.format(formatter))) && (holidayRule.getIsAttendance() == null || holidayRule.getIsAttendance() == 0)) {
|
|
|
+ record.setAttendanceStatus("不考勤");
|
|
|
+ insertList.add(record);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ LocalDateTime startTime, endTime, amEndTime = null;
|
|
|
+
|
|
|
+ if (timePeriod == 1) {
|
|
|
+ startTime = queryDate.atTime(5, 0, 0);
|
|
|
+ if (detailsUserVo.getAmStartTime() != null) {
|
|
|
+ startTime = queryDate.atTime(detailsUserVo.getAmStartTime());
|
|
|
+ }
|
|
|
+ endTime = queryDate.atTime(12, 0, 0);
|
|
|
+ if (detailsUserVo.getAmEndTime() != null) {
|
|
|
+ endTime = queryDate.atTime(detailsUserVo.getAmEndTime());
|
|
|
+ }
|
|
|
+ } else if (timePeriod == 2) {
|
|
|
+ startTime = queryDate.atTime(12, 0, 0);
|
|
|
+ if (detailsUserVo.getPmStartTime() != null) {
|
|
|
+ startTime = queryDate.atTime(detailsUserVo.getPmStartTime());
|
|
|
+ }
|
|
|
+ endTime = queryDate.atTime(18, 0, 0);
|
|
|
+ if (detailsUserVo.getPmEndTime() != null) {
|
|
|
+ endTime = queryDate.atTime(detailsUserVo.getPmEndTime());
|
|
|
+ }
|
|
|
+ amEndTime = queryDate.atTime(12, 0, 0);
|
|
|
+ if (detailsUserVo.getAmEndTime() != null) {
|
|
|
+ amEndTime = queryDate.atTime(detailsUserVo.getAmEndTime());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ startTime = queryDate.atTime(0, 0, 0);
|
|
|
+ if (detailsUserVo.getEveningStartTime() != null) {
|
|
|
+ startTime = queryDate.atTime(detailsUserVo.getEveningStartTime());
|
|
|
+ }
|
|
|
+ endTime = queryDate.atTime(23, 59, 59);
|
|
|
+ if (detailsUserVo.getEveningEndTime() != null) {
|
|
|
+ endTime = queryDate.atTime(detailsUserVo.getEveningEndTime());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ record.setStartTime(startTime);
|
|
|
+ record.setEndTime(endTime);
|
|
|
+
|
|
|
+ WfTeacherleave studentLeave = wfTeacherleaveService.getLeaveByUserId(startTime, endTime, user.getId());
|
|
|
+ if (studentLeave != null) {
|
|
|
+ record.setAttendanceStatus(studentLeave.getLeaveType());
|
|
|
+ insertList.add(record);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ TeacherOutInRecordDto outInDto = new TeacherOutInRecordDto();
|
|
|
+ outInDto.setQueryDate(startTime.toLocalDate());
|
|
|
+ outInDto.setEndTime(endTime);
|
|
|
+ outInDto.setStartTime(startTime);
|
|
|
+ outInDto.setStatus(OutInStatusEnum.enter.getCode());
|
|
|
+ outInDto.setUserId(record.getUserId());
|
|
|
+ outInDto.setTimePeriod(timePeriod);
|
|
|
+ outInDto.setAmEndTime(amEndTime);
|
|
|
+ List<TeacherOutInRecord> outInRecords = teacherOutInRecordService.getListByParam(outInDto);
|
|
|
+
|
|
|
+ //查询该教师是否通过车辆进入
|
|
|
+ List<CarOutInRecord> list = carOutInRecordService.list(
|
|
|
+ new MPJLambdaWrapper<CarOutInRecord>()
|
|
|
+ .select(CarOutInRecord.class, x -> VoToColumnUtil.fieldsToColumns(CarOutInRecord.class).contains(x.getProperty()))
|
|
|
+ .leftJoin(CarMessageApply.class, CarMessageApply::getId, CarOutInRecord::getCarMessageApplyId)
|
|
|
+ .le(CarOutInRecord::getRecordTime, endTime)
|
|
|
+ .eq("DATE_FORMAT(record_time, '%Y-%m-%d')", endTime.toLocalDate())
|
|
|
+ .eq(CarMessageApply::getUserId, record.getUserId())
|
|
|
+ .ge(timePeriod == 2, CarOutInRecord::getRecordTime, amEndTime)
|
|
|
+ .eq(CarOutInRecord::getStatus, OutInStatusEnum.enter.getCode())
|
|
|
+ .orderByAsc(CarOutInRecord::getRecordTime)
|
|
|
+ );
|
|
|
+ //最早进入方式:1人脸 2车辆
|
|
|
+ Integer inStatus = 0;
|
|
|
+ if (!outInRecords.isEmpty() && !list.isEmpty()) {
|
|
|
+ TeacherOutInRecord teacherOutInRecord = outInRecords.get(0);
|
|
|
+ CarOutInRecord carOutInRecord = list.get(0);
|
|
|
+ int result = teacherOutInRecord.getRecordTime().compareTo(carOutInRecord.getRecordTime());
|
|
|
+ if (result < 0) {//人脸进入
|
|
|
+ inStatus = 1;
|
|
|
+ } else if (result == 0) {//同时
|
|
|
+ inStatus = 0;
|
|
|
+ } else {//车辆进入
|
|
|
+ inStatus = 2;
|
|
|
+ }
|
|
|
+ } else if (!outInRecords.isEmpty()) {
|
|
|
+ inStatus = 1;
|
|
|
+ } else if (!list.isEmpty()) {
|
|
|
+ inStatus = 2;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (inStatus == 1) {
|
|
|
+ TeacherOutInRecord outInRecord = outInRecords.get(0);
|
|
|
+ if (outInRecord != null && outInRecord.getRecordTime().isBefore(startTime)) {
|
|
|
+ record.setRecordTime(outInRecord.getRecordTime());
|
|
|
+ record.setAttendanceStatus("到校");
|
|
|
+ record.setAttendanceMode(inStatus);
|
|
|
+ } else if (outInRecord != null && outInRecord.getRecordTime().isAfter(startTime)) {
|
|
|
+ record.setRecordTime(outInRecord.getRecordTime());
|
|
|
+ record.setAttendanceStatus("迟到");
|
|
|
+ record.setAttendanceMode(inStatus);
|
|
|
+ }
|
|
|
+ } else if (inStatus == 2) {
|
|
|
+ CarOutInRecord outInRecord = list.get(0);
|
|
|
+ if (outInRecord != null && outInRecord.getRecordTime().isBefore(startTime)) {
|
|
|
+ record.setRecordTime(outInRecord.getRecordTime());
|
|
|
+ record.setAttendanceStatus("到校");
|
|
|
+ record.setAttendanceMode(inStatus);
|
|
|
+ record.setCarNumber(outInRecord.getPlanNo());
|
|
|
+ } else if (outInRecord != null && outInRecord.getRecordTime().isAfter(startTime)) {
|
|
|
+ record.setRecordTime(outInRecord.getRecordTime());
|
|
|
+ record.setAttendanceStatus("迟到");
|
|
|
+ record.setAttendanceMode(inStatus);
|
|
|
+ record.setCarNumber(outInRecord.getPlanNo());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (record.getAttendanceStatus() == null) {
|
|
|
+ record.setAttendanceStatus("缺勤");
|
|
|
+ }
|
|
|
+
|
|
|
+ insertList.add(record);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!insertList.isEmpty()) {
|
|
|
+ recordService.deleteRecord(timePeriod, startDateTime.toLocalDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
|
+ recordService.saveBatch(insertList);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|