编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

从零开始码后台管理系统——用户管理

wxchong 2024-09-08 10:47:39 开源技术 8 ℃ 0 评论

在之前的文章里我已经完成了,菜单管理、角色管理,今天我们来完成用户管理。

在之前做登录的时候我们已经创建过用户表,并且已经创建好了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目录下的页面中正确的引入就好了。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表