0

我在实体的高级搜索中实现了一个自定义 BaseStore 过滤器(这个实体是一个报告,通过过滤我们选择的 basestore 的 pk 上的结果来执行查询)打开一个参考搜索,我最多可以选择三个 BaseStore . 我遇到的问题是,当我去删除现有条件(BaseStore1,BaseStore2 ecc)以执行另一次搜索(BaseStore6,BaseStore7 ecc..)时,它们仍保留在内存中。我没有像往常一样开发适配器,这是因为我已经有了查询,因为这个实体是一个报告,因此我用这些方法修改了 AdvancedSearchController:

   public void customAddFilterQueryRawCondition(final AdvancedSearchData searchData, final List models)
{
    if (CollectionUtils.isNotEmpty(models) && models.stream().noneMatch(x -> !(x instanceof BaseStoreModel)))
    {

        customCleanUpOutdatedConditions(searchData);

        List<String> baseStorePk = ((List<BaseStoreModel>) models).stream()
                .map(bs -> bs.getPk())
                .map(PK::toString)
                .collect(Collectors.toList());

        String inCondition = baseStorePk.stream()
                .collect(Collectors.joining(", "));


        FieldType fieldType = new FieldType();
        fieldType.setDisabled(Boolean.TRUE);
        fieldType.setSelected(Boolean.TRUE);
        fieldType.setName(ProductStockAvailabilityLogisticReportModel.BASESTOREPK);

        searchData.addCondition(fieldType, ValueComparisonOperator.IN, inCondition);


    }
}

public void customCleanUpOutdatedConditions(final AdvancedSearchData searchData)
{
    final List<SearchConditionData> pkBaseStoreConditions = searchData
            .getFilterQueryRawConditions("baseStorePk");//orProductStockAvailabilityLogisticReportModel.BASESTOREPK // but the debug revelated that "null"
    if (CollectionUtils.isNotEmpty(pkBaseStoreConditions))
    {
        final List<SearchConditionData> outdatedConditions = pkBaseStoreConditions
                .stream()
                .filter(conditionData -> ProductStockAvailabilityLogisticReportModel.BASESTOREPK
                        .equalsIgnoreCase(conditionData.getFieldType().getName()))
                .collect(Collectors.toList());
        pkBaseStoreConditions.removeAll(outdatedConditions);
    }
}
4

0 回答 0