未排单管理-创建排单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);
List<Long> ids = goodsReqVOS.stream().map(GoodsReqVO::getId).toList();
List<Long> orderGoodsIds = goodsReqVOS.stream().map(GoodsReqVO::getId).toList();
List<OrderDO> orderDOS = orderMapper.selectBatchIds(orderIds);
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);
// todo 数据结构改后,可以增加排单ID作为筛选,只查为 0 的
List<OrderModelDO> orderModelDOS = getOrderModels(orderIds);
List<OrderModelDO> orderModelDOS = getOrderModels(orderIds, orderGoodsIds);
AssertUtils.notEmpty(plateDetailRespVOS,ORDER_PLATE_MODEL_DATE_ERROR);
@@ -808,7 +808,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
* @param orderIds
* @return
*/
private List<OrderModelDO> getOrderModels(List<Long> orderIds) {
private List<OrderModelDO> getOrderModels(List<Long> orderIds, List<Long> orderGoodsIds) {
List<OrderModelDO> results = new ArrayList<>();
try {
// 查询总数
@@ -819,22 +819,27 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
.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()))
))
))
.build();
CountResponse totalResponse = elasticsearchClient.count(countRequest);
long total = totalResponse.count();
// 分页查询
int pageNum = PageUtil.totalPage(total, 500);
int pageNum = PageUtil.totalPage(total, 1000);
List<FieldValue> searchAfterSortValues = null;
for (int page = 1; page <= pageNum; page++) {
SearchRequest.Builder searchBuilder = new SearchRequest.Builder()
.index(ORDER_PLATE_MODEL.getIndex())
.size(500)
.size(1000)
.sort(s -> s.field(f -> f.field("id.keyword").order(SortOrder.Asc)))
.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("plateGoodsId").terms(e -> e.value(orderGoodsIds.stream().map(FieldValue::of).toList()))))
))
.source(s -> s
.filter(f -> f