管理员服务实现管理用户的相关功能(增删改查(分页查询))

一、管理员页面分页展示用户

1.定义页面PageParam

包括当前页面以及页面大小 分别设置默认值1和15。

@Data
public class PageParam {
    private int currentPage = 1;

    private int pageSize = 15;
}

2.配置User服务的分页的插件

config.UserConfiguration

@Configuration
public class UserConfiguration {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

为了方便把当前页的内容返回给前端,我们需要把当前页的内容封装成一个PageBean对象,该对象应该有两个属性:一个是当前页的内容,即当前页的对象集合;一个是该记录的总条数,方便前端计算总页数并显示。

3.AdminUserController定义接口

定义post方法ListPage /admin/user

@RestController
@RequestMapping("user")
public class UserAdminController {
    @Autowired
    private UserService userService;
    @PostMapping("admin/list")
    public R listPage(@RequestBody PageParam pageParam){
        return userService.listPage(pageParam);

    }
}

4.定义userService接口定义方法

public interface UserService {

    R listPage(PageParam pageParam);
}

5.定义Mapper

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

6.定义实现类UserServiceImpl

根据传入的PageParam参数,定义Page对象接收参数,调用UserMapper分页查询,返回分页数据,返回分页数据和总数量。

@Service
@Slf4j
public class UserServiceImpl implements UserService {
@Override
    public R listPage(PageParam pageParam) {
        IPage<User> page=new Page<>(pageParam.getCurrentPage(), pageParam.getPageSize());
        userMapper.selectPage(page,null);
        List<User> records=page.getRecords();
        long total = page.getTotal();

        return R.ok("用户管理查询成功",records,total);
    }
}

以上完成接口实现

二、定义UserClient用于admin调用进行分页查询

@FeignClient("user-service")
public interface UserClient {
    @PostMapping("/user/admin/list")
    R adminListPage(@RequestBody PageParam pageParam);
}

三、admin服务调用Client实现功能

1.Application 添加@EnableFeignClients注解

@EnableFeignClients(clients = {UserClient.class})

2.UserController定义接口,Service定义方法

@RestController
@RequestMapping("user")
public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping("list")
    public R userList(PageParam pageParam){
       return userService.list(pageParam);
    }
}
public interface UserService {
    R list(PageParam pageParam);
}

3.实现类实现,添加Redis缓存,注意配置文件和启动类开启缓存。

@Service
@Slf4j
public class UserServiceImpl implements UserService {
    @Autowired
    private UserClient userClient;
    @Override
    @Cacheable(value = "list.user",key = "#pageParam.currentPage+'-'+#pageParam.pageSize")
    public R list(PageParam pageParam) {
        log.info("UserServiceImpl list parameters:{}",pageParam);
        R r = userClient.adminListPage(pageParam);
        return r;
    }
}

二、类似的可以实现用户删除、修改以及添加业务,都是管理员服务通过Feign客户端调用User服务。

1.管理员服务实现用户删除:

用户服务中实现接口 /user/admin/delete 

Param:user_id

业务实现层逻辑如下:

直接用UserMapper中的deleteById方法删除相应id的用户数据,,具体实现代码如下:
 

 @Override
    public R remove(Integer userId) {
        userMapper.deleteById(userId);
        log.info("UserServiceImpl remove parameters:{}",userId);
        return R.ok("用户数据删除成功!");
    }

之后在Client中添加接口,然后就是Admin服务中实现该业务接口

/admin/user/delete

然后实现类中调用client中的方法,实现删除功能,注意,由于用户信息发生变化,需要及时清除Redis缓存,这里使用@CacheEvit注解删除名字为list.user的缓存:

    @CacheEvict(value = "list.user",allEntries = true)
    @Override
    public R remove(CartListParam cartListParam) {
        R r=userClient.adminRemove(cartListParam);
        log.info("UserServiceImpl remove parameters:{}",cartListParam);

        return r;
    }

2.管理员服务实现修改用户信息

用户服务接口,流程与以上的服务类似,具体说明业务实现逻辑:
这里设定修改不能修改id和名称,只能修改电话和密码,这里密码修改需要注意,如果密码为发生修改则无需进行加密处理,只有发生修改再进行加密,所以在User服务中实现的update方法,需要先查数据库中UserId对应的密码是否与于数据库中的一致,这里用到QuerryWapper判断,调用userMapper的selecrCount查询是否存在,如果等于0,就是用MD5Utils进行加密,更新密码,如果不等于就无需加密,直接更新就可,具体实现代码如下:
 

 @Override
    public R update(User user) {
        QueryWrapper queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("user_id",user.getUserId());
        queryWrapper.eq("password",user.getPassword());
        Long aLong = userMapper.selectCount(queryWrapper);
        if(aLong==0){
            user.setPassword(MD5Util.encode(user.getPassword()+UserConstants.USER_SALT));
        }
        int i = userMapper.updateById(user);
        log.info("UserServiceImpl update parameters:{}",user);

        return R.ok("用户信息修改成功");
    }

3.管理员添加用户接口

这个业务实现逻辑与注册类似,可以复用代码。

这里说明实现逻辑:

首先判断querry.eq是否存在用户名,如果已经存在提示无法添加,不存在就继续添加,然后设置密码,对输入的密码进行加盐处理,然后调用UserMapper的insert进行添加,如果为空说明添加失败,否则视为成功。

 @Override
    public R save(User user) {
        //检查账号 查询数据库
        QueryWrapper queryWrapper=new QueryWrapper();
        queryWrapper.eq("user_name",user.getUserName());
        Long total=userMapper.selectCount(queryWrapper);
        if(total>0){
            log.info("UserServiceImpl.register业务结束,结果:{}","账号存在,注册失败");
            return R.fail("账号已经存在,请重新添加");
        }
        //密码加密,加盐 不可逆转加密 固定铭文加密后密文是固定的 注册失加密以后存储密文
        // 登录是加密以后,用密文进行数据库对比,但能被暴力破解,穷举法
        //加盐处理 +一段字符串
        String newPwd=MD5Util.encode(user.getPassword()+ UserConstants.USER_SALT);
        user.setPassword(newPwd);
        //插入数据库数据
        int rows=userMapper.insert(user);
        //判断 结果处理
        if(rows==0){
            log.info("添加失败");
            return R.fail("添加失败");
        }
        return R.ok("添加成功");
    }

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值