Crazy преди 8 месеца
родител
ревизия
0276ffdd83

+ 6 - 2
yudao-module-md/yudao-module-md-biz/src/main/java/Acs/EventSearch.java

@@ -200,8 +200,11 @@ public final class EventSearch {
                             System.out.println("没有找到该用户" + employeeNo);
                         }
                     }
-                }else {
-                    System.out.println("该打卡记录已存在");
+                }else {//存在打卡记录,判断更新照片(可能由于网络问题没有插入)
+                   if (ST.getPhoto()==null||ST.equals("")){
+                       ST.setPhoto(photoUrl);
+                       studentAttendanceService.updateStudentAttendance(BeanUtils.toBean(ST, StudentAttendanceSaveReqVO.class));
+                   }
                 }
                  //检查并更新未打卡
                 if (user!=null&&"1".equals(user.getUserType())) {
@@ -229,6 +232,7 @@ public final class EventSearch {
                         }
                     }
                 }
+
                 i++;
                 continue;
             }

+ 58 - 55
yudao-module-md/yudao-module-md-biz/src/main/java/cn/iocoder/yudao/module/md/service/AcsService.java

@@ -345,64 +345,67 @@ public class AcsService {
     //教师添加或更新照片
     @Transactional(rollbackFor = Exception.class)
     public String teacherUpdateUserImage(String employeeNo, String photoUrl) throws Exception {
-            AdminUserDO user = userService.findUserByUserNumber(employeeNo);
-            String result = getUser(employeeNo);
-            Gson gson = new Gson();
-            JsonObject jsonObject = gson.fromJson(result, JsonObject.class);
-            JsonArray userInfoArray = jsonObject
-                    .getAsJsonObject("UserInfoSearch")
-                    .getAsJsonArray("UserInfo");
-
-            if (photoUrl.trim().isEmpty()&&user.getPhotoUrl()!=null){//去除空格后为空,删除人脸
-                deleteFace(employeeNo);//考勤机里的
-                user.setPhotoUrl(photoUrl.trim());//同步更新user表里的
-                user.setPhotoUpdateTime(LocalDateTime.now());//更新时间
-                userService.updateUser(BeanUtils.toBean(user, UserSaveReqVO.class));
-                return "删除照片成功";
-            }else {
-                if (userInfoArray != null) {
-                    String msg = addFaceByUrl(employeeNo, photoUrl);
-                    if (msg.contains("下发人脸成功") && msg.contains("但是有异常情况")) {
-                        return "更新照片失败,请检查照片大小并确保包含人脸";
-                    } else {
-                        if (user != null) {
-                            user.setPhotoUrl(photoUrl);
-                            user.setPhotoUpdateTime(LocalDateTime.now());
-                            userService.updateUser((BeanUtils.toBean(user, UserSaveReqVO.class)));
-                        }
-                        return "更新照片成功";
-                    }
-                }else {//考勤及里面没用户
-                    //确保在执行完增加用户后执行增加人脸
-                    CompletableFuture<Void> userFuture = CompletableFuture.runAsync(() -> {
-                        try {
-                            addUser(employeeNo, user.getNickname());
-                        } catch (JSONException e) {
-                            throw new RuntimeException(e);
-                        } catch (UnsupportedEncodingException e) {
-                            throw new RuntimeException(e);
-                        } catch (InterruptedException e) {
-                            throw new RuntimeException(e);
+            if (employeeNo!=null) {
+                AdminUserDO user = userService.findUserByUserNumber(employeeNo);
+                String result = getUser(employeeNo);
+                Gson gson = new Gson();
+                JsonObject jsonObject = gson.fromJson(result, JsonObject.class);
+                JsonArray userInfoArray = jsonObject
+                        .getAsJsonObject("UserInfoSearch")
+                        .getAsJsonArray("UserInfo");
+
+                if (photoUrl.trim().isEmpty() && user.getPhotoUrl() != null) {//去除空格后为空,删除人脸
+                    deleteFace(employeeNo);//考勤机里的
+                    user.setPhotoUrl(photoUrl.trim());//同步更新user表里的
+                    user.setPhotoUpdateTime(LocalDateTime.now());//更新时间
+                    userService.updateUser(BeanUtils.toBean(user, UserSaveReqVO.class));
+                    return "删除照片成功";
+                } else {
+                    if (userInfoArray != null) {
+                        String msg = addFaceByUrl(employeeNo, photoUrl);
+                        if (msg.contains("下发人脸成功") && msg.contains("但是有异常情况")) {
+                            return "更新照片失败,请检查照片大小并确保包含人脸";
+                        } else {
+                            if (user != null) {
+                                user.setPhotoUrl(photoUrl);
+                                user.setPhotoUpdateTime(LocalDateTime.now());
+                                userService.updateUser((BeanUtils.toBean(user, UserSaveReqVO.class)));
+                            }
+                            return "更新照片成功";
                         }
-                    });
-                    userFuture.thenRun(() -> {
-                        try {
-                            String msg = addFaceByUrl(employeeNo, photoUrl);
-                            if (msg.contains("下发人脸成功") && msg.contains("但是有异常情况")) {
-                            } else {
-                                if (user!=null) {
-                                    user.setPhotoUpdateTime(LocalDateTime.now());
-                                    user.setPhotoUrl(photoUrl);
-                                    userService.updateUser((BeanUtils.toBean(user, UserSaveReqVO.class)));
+                    } else {//考勤及里面没用户
+                        //确保在执行完增加用户后执行增加人脸
+                        CompletableFuture<Void> userFuture = CompletableFuture.runAsync(() -> {
+                            try {
+                                addUser(employeeNo, user.getNickname());
+                            } catch (JSONException e) {
+                                throw new RuntimeException(e);
+                            } catch (UnsupportedEncodingException e) {
+                                throw new RuntimeException(e);
+                            } catch (InterruptedException e) {
+                                throw new RuntimeException(e);
+                            }
+                        });
+                        userFuture.thenRun(() -> {
+                            try {
+                                String msg = addFaceByUrl(employeeNo, photoUrl);
+                                if (msg.contains("下发人脸成功") && msg.contains("但是有异常情况")) {
+                                } else {
+                                    if (user != null) {
+                                        user.setPhotoUpdateTime(LocalDateTime.now());
+                                        user.setPhotoUrl(photoUrl);
+                                        userService.updateUser((BeanUtils.toBean(user, UserSaveReqVO.class)));
+                                    }
                                 }
+                            } catch (JSONException e) {
+                                throw new RuntimeException(e);
                             }
-                        } catch (JSONException e) {
-                            throw new RuntimeException(e);
-                        }
-                    });
-                    return "添加考勤用户并且增加照片成功";
+                        });
+                        return "更新照片成功";
+                    }
                 }
             }
+            return "该用户无学号/工号";
     }
 
     //批量导入用户信息
@@ -453,7 +456,7 @@ public class AcsService {
             while ((entry = zipInputStream.getNextEntry()) != null) {
                 if (!entry.isDirectory()) {
                     if (isValidImageName(entry.getName()).equals("照片格式正确")) {
-//                        System.out.println(entry.getName());
+                       LocalDateTime nowTime =LocalDateTime.now();
                         //获取去除后缀名的文件名,需要设置成学号
                         String userNumber = entry.getName().substring(0, entry.getName().lastIndexOf('-'));
                         String studentName = entry.getName().substring(entry.getName().lastIndexOf('-') + 1, entry.getName().lastIndexOf('.'));
@@ -486,7 +489,7 @@ public class AcsService {
                                 } else {
                                     respVO.getCreateImages().add(studentName);//添加成功
                                     if (user!=null) {
-                                        user.setPhotoUpdateTime(LocalDateTime.now());//更新时间
+                                        user.setPhotoUpdateTime(nowTime);//更新时间
                                         user.setPhotoUrl(photoUrl);
                                         userService.updateUser((BeanUtils.toBean(user, UserSaveReqVO.class)));
                                     }

+ 7 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentAttendance/vo/StudentAttendancePageReqVO.java

@@ -47,6 +47,13 @@ public class StudentAttendancePageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDate[] dateRange;
 
+    @Schema(description = "导师id")
+    private Long supervisorId;
+
+    @Schema(description = "工作间名称")
+    private String deptName;
+
+
     public void setDateRange(LocalDate startDate, LocalDate endDate) {
         this.dateRange = new LocalDate[] {startDate, endDate};
     }

+ 3 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserPageReqVO.java

@@ -71,5 +71,8 @@ public class UserPageReqVO extends PageParam {
     @Schema(description = "是否达成毕业条件")
     private Long isGraduate;
 
+    @Schema(description = "是否导入人脸")
+    private Long photoIsExist;
+
 
 }

+ 15 - 6
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/studentAttendance/StudentAttendanceMapper.java

@@ -81,6 +81,8 @@ public interface StudentAttendanceMapper extends BaseMapperX<StudentAttendanceDO
                 .eqIfExists(StudentAttendanceDO::getStudentId, reqVO.getStudentId())
                 .likeIfExists(StudentAttendanceDO::getStudentName, reqVO.getStudentName())
                 .likeIfExists(AdminUserDO::getUserNumber, reqVO.getUserNumber())//按学号查
+                .likeIfExists(DeptDO::getName,reqVO.getDeptName())//工作间名称
+                .eqIfExists(StudentAttendanceDO::getSupervisorId,reqVO.getSupervisorId())//导师查
                 .eqIfExists(StudentAttendanceDO::getDeptId, reqVO.getDeptId())
                 .eqIfExists(StudentAttendanceDO::getClockInStatus, reqVO.getClockInStatus())
                 .eqIfExists(StudentAttendanceDO::getRemark, reqVO.getRemark())
@@ -113,7 +115,8 @@ public interface StudentAttendanceMapper extends BaseMapperX<StudentAttendanceDO
                 .eqIfExists(StudentAttendanceDO::getClockInStatus,"0")//正常
                 .eqIfExists(StudentAttendanceDO::getStudentId, reqVO.getStudentId())
                 .likeIfExists(StudentAttendanceDO::getStudentName, reqVO.getStudentName())
-                .eqIfExists(AdminUserDO::getUserNumber, reqVO.getUserNumber())//按学号查
+                .likeIfExists(StudentAttendanceDO::getUserNumber, reqVO.getUserNumber())//按学号查
+                .eqIfExists(StudentAttendanceDO::getSupervisorId,reqVO.getSupervisorId())//导师
                 .eqIfExists(StudentAttendanceDO::getDeptId, reqVO.getDeptId())
                 .eqIfExists(StudentAttendanceDO::getClockInStatus, reqVO.getClockInStatus())
 
@@ -145,7 +148,9 @@ public interface StudentAttendanceMapper extends BaseMapperX<StudentAttendanceDO
                 .leftJoin(DeptDO.class, DeptDO::getId, StudentAttendanceDO::getDeptId)
                 .leftJoin(AdminUserDO.class, AdminUserDO::getId, StudentAttendanceDO::getStudentId)
                 .likeIfExists(StudentAttendanceDO::getStudentName, reqVO.getStudentName())
-                .eqIfExists(AdminUserDO::getUserNumber, reqVO.getUserNumber())//按学号查
+                .likeIfExists(StudentAttendanceDO::getUserNumber, reqVO.getUserNumber())//按学号查
+                .likeIfExists(DeptDO::getName,reqVO.getDeptName())//工作间名称
+                .eqIfExists(StudentAttendanceDO::getSupervisorId,reqVO.getSupervisorId())//导师
                 .eqIfExists(StudentAttendanceDO::getDeptId, reqVO.getDeptId())
                 .eqIfExists(StudentAttendanceDO::getClockInStatus, reqVO.getClockInStatus())
                 //1未打卡
@@ -178,7 +183,9 @@ public interface StudentAttendanceMapper extends BaseMapperX<StudentAttendanceDO
                 .leftJoin(DeptDO.class, DeptDO::getId, StudentAttendanceDO::getDeptId)
                 .leftJoin(AdminUserDO.class, AdminUserDO::getId, StudentAttendanceDO::getStudentId)
                 .likeIfExists(StudentAttendanceDO::getStudentName, reqVO.getStudentName())
-                .eqIfExists(AdminUserDO::getUserNumber, reqVO.getUserNumber())//按学号查
+                .likeIfExists(StudentAttendanceDO::getUserNumber, reqVO.getUserNumber())//按学号查
+                .likeIfExists(DeptDO::getName,reqVO.getDeptName())//工作间名称
+                .eqIfExists(StudentAttendanceDO::getSupervisorId,reqVO.getSupervisorId())//导师查
                 .eqIfExists(StudentAttendanceDO::getDeptId, reqVO.getDeptId())
                 .eqIfExists(StudentAttendanceDO::getClockInStatus, reqVO.getClockInStatus())
                 //1未打卡
@@ -210,13 +217,16 @@ public interface StudentAttendanceMapper extends BaseMapperX<StudentAttendanceDO
                 .selectAs(AdminUserDO::getUserNumber, StudentAttendanceDO::getUserNumber)
                 .leftJoin(DeptDO.class, DeptDO::getId, StudentAttendanceDO::getDeptId)
                 .leftJoin(AdminUserDO.class, AdminUserDO::getId, StudentAttendanceDO::getStudentId)
+                .likeIfExists(StudentAttendanceDO::getStudentName, reqVO.getStudentName())
+                .likeIfExists(DeptDO::getName,reqVO.getDeptName())//工作间名称
+                .likeIfExists(StudentAttendanceDO::getUserNumber, reqVO.getUserNumber())//按学号查
+
                 .eqIfExists(StudentAttendanceDO::getClockInStatus,"2")//请假
                 .eqIfExists(StudentAttendanceDO::getStudentId, reqVO.getStudentId())
-                .likeIfExists(StudentAttendanceDO::getStudentName, reqVO.getStudentName())
-                .eqIfExists(AdminUserDO::getUserNumber, reqVO.getUserNumber())//按学号查
                 .eqIfExists(StudentAttendanceDO::getDeptId, reqVO.getDeptId())
                 .eqIfExists(StudentAttendanceDO::getClockInStatus, reqVO.getClockInStatus())
                 .eqIfExists(StudentAttendanceDO::getRemark, reqVO.getRemark())
+                .eqIfExists(StudentAttendanceDO::getSupervisorId,reqVO.getSupervisorId())//导师查
                 .orderByDesc(StudentAttendanceDO::getDate);
 
         if (roleIds != null && !roleIds.isEmpty()) {
@@ -231,7 +241,6 @@ public interface StudentAttendanceMapper extends BaseMapperX<StudentAttendanceDO
         return selectPage(reqVO, queryWrapper);
     }
 
-
     @Select("SELECT * FROM system_student_attendance WHERE user_number = #{userNumber} AND clock_in_time = #{clockTime}")
     StudentAttendanceDO getStudentAttendanceOne(@Param("userNumber") String userNumber,
                                                 @Param("clockTime") LocalDateTime clockTime);

+ 5 - 12
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java

@@ -103,6 +103,7 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
                 .likeIfPresent(AdminUserDO::getNickname, reqVO.getNickname())//昵称查询
                 .eqIfPresent(AdminUserDO::getUserType,reqVO.getUserType())//类型查询
                 .likeIfPresent(AdminUserDO::getGrade, reqVO.getGrade())//班级查询
+                .eqIfPresent(AdminUserDO::getSupervisorId,reqVO.getSupervisorId())//导师查询
                 .eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus())
                 .betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getCreateTime())
                 .inIfPresent(AdminUserDO::getDeptId, deptIds)
@@ -131,6 +132,7 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
                 .eqIfPresent(AdminUserDO::getUserType,reqVO.getUserType())//类型查询
                 .likeIfPresent(AdminUserDO::getGrade, reqVO.getGrade())//班级查询
                 .eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(AdminUserDO::getSupervisorId,reqVO.getSupervisorId())//导师查询
                 .betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getCreateTime())
                 .inIfPresent(AdminUserDO::getDeptId, deptIds)
                 .orderByDesc(AdminUserDO::getId);
@@ -161,6 +163,7 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
                 .likeIfPresent(AdminUserDO::getEmail,reqVO.getEmail())
                 .likeIfPresent(AdminUserDO::getNickname, reqVO.getNickname())//昵称查询
                 .likeIfPresent(AdminUserDO::getUserNumber,reqVO.getUserNumber())//学号查询
+                .likeIfPresent(AdminUserDO::getWorkPlace,reqVO.getWorkPlace())//工作地点
                 .orderByDesc(AdminUserDO::getId);
         if (roleIds.contains(113L)){//如果是教师
             queryWrapper.eqIfPresent(AdminUserDO::getSupervisorId,loginId);
@@ -178,6 +181,7 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
                 .eqIfPresent(AdminUserDO::getUserType, "2")
                 .likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile())
                 .eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(AdminUserDO::getSupervisorId,reqVO.getSupervisorId())//导师查询
                 .betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getCreateTime())
                 .inIfPresent(AdminUserDO::getDeptId, deptIds)
                 .likeIfPresent(AdminUserDO::getGrade, reqVO.getGrade())//年级
@@ -185,6 +189,7 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
                 .likeIfPresent(AdminUserDO::getNickname, reqVO.getNickname())//昵称查询
                 .likeIfPresent(AdminUserDO::getUserNumber,reqVO.getUserNumber())//学号查询
                 .likeIfPresent(AdminUserDO::getWorkPlace,reqVO.getWorkPlace())
+                .likeIfPresent(AdminUserDO::getWorkPlace,reqVO.getWorkPlace())//工作地点
                 .orderByDesc(AdminUserDO::getId);
         if (roleIds.contains(113L)){//如果是教师
             queryWrapper.eqIfPresent(AdminUserDO::getSupervisorId,loginId);
@@ -240,18 +245,6 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
     @Select("SELECT * FROM system_users")
     List<AdminUserDO> getAllUsers();
 
-    //插入数据获取返回的id值
-    default Long insertAndGetId(AdminUserDO entity) {
-        // 特殊:SQL Server 插入单条数据后,获取 ID 可能会报错,因此通过调用 insert 方法处理
-        if (Objects.equals(SqlConstants.DB_TYPE, DbType.SQL_SERVER)) {
-            insert(entity); // 调用插入方法
-            return entity.getId(); // 假设 ID 在 entity 中已经设置
-        }
-        // 其他数据库类型,使用 save 方法并获取生成的 ID
-        boolean success = Db.save(entity);
-        return success ? entity.getId() : null; // 返回插入的 ID 或 null
-    }
-
 
     // //获取三天内都缺勤的人
     @Select("SELECT u.* " +

+ 6 - 6
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java

@@ -380,11 +380,16 @@ public class AdminUserServiceImpl implements AdminUserService {
                 }
             }
         });
-        if (reqVO.getIsGraduate() != null) {
+        if (reqVO.getIsGraduate() != null) {//搜索毕业状态
             result.setList(result.getList().stream()
                     .filter(user -> reqVO.getIsGraduate().equals(user.getIsGraduate()))
                     .collect(Collectors.toList()));
         }
+        if (reqVO.getPhotoIsExist() != null) {//搜索人脸导入
+            result.setList(result.getList().stream()
+                    .filter(user -> reqVO.getPhotoIsExist().equals(user.getPhotoIsExist()))
+                    .collect(Collectors.toList()));
+        }
         return result;
     }
 
@@ -411,11 +416,6 @@ public class AdminUserServiceImpl implements AdminUserService {
                 }
             }
         });
-        if (reqVO.getIsGraduate() != null) {
-            result=(result.stream()
-                    .filter(user -> reqVO.getIsGraduate().equals(user.getIsGraduate()))
-                    .collect(Collectors.toList()));
-        }
         return result;
     };