未排单管理-创建排单es查询优化

This commit is contained in:
gaoqr
2025-06-20 09:39:16 +08:00
parent fb253a1b46
commit a47553756d
@@ -778,18 +778,18 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
AssertUtils.notEmpty(goodsReqVOS,ORDER_GOODS_DATA_ERROR); AssertUtils.notEmpty(goodsReqVOS,ORDER_GOODS_DATA_ERROR);
List<Long> ids = goodsReqVOS.stream().map(GoodsReqVO::getId).toList(); List<Long> orderGoodsIds = goodsReqVOS.stream().map(GoodsReqVO::getId).toList();
List<OrderDO> orderDOS = orderMapper.selectBatchIds(orderIds); List<OrderDO> orderDOS = orderMapper.selectBatchIds(orderIds);
AssertUtils.notEmpty(orderDOS,THIS_ORDER_PLATE_DATA_ERROR); AssertUtils.notEmpty(orderDOS,THIS_ORDER_PLATE_DATA_ERROR);
List<PlateDetailRespVO> plateDetailRespVOS = plateMapper.selectNoPlanPlate(orderIds,ids,getUserOrganId()); List<PlateDetailRespVO> plateDetailRespVOS = plateMapper.selectNoPlanPlate(orderIds, orderGoodsIds, getUserOrganId());
AssertUtils.notEmpty(plateDetailRespVOS,ORDER_PLATE_ERROR); AssertUtils.notEmpty(plateDetailRespVOS,ORDER_PLATE_ERROR);
// todo 数据结构改后,可以增加排单ID作为筛选,只查为 0 的 // todo 数据结构改后,可以增加排单ID作为筛选,只查为 0 的
List<OrderModelDO> orderModelDOS = getOrderModels(orderIds); List<OrderModelDO> orderModelDOS = getOrderModels(orderIds, orderGoodsIds);
AssertUtils.notEmpty(plateDetailRespVOS,ORDER_PLATE_MODEL_DATE_ERROR); AssertUtils.notEmpty(plateDetailRespVOS,ORDER_PLATE_MODEL_DATE_ERROR);
@@ -808,7 +808,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
* @param orderIds * @param orderIds
* @return * @return
*/ */
private List<OrderModelDO> getOrderModels(List<Long> orderIds) { private List<OrderModelDO> getOrderModels(List<Long> orderIds, List<Long> orderGoodsIds) {
List<OrderModelDO> results = new ArrayList<>(); List<OrderModelDO> results = new ArrayList<>();
try { try {
// 查询总数 // 查询总数
@@ -819,22 +819,27 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
.field("orderId") .field("orderId")
.terms(e -> e.value(orderIds.stream().map(FieldValue::of).toList())) .terms(e -> e.value(orderIds.stream().map(FieldValue::of).toList()))
)) ))
.filter(f -> f.terms(t -> t
.field("plateGoodsId")
.terms(e -> e.value(orderGoodsIds.stream().map(FieldValue::of).toList()))
))
)) ))
.build(); .build();
CountResponse totalResponse = elasticsearchClient.count(countRequest); CountResponse totalResponse = elasticsearchClient.count(countRequest);
long total = totalResponse.count(); long total = totalResponse.count();
// 分页查询 // 分页查询
int pageNum = PageUtil.totalPage(total, 500); int pageNum = PageUtil.totalPage(total, 1000);
List<FieldValue> searchAfterSortValues = null; List<FieldValue> searchAfterSortValues = null;
for (int page = 1; page <= pageNum; page++) { for (int page = 1; page <= pageNum; page++) {
SearchRequest.Builder searchBuilder = new SearchRequest.Builder() SearchRequest.Builder searchBuilder = new SearchRequest.Builder()
.index(ORDER_PLATE_MODEL.getIndex()) .index(ORDER_PLATE_MODEL.getIndex())
.size(500) .size(1000)
.sort(s -> s.field(f -> f.field("id.keyword").order(SortOrder.Asc))) .sort(s -> s.field(f -> f.field("id.keyword").order(SortOrder.Asc)))
.query(q -> q.bool(b -> b .query(q -> q.bool(b -> b
.filter(f -> f.terms(t -> t.field("orderId").terms(e -> e.value(orderIds.stream().map(FieldValue::of).toList())))) .filter(f -> f.terms(t -> t.field("orderId").terms(e -> e.value(orderIds.stream().map(FieldValue::of).toList()))))
.filter(f -> f.terms(t -> t.field("plateGoodsId").terms(e -> e.value(orderGoodsIds.stream().map(FieldValue::of).toList()))))
)) ))
.source(s -> s .source(s -> s
.filter(f -> f .filter(f -> f