From 0d1127f25e4534f3fca4a9c08181a70d4291766c Mon Sep 17 00:00:00 2001 From: MichaelWin Date: Mon, 3 Nov 2025 10:40:53 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=96=B0=E5=A2=9E=E3=80=91=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biz/user/BizUserBatchDeleteRequest.java | 12 + .../app/dto/biz/user/BizUserIdRequest.java | 8 + .../dto/biz/user/BizUserStatusRequest.java | 11 + .../ResetPasswordRequest.java} | 4 +- .../modules/admin/biz/BizUserController.java | 62 +++- .../com/corewing/app/service/UserService.java | 37 +- .../app/service/impl/UserServiceImpl.java | 69 +++- .../templates/admin/biz/user/index.html | 341 ++++++++++-------- 8 files changed, 379 insertions(+), 165 deletions(-) create mode 100644 src/main/java/com/corewing/app/dto/biz/user/BizUserBatchDeleteRequest.java create mode 100644 src/main/java/com/corewing/app/dto/biz/user/BizUserIdRequest.java create mode 100644 src/main/java/com/corewing/app/dto/biz/user/BizUserStatusRequest.java rename src/main/java/com/corewing/app/dto/biz/{ResetPassword.java => user/ResetPasswordRequest.java} (67%) diff --git a/src/main/java/com/corewing/app/dto/biz/user/BizUserBatchDeleteRequest.java b/src/main/java/com/corewing/app/dto/biz/user/BizUserBatchDeleteRequest.java new file mode 100644 index 0000000..e7fbc00 --- /dev/null +++ b/src/main/java/com/corewing/app/dto/biz/user/BizUserBatchDeleteRequest.java @@ -0,0 +1,12 @@ +package com.corewing.app.dto.biz.user; + +import lombok.Data; + +import java.util.List; + +@Data +public class BizUserBatchDeleteRequest { + + private List ids; + +} diff --git a/src/main/java/com/corewing/app/dto/biz/user/BizUserIdRequest.java b/src/main/java/com/corewing/app/dto/biz/user/BizUserIdRequest.java new file mode 100644 index 0000000..7d07d70 --- /dev/null +++ b/src/main/java/com/corewing/app/dto/biz/user/BizUserIdRequest.java @@ -0,0 +1,8 @@ +package com.corewing.app.dto.biz.user; + +import lombok.Data; + +@Data +public class BizUserIdRequest { + private long id; +} diff --git a/src/main/java/com/corewing/app/dto/biz/user/BizUserStatusRequest.java b/src/main/java/com/corewing/app/dto/biz/user/BizUserStatusRequest.java new file mode 100644 index 0000000..f610ea4 --- /dev/null +++ b/src/main/java/com/corewing/app/dto/biz/user/BizUserStatusRequest.java @@ -0,0 +1,11 @@ +package com.corewing.app.dto.biz.user; + +import lombok.Data; + +import java.util.List; + +@Data +public class BizUserStatusRequest { + private List ids; + private Integer status; +} diff --git a/src/main/java/com/corewing/app/dto/biz/ResetPassword.java b/src/main/java/com/corewing/app/dto/biz/user/ResetPasswordRequest.java similarity index 67% rename from src/main/java/com/corewing/app/dto/biz/ResetPassword.java rename to src/main/java/com/corewing/app/dto/biz/user/ResetPasswordRequest.java index ac4dbaf..61dfb32 100644 --- a/src/main/java/com/corewing/app/dto/biz/ResetPassword.java +++ b/src/main/java/com/corewing/app/dto/biz/user/ResetPasswordRequest.java @@ -1,9 +1,9 @@ -package com.corewing.app.dto.biz; +package com.corewing.app.dto.biz.user; import lombok.Data; @Data -public class ResetPassword { +public class ResetPasswordRequest { /** * 用户id diff --git a/src/main/java/com/corewing/app/modules/admin/biz/BizUserController.java b/src/main/java/com/corewing/app/modules/admin/biz/BizUserController.java index b416e3a..874c6c6 100644 --- a/src/main/java/com/corewing/app/modules/admin/biz/BizUserController.java +++ b/src/main/java/com/corewing/app/modules/admin/biz/BizUserController.java @@ -2,15 +2,17 @@ package com.corewing.app.modules.admin.biz; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.corewing.app.common.Result; -import com.corewing.app.dto.biz.ResetPassword; -import com.corewing.app.entity.SysUser; +import com.corewing.app.dto.biz.user.BizUserBatchDeleteRequest; +import com.corewing.app.dto.biz.user.BizUserIdRequest; +import com.corewing.app.dto.biz.user.BizUserStatusRequest; +import com.corewing.app.dto.biz.user.ResetPasswordRequest; import com.corewing.app.entity.User; import com.corewing.app.service.UserService; -import io.lettuce.core.ConnectionEvents; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.List; @Controller @RequestMapping("/biz/user") @@ -42,15 +44,63 @@ public class BizUserController { /** * 修改密码 - * @param resetPassword 修改密码DTO + * @param resetPasswordRequest 修改密码DTO * @return 成功 or 失败 */ @PutMapping("/resetPassword") @ResponseBody - public Result resetPassword(@RequestBody ResetPassword resetPassword) { - boolean flag = userService.resetPassword(resetPassword); + public Result resetPassword(@RequestBody ResetPasswordRequest resetPasswordRequest) { + boolean flag = userService.resetPassword(resetPasswordRequest); return Result.isBoolAsMsg(flag, "修改密码成功"); } + /** + * 新增用户 + * @param user + * @return + */ + @PostMapping("/save") + @ResponseBody + public Result save(@RequestBody User user) { + return Result.isBool(userService.save(user)); + } + + /** + * 修改用户 + * @param user + * @return + */ + @PostMapping("/update") + @ResponseBody + public Result update(@RequestBody User user) { + return Result.isBool(userService.update(user)); + } + + /** + * 单删用户 + * @param bizUserIdRequest + * @return + */ + @PostMapping("/delete") + @ResponseBody + public Result delete(@RequestBody BizUserIdRequest bizUserIdRequest) { + return Result.isBool(userService.removeById(bizUserIdRequest.getId())); + } + + /** + * 批量删除用户 + * @return + */ + @PostMapping("/batchDelete") + @ResponseBody + public Result batchDelete(@RequestBody BizUserBatchDeleteRequest bizUserBatchDeleteRequest) { + return Result.isBool(userService.removeByIds(bizUserBatchDeleteRequest.getIds())); + } + + @PostMapping("/batchStatus") + @ResponseBody + public Result batchStatus(@RequestBody BizUserStatusRequest bizUserStatusRequests) { + return Result.isBool(userService.batchStatus(bizUserStatusRequests)); + } } diff --git a/src/main/java/com/corewing/app/service/UserService.java b/src/main/java/com/corewing/app/service/UserService.java index 2c411f7..f690cf5 100644 --- a/src/main/java/com/corewing/app/service/UserService.java +++ b/src/main/java/com/corewing/app/service/UserService.java @@ -2,17 +2,39 @@ package com.corewing.app.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.corewing.app.dto.biz.ResetPassword; -import com.corewing.app.entity.SysUser; +import com.corewing.app.dto.biz.user.BizUserIdRequest; +import com.corewing.app.dto.biz.user.BizUserStatusRequest; +import com.corewing.app.dto.biz.user.ResetPasswordRequest; import com.corewing.app.entity.User; +import java.util.List; + /** * 应用用户 Service 接口 */ public interface UserService extends IService { + /** + * 获取用户分页数据 + * @param user + * @return + */ Page page(User user); + /** + * 新增用户数据 + * @param user + * @return + */ + boolean save(User user); + + /** + * 更新用户数据 + * @param user + * @return + */ + boolean update(User user); + /** * 根据用户名查询用户 * @@ -82,8 +104,15 @@ public interface UserService extends IService { /** * 修改密码 - * @param resetPassword + * @param resetPasswordRequest * @return */ - boolean resetPassword(ResetPassword resetPassword); + boolean resetPassword(ResetPasswordRequest resetPasswordRequest); + + /** + * 批量修改状态 + * @param bizUserStatusRequest + * @return + */ + boolean batchStatus(BizUserStatusRequest bizUserStatusRequest); } diff --git a/src/main/java/com/corewing/app/service/impl/UserServiceImpl.java b/src/main/java/com/corewing/app/service/impl/UserServiceImpl.java index 8948999..ca0ff7d 100644 --- a/src/main/java/com/corewing/app/service/impl/UserServiceImpl.java +++ b/src/main/java/com/corewing/app/service/impl/UserServiceImpl.java @@ -2,10 +2,14 @@ package com.corewing.app.service.impl; import cn.dev33.satoken.stp.StpUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.corewing.app.common.page.PageContext; -import com.corewing.app.dto.biz.ResetPassword; +import com.corewing.app.dto.biz.user.BizUserIdRequest; +import com.corewing.app.dto.biz.user.BizUserStatusRequest; +import com.corewing.app.dto.biz.user.ResetPasswordRequest; import com.corewing.app.entity.User; import com.corewing.app.mapper.UserMapper; import com.corewing.app.service.UserService; @@ -13,10 +17,13 @@ import com.corewing.app.service.VerifyCodeService; import com.corewing.app.util.I18nUtil; import com.corewing.app.util.Ip2RegionUtil; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.DigestUtils; import org.springframework.util.StringUtils; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; /** * 应用用户 Service 实现类 @@ -44,6 +51,48 @@ public class UserServiceImpl extends ServiceImpl implements Us return page(page, queryWrapper); } + @Override + public boolean save(User user) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(User::getUsername, user.getUsername()); + if(count(queryWrapper) > 0) { + throw new RuntimeException(I18nUtil.getMessage(I18nUtil.getMessage("error.username.exists"))); + } + + + return super.save(user); + } + + @Override + public boolean update(User user) { + + // 校验用户名 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(User::getUsername, user.getUsername()); + queryWrapper.ne(User::getId, user.getId()); + if(count(queryWrapper) > 0) { + throw new RuntimeException(I18nUtil.getMessage(I18nUtil.getMessage("error.username.exists"))); + } + + // 校验手机号码 + LambdaQueryWrapper checkPhoneWrapper = new LambdaQueryWrapper<>(); + checkPhoneWrapper.eq(User::getUsername, user.getUsername()); + checkPhoneWrapper.ne(User::getId, user.getId()); + if(count(checkPhoneWrapper) > 0) { + throw new RuntimeException(I18nUtil.getMessage(I18nUtil.getMessage("error.phone.exists"))); + } + + // 校验邮箱 + LambdaQueryWrapper checkEmailWrapper = new LambdaQueryWrapper<>(); + checkEmailWrapper.eq(User::getUsername, user.getUsername()); + checkEmailWrapper.ne(User::getId, user.getId()); + if(count(checkEmailWrapper) > 0) { + throw new RuntimeException(I18nUtil.getMessage(I18nUtil.getMessage("error.email.exists"))); + } + + return updateById(user); + } + @Override public User getByUsername(String username) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); @@ -184,14 +233,26 @@ public class UserServiceImpl extends ServiceImpl implements Us } @Override - public boolean resetPassword(ResetPassword resetPassword) { - User user = getById(resetPassword.getUserId()); + public boolean resetPassword(ResetPasswordRequest resetPasswordRequest) { + User user = getById(resetPasswordRequest.getUserId()); if(user == null) { throw new RuntimeException(I18nUtil.getMessage("error.user.not.found")); } // 更新新密码 - String newPasswordMd5 = DigestUtils.md5DigestAsHex(resetPassword.getPassword().getBytes(StandardCharsets.UTF_8)); + String newPasswordMd5 = DigestUtils.md5DigestAsHex(resetPasswordRequest.getPassword().getBytes(StandardCharsets.UTF_8)); user.setPassword(newPasswordMd5); return updateById(user); } + + @Transactional(rollbackFor = Exception.class) + @Override + public boolean batchStatus(BizUserStatusRequest bizUserStatusRequest) { + bizUserStatusRequest.getIds().forEach(id -> { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(User::getId, id); + wrapper.set(User::getStatus, bizUserStatusRequest.getStatus()); + this.update(wrapper); + }); + return true; + } } diff --git a/src/main/resources/templates/admin/biz/user/index.html b/src/main/resources/templates/admin/biz/user/index.html index 2c99239..e9e6960 100644 --- a/src/main/resources/templates/admin/biz/user/index.html +++ b/src/main/resources/templates/admin/biz/user/index.html @@ -3,7 +3,7 @@ - 用户管理系统 + 用户管理 @@ -14,7 +14,7 @@
-

用户管理

+

用户管理

-
+
@@ -99,9 +99,10 @@ @change="toggleSelectAll()" > - ID 昵称 用户名 + 号码 + 邮箱 状态 创建时间 操作 @@ -143,9 +144,10 @@ @change="toggleSelectItem(item.id)" > - {{ item.id }} {{ item.nickName }} {{ item.username }} + {{ item.telephone }} + {{ item.email }} {{ item.status === 1 ? '启用' : '禁用' }} @@ -212,7 +214,8 @@
  • 上一页
  • -
  • +
  • {{ page }}
  • @@ -240,27 +243,34 @@