Crazy 8 ヶ月 前
コミット
45b9e313c2

+ 21 - 18
yudao-module-md/yudao-module-md-biz/src/main/java/Acs/EventSearch.java

@@ -206,27 +206,30 @@ public final class EventSearch {
                        studentAttendanceService.updateStudentAttendance(BeanUtils.toBean(ST, StudentAttendanceSaveReqVO.class));
                    }
                 }
+
                  //检查并更新未打卡
                 if (user!=null&&"1".equals(user.getUserType())) {
-                    StudentAttendancePageReqVO attendanceReqVO =new StudentAttendancePageReqVO();
-                    LocalDate localDate = LocalDate.now();
-                    if (localDate.equals(date)) {
-                        attendanceReqVO.setDate(localDate);
-                        attendanceReqVO.setUserNumber(user.getUserNumber());
-                        List<StudentAttendanceDO> result = studentAttendanceService.getStudentAttendanceAllList(attendanceReqVO);//找到这天的打卡记录
-                        if ("1".equals(user.getUserType())) {//只对在校生
-                            if ( result.size() == 1) {//
-                                StudentAttendanceDO re = result.get(0);
-                                if ("1".equals(re.getClockInStatus())) {//找到未打卡的
-                                    re.setClockInStatus("0");//变成正常
-                                    re.setClockInTime(parsedTime);//更新打卡时间
-                                    re.setCreateTime(parsedTime);//更新时间
-                                    re.setUpdateTime(parsedTime);
-                                    if (photoUrl != null) {
-                                        re.setPhoto(photoUrl); //
+                    if (employeeNo != null && !employeeNo.equals("0")) {
+                        StudentAttendancePageReqVO attendanceReqVO = new StudentAttendancePageReqVO();
+                        LocalDate localDate = LocalDate.now();
+                        if (localDate.equals(date)) {
+                            attendanceReqVO.setDate(localDate);
+                            attendanceReqVO.setUserNumber(user.getUserNumber());
+                            List<StudentAttendanceDO> result = studentAttendanceService.getStudentAttendanceAllList(attendanceReqVO);//找到这天的未打卡记录
+                            if ("1".equals(user.getUserType())) {//只对在校生
+                                if (result.size() == 1) {//
+                                    StudentAttendanceDO re = result.get(0);
+                                    if ("1".equals(re.getClockInStatus())) {//找到未打卡的
+                                        re.setClockInStatus("0");//变成正常
+                                        re.setClockInTime(parsedTime);//更新打卡时间
+                                        re.setCreateTime(parsedTime);//更新时间
+                                        re.setUpdateTime(parsedTime);
+                                        if (photoUrl != null) {
+                                            re.setPhoto(photoUrl); //
+                                        }
+                                        studentAttendance.add(re);//测试查询
+                                        studentAttendanceService.updateStudentAttendance(BeanUtils.toBean(re, StudentAttendanceSaveReqVO.class));
                                     }
-                                    studentAttendance.add(re);//测试查询
-                                    studentAttendanceService.updateStudentAttendance(BeanUtils.toBean(re, StudentAttendanceSaveReqVO.class));
                                 }
                             }
                         }

+ 3 - 4
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailTemplateController.java

@@ -67,11 +67,11 @@ public class MailTemplateController {
         for (AdminUserDO teacher : TeacherList) {
             pageReqVO.setDate(today);
             List<StudentAttendanceEmailVO> normalList = BeanUtils.toBean(
-                    studentAttendanceService.getStudentAttendancePage(pageReqVO.setDeptId(String.valueOf(teacher.getDeptId()))).getList(),
+                    studentAttendanceService.getStudentAttendanceList(pageReqVO.setDeptId(String.valueOf(teacher.getDeptId()))),
                     StudentAttendanceEmailVO.class
             );
             List<StudentAttendanceEmailVO> errorList = BeanUtils.toBean(
-                    studentAttendanceService.getStudentAttendanceErrorPage(pageReqVO.setDeptId(String.valueOf(teacher.getDeptId()))).getList(),
+                    studentAttendanceService.getStudentAttendanceErrorList(pageReqVO.setDeptId(String.valueOf(teacher.getDeptId()))),
                     StudentAttendanceEmailVO.class
             );
 
@@ -100,7 +100,7 @@ public class MailTemplateController {
             templateParams.put("normalList", normalListBuilder.toString());
             templateParams.put("errorList", errorListBuilder.toString());
             if (teacher.getEmail()!=null) {
-                mailSendService.sendSingleMailToMember(teacher.getEmail(), teacher.getId(), "attendance-list", templateParams);
+                mailSendService.sendSingleMailToMember(teacher.getEmail(),null, "attendance-list", templateParams);
             }
         }
 
@@ -213,7 +213,6 @@ public class MailTemplateController {
                 mailSendService.sendSingleMailToMember("2653015384@qq.com", teacher.getId(), "attendance-list", templateParams);
             }
         }
-
     }
 
 }

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

@@ -27,6 +27,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
@@ -71,13 +73,12 @@ public class StudentAttendanceController {
 
     @GetMapping("/test")
     public void checkAttendanceFirst() {
-        UserPageReqVO reqVO =new UserPageReqVO();
-        StudentAttendancePageReqVO attendanceReqVO =new StudentAttendancePageReqVO();
-        reqVO.setUserType("1");//学生
-        List<AdminUserDO> userList = adminUserService.getUserList(reqVO);
-        LocalDate localDate = LocalDate.now();
-
-        attendanceReqVO.setDate(localDate);
+            UserPageReqVO reqVO =new UserPageReqVO();
+            StudentAttendancePageReqVO attendanceReqVO =new StudentAttendancePageReqVO();
+            reqVO.setUserType("1");//学生
+            List<AdminUserDO> userList = adminUserService.getUserList(reqVO);
+            LocalDate localDate = LocalDate.now();
+            attendanceReqVO.setDate(localDate);
 
          for (AdminUserDO user : userList) {
              if (user.getUserNumber() != null) {
@@ -125,7 +126,6 @@ public class StudentAttendanceController {
 //        }
 //    }
 
-
     @PostMapping("/create")
     @Operation(summary = "创建学生请假记录")
     @PreAuthorize("@ss.hasPermission('system:student-attendance:create')")
@@ -133,11 +133,11 @@ public class StudentAttendanceController {
         LocalDate nowDate = LocalDate.now();
         Long studentId = SecurityFrameworkUtils.getLoginUserId();
         AdminUserDO student =adminUserService.getUser(studentId);
+        StudentAttendancePageReqVO reqVO = new StudentAttendancePageReqVO();
         if (createReqVO.getDate().isBefore(nowDate)){
-            return success("该日期有问题");
+            return error(1,"该日期有问题");
         }else if (createReqVO.getDate().equals(nowDate)){//正好是当日,更新未打卡这条记录
             if (student.getUserNumber()!=null) {
-                StudentAttendancePageReqVO reqVO = new StudentAttendancePageReqVO();
                 reqVO.setUserNumber(student.getUserNumber());
                 reqVO.setDate(nowDate);
                 List<StudentAttendanceDO> result = studentAttendanceService.getStudentAttendanceAllList(reqVO);//找到这天的打卡记录
@@ -148,20 +148,34 @@ public class StudentAttendanceController {
                         re.setCreateTime(LocalDateTime.now());
                         re.setUpdateTime(LocalDateTime.now());
                         studentAttendanceService.updateStudentAttendance(BeanUtils.toBean(re, StudentAttendanceSaveReqVO.class));
+                        return success("请假成功");
+                    }
+                    if ("2".equals(re.getClockInStatus())) {//找到已经同一天请假的
+                        return error(1,"今天已经请过假");
                     }
+                }else {
+                    return error(1,"没有未打卡记录");
                 }
             }
-
         }
         else if(createReqVO.getDate().isAfter(nowDate)){//创建日期在当日之后
-            createReqVO.setStudentId(studentId);
-            createReqVO.setStudentName(student.getNickname());
-            createReqVO.setUserNumber(student.getUserNumber());
-            createReqVO.setDeptId(String.valueOf(student.getDeptId()));
-            createReqVO.setSupervisorId(student.getSupervisorId());//导师id
-            createReqVO.setClockInStatus("2");//请假
-            studentAttendanceService.createStudentAttendance(createReqVO);
-            return success("请求请假成功");
+            reqVO.setUserNumber(student.getUserNumber());
+            reqVO.setDate(createReqVO.getDate());
+            reqVO.setClockInStatus("2");
+            List<StudentAttendanceDO> result = studentAttendanceService.getStudentAttendanceAllList(reqVO);//找到这天请假
+            if (result == null || result.isEmpty()) {
+                // 创建请假记录
+                createReqVO.setStudentId(studentId);
+                createReqVO.setStudentName(student.getNickname());
+                createReqVO.setUserNumber(student.getUserNumber());
+                createReqVO.setDeptId(String.valueOf(student.getDeptId()));
+                createReqVO.setSupervisorId(student.getSupervisorId());//导师id
+                createReqVO.setClockInStatus("2");//请假
+                studentAttendanceService.createStudentAttendance(createReqVO);
+                return success("请假成功");
+            }else{
+                return error(1,createReqVO.getDate()+"这天已经请过假了");
+            }
         }
         return null;
     }

+ 17 - 0
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.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*;
 
 import cn.iocoder.yudao.module.system.convert.user.UserConvert;
@@ -100,6 +101,22 @@ public class UserController {
     @PreAuthorize("@ss.hasPermission('system:user:delete')")
     public CommonResult<Boolean> deleteUser(@RequestParam("id") Long id) {
         userService.deleteUser(id);
+        AdminUserDO user =userService.getUser(id);
+        if ("3".equals(user.getUserType())) {//是导师删除其工作间负责人id
+            DeptDO originDept = deptService.getDept(user.getDeptId());
+            DeptSaveReqVO originNewDept = BeanUtils.toBean(originDept, DeptSaveReqVO.class);
+
+            if (originDept != null) {
+                List<Long> originLeaderIdList = originNewDept.getLeaderUserId();
+                if (originLeaderIdList == null) {
+                    originLeaderIdList = new ArrayList<>(); // 如果为空,则初始化为空列表
+                }
+                originLeaderIdList.removeIf(leaderId -> leaderId.equals(user.getId()));
+                originNewDept.setLeaderUserId(originLeaderIdList);  // 设置更新后的负责人列表
+                deptService.updateDept(originNewDept);
+            }
+        }
+
         return success(true);
     }
 

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

@@ -68,6 +68,7 @@ public class UserPageReqVO extends PageParam {
     @Schema(description = "工作地点")
     private String workPlace;
 
+
     @Schema(description = "是否达成毕业条件")
     private Long isGraduate;
 

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

@@ -23,7 +23,7 @@ public class UserSaveReqVO {
     private Long id;
 
     @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
-    @NotBlank(message = "用户账号不能为空")
+//    @NotBlank(message = "用户账号不能为空")
     @Pattern(regexp = "^[a-zA-Z0-9]{4,30}$", message = "用户账号由 数字、字母 组成")
     @Size(min = 4, max = 30, message = "用户账号长度为 4-30 个字符")
     @DiffLogField(name = "用户账号")
@@ -97,6 +97,12 @@ public class UserSaveReqVO {
     @Schema(description = "照片更新时间")
     private LocalDateTime photoUpdateTime;
 
+    @Schema(description = "专业名称")
+    private String major;
+
+    @Schema(description = "专硕名称")
+    private String masterType;
+
     // ========== 仅【创建】时,需要传递的字段 ==========
 
     @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")

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

@@ -114,7 +114,19 @@ public class AdminUserServiceImpl implements AdminUserService {
         }
         AdminUserDO user = BeanUtils.toBean(createReqVO, AdminUserDO.class);
         user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
-        user.setPassword(encodePassword(createReqVO.getPassword())); // 加密密码
+
+        if ("2".equals(createReqVO.getUserType())){//是毕业生
+            if (createReqVO.getPassword()==null){
+                createReqVO.setPassword(encodePassword("123456"));//设置毕业生密码
+            }
+            if (createReqVO.getUsername()==null){
+                createReqVO.setUsername(String.valueOf((int) (Math.random() * 900000000) + 100000000));//设置毕业生账号
+            }
+        }
+
+        if (createReqVO.getPassword()!=null) {
+            user.setPassword(encodePassword(createReqVO.getPassword())); // 加密密码
+        }
         userMapper.insert(user);
 
         if ("3".equals(createReqVO.getUserType())){//是导师直接添加为负责人
@@ -890,7 +902,6 @@ public class AdminUserServiceImpl implements AdminUserService {
     @Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入
     public UserImportRespVO importGraduateList(List<graduateStudentImportExcelVO> importUsers, boolean isUpdateSupport) {
 
-
         // 1.1 参数校验
         if (CollUtil.isEmpty(importUsers)) {
             throw exception(USER_IMPORT_LIST_IS_EMPTY);
@@ -915,17 +926,13 @@ public class AdminUserServiceImpl implements AdminUserService {
                     return;
                 }
                 UserSaveReqVO newUser = BeanUtils.toBean(importUser, UserSaveReqVO.class);
-                if (importUser.getPassword()==null){
-                    newUser.setPassword(encodePassword("123456"));//设置毕业生密码
-                }
-                if (importUser.getUsername()==null){
-                    newUser.setUsername(String.valueOf((int) (Math.random() * 900000000) + 100000000));//设置毕业生账号
-                }
 
-                if (UserRoleIds.contains(113L)){//是导师
+                if (UserRoleIds.contains(113L)&&importUser.getSupervisor()==null){//是导师
                     newUser.setSupervisorId(loginId);
                 } else if (UserRoleIds.contains(114L) &&importUser.getSupervisor()!=null){//是学院
                     newUser.setSupervisorId(userMapper.getUserByNickName(importUser.getSupervisor()).getId());
+                }else if (UserRoleIds.contains(113L) &&importUser.getSupervisor()!=null){
+                    newUser.setSupervisorId(userMapper.getUserByNickName(importUser.getSupervisor()).getId());
                 }
 
                 Long userId = createUser(newUser); // 执行插入用户数据
@@ -956,16 +963,19 @@ public class AdminUserServiceImpl implements AdminUserService {
             }
             UserSaveReqVO  updateUser = BeanUtils.toBean(importUser, UserSaveReqVO.class);
             updateUser.setId(existUser.getId());
-            if (UserRoleIds.contains(113L)){//是导师
+            if (UserRoleIds.contains(113L)&&importUser.getSupervisor()==null){//是导师,直接到导师下面
                 updateUser.setSupervisorId(loginId);
             } else if (UserRoleIds.contains(114L) &&importUser.getSupervisor()!=null){//是学院
                 updateUser.setSupervisorId(userMapper.getUserByNickName(importUser.getSupervisor()).getId());
+            }else if (UserRoleIds.contains(113L) &&importUser.getSupervisor()!=null){
+                updateUser.setSupervisorId(userMapper.getUserByNickName(importUser.getSupervisor()).getId());
             }
             updateUser(updateUser);
             respVO.getUpdateUsernames().add(importUser.getUsername());
         });
         return respVO;
     }
+
     @Override
     @Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入
     public UserImportRespVO importSchoolStudentList(List<StudentImportExcelVO> importUsers, boolean isUpdateSupport) {
@@ -973,11 +983,14 @@ public class AdminUserServiceImpl implements AdminUserService {
         if (CollUtil.isEmpty(importUsers)) {
             throw exception(USER_IMPORT_LIST_IS_EMPTY);
         }
+
+        Long loginId = SecurityFrameworkUtils.getLoginUserId();
+        Set<Long> UserRoleIds = permissionService.getUserRoleIdListByUserId(loginId);//获取登录人的权限
+
         // 2. 遍历,逐个创建 or 更新
         UserImportRespVO respVO = UserImportRespVO.builder().createUsernames(new ArrayList<>())
                 .updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build();
         importUsers.forEach(importUser -> {
-            //TODO这里改了
             AdminUserDO existUser = userMapper.selectByUsername(importUser.getUsername());
             Long deptId = null; //工作间名称转id
 
@@ -1002,10 +1015,17 @@ public class AdminUserServiceImpl implements AdminUserService {
                     newUser.setSupervisorId(userMapper.getUserByNickName(importUser.getSupervisor()).getId());
                 }// 导师名称转id
 
+                if (UserRoleIds.contains(113L)&&importUser.getSupervisor()==null){//是导师
+                    newUser.setSupervisorId(loginId);
+                } else if (UserRoleIds.contains(114L) &&importUser.getSupervisor()!=null){//是学院
+                    newUser.setSupervisorId(userMapper.getUserByNickName(importUser.getSupervisor()).getId());
+                }else if (UserRoleIds.contains(113L) &&importUser.getSupervisor()!=null){
+                    newUser.setSupervisorId(userMapper.getUserByNickName(importUser.getSupervisor()).getId());
+                }
                 newUser.setUserType("1");//添加学生类型
                 newUser.setDeptId(deptId);//设置工作间id
 
-              Long userId = createUser(newUser); // 执行插入用户数据
+                Long userId = createUser(newUser); // 执行插入用户数据
 
                 Set<Long> roleIds = new HashSet<>();
                 //赋予学生角色
@@ -1024,7 +1044,6 @@ public class AdminUserServiceImpl implements AdminUserService {
                 }
             }
             //允许更新
-
             try {
                 deptId = TransformDept(importUser.getDeptName());
                 validateUserForCreateOrUpdate(existUser.getId(), null, importUser.getMobile(), importUser.getEmail(),
@@ -1033,11 +1052,18 @@ public class AdminUserServiceImpl implements AdminUserService {
                 respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage());
                 return;
             }
+
             UserSaveReqVO updateUser = BeanUtils.toBean(importUser, UserSaveReqVO.class);
             updateUser.setId(existUser.getId());
-            if (importUser.getSupervisor()!=null) {
+
+            if (UserRoleIds.contains(113L)&&importUser.getSupervisor()==null){//是导师直接在下面
+                updateUser.setSupervisorId(loginId);
+            } else if (UserRoleIds.contains(114L) &&importUser.getSupervisor()!=null){//是学院
                 updateUser.setSupervisorId(userMapper.getUserByNickName(importUser.getSupervisor()).getId());
-            }// 导师名称转id
+            } else if (UserRoleIds.contains(113L) &&importUser.getSupervisor()!=null){
+                updateUser.setSupervisorId(userMapper.getUserByNickName(importUser.getSupervisor()).getId());
+            }
+
             updateUser.setDeptId(deptId);//更新工作间
             updateUser(updateUser);
             respVO.getUpdateUsernames().add(importUser.getUsername());

+ 8 - 3
yudao-module-system/yudao-module-system-biz/src/main/resources/Mapper/AdminUserMapper/AdminUserMapper.xml

@@ -4,9 +4,12 @@
     <select id="selectPage1" resultType="cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO">
         SELECT
         a.*,
-        COALESCE(ua.is_graduate, 1) AS is_graduate,
+        COALESCE(
+        (SELECT MIN(ua.is_graduate) FROM system_user_achievement ua WHERE ua.user_id = a.id),
+        1
+        ) AS is_graduate,
         CASE
-            WHEN a.photo_url IS NOT NULL THEN 1
+            WHEN a.photo_url IS NOT NULL AND TRIM(a.photo_url) != '' THEN 1
         ELSE 0
             END AS photoIsExist,
 
@@ -64,7 +67,7 @@
             AND a.user_type = 1
         </if>
         <if test="roleIds != null and roleIds.contains(1L)">
-            AND a.dept_id IN (1, 2)
+            AND a.user_type IN (1, 2)
         </if>
         <if test="reqVO.isGraduate != null">
             <if test="reqVO.isGraduate == 1">
@@ -105,6 +108,8 @@
         </if>
         <if test="reqVO.mobile != null and reqVO.mobile != ''">
             AND a.mobile LIKE CONCAT('%', #{reqVO.mobile}, '%')
+            AND a.mobile LIKE CONCAT('%', #{reqVO.mobile}, '%')
+            AND a.mobile LIKE CONCAT('%', #{reqVO.mobile}, '%')
         </if>
         <if test="reqVO.userNumber != null and reqVO.userNumber != ''">
             AND a.user_number LIKE CONCAT('%', #{reqVO.userNumber}, '%')