From 54ee6525840f8e6895cfc154da7efb939f7614aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Sat, 11 Jul 2026 19:14:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(auth):=20=E5=AE=9E=E7=8E=B0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=B3=A8=E5=86=8C=E5=9C=B0=E5=9D=80=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E5=8F=8A=E5=AE=A1=E6=A0=B8=E7=8A=B6=E6=80=81=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增提交注册地址接口,支持录入及提交用户注册地址信息并标记待审核状态 - 新增获取当前用户审核状态接口,返回审核结果和驳回原因 - 用户实体新增审核状态和驳回原因字段,用于注册审核流程 - 管理端新增用户审核接口,支持通过或拒绝用户注册及填写驳回原因 - 下单流程中添加审核状态校验,未通过审核用户禁止下单 - 新增用户注册时审核状态字段,支持前端控制是否走审核流程 - 完善数据库表结构,新增审核状态及驳回原因字段,支持注册审核功能 --- sql/add_user_audit_status.sql | 7 ++++ .../system/controller/MainController.java | 42 +++++++++++++++++++ .../system/controller/OrderController.java | 19 +++++++++ .../system/controller/UserController.java | 28 +++++++++++++ .../system/controller/WxLoginController.java | 2 + .../gxwebsoft/common/system/entity/User.java | 6 +++ .../common/system/param/UserParam.java | 3 ++ 7 files changed, 107 insertions(+) create mode 100644 sql/add_user_audit_status.sql diff --git a/sql/add_user_audit_status.sql b/sql/add_user_audit_status.sql new file mode 100644 index 0000000..86ebec5 --- /dev/null +++ b/sql/add_user_audit_status.sql @@ -0,0 +1,7 @@ +-- 注册审核功能:用户表新增审核状态字段 +-- 执行前请备份数据库 +-- 执行时间: 2026-07-11 + +ALTER TABLE sys_user + ADD COLUMN audit_status INT DEFAULT NULL COMMENT '审核状态: 0待审核, 1已通过, 2已拒绝', + ADD COLUMN reject_reason VARCHAR(500) DEFAULT NULL COMMENT '审核驳回原因'; diff --git a/src/main/java/com/gxwebsoft/common/system/controller/MainController.java b/src/main/java/com/gxwebsoft/common/system/controller/MainController.java index be1f8c3..eedeb56 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/MainController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/MainController.java @@ -352,6 +352,48 @@ public class MainController extends BaseController { return fail("保存失败", null); } + @PreAuthorize("hasAuthority('sys:auth:user')") + @OperationLog + @Operation(summary = "提交注册地址(注册审核)") + @PostMapping("/auth/submitAddress") + public ApiResult submitAddress(@RequestBody User param) { + Integer userId = getLoginUserId(); + if (userId == null) { + return fail("用户未登录", null); + } + if (StrUtil.hasBlank(param.getProvince(), param.getCity(), param.getRegion(), param.getAddress())) { + return fail("请填写完整的地址信息", null); + } + User update = new User(); + update.setUserId(userId); + update.setCountry("中国"); + update.setProvince(param.getProvince()); + update.setCity(param.getCity()); + update.setRegion(param.getRegion()); + update.setAddress(param.getAddress()); + update.setAuditStatus(0); // 提交地址后标记为待审核 + update.setRejectReason(null); // 清除之前的驳回原因 + if (userService.updateById(update)) { + return success("提交成功", userService.getByIdRel(userId)); + } + return fail("提交失败", null); + } + + @Operation(summary = "查询当前用户审核状态") + @GetMapping("/auth/auditStatus") + public ApiResult> getAuditStatus() { + Integer userId = getLoginUserId(); + if (userId == null) { + return fail("未登录", null); + } + User user = userService.getByIdRel(userId); + java.util.Map result = new java.util.HashMap<>(); + result.put("auditStatus", user.getAuditStatus()); + result.put("rejectReason", user.getRejectReason()); + result.put("hasAddress", StrUtil.isNotBlank(user.getProvince()) && StrUtil.isNotBlank(user.getAddress())); + return success(result); + } + @PreAuthorize("hasAuthority('sys:auth:password')") @OperationLog @Operation(summary = "修改自己密码") diff --git a/src/main/java/com/gxwebsoft/common/system/controller/OrderController.java b/src/main/java/com/gxwebsoft/common/system/controller/OrderController.java index 3ea9fd9..6e3a982 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/OrderController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/OrderController.java @@ -19,6 +19,7 @@ import com.gxwebsoft.common.system.param.OrderParam; import com.gxwebsoft.common.system.service.MenuService; import com.gxwebsoft.common.system.service.OrderGoodsService; import com.gxwebsoft.common.system.service.OrderService; +import com.gxwebsoft.common.system.service.UserService; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import org.springframework.security.access.prepost.PreAuthorize; @@ -47,6 +48,18 @@ public class OrderController extends BaseController { private MenuService menuService; @Resource private MenuMapper menuMapper; + @Resource + private UserService userService; + + /** 检查用户审核状态:auditStatus==null(老用户)或1(已通过)返回true,否则false */ + private boolean checkUserAuditStatus(User loginUser) { + if (loginUser == null) return false; + User user = userService.getByIdRel(loginUser.getUserId()); + if (user == null) return false; + Integer auditStatus = user.getAuditStatus(); + // auditStatus == null 表示老用户(功能上线前注册的),默认放行 + return auditStatus == null || auditStatus == 1; + } @Operation(summary = "分页查询订单") @GetMapping("/page") @@ -94,6 +107,9 @@ public class OrderController extends BaseController { if(loginUser == null){ return fail("请先登录"); } + if (!checkUserAuditStatus(loginUser)) { + return fail("您的账号尚未通过审核,暂时无法下单"); + } if (ObjectUtil.isEmpty(order.getType())) { return fail("订单类型不能为空"); } @@ -184,6 +200,9 @@ public class OrderController extends BaseController { // 记录当前登录用户id User loginUser = getLoginUser(); if (loginUser != null) { + if (!checkUserAuditStatus(loginUser)) { + return fail("您的账号尚未通过审核,暂时无法下单"); + } // 封装订单数据 final Order order = new Order(); order.setType(cart.getType()); diff --git a/src/main/java/com/gxwebsoft/common/system/controller/UserController.java b/src/main/java/com/gxwebsoft/common/system/controller/UserController.java index bc6dc80..5db1033 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/UserController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/UserController.java @@ -304,6 +304,34 @@ public class UserController extends BaseController { return fail("修改失败"); } + @PreAuthorize("hasAuthority('sys:user:update')") + @OperationLog + @Operation(summary = "审核用户注册(通过/拒绝)") + @PutMapping("/audit") + public ApiResult auditUser(@RequestBody User user) { + if (user.getUserId() == null || user.getAuditStatus() == null + || !Arrays.asList(0, 1, 2).contains(user.getAuditStatus())) { + return fail("参数不正确"); + } + User update = new User(); + update.setUserId(user.getUserId()); + update.setAuditStatus(user.getAuditStatus()); + // 拒绝时必须填写驳回原因 + if (user.getAuditStatus() == 2) { + if (StrUtil.isBlank(user.getRejectReason())) { + return fail("驳回时请填写原因"); + } + update.setRejectReason(user.getRejectReason()); + } else { + // 通过或重新设为待审核时清除驳回原因 + update.setRejectReason(null); + } + if (userService.updateById(update)) { + return success(user.getAuditStatus() == 1 ? "审核通过" : "已拒绝"); + } + return fail("操作失败"); + } + @PreAuthorize("hasAuthority('sys:user:update')") @OperationLog @Operation(summary = "修改推荐状态") diff --git a/src/main/java/com/gxwebsoft/common/system/controller/WxLoginController.java b/src/main/java/com/gxwebsoft/common/system/controller/WxLoginController.java index e3b474e..2461193 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/WxLoginController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/WxLoginController.java @@ -517,6 +517,8 @@ public class WxLoginController extends BaseController { User addUser = new User(); // 注册用户 addUser.setStatus(0); + // 默认审核通过;前端传 auditStatus=0 时走审核流程,传其他值则按前端值 + addUser.setAuditStatus(userParam.getAuditStatus() != null ? userParam.getAuditStatus() : 1); addUser.setUsername(createUsername("wx_")); addUser.setNickname("微信用户"); addUser.setPlatform(MP_WEIXIN); diff --git a/src/main/java/com/gxwebsoft/common/system/entity/User.java b/src/main/java/com/gxwebsoft/common/system/entity/User.java index c3cec76..d70f6bf 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/User.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/User.java @@ -222,6 +222,12 @@ public class User implements UserDetails { @Schema(description = "专家角色") private Integer expertType; + @Schema(description = "审核状态: 0待审核, 1已通过, 2已拒绝") + private Integer auditStatus; + + @Schema(description = "审核驳回原因") + private String rejectReason; + @Schema(description = "状态, 0正常, 1冻结") private Integer status; diff --git a/src/main/java/com/gxwebsoft/common/system/param/UserParam.java b/src/main/java/com/gxwebsoft/common/system/param/UserParam.java index ff39a54..42ed56d 100644 --- a/src/main/java/com/gxwebsoft/common/system/param/UserParam.java +++ b/src/main/java/com/gxwebsoft/common/system/param/UserParam.java @@ -110,6 +110,9 @@ public class UserParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer status; + @Schema(description = "审核状态: 0待审核, 1已通过, 2已拒绝(前端传值决定注册是否走审核流程)") + private Integer auditStatus; + @Schema(description = "是否删除, 0否, 1是") @TableLogic private Integer deleted;