Crazy il y a 4 mois
Parent
commit
672b8ee360
22 fichiers modifiés avec 362 ajouts et 172 suppressions
  1. 1 0
      yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java
  2. 3 1
      yudao-module-md/yudao-module-md-biz/src/main/java/Acs/EventSearch.java
  3. 4 5
      yudao-module-md/yudao-module-md-biz/src/main/java/cn/iocoder/yudao/module/md/controller/admin/AcsController.java
  4. 0 3
      yudao-module-md/yudao-module-md-biz/src/main/java/cn/iocoder/yudao/module/md/controller/admin/vo/imageImportRespVO.java
  5. 5 20
      yudao-module-md/yudao-module-md-biz/src/main/java/cn/iocoder/yudao/module/md/service/AcsService.java
  6. 2 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java
  7. 140 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentAttendance/StudentAttendanceController.java
  8. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentAttendance/vo/StudentAttendanceSaveReqVO.java
  9. 30 125
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java
  10. 0 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java
  11. 9 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/userAchievement/UserAchievementController.java
  12. 10 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/studentAttendance/StudentAttendanceDO.java
  13. 58 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/studentAttendance/StudentAttendanceMapper.java
  14. 24 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java
  15. 3 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/userAchievement/UserAchievementMapper.java
  16. 1 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java
  17. 12 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/studentAttendance/StudentAttendanceService.java
  18. 21 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/studentAttendance/StudentAttendanceServiceImpl.java
  19. 3 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java
  20. 25 5
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
  21. 3 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/userAchievement/UserAchievementService.java
  22. 7 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/userAchievement/UserAchievementServiceImpl.java

+ 1 - 0
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java

@@ -201,4 +201,5 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> {
         return delete(new LambdaQueryWrapper<T>().eq(field, value));
     }
 
+
 }

+ 3 - 1
yudao-module-md/yudao-module-md-biz/src/main/java/Acs/EventSearch.java

