【发布时间】:2021-10-18 10:21:50
【问题描述】:
在将 InboundRegionalProduct 和 ExistingRegionalProduct 类型的两个数组列表插入到 drools 会话后,规则不会被触发。不知道是什么问题。 这是drl文件。
package rules;
import com.ferguson.mw.k8.pricing.b2ccontroller.model.InboundRegionalProduct;
import com.ferguson.mw.k8.pricing.b2ccontroller.model.ExistingRegionalProduct;
dialect "java"
rule "Exists, no change in flag"
when
$in : InboundRegionalProduct();
$existing : ExistingRegionalProduct(productId == $in.productId, regionallyPriced == $in.regionallyPriced);
then
delete($in);
delete($existing);
end
// Match based on prodcutId and regionallyPriced flags are different from one another.
query "delta"
$in : InboundRegionalProduct();
ExistingRegionalProduct(productId == $in.productId);
end
// Inbound but no existing product. The regionallyPriced attribute must be set to "true"
query "add"
$in : InboundRegionalProduct();
not ExistingRegionalProduct(productId == $in.productId);
end
// Match based on having an existing product with a flag and no matching inbound product. The regionallyPriced attribute should be removed for these.
query "remove"
$existing : ExistingRegionalProduct()
not InboundRegionalProduct(productId == $existing.productId)
end
pojo 类如下;
@Data
@AllArgsConstructor
public abstract class RegionalProduct {
private final String productId;
private final Boolean regionallyPriced;
}
@Data
@EqualsAndHashCode(callSuper = true)
public class InboundRegionalProduct extends RegionalProduct {
public InboundRegionalProduct(final String productId) {
super(productId, Boolean.TRUE);
}
}
@Data
@EqualsAndHashCode(callSuper = true)
public class ExistingRegionalProduct extends RegionalProduct {
public ExistingRegionalProduct(final String productId, final Boolean regionallyPriced) {
super(productId, regionallyPriced);
}
}
【问题讨论】: