Я работал над этой аналогичной проблемой уже более года для приложения для создания производственных затрат.Точно так же он принимает множество входных данных о дизайне продукта и основывается на дизайне, а также других вопросах инвентаризации, таких как количество, варианты оптовых закупок, поставщик деталей, электрические характеристики и т. Д. В результате получается список прямых материалов, рабочей силы и затрат.
С самого начала я знал, что мне нужен какой-то язык запросов, а не вычислительный, и он должен быть написан по сценарию, а не скомпилирован.Но мне еще предстоит найти идеальное решение:
МЕТОД 1 - SQL Я создал таблицы, представляющие мои объекты, и столбцы, представляющие свойства, а затем вручную ввел все необходимые для SQL SELECT инструкции.в таблице item_rules.Я сначала сохранил объект в базе данных, а затем
rules = SELECT * FROM item_rules
foreach(rules as _rule)
{
count = SELECT COUNT(*) FROM (_rule[select_statement]) as T1
if(count > 1) itemlist.add(_rule[item_that_satisfy_rule])
}
Он берет каждое правило в таблице item_rules и запускает его для моего объекта, который сейчас находится в таблицах.,например, SELECT * FROM my_object, где A = 5 и B> 10.Если я успешно его заберу, то получу положительное число, а затем знаю, что должен включить соответствующий элемент правила в список своих предметов.
МЕТОД 2 - NCALC Вместо хранения запросов вВ формате SQL я нашел библиотеку синтаксического анализа выражений с открытым исходным кодом NCALC.NCALC принимает строковое выражение и переменную параметра и вычисляет результат.Строковые выражения могут храниться в виде простого текста в файловой системе.
МЕТОД 3 - EXCEL EXCEL на самом деле является очень хорошим программным обеспечением для поиска данных.Вы можете создавать формулы в Excel, а затем передавать данные из своего приложения в Excel, а затем позволить Excel запускать формулы для получения результатов.Преимущество состоит в том, что многие люди знают, как использовать Excel, поэтому разные люди могут поддерживать его.
Но, как я уже сказал, ни один из них не идеален для меня.Я просто делюсь, и, надеюсь, мы сможем получить лучшие рекомендации.