[Alibaba Open Source] Компиляция рабочего процесса для начала работы

задняя часть JavaScript полный стек

что такое скомпилированный поток

compileflow — это очень легкий, высокопроизводительный, интегрируемый и расширяемый механизм процессов.

Процессный движок compileflow является одним из движков рабочего процесса Taobao TBBPM.Это движок процесса без сохранения состояния, который фокусируется на выполнении в чистой памяти.Он генерирует Java-код для компиляции и выполнения путем преобразования файлов процесса, что является кратким и эффективным. В настоящее время это механизм обработки нескольких основных систем, таких как бизнес-транзакции мидл-офиса Alibaba.

compileflow позволяет разработчикам проектировать свои собственные бизнес-процессы с помощью редактора процессов, визуализировать сложную бизнес-логику и наводить мосты между бизнес-дизайнерами и инженерами-разработчиками.

список функций

  • Высокая производительность: он лаконичен и эффективен благодаря преобразованию файла процесса для создания кода Java для компиляции и выполнения.
  • Разнообразные сценарии приложений: он широко используется в решениях Alibaba для среднего офиса, поддерживая несколько бизнес-сценариев, таких как руководство по покупкам, транзакция, выполнение контракта и капитал.
  • Интегрируемость: легкий и компактный дизайн позволяет легко интегрировать его в различные решения и бизнес-сценарии.
  • Полная поддержка подключаемых модулей: проектирование процессов в настоящее время поддерживается подключаемыми модулями IntelliJ IDEA и Eclipse, которые могут динамически генерировать Java-код в режиме реального времени и предварительно просматривать его в процессе проектирования, что вы видите, то и получаете.
  • Поддержка схемы проектирования процесса для экспорта файла svg и кода модульного теста.
  • Поддерживает запуск кода на основе отражения Java и контейнера Spring.

Начать быстро

  • Внедрить зависимости jar компиляции
<dependency>
    <groupId>com.alibaba.compileflow</groupId>
    <artifactId>compileflow</artifactId>
    <version>1.0.0</version>
</dependency>
  • Нарисуйте простую блок-схему, используя compileflow

IDEA 插件

  • Просмотрите скомпилированный Java-код бизнес-процесса (Следующий код автоматически генерируется compileflow в соответствии с блок-схемой)
public class PigFlow implements ProcessInstance {

    private java.lang.Integer price = null;

    public Map<String, Object> execute(Map<String, Object> _pContext) throws Exception {
        price = (Integer)DataType.transfer(_pContext.get("price"), Integer.class);
        Map<String, Object> _pResult = new HashMap<>();
        decision8();
        //AutoTaskNode: 付款
        ((BizMock)ObjectFactory.getInstance("com.example.compileflow.bean.BizMock")).payMoney(price);
        _pResult.put("price", price);
        return _pResult;
    }

    private void decision8() {
        //DecisionNode: 计算费用
        bizMockCalMoney();
        if (price>=100) {
            //超过100
            {
                //ScriptTaskNode: 春哥请客 腿打折
                IExpressContext<String, Object> nfScriptContext = new DefaultContext<>();
                nfScriptContext.put("price", price);
                price = (java.lang.Integer)ScriptExecutorProvider.getInstance().getScriptExecutor("QL").execute("price*2", nfScriptContext);
            }
        } else {
            //不超过100
            {
                //ScriptTaskNode: 冷冷请客 打5折
                IExpressContext<String, Object> nfScriptContext = new DefaultContext<>();
                nfScriptContext.put("price", price);
                price = (java.lang.Integer)ScriptExecutorProvider.getInstance().getScriptExecutor("QL").execute("(round(price*0.5,0)).intValue()", nfScriptContext);
            }
        }
    }

    private void bizMockCalMoney() {
        price = ((BizMock)ObjectFactory.getInstance("com.example.compileflow.bean.BizMock")).calMoney(price);
    }

}
  • Щелкните правой кнопкой мыши созданный файл bpm, чтобы создать модульный тест.

bpm单元测试

@Test
public void testProcess() throws Exception {
    String code = "pig";
    ProcessEngine<TbbpmModel> engine = ProcessEngineFactory.getProcessEngine();
    System.out.println(engine.getJavaCode(code));
    Map<String, Object> context = new HashMap<>();
    context.put("price", 10);

    Map<String, Object> execute = engine.execute(code, context);

    System.out.println(execute);
}
  • Выполнение модульных тестов процесса и вывод целевого процесса
假装在计算金额~~~~~~10
支付了~~~~~~5

Суммировать

  • compileflow чрезвычайно прост в использовании, что снижает сложность изучения рабочего процесса.

  • compileflow плагин дизайна IDEAЕсть проблема с совместимостью версии 2021.

  • Автоматически сгенерированный код модульного теста зависит от более ранней версии и не поддерживает Junit5.