Ver código fonte

Merge branch 'pre'

dzx 6 meses atrás
pai
commit
a33f10cacf

+ 4 - 2
src/main/java/com/xjrsoft/module/attendance/controller/StatisticsController.java

@@ -34,6 +34,7 @@ import com.xjrsoft.module.personnel.service.IReservationSchoolService;
 import com.xjrsoft.module.student.entity.BaseStudent;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
 import com.xjrsoft.module.student.service.IStudentLeaveService;
+import com.xjrsoft.module.system.service.IDictionarydetailService;
 import com.xjrsoft.module.teacher.dto.BaseTeacherPageDto;
 import com.xjrsoft.module.teacher.entity.BaseTeacher;
 import com.xjrsoft.module.teacher.entity.XjrUser;
@@ -76,7 +77,6 @@ public class StatisticsController {
     private final IStudentLeaveService studentLeaveService;
     private final IReservationSchoolService reservationSchoolService;
     private final ITeacherAttendanceRecordService attendanceRecordService;
-    private final ITeacherbaseManagerService teacherbaseManagerService;
     private final IAttendanceRuleCategoryService ruleCategoryService;
 
     @GetMapping(value = "/teacher-statistics")
@@ -121,12 +121,14 @@ public class StatisticsController {
         Set<Long> absenteeismCount = new HashSet<>();
         Set<Long> dividendCount = new HashSet<>();
         Set<Long> teacherIds = new HashSet<>();
+        List<String> leaveTypes = new ArrayList<>();
+        leaveTypes.add("事假");leaveTypes.add("公假");leaveTypes.add("会议活动");leaveTypes.add("病假");
         for (TeacherStatisticsPageVo recordVo : list) {
             teacherIds.add(recordVo.getUserId());
             if ("迟到".equals(recordVo.getStatus())) {
                 lateCount.add(recordVo.getUserId());
                 dividendCount.add(recordVo.getUserId());
-            } else if ("请假".equals(recordVo.getStatus())) {
+            } else if (leaveTypes.contains(recordVo.getStatus())) {
                 leaveCount.add(recordVo.getUserId());
                 dividendCount.add(recordVo.getUserId());
             } else if ("缺勤".equals(recordVo.getStatus())) {

+ 33 - 24
src/main/java/com/xjrsoft/module/job/JianyuekbScheduleTask.java

@@ -3,6 +3,7 @@ package com.xjrsoft.module.job;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.db.Entity;
 import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -77,6 +78,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
+import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
 
@@ -275,34 +277,41 @@ public class JianyuekbScheduleTask {
 
         Set<String> techerIds = dataUtil.insertCourseTableEntiy(scheduleInfo, classroomMap, courseMap, semesterMap,
                 teacherMap, classMap, receiveMsg.get("id").toString(), startDate, endDate);
-        sendMsg(techerIds, receiveMsg);
-        dataUtil.insertClassTime(scheduleInfo);
-    }
 
-    void sendMsg(Set<String> techerIds, Map<String, Object> receiveMsg) {
+        CompletableFuture.runAsync(() -> {
+            sendMsg(techerIds, receiveMsg);
+        });
 
-        JianyueData jianyueData = jianyueDataService.getOne(
-                new QueryWrapper<JianyueData>().lambda()
-                        .eq(JianyueData::getJianyueId, receiveMsg.get("edu_year_serial_no").toString())
-        );
-        String[] sourceId = jianyueData.getSourceId().split("_");
-        Department department = departmentService.getById(sourceId[0]);
+//        dataUtil.insertClassTime(scheduleInfo);
+    }
 
-        BaseGrade grade = gradeService.getById(sourceId[1]);
+    void sendMsg(Set<String> techerIds, Map<String, Object> receiveMsg) {
+        String tableName = "jianyue_data";
+        Entity where = Entity.create(tableName);
+        where.set("jianyue_id", receiveMsg.get("edu_year_serial_no").toString());
+        Map<String, Object> jianyueData = SqlRunnerAdapter.db().dynamicSelectOne(tableName, where);
+        String[] sourceId = jianyueData.get("source_id").toString().split("_");
+
+        tableName = "xjr_department";
+        where = Entity.create(tableName);
+        where.set("id", sourceId[0]);
+        Map<String, Object> department = SqlRunnerAdapter.db().dynamicSelectOne(tableName, where);
+
+        tableName = "base_grade";
+        where = Entity.create(tableName);
+        where.set("id", sourceId[1]);
+        Map<String, Object> grade = SqlRunnerAdapter.db().dynamicSelectOne(tableName, where);
         //通知对应教师
-        List<User> userList = userService.listByIds(new ArrayList<>(techerIds));
-        List<User> userList1 = userService.list(
-                new MPJLambdaWrapper<User>()
-                        .distinct()
-                        .select(User::getId)
-                        .select(User.class, x -> VoToColumnUtil.fieldsToColumns(User.class).contains(x.getProperty()))
-                        .innerJoin(UserRoleRelation.class, UserRoleRelation::getUserId, User::getId)
-                        .innerJoin(Role.class, Role::getId, UserRoleRelation::getRoleId)
-                        .eq(Role::getCode, "KEBIAOGX")
-        );
+        String sql = "SELECT * FROM xjr_user WHERE id IN (" + techerIds.toString().replace("[", "").replace("]", "") + ")";
+        List<Map<String, Object>> userList = SqlRunnerAdapter.db().selectList(sql);
+        sql = "SELECT t1.* FROM xjr_user t1" +
+            " INNER JOIN xjr_user_role_relation t2 ON t1.id = t2.user_id" +
+            " INNER JOIN xjr_role t3 ON t2.role_id = t3.id" +
+            " WHERE t1.delete_mark = 0 AND t3.delete_mark = 0 AND t3.code = 'KEBIAOGX'";
+        List<Map<String, Object>> userList1 = SqlRunnerAdapter.db().selectList(sql);
         userList.addAll(userList1);
 
-        for (User user : userList) {
+        for (Map<String, Object> user : userList) {
             try {
                 WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
                 weChatSendMessageDto.setTemplateId(noticeTeacherTemplate);
@@ -313,7 +322,7 @@ public class JianyuekbScheduleTask {
                 paramJson.put("thing8", thing8);
 
                 JSONObject thing2 = new JSONObject();
-                thing2.put("value", department.getName() + grade.getName());
+                thing2.put("value", department.get("name").toString() + grade.get("name").toString());
                 paramJson.put("thing2", thing2);
 
                 JSONObject thing6 = new JSONObject();
@@ -327,7 +336,7 @@ public class JianyuekbScheduleTask {
                 weChatSendMessageDto.setContent(paramJson);
                 weChatSendMessageDto.setMsgId(IdUtil.getSnowflakeNextId() + "");
 
-                String openId = user.getOpenId();
+                String openId = user.get("open_id").toString();
                 if (openId != null && !"".equals(openId)) {
                     weChatSendMessageDto.setUserId(openId);
                     weChatService.sendTemplateMessage(weChatSendMessageDto);

+ 1 - 1
src/main/java/com/xjrsoft/module/organization/controller/PostController.java

@@ -90,7 +90,7 @@ public class PostController {
                 .like(StrUtil.isNotBlank(dto.getCode()), Post::getCode, dto.getCode())
                 .like(ObjectUtil.isNotEmpty(dto.getEnabledMark()), Post::getEnabledMark, dto.getEnabledMark())
                 .select(Post.class, x -> VoToColumnUtil.fieldsToColumns(PostPageVo.class).contains(x.getProperty()))
-                .orderByAsc(Post::getSortCode);
+                .orderByAsc(Post::getName);
 
         IPage<Post> page = postService.page(ConventPage.getPage(dto), queryWrapper);
         PageOutput<PostPageVo> pageOutput = ConventPage.getPageOutput(page, PostPageVo.class);

+ 214 - 36
src/test/java/com/xjrsoft/module/job/AttendanceRecordTaskTest.java

@@ -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);
+        }
+    }
 }