diff --git a/src/main/java/com/jsl/oa/common/doData/UserDO.java b/src/main/java/com/jsl/oa/common/doData/UserDO.java
new file mode 100644
index 0000000..3f1fa25
--- /dev/null
+++ b/src/main/java/com/jsl/oa/common/doData/UserDO.java
@@ -0,0 +1,33 @@
+package com.jsl.oa.common.doData;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.sql.Date;
+
+/**
+ *
users 数据表
+ *
+ * 映射 users 数据表内容进入自定义实体类
+ *
+ * @author 筱锋xiao_lfeng
+ * @since v1.0.0
+ * @version v1.0.0
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+public class UserDO {
+ private Integer id;
+ private String userNum;
+ private String username;
+ private String password;
+ private String sex;
+ private Date age;
+ private String unit;
+ private String filed;
+ private String hometown;
+ private String kind;
+ private String status;
+}
diff --git a/src/main/java/com/jsl/oa/common/voData/UserRegisterVO.java b/src/main/java/com/jsl/oa/common/voData/UserRegisterVO.java
index 88077b7..3b4597b 100644
--- a/src/main/java/com/jsl/oa/common/voData/UserRegisterVO.java
+++ b/src/main/java/com/jsl/oa/common/voData/UserRegisterVO.java
@@ -2,8 +2,6 @@ package com.jsl.oa.common.voData;
import lombok.Getter;
-import javax.validation.constraints.Max;
-import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
@@ -12,9 +10,9 @@ import javax.validation.constraints.Pattern;
*
* 用于处理用户注册表单输入的数据
*
- * @since v1.0.0
- * @version v1.0.0
* @author 筱锋xiao_lfeng
+ * @version v1.0.0
+ * @since v1.0.0
*/
@Getter
public class UserRegisterVO {
@@ -29,8 +27,6 @@ public class UserRegisterVO {
@NotBlank(message = "性别不能为空")
private String sex;
- @Min(value = 0, message = "年龄不能小于0")
- @Max(value = 150, message = "年龄不能大于150")
@NotBlank(message = "年龄不能为空")
private String age;
diff --git a/src/main/java/com/jsl/oa/controllers/UserController.java b/src/main/java/com/jsl/oa/controllers/UserController.java
index 84bd4d2..2aeda14 100644
--- a/src/main/java/com/jsl/oa/controllers/UserController.java
+++ b/src/main/java/com/jsl/oa/controllers/UserController.java
@@ -1,16 +1,39 @@
package com.jsl.oa.controllers;
+import com.jsl.oa.common.voData.UserRegisterVO;
+import com.jsl.oa.services.UserService;
import com.jsl.oa.utils.BaseResponse;
import com.jsl.oa.utils.ErrorCode;
+import com.jsl.oa.utils.Processing;
import com.jsl.oa.utils.ResultUtil;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
-@RestController
-public class UserController {
+import java.text.ParseException;
+@RestController
+@RequiredArgsConstructor
+public class UserController {
+ private final UserService userService;
+
+ /**
+ * 用户注册
+ *
+ * 用户注册接口
+ *
+ * @return {@link BaseResponse}
+ * @author 筱锋xiao_lfeng
+ */
@PostMapping("/user/register")
- public BaseResponse userRegister() {
- return ResultUtil.error(ErrorCode.WRONG_PASSWORD);
+ public BaseResponse userRegister(@RequestBody @Validated UserRegisterVO userRegisterVO, BindingResult bindingResult) throws ParseException {
+ // 判断是否有参数错误
+ if (bindingResult.hasErrors()) {
+ return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult));
+ }
+ return userService.userRegister(userRegisterVO);
}
}
diff --git a/src/main/java/com/jsl/oa/mapper/UserMapper.java b/src/main/java/com/jsl/oa/mapper/UserMapper.java
new file mode 100644
index 0000000..dd65588
--- /dev/null
+++ b/src/main/java/com/jsl/oa/mapper/UserMapper.java
@@ -0,0 +1,21 @@
+package com.jsl.oa.mapper;
+
+import com.jsl.oa.common.doData.UserDO;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+@Mapper
+public interface UserMapper {
+
+ @Select("SELECT * FROM organize_oa.users WHERE username = #{username}")
+ UserDO getUserByUsername(String username);
+
+ @Select("SELECT * FROM organize_oa.users WHERE user_num = #{userNum}")
+ UserDO getUserByUserNum(String userNum);
+
+ @Insert("INSERT INTO organize_oa.users (user_num, username, password, sex, age, unit, field, hometown, kind, state) " +
+ "VALUES " +
+ "(#{userNum}, #{username}, #{password}, #{sex}, #{age}, #{unit}, #{filed}, #{hometown}, #{kind}, #{status})")
+ Boolean insertUser(UserDO userDO);
+}
diff --git a/src/main/java/com/jsl/oa/services/UserService.java b/src/main/java/com/jsl/oa/services/UserService.java
index 274e1c3..7fed1aa 100644
--- a/src/main/java/com/jsl/oa/services/UserService.java
+++ b/src/main/java/com/jsl/oa/services/UserService.java
@@ -1,4 +1,10 @@
package com.jsl.oa.services;
+import com.jsl.oa.common.voData.UserRegisterVO;
+import com.jsl.oa.utils.BaseResponse;
+
+import java.text.ParseException;
+
public interface UserService {
+ BaseResponse userRegister(UserRegisterVO userRegisterVO) throws ParseException;
}
diff --git a/src/main/java/com/jsl/oa/services/UserServiceImpl.java b/src/main/java/com/jsl/oa/services/UserServiceImpl.java
index d452a76..5b4b1ac 100644
--- a/src/main/java/com/jsl/oa/services/UserServiceImpl.java
+++ b/src/main/java/com/jsl/oa/services/UserServiceImpl.java
@@ -1,7 +1,67 @@
package com.jsl.oa.services;
+import com.jsl.oa.common.doData.UserDO;
+import com.jsl.oa.common.voData.UserRegisterVO;
+import com.jsl.oa.mapper.UserMapper;
+import com.jsl.oa.utils.BaseResponse;
+import com.jsl.oa.utils.ErrorCode;
+import com.jsl.oa.utils.Processing;
+import com.jsl.oa.utils.ResultUtil;
+import lombok.RequiredArgsConstructor;
+import org.mindrot.jbcrypt.BCrypt;
import org.springframework.stereotype.Service;
+import java.sql.Date;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
@Service
+@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
+ private final UserMapper userMapper;
+
+ /**
+ * 用户注册
+ *
+ * 用户注册服务类操作
+ *
+ * @param userRegisterVO 用户注册信息
+ * @return {@link BaseResponse}
+ * @throws ParseException 日期转换异常
+ */
+ @Override
+ public BaseResponse userRegister(UserRegisterVO userRegisterVO) throws ParseException {
+ // 用户检查是否存在
+ UserDO getUserByUsername = userMapper.getUserByUsername(userRegisterVO.getUsername());
+ // 用户名已存在
+ if (getUserByUsername != null) {
+ return ResultUtil.error(ErrorCode.USERNAME_EXIST);
+ }
+
+ // 生成工号
+ String userNum;
+ do {
+ userNum = Processing.createJobNumber((short) 2);
+ } while (userMapper.getUserByUserNum(userNum) != null);
+
+ // 数据上传
+ Date getDate = new Date(new SimpleDateFormat("yyyy-MM-dd").parse(userRegisterVO.getAge()).getTime());
+ UserDO userDO = new UserDO();
+ userDO.setUserNum(userNum)
+ .setUsername(userRegisterVO.getUsername())
+ .setPassword(BCrypt.hashpw(userRegisterVO.getPassword(), BCrypt.gensalt()))
+ .setSex(userRegisterVO.getSex())
+ .setAge(getDate)
+ .setUnit(userRegisterVO.getUnit())
+ .setFiled(userRegisterVO.getFiled())
+ .setHometown(userRegisterVO.getHometown())
+ .setKind("注册用户")
+ .setStatus("注册状态");
+ // 插入数据
+ if (userMapper.insertUser(userDO)) {
+ return ResultUtil.success("注册成功");
+ } else {
+ return ResultUtil.error(ErrorCode.DATABASE_INSERT_ERROR);
+ }
+ }
}
diff --git a/src/main/java/com/jsl/oa/utils/ErrorCode.java b/src/main/java/com/jsl/oa/utils/ErrorCode.java
index 4981ea2..48c3b2b 100644
--- a/src/main/java/com/jsl/oa/utils/ErrorCode.java
+++ b/src/main/java/com/jsl/oa/utils/ErrorCode.java
@@ -4,11 +4,17 @@ import lombok.Getter;
@Getter
public enum ErrorCode {
- WRONG_PASSWORD("WrongPassword", 40010, "密码错误");
+ WRONG_PASSWORD("WrongPassword", 40010, "密码错误"),
+ PARAMETER_ERROR("ParameterError", 40011, "参数错误"),
+ USERNAME_EXIST("UsernameExist", 40012, "用户名已存在"),
+ DATABASE_INSERT_ERROR("DatabaseInsertError", 50010, "数据库插入错误"),
+ DATABASE_UPDATE_ERROR("DatabaseUpdateError", 50011, "数据库更新错误"),
+ DATABASE_DELETE_ERROR("DatabaseDeleteError", 50012, "数据库删除错误");
private final String output;
private final Integer code;
private final String message;
+
ErrorCode(String output, Integer code, String message) {
this.output = output;
this.code = code;
diff --git a/src/main/java/com/jsl/oa/utils/Processing.java b/src/main/java/com/jsl/oa/utils/Processing.java
index ecdac00..74df2ea 100644
--- a/src/main/java/com/jsl/oa/utils/Processing.java
+++ b/src/main/java/com/jsl/oa/utils/Processing.java
@@ -4,6 +4,7 @@ import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import java.util.ArrayList;
+import java.util.Random;
/**
* 自定义快捷工具类
@@ -14,6 +15,16 @@ import java.util.ArrayList;
* @version v1.0.0
*/
public class Processing {
+
+ /**
+ * 获取参数校验错误信息
+ *
+ * 用于获取参数校验错误信息
+ *
+ * @since v1.0.0
+ * @param bindingResult 参数校验结果
+ * @return {@link ArrayList}
+ */
public static ArrayList getValidatedErrorList(BindingResult bindingResult) {
ArrayList arrayList = new ArrayList<>();
for (ObjectError objectError : bindingResult.getAllErrors()) {
@@ -21,4 +32,44 @@ public class Processing {
}
return arrayList;
}
+
+ /**
+ * 生成工号
+ *
+ * 用于生成工号,默认长度为10
+ *
+ * @since v1.0.0
+ * @param type 0:学生 1:教师 2:其他
+ * @return {@link String}
+ */
+ public static String createJobNumber(Short type) {
+ return createJobNumber(type, (short) 10);
+ }
+
+ /**
+ * 生成工号
+ *
+ * 用于生成工号
+ *
+ * @since v1.0.0
+ * @param type 0:学生 1:教师 2:其他
+ * @param size 工号长度
+ * @return {@link String}
+ */
+ public static String createJobNumber(Short type, Short size) {
+ StringBuilder stringBuilder = new StringBuilder();
+ if (type == 0) {
+ stringBuilder.append("STU");
+ } else if (type == 1) {
+ stringBuilder.append("TCH");
+ } else {
+ stringBuilder.append("OTH");
+ }
+ // 生成工号
+ Random random = new Random();
+ for (int i = 0; i < size-3; i++) {
+ stringBuilder.append(random.nextInt(10));
+ }
+ return stringBuilder.toString();
+ }
}
diff --git a/src/main/java/com/jsl/oa/utils/ResultUtil.java b/src/main/java/com/jsl/oa/utils/ResultUtil.java
index 44415c7..dff865c 100644
--- a/src/main/java/com/jsl/oa/utils/ResultUtil.java
+++ b/src/main/java/com/jsl/oa/utils/ResultUtil.java
@@ -6,10 +6,18 @@ public class ResultUtil {
return new BaseResponse("Success", 200, "操作成功", null);
}
+ public static BaseResponse success(String message) {
+ return new BaseResponse("Success", 200, message, null);
+ }
+
public static BaseResponse success(Object data) {
return new BaseResponse("Success", 200, "操作成功", data);
}
+ public static BaseResponse success(String message, Object data) {
+ return new BaseResponse("Success", 200, message, data);
+ }
+
public static BaseResponse error(ErrorCode errorCode) {
return new BaseResponse(errorCode.getOutput(), errorCode.getCode(), errorCode.getMessage());
}