Я новичок в Drools. Поэтому мне нужна помощь с этим сценарием. Пожалуйста, задавайте мне как можно больше вопросов, если я что-то пропустил.
У меня есть этот XML:
EA
02
DE
US
Мне нужно сравнить этот XML с правилами БД следующим образом:
rule_mapping_table
RuleAttribute XmlAttribute
==============================
eventType parentList.trackCode
originCountry parentList.shipperCountryCode
destCountry parentList.recipientCountryCode
splHandCd parentList.specialGrp.handlingCd
Необходимо выбрать весь атрибут ruleAttribute и сравнить его с таблицей правил:
rule_table
RuleId RuleAttribute Condition Value ParcelValue
=========================================
1 eventType equals EA 1000
1 originCountry equals US 1000
1 destCountry equals DE 1000
1 splHandCd notEquals 01 1000
2 eventType equals AA 1105
Все соответствующие правила/записи должны быть возвращены и помещены в собственный файл DRL.
template "tmp1"
rule "@{id}"
dialect "mvel"
when
@{ifcondition};
then
@{thencondition};
end
end template
Например:
rule "1"
when
SomeEvent(parentList.trackCode == "EA"
&& parentList.recipientCountryCode == "DE"
&& parentList.shipperCountryCode == "US")
then
System.out.println("========== Rule kicked in is No. 1 =============");
shipment.setAmount(1000);
end
Что я пробовал до сих пор:
public SomeEvent getRules(SomeEvent someEvent) {
List ruleAttributes = new ArrayList();
rulesRepo.findAll().forEach(ruleAttributes::add);
ObjectDataCompiler compiler = new ObjectDataCompiler();
String generatedDRL = compiler.compile(ruleAttributes, Thread.currentThread().getContextClassLoader().getResourceAsStream(DroolsConfig.CONTRACT_EVENT_RULES_DRL));
KieServices kieServices = KieServices.Factory.get();
KieHelper kieHelper = new KieHelper();
//multiple such resources/rules can be added
byte[] b1 = generatedDRL.getBytes();
Resource resource = kieServices.getResources().newByteArrayResource(b1);
kieHelper.addResource(resource, ResourceType.DRL);
KieBase kieBase = kieHelper.build();
KieSession kieSession = kieBase.newKieSession();
kieSession.insert(someEvent);
kieSession.fireAllRules();
kieSession.dispose();
return someEvent;
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... e-engine-t
Как сравнить XML с правилами из БД и создать собственный шаблон механизма правил Drools DRL ⇐ JAVA
Программисты JAVA общаются здесь
1733759369
Anonymous
Я новичок в Drools. Поэтому мне нужна помощь с этим сценарием. Пожалуйста, задавайте мне как можно больше вопросов, если я что-то пропустил.
У меня есть этот XML:
EA
02
DE
US
Мне нужно сравнить этот XML с правилами БД следующим образом:
rule_mapping_table
RuleAttribute XmlAttribute
==============================
eventType parentList.trackCode
originCountry parentList.shipperCountryCode
destCountry parentList.recipientCountryCode
splHandCd parentList.specialGrp.handlingCd
Необходимо выбрать весь атрибут ruleAttribute и сравнить его с таблицей правил:
rule_table
RuleId RuleAttribute Condition Value ParcelValue
=========================================
1 eventType equals EA 1000
1 originCountry equals US 1000
1 destCountry equals DE 1000
1 splHandCd notEquals 01 1000
2 eventType equals AA 1105
Все соответствующие правила/записи должны быть возвращены и помещены в собственный файл DRL.
template "tmp1"
rule "@{id}"
dialect "mvel"
when
@{ifcondition};
then
@{thencondition};
end
end template
Например:
rule "1"
when
SomeEvent(parentList.trackCode == "EA"
&& parentList.recipientCountryCode == "DE"
&& parentList.shipperCountryCode == "US")
then
System.out.println("========== Rule kicked in is No. 1 =============");
shipment.setAmount(1000);
end
Что я пробовал до сих пор:
public SomeEvent getRules(SomeEvent someEvent) {
List ruleAttributes = new ArrayList();
rulesRepo.findAll().forEach(ruleAttributes::add);
ObjectDataCompiler compiler = new ObjectDataCompiler();
String generatedDRL = compiler.compile(ruleAttributes, Thread.currentThread().getContextClassLoader().getResourceAsStream(DroolsConfig.CONTRACT_EVENT_RULES_DRL));
KieServices kieServices = KieServices.Factory.get();
KieHelper kieHelper = new KieHelper();
//multiple such resources/rules can be added
byte[] b1 = generatedDRL.getBytes();
Resource resource = kieServices.getResources().newByteArrayResource(b1);
kieHelper.addResource(resource, ResourceType.DRL);
KieBase kieBase = kieHelper.build();
KieSession kieSession = kieBase.newKieSession();
kieSession.insert(someEvent);
kieSession.fireAllRules();
kieSession.dispose();
return someEvent;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79265622/how-to-compare-xml-with-rules-from-db-and-create-custom-drools-drl-rule-engine-t[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия