背景:最近项目需要,师傅可以查找订单,而师傅是指定可以服务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);