@@ -132,9 +132,10 @@ public final class EventSearch {
                 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                 LocalDateTime parsedTime =null;
                 String employeeNo =null;
-
+                LocalDate date =null;
                 if ( clockInTime!=null){
                      parsedTime = LocalDateTime.parse(clockInTime, formatter);
+                     date = parsedTime.toLocalDate();
                 }
                 if (struAcsEventCfg.struAcsEventInfo.dwEmployeeNo!=0){
                     employeeNo = String.valueOf(struAcsEventCfg.struAcsEventInfo.dwEmployeeNo);
@@ -142,6 +143,7 @@ public final class EventSearch {
 
                 StudentAttendanceDO attendance =new StudentAttendanceDO();
                 attendance.setClockInTime(parsedTime);//打卡时间
+                attendance.setDate(date);//打卡日期
                 attendance.setUserNumber(employeeNo);//学号
 
                 StudentAttendanceDO ST  = studentAttendanceService.getStudentAttendanceOne(employeeNo,parsedTime);//获取这个学生的所有考勤记录

+ 4 - 5
yudao-module-md/yudao-module-md-biz/src/main/java/cn/iocoder/yudao/module/md/controller/admin/AcsController.java

@@ -63,11 +63,10 @@ public class AcsController {
     private AdminUserService adminUserService;
 
 
-    //直接运行
-    @Scheduled(cron = "0 0 0 * * ?") // 每天凌晨 1 点执行
+    //
+    @Scheduled(cron = "0 */10 * * * ?") // 每10分钟执行
     public void scheduledTask() throws UnsupportedEncodingException, InterruptedException {
         acsService.searchEvents(adminUserService, studentAttendanceService);
-        // 处理结果,如果需要的话
     }
 
 /**
@@ -274,10 +273,10 @@ public class AcsController {
             @Parameter(name = "employeeNo", description = "学号", required = true),
     })
     @PreAuthorize("@ss.hasPermission('system:teacher-user-image:update')")
-    public CommonResult<String> teacherUpdateUserImage(@RequestParam("imageFile") MultipartFile imageFile,
+    public CommonResult<String> teacherUpdateUserImage(@RequestParam("photoUrl") String photoUrl,
                                                        @RequestParam("employeeNo") String employeeNo) {
         try {
-            String result = acsService.teacherUpdateUserImage(employeeNo,imageFile);
+            String result = acsService.teacherUpdateUserImage(employeeNo,photoUrl);
             return CommonResult.success(result);
         } catch (Exception e) {
             return CommonResult.error(500, "导入过程中发生错误: " + e.getMessage());

+ 0 - 3
yudao-module-md/yudao-module-md-biz/src/main/java/cn/iocoder/yudao/module/md/controller/admin/vo/imageImportRespVO.java

@@ -15,9 +15,6 @@ public class imageImportRespVO {
     @Schema(description = "创建成功的照片", requiredMode = Schema.RequiredMode.REQUIRED)
     private List<String> createImages;
 
-    @Schema(description = "更新成功的照片", requiredMode = Schema.RequiredMode.REQUIRED)
-    private List<String> updateImages;
-
     @Schema(description = "导入失败的照片", requiredMode = Schema.RequiredMode.REQUIRED)
     private List<String> failureImages;
 

+ 5 - 20
yudao-module-md/yudao-module-md-biz/src/main/java/cn/iocoder/yudao/module/md/service/AcsService.java

@@ -335,16 +335,8 @@ public class AcsService {
 
     //教师添加或更新照片
     @Transactional(rollbackFor = Exception.class)
-    public String teacherUpdateUserImage(String employeeNo, MultipartFile image) throws Exception {
-        if (isValidImageName( image.getOriginalFilename()).equals("照片格式正确")) {
-            //创建临时文件
-            File tempDir = Files.createTempDirectory("user_image").toFile();
+    public String teacherUpdateUserImage(String employeeNo, String photoUrl) throws Exception {
             try {
-                //创建临时文件
-                File newFile =new File(tempDir,image.getOriginalFilename());
-                //将内容写入
-                image.transferTo(newFile);
-                String photoUrl = fileApi.createFile(Files.readAllBytes(newFile.toPath()));
                 String result = getUser(employeeNo);
                 Gson gson = new Gson();
                 JsonObject jsonObject = gson.fromJson(result, JsonObject.class);
@@ -365,13 +357,10 @@ public class AcsService {
                         return "更新照片成功";
                     }
                 }
-            }finally {
-                FileUtils.deleteDirectory(tempDir);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
             }
-            return "该学号的用户不存在";
-        }else{
-            return "照片格式有问题";
-        }
+            return "更新照片失败";
     }
 
     //批量导入用户信息
@@ -412,12 +401,8 @@ public class AcsService {
         // 创建临时目录存放解压后的文件
         File tempDir = Files.createTempDirectory("user_images").toFile();
         imageImportRespVO respVO = imageImportRespVO.builder().createImages(new ArrayList<>())
-                .updateImages(new ArrayList<>()).failureImages(new ArrayList<>()).errorImages(new ArrayList<>()).nullUsers(new ArrayList<>()).build();
+                .failureImages(new ArrayList<>()).errorImages(new ArrayList<>()).nullUsers(new ArrayList<>()).build();
 
-        List<String> successUsers =new LinkedList<>();
-        List<String> failUsers =new LinkedList<>();
-        List<String> nullUsers =new LinkedList<>();
-        List<String> errorImages =new LinkedList<>();
         try (InputStream inputStream = file.getInputStream();
              ZipArchiveInputStream zipInputStream = new ZipArchiveInputStream(inputStream)) {
             ZipEntry entry;

+ 2 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java

@@ -111,7 +111,7 @@ public class DeptController {
 
         DeptRespVO newDept = BeanUtils.toBean(dept, DeptRespVO.class);
 
-        // 获取所有用户
+        // 获取工作间下所有用户
         List<AdminUserDO> allUser = adminUserService.getDeptUser();
         List<AdminUserDO> student = new ArrayList<>();
         List<AdminUserDO> supervisor = new ArrayList<>();
@@ -124,7 +124,7 @@ public class DeptController {
                 supervisor.add(ad);
             }
 
-            var achievements = userAchievementService.getUserAchievementbyUserId(Math.toIntExact(ad.getId()));
+            var achievements = userAchievementService.getUserAchievementByUserId(Math.toIntExact(ad.getId()));
             // 检查列表是否为空
             if (achievements != null && !achievements.isEmpty()) {
                 // 遍历成就列表并添加每个成就的细节到 userAchievements

+ 140 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentAttendance/StudentAttendanceController.java

@@ -1,5 +1,9 @@
 package cn.iocoder.yudao.module.system.controller.admin.studentAttendance;
 
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
+import cn.iocoder.yudao.module.system.service.dept.DeptService;
+import cn.iocoder.yudao.module.system.service.user.AdminUserService;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
@@ -11,6 +15,8 @@ import io.swagger.v3.oas.annotations.Operation;
 import javax.validation.constraints.*;
 import javax.validation.*;
 import javax.servlet.http.*;
+import java.time.LocalDate;
+import java.time.ZoneId;
 import java.util.*;
 import java.io.IOException;
 
@@ -38,6 +44,73 @@ public class StudentAttendanceController {
     @Resource
     private StudentAttendanceService studentAttendanceService;
 
+    @Resource
+    private AdminUserService adminUserService;
+
+    @Resource
+    private DeptService deptService;
+
+    //检测打卡情况并且创建警告的打卡记录
+    @Scheduled(cron = "0 20 21 * * ?") // 每天22:30检测
+    public void attendanceNormal() {
+        checkAttendanceSecond();
+    }
+
+    @Scheduled(cron = "0 19 21 * * ?") // 每天11:00检测
+    public void attendanceNormalMorning() {
+        checkAttendanceFirst();
+    }
+
+    public void checkAttendanceFirst() {
+        List<AdminUserDO> userList = adminUserService.getAllUserList();
+        LocalDate localDate = LocalDate.now();
+
+        for (AdminUserDO user : userList) {
+            List<StudentAttendanceDO> result = studentAttendanceService.getStudentAttendanceDay(user.getUserNumber(),localDate);
+            if ("1".equals(user.getUserType())) {//只对在校生
+                if (result != null && result.size() == 0) { //
+                    StudentAttendanceDO attendance = new StudentAttendanceDO();
+                    attendance.setClockInStatus("1"); // 未打卡
+                    attendance.setDate(localDate);
+                    attendance.setStudentName(user.getUsername()); // 名字
+                    attendance.setStudentId(user.getId()); // id
+                    attendance.setUserNumber(user.getUserNumber()); // 学号
+                    attendance.setDeptId(user.getDeptId()); // 工作间id
+                    attendance.setSupervisorId(user.getSupervisorId()); // 导师id
+                    studentAttendanceService.createStudentAttendance(BeanUtils.toBean(attendance, StudentAttendanceSaveReqVO.class));
+                }
+            }
+        }
+    }
+
+    public void checkAttendanceSecond() {
+        List<AdminUserDO> userList = adminUserService.getAllUserList();
+        LocalDate localDate = LocalDate.now();
+
+        for (AdminUserDO user : userList) {
+            List<StudentAttendanceDO> result = studentAttendanceService.getStudentAttendanceDay(user.getUserNumber(),localDate);
+            if ("1".equals(user.getUserType())) {//只对在校生
+                if (result.size()>2) {//打了卡
+                    for (StudentAttendanceDO re : result) {
+                        if ("1".equals(re.getClockInStatus())) {//未打卡
+                            re.setClockInStatus("3");//恢复正常
+                            studentAttendanceService.updateStudentAttendance(BeanUtils.toBean(re, StudentAttendanceSaveReqVO.class));
+                        }
+                    }
+                }else if (result.size()==1){//只有一次,未打卡或者打了卡
+                    for (StudentAttendanceDO re : result) {
+                        if ("1".equals(re.getClockInStatus())) {//未打卡
+                            re.setClockInStatus("2");//变成警告
+                            studentAttendanceService.updateStudentAttendance(BeanUtils.toBean(re, StudentAttendanceSaveReqVO.class));
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+
     @PostMapping("/create")
     @Operation(summary = "创建学生考勤记录")
     @PreAuthorize("@ss.hasPermission('system:student-attendance:create')")
@@ -72,7 +145,7 @@ public class StudentAttendanceController {
     }
 
     @GetMapping("/page")
-    @Operation(summary = "获得学生考勤记录分页")
+    @Operation(summary = "导师获得学生考勤记录分页")
     @PreAuthorize("@ss.hasPermission('system:student-attendance:query')")
     public CommonResult<PageResult<StudentAttendanceRespVO>> getStudentAttendancePage(@Valid StudentAttendancePageReqVO pageReqVO) {
         PageResult<StudentAttendanceDO> pageResult = studentAttendanceService.getStudentAttendancePage(pageReqVO);
@@ -81,7 +154,7 @@ public class StudentAttendanceController {
     }
 
     @GetMapping("/errorPage")
-    @Operation(summary = "获得学生考勤异常记录分页")
+    @Operation(summary = "导师获得学生考勤异常记录分页")
     @PreAuthorize("@ss.hasPermission('system:student-attendance:ErrorQuery')")
     public CommonResult<PageResult<StudentAttendanceRespVO>> getStudentAttendanceErrorPage(@Valid StudentAttendancePageReqVO pageReqVO) {
         PageResult<StudentAttendanceDO> pageResult = studentAttendanceService.getStudentAttendanceErrorPage(pageReqVO);
@@ -102,5 +175,70 @@ public class StudentAttendanceController {
                         BeanUtils.toBean(list, StudentAttendanceRespVO.class));
     }
 
+    @GetMapping("/selfPage")
+    @Operation(summary = "获得学生自己的考勤记录分页")
+    @PreAuthorize("@ss.hasPermission('system:student-attendance:SelfQuery')")
+    public CommonResult<PageResult<StudentAttendanceRespVO>> getStudentAttendanceSelfPage(@Valid StudentAttendancePageReqVO pageReqVO) {
+        PageResult<StudentAttendanceDO> pageResult = studentAttendanceService.getStudentAttendanceSelfPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, StudentAttendanceRespVO.class));
+    }
+
+    @GetMapping("/collegePage")
+    @Operation(summary = "学院获得学生考勤记录分页")
+    @PreAuthorize("@ss.hasPermission('system:student-attendance:college-query')")
+    public CommonResult<PageResult<StudentAttendanceRespVO>> TeacherGetStudentAttendancePage(@Valid StudentAttendancePageReqVO pageReqVO) {
+
+        PageResult<StudentAttendanceDO> pageResult = studentAttendanceService.getStudentAttendancePage(pageReqVO);
+
+        return success(BeanUtils.toBean(pageResult, StudentAttendanceRespVO.class));
+    }
+
+
+    @GetMapping("/dayAttendance")
+    @Operation(summary = "获得所有人当日出勤列表")
+    @PreAuthorize("@ss.hasPermission('system:student-attendance:day')")
+    public CommonResult<List<StudentAttendanceDO>> getDayStudentAttendance () {
+        LocalDate localDate = LocalDate.now();
+
+        List<StudentAttendanceDO> attendanceList =studentAttendanceService.getStudentsAttendanceDay(localDate);
+        List<StudentAttendanceDO> result =new ArrayList<>();
+        for (StudentAttendanceDO attendance :attendanceList ){
+            attendance.setSupervisor(adminUserService.getUser(attendance.getSupervisorId()).getNickname());//导师名字
+            attendance.setDeptName(deptService.getDept(attendance.getDeptId()).getName());//工作间名称
+            result.add(attendance);
+        }
+        return success(result);
+
+    }
+
+    @GetMapping("/dayErrorAttendance")
+    @Operation(summary = "获得所有人当日警告列表")
+    @PreAuthorize("@ss.hasPermission('system:student-attendance:day')")
+    public CommonResult<List<StudentAttendanceDO>> getDayStudentErrorAttendance () {
+        LocalDate localDate = LocalDate.now();
+        List<StudentAttendanceDO> attendanceList =studentAttendanceService.getStudentsAttendanceDay(localDate);
+        List<StudentAttendanceDO> result =new ArrayList<>();
+        for (StudentAttendanceDO attendance :attendanceList ){
+            if ("1".equals(attendance.getClockInStatus())){
+                attendance.setSupervisor(adminUserService.getUser(attendance.getSupervisorId()).getNickname());//导师名字
+                attendance.setDeptName(deptService.getDept(attendance.getDeptId()).getName());//工作间名称
+
+                result.add(attendance);
+            }
+        }
+        return success(result);
+    }
+
+//    //TODO还没做的
+//    @GetMapping("/weekendAttendance")
+//    @Operation(summary = "周出勤统计")
+//    @PreAuthorize("@ss.hasPermission('system:student-attendance:day')")
+//    public CommonResult<Map<String,Integer>> getWeekendAttendance () {
+//        List<AdminUserDO>studentList = adminUserService.getAllUserList();
+//        for (AdminUserDO student :studentList){
+//            if ()
+//        }
+//        return null;
+//    }
 
 }

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/studentAttendance/vo/StudentAttendanceSaveReqVO.java

@@ -25,7 +25,7 @@ public class StudentAttendanceSaveReqVO {
     private String studentName;
 
     @Schema(description = "工作间id", requiredMode = Schema.RequiredMode.REQUIRED, example = "22266")
-    @NotEmpty(message = "工作间id不能为空")
+//    @NotEmpty(message = "工作间id不能为空")
     private String deptId;
 
     @Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED)

+ 30 - 125
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java

@@ -10,6 +10,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import cn.iocoder.yudao.module.infra.service.file.FileService;
+import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*;
 import cn.iocoder.yudao.module.system.controller.admin.userPhotoGroup.vo.UserPhotoGroupSaveReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.userPhotos.vo.UserPhotosSaveReqVO;
@@ -57,19 +58,6 @@ public class UserController {
     @Resource
     private DeptService deptService;
 
-    //新加的
-    @Resource
-    private UserPhotosService userPhotosService;
-    @Resource
-    private UserPhotoGroupService userPhotoGroupService;
-    @Resource
-    private FileService fileService;
-
-
-    @Resource
-    private FileApi fileApi;
-
-
     @PostMapping("/create")
     @Operation(summary = "新增用户")
     @PreAuthorize("@ss.hasPermission('system:user:create')")
@@ -350,7 +338,7 @@ public class UserController {
 
     //在校生导入
     @GetMapping("/get-import-StudentTemplate")
-    @Operation(summary = "获得在校生模板")
+    @Operation(summary = "获得在校生考勤人员下发模板")
     public void importStudentTemplate(HttpServletResponse response) throws IOException {
         // 手动创建导出 demo
         List<StudentImportExcelVO> list = Arrays.asList(
@@ -405,117 +393,34 @@ public class UserController {
     }
 
 
-    //废弃了的照片组
-//    @PostMapping("/addPhotos")
-//    @Operation(summary = "增加照片组")
-//    public CommonResult<Long> addPhotos(@RequestParam("groupName") String groupName,
-//                                        @RequestParam("groupDescription") String groupDescription,
-//                                        @RequestParam("file") MultipartFile file) throws Exception {
-//        if (!file.getOriginalFilename().endsWith(".zip")) {
-//            throw new IllegalArgumentException("上传文件必须是压缩包");
-//        }
-//        // 创建照片组
-//        UserPhotoGroupSaveReqVO createVO = new UserPhotoGroupSaveReqVO();
-//        createVO.setGroupName(groupName);
-//        createVO.setGroupDescription(groupDescription);
-//        Long groupId = userPhotoGroupService.createUserPhotoGroup(createVO);
-//
-//        // 文件格式检查
-//        try (InputStream inputStream = file.getInputStream()) {
-//            java.util.zip.ZipInputStream zipStream = new ZipInputStream(inputStream);
-//            ZipEntry entry;
-//            while ((entry = zipStream.getNextEntry())!= null) {
-//                System.out.println("文件格式错误");
-//            }
-//        }
-//
-//        // 创建临时目录存放解压后的文件
-//        File tempDir = Files.createTempDirectory("photo_group_images").toFile();
-//        try (ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream())) {
-//            ZipEntry entry;
-//            while ((entry = zipInputStream.getNextEntry())!= null) {
-//                if (!entry.isDirectory()) {
-//                    File newFile = new File(tempDir, entry.getName());
-//                    try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile))) {
-//                        byte[] buffer = new byte[1024];
-//                        int len;
-//                        while ((len = zipInputStream.read(buffer)) > 0) {
-//                            bos.write(buffer, 0, len);
-//                        }
-//                    }
-//                    System.out.println("到这里");
-//                    try {
-//                        // 上传文件并获取 URL
-//                        String photoUrl = fileApi.createFile(Files.readAllBytes(newFile.toPath()));
-//                        System.out.println("照片路径: " + photoUrl);
-//                        // 保存照片信息到数据库
-//                        UserPhotosSaveReqVO photo = new UserPhotosSaveReqVO();
-//                        photo.setPhotoGroupId(groupId);
-//                        photo.setPhotoUrl(photoUrl);
-//                        userPhotosService.createUserPhotos(photo);
-//                    } catch (Exception e) {
-//                        throw new RuntimeException("上传照片失败:" + e.getMessage());
-//                    }
-//                }
-//                zipInputStream.closeEntry();
-//            }
-//        } finally {
-//            // 删除临时目录
-//            Files.walk(tempDir.toPath())
-//                    .sorted(Comparator.reverseOrder())
-//                    .map(Path::toFile)
-//                    .forEach(File::delete);
-//        }
-//        return success(groupId);
-//    }
-
-    //完成
-    @PostMapping("/addPhotos")
-    @Operation(summary = "批量增加照片")
-    public CommonResult<String> addPhotos(
-                                        @RequestParam("file") MultipartFile file) throws Exception {
-        if (!file.getOriginalFilename().endsWith(".zip")) {
-            throw new IllegalArgumentException("上传文件必须是压缩包");
-        }
+    @PostMapping("/getDetail")
+    @Operation(summary = "基本信息展示")
+    @PreAuthorize("@ss.hasPermission('system:user:homeDetail')")
+    public CommonResult<Map<String,Integer>> getDetail() throws Exception {
+       List<AdminUserDO> userList =userService.getAllUserList();
+       List<AdminUserDO> studnetList = new ArrayList<>();
+       List<AdminUserDO> teacherList = new ArrayList<>();
+        DeptListReqVO reqVO =null;
+       for (AdminUserDO user :userList){
+           if ("1".equals(user.getUserType())){
+               studnetList.add(user);
+           }else if ("3".equals(user.getUserType())){
+               teacherList.add(user);
+           }
+       }
+       Integer studentNum =studnetList.size();
+       Integer teacherNum =teacherList.size();
+
+      List<DeptDO>deptList= deptService.getDeptList(reqVO);
+      Integer deptNum =deptList.size();
+
+        Map<String, Integer> result = new HashMap<>();
+        result.put("studentNum", studentNum);
+        result.put("teacherNum", teacherNum);
+        result.put("deptNum", deptNum);
+
+        return success(result);
 
-        // 创建临时目录存放解压后的文件
-        File tempDir = Files.createTempDirectory("photo_group_images").toFile();
-        try (ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream())) {
-            ZipEntry entry;
-            while ((entry = zipInputStream.getNextEntry())!= null) {
-                if (!entry.isDirectory()) {
-                    //获取去除后缀名的文件名,需要设置成学号
-                    String newFileName = entry.getName().substring(0, entry.getName().lastIndexOf('.'));
-                    System.out.println("文件名:"+newFileName);
-                    File newFile = new File(tempDir, entry.getName());
-                    try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile))) {
-                        byte[] buffer = new byte[1024];
-                        int len;
-                        while ((len = zipInputStream.read(buffer)) > 0) {
-                            bos.write(buffer, 0, len);
-                        }
-                    }
-                    try {
-                        // 上传文件并获取 URL
-                        AdminUserDO user = userService.findUserByUserNumber(newFileName);
-                        String photoUrl = fileApi.createFile(Files.readAllBytes(newFile.toPath()));
-                        user.setPhotoUrl(photoUrl);
-                        userService.updateUser( (BeanUtils.toBean(user, UserSaveReqVO.class)));
-                        System.out.println("照片路径: " + photoUrl);
-                        // 保存照片信息到数据库
-                    } catch (Exception e) {
-                        throw new RuntimeException("上传照片失败:" + e.getMessage());
-                    }
-                }
-                zipInputStream.closeEntry();
-            }
-        } finally {
-            // 删除临时目录
-            Files.walk(tempDir.toPath())
-                    .sorted(Comparator.reverseOrder())
-                    .map(Path::toFile)
-                    .forEach(File::delete);
-        }
-        return success("操作成功");
     }
+
 }

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

@@ -68,7 +68,6 @@ public class UserSaveReqVO {
     @DiffLogField(name = "导师名称")
     private String supervisor;
 
-
     // ========== 仅【创建】时,需要传递的字段 ==========
 
     @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")

+ 9 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/userAchievement/UserAchievementController.java

@@ -133,7 +133,15 @@ public class UserAchievementController {
     public CommonResult<PageResult<UserAchievementRespVO>> getSelfAchievementPage(@Valid UserAchievementPageReqVO pageReqVO) {
         PageResult<UserAchievementDO>pageResult = userAchievementService.getSelfAchievementPage(pageReqVO);
 
-        System.out.println(pageResult);
+        return success(BeanUtils.toBean(pageResult, UserAchievementRespVO.class));
+    }
+
+    @GetMapping("/oneUserPage")
+    @Operation(summary = "获得某个用户的成果分页")
+    @PreAuthorize("@ss.hasPermission('system:user-achievement:oneUserQuery')")
+    public CommonResult<PageResult<UserAchievementRespVO>> getOneUserAchievementPage(Integer userId) {
+        PageResult<UserAchievementDO>pageResult = userAchievementService.selectUserAchievementPageById(userId);
+
         return success(BeanUtils.toBean(pageResult, UserAchievementRespVO.class));
     }
 

+ 10 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/studentAttendance/StudentAttendanceDO.java

@@ -71,6 +71,16 @@ public class StudentAttendanceDO extends BaseDO {
      */
     private Long supervisorId;
 
+    //新加
+    /**
+     * 导师名称
+     */
+    @TableField(exist = false)
+    private String supervisor;
+
+    @TableField(exist = false)
+    private String deptName;
+
 
 
 

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

@@ -14,7 +14,9 @@ import cn.iocoder.yudao.module.system.controller.admin.studentAttendance.vo.*;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -25,6 +27,7 @@ import java.util.List;
 @Mapper
 public interface StudentAttendanceMapper extends BaseMapperX<StudentAttendanceDO> {
 
+    //导师下全部
     default PageResult<StudentAttendanceDO> selectPage(StudentAttendancePageReqVO reqVO) {
         Long dept_id = SecurityFrameworkUtils.getLoginUserDeptId();
         // 创建查询包装器
@@ -39,14 +42,30 @@ public interface StudentAttendanceMapper extends BaseMapperX<StudentAttendanceDO
                 .betweenIfPresent(StudentAttendanceDO::getCreateTime, reqVO.getCreateTime())
                 .eqIfPresent(StudentAttendanceDO::getRemark, reqVO.getRemark())
                 // 只出现在老师工作间下面的学生考勤情况
-                .inSql(StudentAttendanceDO::getDeptId, String.valueOf(dept_id))
+                .eqIfPresent(StudentAttendanceDO::getDeptId, dept_id)
                 .orderByDesc(StudentAttendanceDO::getId);
 
 
         return selectPage(reqVO, queryWrapper);
     }
 
+    //学院下全部
+    default PageResult<StudentAttendanceDO> collegeSelectPage(StudentAttendancePageReqVO reqVO) {
+        // 创建查询包装器
+        LambdaQueryWrapperX<StudentAttendanceDO> queryWrapper = new LambdaQueryWrapperX<>();
+        // 添加查询条件
+        queryWrapper.eqIfPresent(StudentAttendanceDO::getStudentId, reqVO.getStudentId())
+                .likeIfPresent(StudentAttendanceDO::getStudentName, reqVO.getStudentName())
+                .eqIfPresent(StudentAttendanceDO::getDeptId, reqVO.getDeptId())
+                .betweenIfPresent(StudentAttendanceDO::getDate, reqVO.getDate())
+                .eqIfPresent(StudentAttendanceDO::getClockInStatus, reqVO.getClockInStatus())
+                .betweenIfPresent(StudentAttendanceDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(StudentAttendanceDO::getRemark, reqVO.getRemark())
+                .orderByDesc(StudentAttendanceDO::getId);
+        return selectPage(reqVO, queryWrapper);
+    }
 
+    //导师下异常
     default PageResult<StudentAttendanceDO> selectErrorPage(StudentAttendancePageReqVO reqVO) {
         Long dept_id = SecurityFrameworkUtils.getLoginUserDeptId();
 
@@ -57,16 +76,53 @@ public interface StudentAttendanceMapper extends BaseMapperX<StudentAttendanceDO
                  .betweenIfPresent(StudentAttendanceDO::getCreateTime, reqVO.getCreateTime())
                  .eqIfPresent(StudentAttendanceDO::getClockInStatus, reqVO.getClockInStatus())
                  // 只出现在老师工作间下面的学生考勤情况
-                 .inSql(StudentAttendanceDO::getDeptId, String.valueOf(dept_id))
+                 .eqIfPresent(StudentAttendanceDO::getDeptId, dept_id)
                  // 大于等于1
                  .ge(StudentAttendanceDO::getClockInStatus,1)
                  .orderByDesc(StudentAttendanceDO::getId));
+    }
+
+    //自己全部
+    default PageResult<StudentAttendanceDO> selectSelfPage(StudentAttendancePageReqVO reqVO) {
+        Long loginId =SecurityFrameworkUtils.getLoginUserId();
+
+        LambdaQueryWrapperX<StudentAttendanceDO> queryWrapperX =new LambdaQueryWrapperX<>();
+        return selectPage(reqVO, queryWrapperX
+                .likeIfPresent(StudentAttendanceDO::getStudentName, reqVO.getStudentName())
+                .betweenIfPresent(StudentAttendanceDO::getDate, reqVO.getDate())
+                .betweenIfPresent(StudentAttendanceDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(StudentAttendanceDO::getClockInStatus, reqVO.getClockInStatus())
+                // 自己的
+                .eqIfPresent(StudentAttendanceDO::getStudentId,loginId)
+                .orderByDesc(StudentAttendanceDO::getId));
 
     }
+
     @Select("SELECT * FROM system_student_attendance WHERE user_number = #{userNumber}")
     List<StudentAttendanceDO> getStudentAttendanceByUserNumber(String userNumber);
 
     @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);
+
+
+    //找某天的某个用户的打卡记录
+    @Select("SELECT * FROM system_student_attendance " +
+            "WHERE user_number = #{userNumber} " +
+            "AND  date = #{clockDate}")
+    List<StudentAttendanceDO> getStudentAttendanceDay(@Param("userNumber") String userNumber,
+                                                      @Param("clockDate") LocalDate clockDate);
+
+    @Select("SELECT * FROM system_student_attendance " +
+            "WHERE user_number = #{userNumber} " +
+            "AND date BETWEEN #{startDate} AND #{endDate}")
+//    一段时间内
+    List<StudentAttendanceDO> getStudentAttendanceInRange(@Param("userNumber") String userNumber,
+                                                          @Param("startDate") LocalDate startDate,
+                                                          @Param("endDate") LocalDate endDate);
+
+    //找某天所有用户的打卡记录
+    @Select("SELECT * FROM system_student_attendance " +
+            "WHERE date = #{clockDate}")
+    List<StudentAttendanceDO> getStudentsAttendanceDay(@Param("clockDate") LocalDate clockDate);
 }

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

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.system.dal.mysql.user;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.enums.SqlConstants;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.security.core.LoginUser;
@@ -8,8 +9,11 @@ import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.toolkit.Db;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.catalina.User;
+import org.apache.ibatis.annotations.Insert;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -17,6 +21,7 @@ import org.apache.ibatis.annotations.Select;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 @Mapper
 public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
@@ -167,10 +172,29 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
     default List<AdminUserDO> selectListByDeptIds(Collection<Long> deptIds) {
         return selectList(AdminUserDO::getDeptId, deptIds);
     }
+
+    //通过学号查找用户
     @Select("SELECT * FROM system_users WHERE user_number = #{userNumber}")
     AdminUserDO findUserByUserNumber(String userNumber);
+    //通过昵称查找用户
 
     @Select("SELECT * FROM system_users WHERE nickname = #{nickname}")
     AdminUserDO getUserByNickName(String nickname);
 
+    //获取所有用户列表
+    @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
+    }
+
 }

+ 3 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/userAchievement/UserAchievementMapper.java

@@ -51,5 +51,8 @@ public interface UserAchievementMapper extends BaseMapperX<UserAchievementDO> {
     @Select("SELECT * FROM system_user_achievement WHERE user_id = #{userId}")
     List<UserAchievementDO> selectUserAchievementsById(int userId);
 
+    @Select("SELECT * FROM system_user_achievement WHERE user_id = #{userId}")
+    PageResult<UserAchievementDO> selectUserAchievementPageById(int userId);
+
 
 }

+ 1 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java

@@ -63,6 +63,7 @@ public interface DeptService {
      */
     List<DeptDO> getDeptList(DeptListReqVO reqVO);
 
+
     /**
      * 获得指定编号的部门 Map
      *

+ 12 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/studentAttendance/StudentAttendanceService.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.system.service.studentAttendance;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.*;
 import javax.validation.*;
@@ -51,12 +52,22 @@ public interface StudentAttendanceService {
      * @param pageReqVO 分页查询
      * @return 学生考勤记录分页
      */
-    PageResult<StudentAttendanceDO> getStudentAttendancePage(StudentAttendancePageReqVO pageReqVO);
+    PageResult<StudentAttendanceDO> getStudentAttendancePage(StudentAttendancePageReqVO pageReqVO);//导师
+
+    PageResult<StudentAttendanceDO> collegeGetStudentAttendancePage(StudentAttendancePageReqVO pageReqVO);//学院
 
     PageResult<StudentAttendanceDO> getStudentAttendanceErrorPage(StudentAttendancePageReqVO pageReqVO);
 
+    PageResult<StudentAttendanceDO> getStudentAttendanceSelfPage(StudentAttendancePageReqVO pageReqVO);
+
     List<StudentAttendanceDO> getStudentAttendanceByUserNumber(String userNumber);
 
     StudentAttendanceDO getStudentAttendanceOne(String userNumber,LocalDateTime clockTime);
 
+    //某个学生某天
+    List<StudentAttendanceDO> getStudentAttendanceDay(String userNumber, LocalDate clockDate);
+
+    //所有学生某天
+    List<StudentAttendanceDO> getStudentsAttendanceDay( LocalDate clockDate);
+
 }

+ 21 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/studentAttendance/StudentAttendanceServiceImpl.java

@@ -5,6 +5,7 @@ import javax.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.*;
 import cn.iocoder.yudao.module.system.controller.admin.studentAttendance.vo.*;
@@ -67,15 +68,25 @@ public class StudentAttendanceServiceImpl implements StudentAttendanceService {
         return studentAttendanceMapper.selectById(id);
     }
 
-    @Override
+    @Override//导师
     public PageResult<StudentAttendanceDO> getStudentAttendancePage(StudentAttendancePageReqVO pageReqVO) {
         return studentAttendanceMapper.selectPage(pageReqVO);
     }
 
+    @Override//学生
+    public PageResult<StudentAttendanceDO> collegeGetStudentAttendancePage(StudentAttendancePageReqVO pageReqVO) {
+        return studentAttendanceMapper.collegeSelectPage(pageReqVO);
+    }
+
     @Override
     public PageResult<StudentAttendanceDO> getStudentAttendanceErrorPage(StudentAttendancePageReqVO pageReqVO) {
         return studentAttendanceMapper.selectErrorPage(pageReqVO);
     }
+    @Override
+    public PageResult<StudentAttendanceDO> getStudentAttendanceSelfPage(StudentAttendancePageReqVO pageReqVO) {
+        return studentAttendanceMapper.selectSelfPage(pageReqVO);
+    }
+
 
     @Override
     public List<StudentAttendanceDO> getStudentAttendanceByUserNumber(String userNumber){
@@ -86,5 +97,14 @@ public class StudentAttendanceServiceImpl implements StudentAttendanceService {
         return studentAttendanceMapper.getStudentAttendanceOne(userNumber,clockTime);
     }
 
+    @Override
+    public  List<StudentAttendanceDO> getStudentAttendanceDay(String userNumber, LocalDate clockDate){
+        return studentAttendanceMapper.getStudentAttendanceDay(userNumber,clockDate);
+    }
+
+    @Override
+    public  List<StudentAttendanceDO> getStudentsAttendanceDay(LocalDate clockDate){
+        return studentAttendanceMapper.getStudentsAttendanceDay(clockDate);
+    }
 
 }

+ 3 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java

@@ -161,6 +161,9 @@ public interface AdminUserService {
      */
     List<AdminUserDO> getUserList(Collection<Long> ids);
 
+    //获取所有用户列表
+    List<AdminUserDO> getAllUserList();
+
     /**
      * 校验用户们是否有效。如下情况,视为无效:
      * 1. 用户编号不存在

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

@@ -81,8 +81,7 @@ public class AdminUserServiceImpl implements AdminUserService {
 
     @Resource
     private FileApi fileApi;
-    @Resource
-    private ConfigApi configApi;
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -250,11 +249,15 @@ public class AdminUserServiceImpl implements AdminUserService {
     }
 
 
-
+    //获取所有用户分页
     @Override
     public PageResult<AdminUserDO> getUserPage(UserPageReqVO reqVO) {
         return userMapper.selectPage(reqVO, getDeptCondition(reqVO.getDeptId()));
     }
+    //获取所有用户列表
+    public List<AdminUserDO> getAllUserList(){
+        return userMapper.getAllUsers();
+    }
 
     //<>
     //lsq 学生
@@ -547,11 +550,28 @@ public class AdminUserServiceImpl implements AdminUserService {
                         .setPassword(encodePassword(importUser.getPassword()))
                         .setPostIds(new HashSet<>()); // 设置默认密码及空岗位编号数组
 
+                String transformUserType =TransformUserType(importUser.getUserType());// 转换学生类型
+
                 newUser.setSupervisorId(userMapper.getUserByNickName(importUser.getSupervisor()).getId()); // 导师名称转id
-                newUser.setUserType(TransformUserType(importUser.getUserType())); // 转换学生类型
+                newUser.setUserType(transformUserType); // 插入学生类型
                 newUser.setTenantId(1L);//设置租户编号
 
-                userMapper.insert(newUser); // 执行插入
+                //TODO还没有获取到插入的id
+
+                Long insertUserId = userMapper.insertAndGetId(newUser); // 执行插入用户数据
+
+                Set<Long> roleIds = new HashSet<>();
+                //赋予用户角色
+                if (transformUserType.equals("1") ||transformUserType.equals("2")){//在校生和毕业生
+                    roleIds.add(112L);//学生权限
+                    permissionService.assignUserRole(insertUserId,roleIds);
+                }else if (transformUserType.equals("3")){
+                    roleIds.add(113L);//导师权限
+                    permissionService.assignUserRole(insertUserId,roleIds);
+                }else if (transformUserType.equals("4")){
+                    roleIds.add(114L);//学院权限
+                    permissionService.assignUserRole(insertUserId,roleIds);
+                }
 
                 respVO.getCreateUsernames().add(importUser.getUsername());
                 return;

+ 3 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/userAchievement/UserAchievementService.java

@@ -46,8 +46,9 @@ public interface UserAchievementService {
      */
     UserAchievementDO getUserAchievement(Integer id);
 
-    List<UserAchievementDO> getUserAchievementbyUserId(Integer id);
+    List<UserAchievementDO> getUserAchievementByUserId(Integer id);
 
+    PageResult<UserAchievementDO> selectUserAchievementPageById(Integer id);
     /**
      * 获得成果分页
      *
@@ -58,4 +59,5 @@ public interface UserAchievementService {
 
     PageResult<UserAchievementDO> getSelfAchievementPage(UserAchievementPageReqVO pageReqVO);
 
+
 }

+ 7 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/userAchievement/UserAchievementServiceImpl.java

@@ -82,9 +82,13 @@ public class UserAchievementServiceImpl implements UserAchievementService {
     }
 
     @Override
-    public List<UserAchievementDO> getUserAchievementbyUserId(Integer id) {
+    public List<UserAchievementDO> getUserAchievementByUserId(Integer id) {
         return userAchievementMapper.selectUserAchievementsById(id);
     }
+    @Override
+    public PageResult<UserAchievementDO> selectUserAchievementPageById(Integer id) {
+        return userAchievementMapper.selectUserAchievementPageById(id);
+    }
 
     @Override
     public PageResult<UserAchievementDO> getUserAchievementPage(UserAchievementPageReqVO pageReqVO) {
@@ -97,4 +101,6 @@ public class UserAchievementServiceImpl implements UserAchievementService {
     }
 
 
+
+
 }