From 7711f6c28a4143fd79d2d78366733174e04bb115 Mon Sep 17 00:00:00 2001 From: XiaoLFeng Date: Wed, 20 Dec 2023 23:58:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=B3=A8=E5=86=8C=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 从前端接受数据UserRegisterVO,进行数据校验,随后进行数据处理与载入数据库 --- .../java/com/jsl/oa/common/doData/UserDO.java | 33 ++++++++++ .../jsl/oa/common/voData/UserRegisterVO.java | 8 +-- .../jsl/oa/controllers/UserController.java | 31 ++++++++-- .../java/com/jsl/oa/mapper/UserMapper.java | 21 +++++++ .../java/com/jsl/oa/services/UserService.java | 6 ++ .../com/jsl/oa/services/UserServiceImpl.java | 60 +++++++++++++++++++ src/main/java/com/jsl/oa/utils/ErrorCode.java | 8 ++- .../java/com/jsl/oa/utils/Processing.java | 51 ++++++++++++++++ .../java/com/jsl/oa/utils/ResultUtil.java | 8 +++ 9 files changed, 215 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/jsl/oa/common/doData/UserDO.java create mode 100644 src/main/java/com/jsl/oa/mapper/UserMapper.java 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()); }