1.业务背景
对于商品长期租赁类型业务,单个商品会存在商品编号和排期的内容,再下单时 会传入对应长期租赁的商品以及下单时所选择对应商品的租赁排期
2.遇到问题
在进行筛选时,需要使用批量筛选进行过滤
原代码是这样的, 将两个字段通过特殊字符拼接起来,将订单数据分段,采用mybatisplus的queryWrapper进行一个in筛选过滤, 该做法会导致索引失效
3.解决方案
在筛选时,遍历订单结果集,对结果集进行分段采取or的方式对所有的等值情况进行查询如下
LambdaUpdateWrapper<ShopGuideSchedule> update = Wrappers.lambdaUpdate();
for (List<GenerateOrderPointDto> generateOrderPointDtoList : ListUtils.partition(generateOrderPointDTOs, 200)) {
for (GenerateOrderPointDto generateOrderPointDto : generateOrderPointDtoList) {
update.or(item -> buildShopScheduleUpdateQueryWrapper(generateOrderPointDto, item));
}
result = result + shopGuideScheduleMapper.update(shopGuideSchedule, update);
update.clear();
}
buildShopScheduleUpdateQueryWrapper方法为
private void buildShopScheduleUpdateQueryWrapper(GenerateOrderPointDto generateOrderPointDto, LambdaUpdateWrapper<ShopGuideSchedule> item) {
item.eq(ShopGuideSchedule::getShopId, generateOrderPointDto.getPointId())
.eq(ShopGuideSchedule::getShopSchedule, DateUtils.parseDateToStr(DateUtils.YYYY_MM, generateOrderPointDto.getDate()))
.eq(ShopGuideSchedule::getStatus, ShopPointStatus.IDLE.getStatus());
}