否定“每一个”陈述? WSO2 CEP / Siddhi

时间:2016-08-29 22:49:13

标签: wso2 wso2cep siddhi

是否有一种简单的方法来否定“每一个”陈述?我正在尝试实施一个控制工具来检查收到的采购订单和请购单。对于每个采购订单(PO),必须先创建请购单(REQ)。以下代码检测匹配(正数)的PO / REQ对,但我需要所有没有相应REQ(负数)的PO。

from every a1 = PO -> b1 = REQ[a1.ITEM_ID == b1.ITEM_ID and a1.QUANTITY == b1.QUANTITY and a1.CREATED_BY == b1.CREATED_BY] within 1 day select 'No REQ created before' as ALERT_MESSAGE insert into ALERT;

1 个答案:

答案 0 :(得分:0)

您可以参考sample on detecting non-occurrences with patterns。 但是,由于您要检查REQ事件是否在PO事件之前发生,您可能需要使用内存事件表来满足您的需求。使用内存表时,请参阅以下示例;

@Import('REQStream:1.0.0')
define stream REQ (ITEM_ID int, QUANTITY int, CREATED_BY string);

@Import('POStream:1.0.0')
define stream PO (ITEM_ID int, QUANTITY int, CREATED_BY string);

@Export('ALERTStream:1.0.0')
define stream ALERT (ITEM_ID int, ALERT string);

define table REQ_TABLE (ITEM_ID int, QUANTITY int, CREATED_BY string);

define trigger DAILY_TRIGGER at every 1 day;

from REQ
insert into REQ_TABLE;

-- check whether request exists before the purchase
from PO[not((REQ_TABLE.ITEM_ID == ITEM_ID and REQ_TABLE.QUANTITY == QUANTITY and REQ_TABLE.CREATED_BY == CREATED_BY) in REQ_TABLE)] 
select ITEM_ID, 'No REQ created before' as ALERT
insert into ALERT;

-- purge reauests table daily
from DAILY_TRIGGER join REQ_TABLE
select REQ_TABLE.ITEM_ID, REQ_TABLE.QUANTITY, REQ_TABLE.CREATED_BY
insert into PURGE_STREAM;

-- if there's no matching purchase order came up for previous day
from PURGE_STREAM
select ITEM_ID, 'No purchase order came up for a day' as ALERT
insert into ALERT;

from PO
insert into DEL_STREAM;

from PURGE_STREAM
insert into DEL_STREAM;

-- delete corresponding request from table
from DEL_STREAM 
delete REQ_TABLE
    on REQ_TABLE.ITEM_ID == ITEM_ID and REQ_TABLE.QUANTITY == QUANTITY and REQ_TABLE.CREATED_BY == CREATED_BY;