赞
踩
背景:最近项目需要,师傅可以查找订单,而师傅是指定可以服务2到3个区域,故需要使用到and, or条件的组合,以下记一下代码。
最重要的代码是:
1、构建List<Consumer<LambdaQueryWrapper<T>>> andConditions;
2、从列表中填好 andConditions使用 and, or;
3、queryWrapper使用and中使用for得到所有的条件。
- // 通过staffId查找地域id
- LambdaQueryWrapper<ServiceAreaStaff> areaQueryWrapper = new LambdaQueryWrapper<ServiceAreaStaff>().eq(ServiceAreaStaff::getStaffId, staff.getId());
- List<ServiceAreaStaff> areasList = serviceAreaStaffMapper.selectList(areaQueryWrapper);
- // 找到符合的订单
-
- // 当前师傅只能看到服务范围内的订单数据
- List<Consumer<LambdaQueryWrapper<Order>>> andConditions = new ArrayList<>();
-
- List<Long> areas = new ArrayList<Long>();
- for(ServiceAreaStaff area : areasList) {
- andConditions.add(wq -> wq.or().eq(Order::getServiceAreaId, area.getServiceAreaId()));
- }
-
- LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<Order>()
- .and(true, wrapper -> {
- for (Consumer<LambdaQueryWrapper<Order>> condition : andConditions)
- {
- condition.accept(wrapper);
- }
- })
- .orderByDesc(Order::getId);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。