网站首页 > 开源技术 正文
在之前的文章里我已经完成了,菜单管理、角色管理,今天我们来完成用户管理。
在之前做登录的时候我们已经创建过用户表,并且已经创建好了Entity、Mapper、Service。现在我们要完成完整的用户管理功能,还需要创建用户角色关联相关的实体对象等,并且还要实现相关的代码。
// 用户角色关联相关代码
@Data
@TableName("sys_user_role")
public class SysUserRoleEntity {
@TableId
private Long id;
private Long userId;
private Long roleId;
}
@Mapper
public interface SysUserRoleMapper extends BaseMapper<SysUserRoleEntity> {
}
public interface SysUserRoleService extends IService<SysUserRoleEntity> {
}
@Service("sysUserRoleService")
public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUserRoleEntity> implements SysUserRoleService {
}
当我们创建好这些以后就可以根据我们的业务需要来完善代码了。
我们首先创建用户管理控制器。并且需要在其中加入增删改查代码,需要注意的是,用户的创建是需要生成密码的,所以需要特别注意相关业务代码。用户列表返回是需要分页的,所以也需要特别地实现一下。完善后的Controller和Service代码如下:
@RestController
@RequestMapping("/system/user")
public class SysUserController {
@Autowired
private SysUserService userService;
@GetMapping("/list")
public SaResult list(@RequestParam Map<String,Object>params){
PageResult page = userService.selectPage(params);
return SaResult.data(page);
}
@PostMapping("save")
public SaResult save(@RequestBody SysUserEntity userEntity){
if(StrUtil.isEmpty(userEntity.getUsername())){
return SaResult.error("用户名不能为空");
}
if(StrUtil.isEmpty(userEntity.getName())){
return SaResult.error("姓名不能为空");
}
if(!userEntity.getPassword().equals(userEntity.getPassword2())){
return SaResult.error("密码不一致");
}
if(userEntity.getPassword().length()<6){
return SaResult.error("密码太短");
}
if(userEntity.getGroup().size() <= 0){
return SaResult.error("请设置角色");
}
userService.createUser(userEntity);
return SaResult.ok();
}
@PostMapping("update")
public SaResult update(@RequestBody SysUserEntity userEntity){
if(StrUtil.isEmpty(userEntity.getUsername())){
return SaResult.error("用户名不能为空");
}
if(StrUtil.isEmpty(userEntity.getName())){
return SaResult.error("姓名不能为空");
}
if(!userEntity.getPassword().equals(userEntity.getPassword2())){
return SaResult.error("密码不一致");
}
if(userEntity.getPassword().length()<6){
return SaResult.error("密码太短");
}
if(userEntity.getGroup().size() <= 0){
return SaResult.error("请设置角色");
}
userService.updateUser(userEntity);
return SaResult.ok();
}
@PostMapping("delete")
public SaResult delete(@RequestBody Long[] ids){
userService.removeByIds(Arrays.asList(ids));
return SaResult.ok();
}
}
@Service("sysUserService")
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity> implements SysUserService {
@Autowired
private SysUserRoleService userRoleService;
@Autowired
private SysRoleService roleService;
@Override
public PageResult selectPage(Map<String, Object> params) {
System.out.println(params);
List<Long> userIds = new ArrayList<>();
if (StrUtil.isNotEmpty((String) params.get("groupId"))) {
userIds = userRoleService.list(new LambdaQueryWrapper<SysUserRoleEntity>()
.eq(SysUserRoleEntity::getRoleId, params.get("groupId"))
).stream().map(SysUserRoleEntity::getUserId).collect(Collectors.toList());
}
IPage<SysUserEntity> page = this.page(new PageParams<>(params), new LambdaQueryWrapper<SysUserEntity>()
.in(!userIds.isEmpty(), SysUserEntity::getId, userIds)
.select(SysUserEntity::getId,SysUserEntity::getUsername,SysUserEntity::getName,SysUserEntity::getCreateTime)
);
page.getRecords().forEach(item -> {
List<Long> roleIds = userRoleService.list(new LambdaQueryWrapper<SysUserRoleEntity>()
.eq(SysUserRoleEntity::getUserId, item.getId())
).stream().map(SysUserRoleEntity::getRoleId).collect(Collectors.toList());
List<SysRoleEntity> roleList = roleService.list(new LambdaQueryWrapper<SysRoleEntity>()
.in(roleIds.size()>0,SysRoleEntity::getId,roleIds)
);
item.setGroup(roleIds);
});
return new PageResult(page);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateUser(SysUserEntity userEntity) {
userRoleService.remove(new LambdaQueryWrapper<SysUserRoleEntity>()
.eq(SysUserRoleEntity::getUserId, userEntity.getId())
);
updateById(userEntity);
}
@Override
public SysUserEntity getUserByUserName(String username) {
return this.baseMapper.selectOne(new LambdaQueryWrapper<SysUserEntity>()
.eq(SysUserEntity::getUsername, username)
);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void createUser(SysUserEntity userEntity) {
userEntity.setSalt(RandomUtil.randomString(6));
userEntity.setPassword(SaSecureUtil.md5BySalt(userEntity.getPassword2(), userEntity.getSalt()));
save(userEntity);
List<SysUserRoleEntity> list = userEntity.getGroup().stream().map(item -> {
SysUserRoleEntity userRoleEntity = new SysUserRoleEntity();
userRoleEntity.setUserId(userEntity.getId());
userRoleEntity.setRoleId(item);
return userRoleEntity;
}).collect(Collectors.toList());
userRoleService.saveBatch(list);
}
}
当然以上这些代码还存在很多问题,比如速度慢,比如不够严谨。这些问题在以后业务逐渐完善的时候再完善,不然写了也依然还是需要修改的。
最后在前端新增后台开发好的接口
user: {
list: {
url: `${config.API_URL}/system/user/list`,
name: "获取用户列表",
get: async function(params){
return await http.get(this.url, params);
}
},
save: {
url: `${config.API_URL}/system/user/save`,
name: "保存用户",
post: async function(params){
return await http.post(this.url,params);
}
},
update: {
url: `${config.API_URL}/system/user/update`,
name: "修改用户",
post: async function(params){
return await http.post(this.url,params);
}
},
delete: {
url: `${config.API_URL}/system/user/delete`,
name: "删除用户",
post: async function(params){
return await http.post(this.url,params);
}
}
}
然后在user目录下的页面中正确的引入就好了。
猜你喜欢
- 2024-09-08 Try catch 太烦人了?只需一步一次搞定 Exception
- 2024-09-08 vue多实体参数怎么传?(vue如何传参)
- 2024-09-08 Mybatis-Plus常用的查询方法——看这一篇就够了!「图文例子」
- 2024-09-08 你这代码写得真丑,满屏的try-catch,全局异常处理不会吗?下
- 2024-09-08 mybatis-plus 团队新作 mybatis-mate 轻松搞定企业级数据处理
- 2024-09-08 「Spring Cloud」新闻头条微服务项目:自媒体文章管理
- 2024-09-08 最快MyBatis-Plus入门使用(mybatis-plus-plus)
- 2024-09-08 再也不用写CURD代码了,Mybatis-plus帮你全搞定
- 2024-09-08 MyBatis-Plus快速入门(一)(mybatis-plus-plus)
- 2024-09-08 Mybatis-Plus 详解(二)(mybatisplus in)
你 发表评论:
欢迎- 07-10公司网站建站选择:人工建站和源码建站分析
- 07-10多用途游戏娱乐新闻网站HTML5模板
- 07-10站长教你搭建属于自己的网站(搭建网站的步骤)
- 07-10php宝塔搭建部署实战响应式塑料封条制品企业网站模板源码
- 07-10自适应响应式汽车配件类网站源码 html5高端大气汽车网站织梦模板
- 07-10网站标签怎么设置?(网站标签怎么设置比较好)
- 07-10PageAdmin企业网站制作中踩过的坑
- 07-10豆包给我输出的html在线象棋源码(有点简单)
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)