|
|
@@ -964,24 +964,27 @@ public class SearchServiceImpl implements SearchService {
|
|
|
Object status;
|
|
|
// 筛选状态
|
|
|
if (!CollectionUtils.isEmpty(filters) && !StringUtils.isEmpty(filters.get(FilterField.GOODS_STATUS))) {
|
|
|
+ // 如果明确指定了状态,则直接过滤批次(结果中不包括没有批次的器件)
|
|
|
status = filters.get(FilterField.GOODS_STATUS);
|
|
|
+ filter(status, SearchConstants.GOODS_GO_STATUS_FIELD, query);
|
|
|
} else {
|
|
|
+ // 如果未明确指定状态,则使用默认状态分情况进行过滤(结果中包括没有批次的器件)
|
|
|
status = Arrays.asList(TradeGoods.VALID_STATUS);
|
|
|
+ // 批次 id 不为空时,对状态过滤
|
|
|
+ Query goIdNotNullQuery = SearchUtils.getNotNullQuery(SearchConstants.GOODS_GO_ID_FIELD);
|
|
|
+ BooleanQuery q1 = new BooleanQuery();
|
|
|
+ q1.add(goIdNotNullQuery, Occur.MUST);
|
|
|
+ filter(status, SearchConstants.GOODS_GO_STATUS_FIELD, q1);
|
|
|
+ // 或者批次 id 为空(此时是器件)
|
|
|
+ BooleanQuery q2 = new BooleanQuery();
|
|
|
+ q2.add(SearchUtils.getNotNullQuery(SearchConstants.GOODS_CMP_ID_FIELD), Occur.SHOULD);
|
|
|
+ q2.add(goIdNotNullQuery, Occur.MUST_NOT);
|
|
|
+
|
|
|
+ BooleanQuery booleanQuery = new BooleanQuery();
|
|
|
+ booleanQuery.add(q1, Occur.SHOULD);
|
|
|
+ booleanQuery.add(q2, Occur.SHOULD);
|
|
|
+ query.add(booleanQuery, Occur.FILTER);
|
|
|
}
|
|
|
- // 批次 id 不为空时,对状态过滤
|
|
|
- Query goIdNotNullQuery = SearchUtils.getNotNullQuery(SearchConstants.GOODS_GO_ID_FIELD);
|
|
|
- BooleanQuery q1 = new BooleanQuery();
|
|
|
- q1.add(goIdNotNullQuery, Occur.MUST);
|
|
|
- filter(status, SearchConstants.GOODS_GO_STATUS_FIELD, q1);
|
|
|
- // 或者批次 id 为空(此时是器件)
|
|
|
- BooleanQuery q2 = new BooleanQuery();
|
|
|
- q2.add(SearchUtils.getNotNullQuery(SearchConstants.GOODS_CMP_ID_FIELD), Occur.SHOULD);
|
|
|
- q2.add(goIdNotNullQuery, Occur.MUST_NOT);
|
|
|
-
|
|
|
- BooleanQuery booleanQuery = new BooleanQuery();
|
|
|
- booleanQuery.add(q1, Occur.SHOULD);
|
|
|
- booleanQuery.add(q2, Occur.SHOULD);
|
|
|
- query.add(booleanQuery, Occur.FILTER);
|
|
|
|
|
|
if (CollectionUtils.isEmpty(filters)) {
|
|
|
return;
|