dzx 1 рік тому
батько
коміт
4c52b973c7

+ 5 - 1
src/main/java/com/xjrsoft/module/job/AttendanceRecordTask.java

@@ -68,7 +68,7 @@ public class AttendanceRecordTask {
     private IHolidayDateService holidayDateService;
 
 
-    @Scheduled(cron = "0 30 * * * ?")
+    @Scheduled(cron = "0 */30 * * * ?")
     public void execute() {
         String active = SpringUtil.getActiveProfile();
         if(!"prod".equals(active)){
@@ -209,6 +209,8 @@ public class AttendanceRecordTask {
             outInDto.setStartTime(startTime);
             outInDto.setStatus(OutInStatusEnum.enter.getCode());
             outInDto.setUserId(record.getUserId());
+            outInDto.setTimePeriod(timePeriod);
+            outInDto.setAmEndTime(amEndTime);
             List<TeacherOutInRecord> outInRecords = teacherOutInRecordService.getListByParam(outInDto);
 
             //查询该教师是否通过车辆进入
@@ -384,6 +386,8 @@ public class AttendanceRecordTask {
             outInDto.setStartTime(startTime);
             outInDto.setStatus(OutInStatusEnum.enter.getCode());
             outInDto.setUserId(record.getUserId());
+            outInDto.setTimePeriod(timePeriod);
+            outInDto.setAmEndTime(amEndTime);
             List<TeacherOutInRecord> outInRecords = teacherOutInRecordService.getListByParam(outInDto);
 
             //查询该教师是否通过车辆进入

+ 3 - 0
src/main/java/com/xjrsoft/module/outint/dto/TeacherOutInRecordDto.java

@@ -49,4 +49,7 @@ public class TeacherOutInRecordDto implements Serializable {
     @ApiModelProperty("时间段:1上午 2下午 3晚上")
     private Integer timePeriod;
 
+    @ApiModelProperty("上午结束时间")
+    private LocalDateTime amEndTime;
+
 }

+ 3 - 0
src/main/resources/mapper/outin/TeacherOutInRecordMapper.xml

@@ -18,6 +18,9 @@
         AND status = #{dto.status}
         AND DATE_FORMAT(record_time, '%Y-%m-%d') = #{dto.queryDate}
         AND user_id = #{dto.userId}
+        <if test="dto.timePeriod != null and dto.timePeriod == 2">
+            AND record_time >= #{dto.amEndTime}
+        </if>
         ORDER BY record_time ASC
     </select>
 </mapper>

+ 51 - 31
src/test/java/com/xjrsoft/module/job/AttendanceRecordTaskTest.java

@@ -75,12 +75,12 @@ class AttendanceRecordTaskTest {
     @Test
     public void execute() {
 
-        LocalDateTime now = LocalDateTime.of(2024, 11, 1, 0, 0, 0);
-        for (int i = 0; i < 17; i ++){
+        LocalDateTime now = LocalDateTime.of(2024, 12, 5, 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);
 
-            teacherAttendanceRecord(startDateTime, endDateTime, 1);
+//            teacherAttendanceRecord(startDateTime, endDateTime, 1);
 
             teacherAttendanceRecord(startDateTime, endDateTime, 2);
         }
@@ -103,7 +103,7 @@ class AttendanceRecordTaskTest {
                         .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)
+                        //.in(User::getName, nameList)
         );
         List<Long> userIds = teacherList.stream().map(User::getId).collect(Collectors.toList());
         Map<Long, AttendanceRuleDetailsUserVo> teacherTodyRuleByUserId = ruleCategoryService.getTeacherTodyRuleByUserId(userIds);
@@ -207,40 +207,60 @@ class AttendanceRecordTaskTest {
             outInDto.setStartTime(startTime);
             outInDto.setStatus(OutInStatusEnum.enter.getCode());
             outInDto.setUserId(record.getUserId());
+            outInDto.setTimePeriod(timePeriod);
+            outInDto.setAmEndTime(amEndTime);
             List<TeacherOutInRecord> outInRecords = teacherOutInRecordService.getListByParam(outInDto);
-            if(!outInRecords.isEmpty()){
+
+            //查询该教师是否通过车辆进入
+            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){
                     record.setRecordTime(outInRecord.getRecordTime());
                     record.setAttendanceStatus(outInRecord.getAttendanceStatus());
                     record.setAttendanceMode(1);
                 }
-            }else{
-                //查询该教师是否通过车辆进入
-                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 != null && timePeriod == 2 && amEndTime != null, CarOutInRecord::getRecordTime, amEndTime)
-                                .eq(CarOutInRecord::getStatus, OutInStatusEnum.enter.getCode())
-                                .orderByAsc(CarOutInRecord::getRecordTime)
-                );
-                if(!list.isEmpty()){
-                    CarOutInRecord outInRecord = list.get(0);
-                    if(outInRecord != null && outInRecord.getRecordTime().isBefore(startTime)){
-                        record.setRecordTime(outInRecord.getRecordTime());
-                        record.setAttendanceStatus("到校");
-                        record.setAttendanceMode(2);
-                        record.setCarNumber(outInRecord.getPlanNo());
-                    }else if(outInRecord != null && outInRecord.getRecordTime().isAfter(startTime)){
-                        record.setRecordTime(outInRecord.getRecordTime());
-                        record.setAttendanceStatus("迟到");
-                        record.setAttendanceMode(1);
-                        record.setCarNumber(outInRecord.getPlanNo());
-                    }
+            }else if(inStatus == 2){
+                CarOutInRecord outInRecord = list.get(0);
+                if(outInRecord != null && outInRecord.getRecordTime().isBefore(startTime)){
+                    record.setRecordTime(outInRecord.getRecordTime());
+                    record.setAttendanceStatus("到校");
+                    record.setAttendanceMode(2);
+                    record.setCarNumber(outInRecord.getPlanNo());
+                }else if(outInRecord != null && outInRecord.getRecordTime().isAfter(startTime)){
+                    record.setRecordTime(outInRecord.getRecordTime());
+                    record.setAttendanceStatus("迟到");
+                    record.setAttendanceMode(1);
+                    record.setCarNumber(outInRecord.getPlanNo());
                 }
             }