Crazy 9 months ago
parent
commit
07a396cb01
12 changed files with 221 additions and 171 deletions
  1. 18 12
      yudao-module-md/yudao-module-md-biz/src/main/java/Acs/FaceManage.java
  2. 1 1
      yudao-module-md/yudao-module-md-biz/src/main/java/Acs/UserManage.java
  3. 0 16
      yudao-module-md/yudao-module-md-biz/src/main/java/cn/iocoder/yudao/module/md/controller/admin/AcsController.java
  4. 95 110
      yudao-module-md/yudao-module-md-biz/src/main/java/cn/iocoder/yudao/module/md/service/AcsService.java
  5. 2 0
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java
  6. 3 4
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java
  7. 33 7
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserImportExcelVO.java
  8. 5 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java
  9. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java
  10. 4 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java
  11. 0 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java
  12. 59 19
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java

+ 18 - 12
yudao-module-md/yudao-module-md-biz/src/main/java/Acs/FaceManage.java

@@ -16,6 +16,8 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
+import static Commom.ConfigFileUtil.replace;
+
 /**
  * 功能模块:人员管理,下发、查询、删除人脸图片,注:下发人脸图片前,先下发人员工号。
  */
@@ -287,20 +289,24 @@ public final class FaceManage {
             System.out.println("SearchFaceInfo NET_DVR_StartRemoteConfig成功!");
             //输入参数,XML或者JSON数据,查询人脸图片json报文
             Map<String, Object> parameter = new HashMap<>();
-            parameter.put("employeeNo", employeeNo); // 员工ID号
-            String strInbuff = ConfigFileUtil.getReqBodyFromTemplate("conf/acs/SearchFaceInfoParam.json", parameter);
+            parameter.put("employeeNo",employeeNo); // 员工ID号
+//            String strInbuff = ConfigFileUtil.getReqBodyFromTemplate("conf/acs/SearchFaceInfoParam.json", parameter);
             //批量查询人脸图片json报文
-/*        String input = "{\n" +
-                "    \"searchResultPosition\":0,\n" +
-                "    \"maxResults\":30,\n" +
-                "    \"faceLibType\":\"blackFD\",\n" +
-                "    \"FDID\":\"1\"\n" +
-                "}";*/
-            System.out.println("查询人脸参数报文:"+strInbuff);
+
+            String  template = "{\n" +
+                "    \"searchResultPosition\": 0,\n" +
+                "    \"maxResults\": 1,\n" +
+                "    \"faceLibType\": \"blackFD\",\n" +
+                "    \"FDID\": \"1\",\n" +
+                "    \"FPID\": \"${employeeNo}\"\n" +
+                "}";
+            // 生成请求体
+            String requestJson = replace(template, parameter);
+            System.out.println("查询人脸参数报文:"+requestJson);
 
             //把string传递到Byte数组中,后续用.getPointer()方法传入指针地址中。
-            HCNetSDK.BYTE_ARRAY ptrInbuff = new HCNetSDK.BYTE_ARRAY(strInbuff.length());
-            System.arraycopy(strInbuff.getBytes(), 0, ptrInbuff.byValue, 0, strInbuff.length());
+            HCNetSDK.BYTE_ARRAY ptrInbuff = new HCNetSDK.BYTE_ARRAY(requestJson.length());
+            System.arraycopy(requestJson.getBytes(), 0, ptrInbuff.byValue, 0, requestJson.length());
             ptrInbuff.write();
 
             HCNetSDK.NET_DVR_JSON_DATA_CFG m_struJsonData = new HCNetSDK.NET_DVR_JSON_DATA_CFG();
@@ -309,7 +315,7 @@ public final class FaceManage {
             IntByReference pInt = new IntByReference(0);
 
             while(true){
-                int dwState =AcsService.hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(lHandler, ptrInbuff.getPointer(), strInbuff.length(), m_struJsonData.getPointer(), m_struJsonData.size(), pInt);
+                int dwState =AcsService.hCNetSDK.NET_DVR_SendWithRecvRemoteConfig(lHandler, ptrInbuff.getPointer(), requestJson.length(), m_struJsonData.getPointer(), m_struJsonData.size(), pInt);
                 m_struJsonData.read();
                 System.out.println(dwState);
                 if(dwState == -1){

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

@@ -211,7 +211,7 @@ public class UserManage {
 
             Map<String, Object> parameter = new HashMap<>();
             parameter.put("searchID", UUID.randomUUID()); // 查询id
-            parameter.put("maxResults",10);
+            parameter.put("maxResults",1);
             parameter.put("UserInfo.employeeNo",employeeNo);//查询学号对应的人
             System.out.println("查询条件"+parameter);
 

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

@@ -48,22 +48,6 @@ public class AcsController {
     private AcsService acsService;
 
 
-    //批量添加用户和人脸
-    @PostMapping("/batchAddUsersAndFaces")
-    @Operation(summary = "批量添加用户和人脸")
-    @Parameters({
-            @Parameter(name = "file", description = "Excel 文件", required = true),
-            @Parameter(name = "updateSupport", description = "是否支持更新,默认为 false", example = "true")
-    })
-    public CommonResult<attendanceImportRespVO> importExcel(@RequestParam("file") MultipartFile file,
-                                                            @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception {
-        List<attendanceImportExcelVO> list = ExcelUtils.read(file, attendanceImportExcelVO.class);
-//        return null;
-        return success(acsService.importUserList(list, updateSupport));
-    }
-
-
-
 /**
      * 添加用户
      */

+ 95 - 110
yudao-module-md/yudao-module-md-biz/src/main/java/cn/iocoder/yudao/module/md/service/AcsService.java

@@ -273,55 +273,57 @@ public class AcsService {
     @Resource
     private AdminUserService userService;
 
-    //添加单个用户的照片和信息
 
     //用户添加自己的照片(也可以对考勤机那添加用户信息照片或更新照片)
     @Transactional(rollbackFor = Exception.class) //
     public String addSelfImage(MultipartFile image) throws Exception {
-        if (isValidImageName(image.getName()).equals("照片格式正确")) {
+        if (isValidImageName(image.getOriginalFilename()).equals("照片格式正确")) {
             Long loginId = SecurityFrameworkUtils.getLoginUserId();
             AdminUserDO user = userService.getUser(loginId);
-            File newFile = new File(image.getName());
-            String photoUrl = fileApi.createFile(Files.readAllBytes(newFile.toPath()));
-            user.setPhotoUrl(photoUrl);
-            String userNumber = user.getUserNumber();
-            String result =getUser(userNumber);
-            if (result!=null) {
-                Gson gson = new Gson();
-                JsonObject jsonObject = gson.fromJson(result, JsonObject.class);
-                JsonArray userInfoArray = jsonObject
-                        .getAsJsonObject("UserInfoSearch")
-                        .getAsJsonArray("UserInfo");
-                if (userInfoArray!=null) {
-                    JsonObject userInfo = userInfoArray.getAsJsonObject();
-                    String empNo = userInfo.get("employeeNo").getAsString();
-                    if (empNo != null) {
-                        addFaceByUrl(userNumber, user.getPhotoUrl());
-                    }
-                }
-            }else {
-                //确保在执行完增加用户后执行增加人脸
-                CompletableFuture<Void> userFuture = CompletableFuture.runAsync(() -> {
-                    try {
-                        addUser(userNumber, 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 {
-                        addFaceByUrl(userNumber, photoUrl);
-                    } catch (JSONException e) {
-                        throw new RuntimeException(e);
-                    }
-                });
-
-                return "添加用户并且增加照片成功";
-            }
+            //创建临时文件目录
+            File tempDir = Files.createTempDirectory("user_image").toFile();
+             try {
+                 File newFile =new File(tempDir,image.getOriginalFilename());
+                 //将内容写入
+                 image.transferTo(newFile);
+                 String photoUrl = fileApi.createFile(Files.readAllBytes(newFile.toPath()));
+                 user.setPhotoUrl(photoUrl);
+                 String userNumber = user.getUserNumber();
+
+                 String result = getUser(userNumber);
+                 Gson gson = new Gson();
+                 JsonObject jsonObject = gson.fromJson(result, JsonObject.class);
+                 JsonArray userInfoArray = jsonObject
+                         .getAsJsonObject("UserInfoSearch")
+                         .getAsJsonArray("UserInfo");
+
+                 if (userInfoArray != null) {
+                     addFaceByUrl(userNumber, user.getPhotoUrl());
+                 } else {
+                     //确保在执行完增加用户后执行增加人脸
+                     CompletableFuture<Void> userFuture = CompletableFuture.runAsync(() -> {
+                         try {
+                             addUser(userNumber, 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 {
+                             addFaceByUrl(userNumber, photoUrl);
+                         } catch (JSONException e) {
+                             throw new RuntimeException(e);
+                         }
+                     });
+                     return "添加用户并且增加照片成功";
+                 }
+             }finally {
+                 FileUtils.deleteDirectory(tempDir);
+             }
             return "更新照片成功";
         }else{
             return "照片格式有问题";
@@ -329,31 +331,34 @@ public class AcsService {
     }
 
 
-
+    //教师添加或更新照片
     @Transactional(rollbackFor = Exception.class)
     public String teacherUpdateUserImage(String employeeNo, MultipartFile image) throws Exception {
-        if (isValidImageName(image.getName()).equals("照片格式正确")) {
-            File newFile = new File(image.getName());
-            String photoUrl = fileApi.createFile(Files.readAllBytes(newFile.toPath()));
-            String result =getUser(employeeNo);
-            if (result!=null) {
+        if (isValidImageName( image.getOriginalFilename()).equals("照片格式正确")) {
+            //创建临时文件
+            File tempDir = Files.createTempDirectory("user_image").toFile();
+            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);
                 JsonArray userInfoArray = jsonObject
                         .getAsJsonObject("UserInfoSearch")
                         .getAsJsonArray("UserInfo");
-                if (userInfoArray!=null) {
-                    JsonObject userInfo = userInfoArray.getAsJsonObject();
-                    String empNo = userInfo.get("employeeNo").getAsString();
-                    if (empNo != null) {
-                      String msg = addFaceByUrl(employeeNo,photoUrl);
-                        if (msg.contains("下发人脸成功") && !msg.contains("但是有异常情况")) {
-                            return "更新照片成功";
-                        } else {
-                           return "更新照片失败,请检查照片大小";
-                        }
+                if (userInfoArray != null) {
+                    String msg = addFaceByUrl(employeeNo, photoUrl);
+                    if (msg.contains("下发人脸成功") && msg.contains("但是有异常情况")) {
+                         return "更新照片失败,请检查照片大小";
+                    } else {
+                        return "更新照片成功";
                     }
                 }
+            }finally {
+                FileUtils.deleteDirectory(tempDir);
             }
             return "该学号的用户不存在";
         }else{
@@ -361,9 +366,7 @@ public class AcsService {
         }
     }
 
-
-
-    //导入用户信息
+    //批量导入用户信息
     @Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入
     public attendanceImportRespVO importUserList(List<attendanceImportExcelVO> importUsers, boolean isUpdateSupport) {
 
@@ -373,21 +376,15 @@ public class AcsService {
 
                 try {
                     String result = getUser(importUser.getEmployeeNo());
-                    if ( result==null) {
                         Gson gson = new Gson();
                             JsonObject jsonObject = gson.fromJson(result, JsonObject.class);
                             JsonArray userInfoArray = jsonObject
                                     .getAsJsonObject("UserInfoSearch")
                                     .getAsJsonArray("UserInfo");
-                            if (userInfoArray!=null) {
-                                JsonObject userInfo = userInfoArray.get(0).getAsJsonObject();
-                                String empNo = userInfo.get("employeeNo").getAsString();
-                                if (empNo != null) {
-                                    UserManage.addUserInfo(lUserID, importUser.getEmployeeNo(), importUser.getName());
-                                    respVO.getCreateUsernames().add(importUser.getName());
-                                }
+                            if (userInfoArray==null) {//没有userInfo
+                                UserManage.addUserInfo(lUserID, importUser.getEmployeeNo(), importUser.getName());
+                                respVO.getCreateUsernames().add(importUser.getName());
                             }
-                    }
                 } catch (UnsupportedEncodingException | InterruptedException | JSONException e) {
                     throw new RuntimeException("添加用户信息失败: " + e.getMessage(), e);
                 }
@@ -431,7 +428,7 @@ public class AcsService {
                             }
                         }
                         String result =getUser(userNumber);
-                        if (result!=null) {
+
                             Gson gson = new Gson();
                             JsonObject jsonObject = gson.fromJson(result, JsonObject.class);
 
@@ -439,27 +436,21 @@ public class AcsService {
                                     .getAsJsonObject("UserInfoSearch")
                                     .getAsJsonArray("UserInfo");
                             if (userInfoArray!=null) {
-                                JsonObject userInfo = userInfoArray.get(0).getAsJsonObject();
-                                String empNo = userInfo.get("employeeNo").getAsString();
-                                if (empNo != null) {
-                                    // 上传文件并获取 URL
-                                    AdminUserDO user = userService.findUserByUserNumber(userNumber);
-                                    String photoUrl = fileApi.createFile(Files.readAllBytes(newFile.toPath()));
-                                    user.setPhotoUrl(photoUrl);
-                                    userService.updateUser((BeanUtils.toBean(user, UserSaveReqVO.class)));
-                                    //给对应学号的人的照片添加
-                                    String msg = addFaceByUrl(user.getUserNumber(), photoUrl);
-                                    if (msg.contains("下发人脸成功") && !msg.contains("但是有异常情况")) {
-                                        successUsers.add(studentName);
-                                    } else {
-                                        failUsers.add(studentName);
-                                    }
+                                // 上传文件并获取 URL
+                                AdminUserDO user = userService.findUserByUserNumber(userNumber);
+                                String photoUrl = fileApi.createFile(Files.readAllBytes(newFile.toPath()));
+                                user.setPhotoUrl(photoUrl);
+                                userService.updateUser((BeanUtils.toBean(user, UserSaveReqVO.class)));
+                                //给对应学号的人的照片添加
+                                String msg = addFaceByUrl(user.getUserNumber(), photoUrl);
+                                if (msg.contains("下发人脸成功") && msg.contains("但是有异常情况")) {
+                                    failUsers.add(studentName);
+                                } else {
+                                    successUsers.add(studentName);
                                 }
-                            }
-                            else {
+                            } else {
                                 nullUsers.add(studentName);
                             }
-                        }
                     }else{
                         errorImages.add(entry.getName());
                     }
@@ -506,9 +497,8 @@ public class AcsService {
                         //获取去除后缀名的文件名,需要设置成学号
                         String userNumber = entry.getName().substring(0, entry.getName().lastIndexOf('-'));
                         String studentName = entry.getName().substring(entry.getName().lastIndexOf('-') + 1, entry.getName().lastIndexOf('.'));
-                        System.out.println("学号:" + userNumber);
-                        System.out.println("学生名字:" + studentName);
-
+//                        System.out.println("学号:" + userNumber);
+//                        System.out.println("学生名字:" + studentName);
                         File newFile = new File(tempDir, entry.getName());
                         // 进行解压
                         try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile))) {
@@ -519,7 +509,7 @@ public class AcsService {
                             }
                         }
                         String result =getUser(userNumber);
-                        if (result!=null){//用户不为空,为用户添加人脸
+                        //用户不为空,为用户添加人脸
                             Gson gson = new Gson();
                             JsonObject jsonObject = gson.fromJson(result, JsonObject.class);
 
@@ -527,22 +517,17 @@ public class AcsService {
                                     .getAsJsonObject("UserInfoSearch")
                                     .getAsJsonArray("UserInfo");
                             if (userInfoArray!=null) {
-                                JsonObject userInfo = userInfoArray.get(0).getAsJsonObject();
-                                String empNo = userInfo.get("employeeNo").getAsString();
-                                if (empNo != null) {
-                                    String photoUrl = fileApi.createFile(Files.readAllBytes(newFile.toPath()));
-                                    //给对应学号的人的照片添加
-                                    String msg = addFaceByUrl(userNumber, photoUrl);
-                                    //System.out.println("数据"+msg);
-                                    if (msg.contains("下发人脸成功") && msg.contains("但是有异常情况")) {
-                                        failUsers.add(studentName);
-                                    } else {
-                                        successUsers.add(studentName);
-                                    }
+                                String photoUrl = fileApi.createFile(Files.readAllBytes(newFile.toPath()));
+                                //给对应学号的人的照片添加
+                                String msg = addFaceByUrl(userNumber, photoUrl);
+                                //System.out.println("数据"+msg);
+                                if (msg.contains("下发人脸成功") && msg.contains("但是有异常情况")) {
+                                    failUsers.add(studentName);
+                                } else {
+                                    successUsers.add(studentName);
                                 }
-                            }
-                        }else{
-                            nullUsers.add(studentName);//添加找不到的用户
+                            } else{
+                                nullUsers.add(studentName);//添加找不到的用户
                         }
                     }
                 }
@@ -604,7 +589,7 @@ public class AcsService {
 
 
 
-    @Transactional(rollbackFor = Exception.class) // 事务管理
+    @Transactional(rollbackFor = Exception.class) // 是先插入的
     public String testData(MultipartFile excelFile, MultipartFile imageFile, boolean updateSupport) throws Exception {
         // 1. 导入用户信息
         if (excelFile!=null){

+ 2 - 0
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java

@@ -43,6 +43,8 @@ public interface ErrorCodeConstants {
     ErrorCode USER_COUNT_MAX = new ErrorCode(1_002_003_008, "创建用户失败,原因:超过租户最大租户配额({})!");
     ErrorCode USER_IMPORT_INIT_PASSWORD = new ErrorCode(1_002_003_009, "初始密码不能为空");
 
+    ErrorCode Supervisor_NOT_EXISTS = new ErrorCode(1_002_003_010, "导师不存在");
+
     // ========== 部门模块 1-002-004-000 ==========
     ErrorCode DEPT_NAME_DUPLICATE = new ErrorCode(1_002_004_000, "已经存在该名字的部门");
     ErrorCode DEPT_PARENT_NOT_EXITS = new ErrorCode(1_002_004_001,"父级部门不存在");

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

@@ -323,10 +323,9 @@ public class UserController {
     public void importTemplate(HttpServletResponse response) throws IOException {
         // 手动创建导出 demo
         List<UserImportExcelVO> list = Arrays.asList(
-                UserImportExcelVO.builder().username("yunai").deptId(1L).email("yunai@iocoder.cn").mobile("15601691300")
-                        .nickname("芋道").status(CommonStatusEnum.ENABLE.getStatus()).sex(SexEnum.MALE.getSex()).build(),
-                UserImportExcelVO.builder().username("yuanma").deptId(2L).email("yuanma@iocoder.cn").mobile("15601701300")
-                        .nickname("源码").status(CommonStatusEnum.DISABLE.getStatus()).sex(SexEnum.FEMALE.getSex()).build()
+                UserImportExcelVO.builder().username("ceshi000").password("123456").deptId(1L).email("2456125438@qq.com").mobile("15601691300").deptId(114L)
+                        .nickname("测试000").grade("2023级").userType("在校生").supervisor("教师01").status(CommonStatusEnum.ENABLE.getStatus()).sex(SexEnum.MALE.getSex())
+                        .build()
         );
         // 输出
         ExcelUtils.write(response, "用户导入模板.xls", "用户列表", UserImportExcelVO.class, list);

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

@@ -23,22 +23,48 @@ public class UserImportExcelVO {
     @ExcelProperty("登录名称")
     private String username;
 
+    @ExcelProperty("登录密码")
+    private String password;
+
     @ExcelProperty("用户名称")
     private String nickname;
 
+    @ExcelProperty(value = "用户性别", converter = DictConvert.class)
+    @DictFormat(DictTypeConstants.USER_SEX)
+    private Integer sex;
 
-    @ExcelProperty("工作间ID")
-    private Long deptId;
+    @ExcelProperty("学生年级")
+    private String grade;
 
-    @ExcelProperty("用户邮箱")
-    private String email;
+    @ExcelProperty("学号")
+    private String userNumber;
 
     @ExcelProperty("手机号码")
     private String mobile;
 
-    @ExcelProperty(value = "用户性别", converter = DictConvert.class)
-    @DictFormat(DictTypeConstants.USER_SEX)
-    private Integer sex;
+    @ExcelProperty("用户类型:1在校生,2毕业生,3导师,4学院")
+    private  String userType;
+
+    @ExcelProperty("用户邮箱")
+    private String email;
+
+    @ExcelProperty("专业名称")
+    private String major;
+
+    @ExcelProperty("专硕名称")
+    private String masterType;
+
+    @ExcelProperty("工作间ID")
+    private Long deptId;
+
+    @ExcelProperty("学生导师名称")
+    private String supervisor;
+
+    @ExcelProperty("学生导师电话")
+    private String supervisorMobile;
+
+    @ExcelProperty("毕业生工作地点")
+    private String workPlace;
 
     @ExcelProperty(value = "账号状态", converter = DictConvert.class)
     @DictFormat(DictTypeConstants.COMMON_STATUS)

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

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

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java

@@ -96,7 +96,7 @@ public class AdminUserDO extends TenantBaseDO {
 
     //新加的
     /**
-     * 用户类型
+     * 类型  在校生,毕业生,导师,学院
      */
     private String userType;
     /**

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

@@ -43,6 +43,7 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
                 .inIfPresent(AdminUserDO::getDeptId, deptIds)
                 .orderByDesc(AdminUserDO::getId));
     }
+
 // 查所有老师管理查询   参数1. reqVo模糊查询  2.过滤部门及子部门
     default PageResult<AdminUserDO> selectPage0(UserPageReqVO reqVO, Collection<Long> deptIds) {
         return selectPage(reqVO, new LambdaQueryWrapperX<AdminUserDO>()
@@ -169,4 +170,7 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
     @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);
+
 }

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

@@ -200,7 +200,6 @@ public interface AdminUserService {
      */
     UserImportRespVO importUserList(List<UserImportExcelVO> importUsers, boolean isUpdateSupport);
 
-
     /**
      * 获得指定状态的用户们
      *

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

@@ -98,7 +98,7 @@ public class AdminUserServiceImpl implements AdminUserService {
         });
         // 1.2 校验正确性
         validateUserForCreateOrUpdate(null, createReqVO.getUsername(),
-                createReqVO.getMobile(), createReqVO.getEmail(), createReqVO.getDeptId(), createReqVO.getPostIds());
+                createReqVO.getMobile(), createReqVO.getEmail(), createReqVO.getDeptId(), createReqVO.getPostIds(),createReqVO.getSupervisor());
         // 2.1 插入用户
         AdminUserDO user = BeanUtils.toBean(createReqVO, AdminUserDO.class);
         user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
@@ -123,7 +123,7 @@ public class AdminUserServiceImpl implements AdminUserService {
         updateReqVO.setPassword(null); // 特殊:此处不更新密码
         // 1. 校验正确性
         AdminUserDO oldUser = validateUserForCreateOrUpdate(updateReqVO.getId(), updateReqVO.getUsername(),
-                updateReqVO.getMobile(), updateReqVO.getEmail(), updateReqVO.getDeptId(), updateReqVO.getPostIds());
+                updateReqVO.getMobile(), updateReqVO.getEmail(), updateReqVO.getDeptId(), updateReqVO.getPostIds(),updateReqVO.getSupervisor());
 
         // 2.1 更新用户
         AdminUserDO updateObj = BeanUtils.toBean(updateReqVO, AdminUserDO.class);
@@ -374,8 +374,8 @@ public class AdminUserServiceImpl implements AdminUserService {
         return deptIds;
     }
 
-    private AdminUserDO validateUserForCreateOrUpdate(Long id, String username, String mobile, String email,
-                                                      Long deptId, Set<Long> postIds) {
+    private AdminUserDO validateUserForCreateOrUpdate(Long id, String username, String email,String mobile,
+                                                      Long deptId, Set<Long> postIds,String supervisor ) {
         // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确
         return DataPermissionUtils.executeIgnore(() -> {
             // 校验用户存在
@@ -383,13 +383,15 @@ public class AdminUserServiceImpl implements AdminUserService {
             // 校验用户名唯一
             validateUsernameUnique(id, username);
             // 校验手机号唯一
-            validateMobileUnique(id, mobile);
+//            validateMobileUnique(id, mobile);
             // 校验邮箱唯一
             validateEmailUnique(id, email);
             // 校验部门处于开启状态
             deptService.validateDeptList(CollectionUtils.singleton(deptId));
             // 校验岗位处于开启状态
             postService.validatePostList(postIds);
+            //检验是导师否存在
+            validateSupervisorExist(id,supervisor );
             return user;
         });
     }
@@ -460,6 +462,34 @@ public class AdminUserServiceImpl implements AdminUserService {
         }
     }
 
+    @VisibleForTesting
+    void validateSupervisorExist(Long id, String supervisor) {
+        if (supervisor==null) {
+            return;
+        }
+        AdminUserDO user = userMapper.getUserByNickName(supervisor);
+        if (user !=null){
+            return;
+        }
+        if (id ==null){
+            throw exception(Supervisor_NOT_EXISTS);
+        }
+        if (!user.getId().equals(id)) {
+            throw exception(Supervisor_NOT_EXISTS);
+        }
+    }
+
+    String TransformUserType(String UserType){
+        String userType = null;
+        if (UserType!=null){
+            if (UserType.equals("在校生")){userType ="1";}
+            else if (UserType.equals("毕校生")){userType ="2";}
+            else if (UserType.equals("导师")){userType="3";}
+            else if (UserType.equals("学院")){userType="4";}
+        }
+        return userType;
+    }
+
     /**
      * 校验旧密码
      * @param id          用户 id
@@ -483,27 +513,27 @@ public class AdminUserServiceImpl implements AdminUserService {
         if (CollUtil.isEmpty(importUsers)) {
             throw exception(USER_IMPORT_LIST_IS_EMPTY);
         }
-        // 1.2 初始化密码不能为空
-        String initPassword = configApi.getConfigValueByKey(USER_INIT_PASSWORD_KEY);
-        if (StrUtil.isEmpty(initPassword)) {
-            throw exception(USER_IMPORT_INIT_PASSWORD);
-        }
+//        // 1.2 初始化密码不能为空
+//        String initPassword = configApi.getConfigValueByKey(USER_INIT_PASSWORD_KEY);
+//        if (StrUtil.isEmpty(initPassword)) {
+//            throw exception(USER_IMPORT_INIT_PASSWORD);
+//        }
 
         // 2. 遍历,逐个创建 or 更新
         UserImportRespVO respVO = UserImportRespVO.builder().createUsernames(new ArrayList<>())
                 .updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build();
         importUsers.forEach(importUser -> {
             // 2.1.1 校验字段是否符合要求
-            try {
-                ValidationUtils.validate(BeanUtils.toBean(importUser, UserSaveReqVO.class).setPassword(initPassword));
-            } catch (ConstraintViolationException ex){
-                respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage());
-                return;
-            }
+//            try {
+//                ValidationUtils.validate(BeanUtils.toBean(importUser, UserSaveReqVO.class).setPassword(initPassword));
+//            } catch (ConstraintViolationException ex){
+//                respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage());
+//                return;
+//            }
             // 2.1.2 校验,判断是否有不符合的原因
             try {
                 validateUserForCreateOrUpdate(null, null, importUser.getMobile(), importUser.getEmail(),
-                        importUser.getDeptId(), null);
+                        importUser.getDeptId(), null, importUser.getSupervisor());
             } catch (ServiceException ex) {
                 respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage());
                 return;
@@ -512,11 +542,21 @@ public class AdminUserServiceImpl implements AdminUserService {
             // 2.2.1 判断如果不存在,在进行插入
             AdminUserDO existUser = userMapper.selectByUsername(importUser.getUsername());
             if (existUser == null) {
-                userMapper.insert(BeanUtils.toBean(importUser, AdminUserDO.class)
-                        .setPassword(encodePassword(initPassword)).setPostIds(new HashSet<>())); // 设置默认密码及空岗位编号数组
+
+                AdminUserDO newUser = BeanUtils.toBean(importUser, AdminUserDO.class)
+                        .setPassword(encodePassword(importUser.getPassword()))
+                        .setPostIds(new HashSet<>()); // 设置默认密码及空岗位编号数组
+
+                newUser.setSupervisorId(userMapper.getUserByNickName(importUser.getSupervisor()).getId()); // 导师名称转id
+                newUser.setUserType(TransformUserType(importUser.getUserType())); // 转换学生类型
+                newUser.setTenantId(1L);//设置租户编号
+
+                userMapper.insert(newUser); // 执行插入
+
                 respVO.getCreateUsernames().add(importUser.getUsername());
                 return;
             }
+
             // 2.2.2 如果存在,判断是否允许更新
             if (!isUpdateSupport) {
                 respVO.getFailureUsernames().put(importUser.getUsername(), USER_USERNAME_EXISTS.getMsg());