From 97264670fea0a32db83ea6f570a27b913939c574 Mon Sep 17 00:00:00 2001 From: wanglei <3085637232@qq.com> Date: Tue, 30 Dec 2025 15:04:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=B7=BB=E5=8A=A0=E5=8C=BA?= =?UTF-8?q?=E5=9F=9F=E7=AE=A1=E7=90=86=E5=91=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/campus/water/entity/Admin.java | 2 +- .../entity/dto/request/RegisterRequest.java | 2 ++ .../campus/water/service/AdminService.java | 9 ++++----- .../campus/water/service/RegisterService.java | 20 +++++++++++++++---- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/campus/water/entity/Admin.java b/src/main/java/com/campus/water/entity/Admin.java index 88ef33c..842922f 100644 --- a/src/main/java/com/campus/water/entity/Admin.java +++ b/src/main/java/com/campus/water/entity/Admin.java @@ -26,7 +26,7 @@ public class Admin { private String phone; // 新增:管理员负责的区域ID(区域管理员专用) - @Column(name = "area_id", length = 36) + @Column(name = "area_id", length = 36, nullable = true) private String areaId; // 恢复三个角色枚举 diff --git a/src/main/java/com/campus/water/entity/dto/request/RegisterRequest.java b/src/main/java/com/campus/water/entity/dto/request/RegisterRequest.java index 5231f41..3d8ce19 100644 --- a/src/main/java/com/campus/water/entity/dto/request/RegisterRequest.java +++ b/src/main/java/com/campus/water/entity/dto/request/RegisterRequest.java @@ -40,4 +40,6 @@ public class RegisterRequest { // 用户(学生)特有字段 private String studentId; private String studentName; + + } \ No newline at end of file diff --git a/src/main/java/com/campus/water/service/AdminService.java b/src/main/java/com/campus/water/service/AdminService.java index 5a481f2..39946f3 100644 --- a/src/main/java/com/campus/water/service/AdminService.java +++ b/src/main/java/com/campus/water/service/AdminService.java @@ -72,12 +72,11 @@ public class AdminService { // 区域管理员必须关联区域 if (admin.getRole() == Admin.AdminRole.ROLE_AREA_ADMIN) { if (admin.getAreaId() == null || admin.getAreaId().trim().isEmpty()) { - throw new RuntimeException("区域管理员必须关联具体区域"); - } - // 校验关联的区域是否存在 - if (!areaRepository.existsById(admin.getAreaId())) { - throw new RuntimeException("关联的区域不存在:" + admin.getAreaId()); + if (!areaRepository.existsById(admin.getAreaId().trim())) { + throw new RuntimeException("关联的区域不存在:" + admin.getAreaId().trim()); + } } + } else { // 非区域管理员清空区域ID admin.setAreaId(null); diff --git a/src/main/java/com/campus/water/service/RegisterService.java b/src/main/java/com/campus/water/service/RegisterService.java index 14bbe12..f571b41 100644 --- a/src/main/java/com/campus/water/service/RegisterService.java +++ b/src/main/java/com/campus/water/service/RegisterService.java @@ -5,10 +5,7 @@ import com.campus.water.entity.RepairerAuth; import com.campus.water.entity.Repairman; import com.campus.water.entity.User; import com.campus.water.entity.dto.request.RegisterRequest; -import com.campus.water.mapper.AdminRepository; -import com.campus.water.mapper.RepairerAuthRepository; -import com.campus.water.mapper.RepairmanRepository; -import com.campus.water.mapper.UserRepository; +import com.campus.water.mapper.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @@ -21,6 +18,9 @@ public class RegisterService { @Autowired private AdminRepository adminRepository; + @Autowired + private AreaRepository areaRepository; + @Autowired private UserRepository userRepository; @@ -76,6 +76,18 @@ public class RegisterService { admin.setCreatedTime(LocalDateTime.now()); admin.setUpdatedTime(LocalDateTime.now()); + // 核心修改1:添加区域ID赋值(从请求中获取,允许为null/空,实现选填) + admin.setAreaId(request.getAreaId()); + + // 核心修改2:区域管理员若填写了areaId,则校验区域是否存在;不填则不强制(实现选填) + Admin.AdminRole adminRole = admin.getRole(); + if (adminRole == Admin.AdminRole.ROLE_AREA_ADMIN && request.getAreaId() != null && !request.getAreaId().trim().isEmpty()) { + // 此处需要注入AreaRepository(与AdminService保持一致),先补充注入 + if (!areaRepository.existsById(request.getAreaId().trim())) { + throw new RuntimeException("关联的区域不存在:" + request.getAreaId().trim()); + } + } + adminRepository.save(admin); } -- 2.34.1