注册接口 #42

Merged
hnu202326010122 merged 1 commits from jingyou_branch into develop 1 month ago

@ -0,0 +1,35 @@
package com.campus.water.controller;
import com.campus.water.entity.dto.request.RegisterRequest;
import com.campus.water.service.RegisterService;
import com.campus.water.util.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import jakarta.validation.Valid;
/**
*
*/
@RestController
@RequestMapping("/api/common")
public class RegisterController {
@Autowired
private RegisterService registerService;
/**
*
* @param registerRequest
* @return
*/
@PostMapping("/register")
public ResponseEntity<ResultVO<Boolean>> register(@Valid @RequestBody RegisterRequest registerRequest) {
boolean success = registerService.register(registerRequest);
return ResponseEntity.ok(ResultVO.success(success, "注册成功"));
}
}

@ -0,0 +1,29 @@
package com.campus.water.entity.dto.request;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
@Data
public class RegisterRequest {
@NotBlank(message = "用户名不能为空")
private String username;
@NotBlank(message = "密码不能为空")
@Pattern(regexp = "^[a-zA-Z0-9]{6,16}$", message = "密码必须为6-16位字母或数字")
private String password;
@NotBlank(message = "用户类型不能为空")
private String userType; // admin/user/repairer
// 用户特有字段
private String studentId; // 学生ID仅user类型需要
private String studentName; // 学生姓名仅user类型需要
// 管理员特有字段
private String adminId; // 管理员ID仅admin类型需要
private String adminRole; // 管理员角色仅admin类型需要SUPER_ADMIN/NORMAL_ADMIN
// 维修人员特有字段
private String repairmanId; // 维修人员ID仅repairer类型需要
}

@ -38,4 +38,8 @@ public interface AdminRepository extends JpaRepository<AdminPO, String> {
// 检查手机号是否存在
boolean existsByPhone(String phone);
// 检查用户名是否存在
boolean existsByUsername(String username);
}

@ -38,6 +38,9 @@ public interface UserRepository extends JpaRepository<UserPO, String> {
// 检查邮箱是否已存在
boolean existsByEmail(String email);
// 检查用户名是否存在
boolean existsByUsername(String username);
// ========== 新增:登录核心方法(必须) ==========
Optional<UserPO> findByUsername(String username);
}

@ -0,0 +1,103 @@
package com.campus.water.service;
import com.campus.water.entity.dto.request.RegisterRequest;
import com.campus.water.entity.po.AdminPO;
import com.campus.water.entity.po.RepairerAuthPO;
import com.campus.water.entity.po.UserPO;
import com.campus.water.mapper.AdminRepository;
import com.campus.water.mapper.RepairerAuthRepository;
import com.campus.water.mapper.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import java.nio.charset.StandardCharsets;
@Service
public class RegisterService {
@Autowired
private AdminRepository adminRepository;
@Autowired
private UserRepository userRepository;
@Autowired
private RepairerAuthRepository repairerAuthRepository;
public boolean register(RegisterRequest request) {
String username = request.getUsername();
// 密码MD5加密与登录逻辑保持一致
String encryptedPwd = DigestUtils.md5DigestAsHex(
request.getPassword().getBytes(StandardCharsets.UTF_8)
);
String userType = request.getUserType();
switch (userType) {
case "admin":
handleAdminRegister(username, encryptedPwd, request);
break;
case "user":
handleUserRegister(username, encryptedPwd, request);
break;
case "repairer":
handleRepairerRegister(username, encryptedPwd, request);
break;
default:
throw new RuntimeException("无效的用户类型:" + userType);
}
return true;
}
private void handleAdminRegister(String username, String password, RegisterRequest request) {
// 检查用户名是否已存在
if (adminRepository.existsByUsername(username)) {
throw new RuntimeException("管理员用户名已存在");
}
AdminPO admin = new AdminPO();
admin.setUsername(username);
admin.setPassword(password);
admin.setAdminId(request.getAdminId());
admin.setRole(AdminPO.AdminRole.valueOf(request.getAdminRole()));
admin.setStatus(AdminPO.AdminStatus.ACTIVE);
adminRepository.save(admin);
}
private void handleUserRegister(String username, String password, RegisterRequest request) {
if (userRepository.existsByUsername(username)) {
throw new RuntimeException("用户名已存在");
}
if (userRepository.existsByStudentId(request.getStudentId())) {
throw new RuntimeException("学号已被注册");
}
UserPO user = new UserPO();
user.setUsername(username);
user.setPassword(password);
user.setStudentId(request.getStudentId());
user.setUsername(request.getStudentName());
user.setStatus(UserPO.UserStatus.ACTIVE);
// 可根据需要补充其他字段默认值
userRepository.save(user);
}
private void handleRepairerRegister(String username, String password, RegisterRequest request) {
if (repairerAuthRepository.existsByUsername(username)) {
throw new RuntimeException("维修人员用户名已存在");
}
if (repairerAuthRepository.existsByRepairmanId(request.getRepairmanId())) {
throw new RuntimeException("维修人员ID已被注册");
}
RepairerAuthPO repairer = new RepairerAuthPO();
repairer.setUsername(username);
repairer.setPassword(password);
repairer.setRepairmanId(request.getRepairmanId());
repairer.setAccountStatus(RepairerAuthPO.AccountStatus.active);
repairerAuthRepository.save(repairer);
}
}
Loading…
Cancel
Save