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;