samsin33/laravel-decision-engine

本包为Laravel中的决策引擎提供支持。

v1.0.0 2022-11-20 17:56 UTC

This package is auto-updated.

Last update: 2024-09-18 23:12:25 UTC


README

为Laravel提供的决策引擎包。本包为Laravel版本9提供决策引擎的支持。

安装

使用composer安装samsin33/laravel-decision-engine包。

$ composer require samsin33/laravel-decision-engine

数据库迁移

决策引擎服务提供者注册了其自己的数据库迁移目录,因此请记住在安装包后迁移您的数据库。迁移将向您的数据库添加3个表。

$ php artisan migrate

如果您需要覆盖本包提供的迁移,可以使用vendor:publish Artisan命令发布它们。

$ php artisan vendor:publish --tag="decision-engine-migrations"

如果您想完全防止决策引擎的迁移运行,可以使用DecisionEngine提供的ignoreMigrations方法。通常,此方法应在AppServiceProvider的register方法中调用。

use Samsin33\DecisionEngine\DecisionEngine;

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
    DecisionEngine::ignoreMigrations();
}

发布配置

如果您需要覆盖本包提供的配置文件,可以使用vendor:publish Artisan命令发布它们。

$ php artisan vendor:publish --tag="decision-engine-config"

环境配置

您可以更改模型的数据库连接,默认为DB_CONNECTION,否则为mysql。如果您想更改此连接,可以在.env文件中指定不同的连接。

DECISION_ENGINE_CONNECTION=mysql

您可以更改模型的数据库主键类型,默认为bigInt。如果您想将其更改为uuid,可以在.env文件中指定。

目前仅支持位整数uuid

DECISION_ENGINE_PRIMARY_KEY_TYPE=uuid

发布视图

您需要覆盖本包提供的视图文件并根据您的设计进行更改,可以使用vendor:publish Artisan命令发布它们。

$ php artisan vendor:publish --tag="decision-engine-views"

显示和创建规则引擎

要访问索引页和创建页的规则引擎,请转到路由。

/decision-engine/rule-engines
/decision-engine/rule-engines/create

您可以将这些路由添加到菜单中以便访问。所有必需的路由都已注册。

规则引擎类型

目前本包仅支持两种类型的规则引擎。

  1. 代码 - 将执行一组代码,这些代码将根据您提供的输入放置在业务规则列中。
  2. 命令 - 将执行一个命令,这些命令将根据您提供的输入放置在业务规则列中。

路由守卫

您的Web路由包含在web_guards中。您的API路由包含在api_guards中。您可以在配置文件中更改它们。

示例 - 制作计算器

作为一个例子,让我们制作一个计算器。

创建规则引擎

名称 - 计算器

类型 - 代码

验证 - 这应该是一个包含您的输入验证规则的数组。例如:[img.png]。您也可以创建自己的验证并使用它们。

业务规则 - 这是验证通过时运行的代码。img_1.png

状态 - 它应该为活动状态以便执行规则。

您的业务规则应始终返回一个值以显示输出。

对于命令示例。使用以下内容创建命令Calculator:

签名 - 计算 {num1} {num2} {process}

并且在“业务规则”字段应该是

业务规则 - 计算 $num1 $num2 $process

命令类型的输出有2个属性:result 和 info

result - 返回命令的整数。

info - 保存命令的输出,即任何打印在行、信息、注释、问题、警告和错误方法中的内容。

在输入上执行业务规则

要执行业务规则,您需要调用API。

URL: /decision-engine/rule-executions

Headers: {
  "accept": "application/json",
  "content-type": "application/json"
}
# Other headers attributes depends on your api guards.

Request:
{
    "rule_execution": {
        "rule_engine_id": 1,
        "input": {
            "num1": 45,
            "num2": 6,
            "process": "add"
        }
    }
}

Response:
{
    "output": {
        "status": "Code Success",
        "output": {
            "add": 51
        }
    },
    "rule_execution": {
        "rule_engine_id": 1,
        "input": {
            "num1": 45,
            "num2": 6,
            "process": "add"
        },
        "id": 1,
        "status": "Code Success",
        "updated_at": "2022-11-20T16:10:59.000000Z",
        "created_at": "2022-11-20T16:10:58.000000Z",
        "output": "{\"add\":51}"
    }
}

注意

  1. 输入应该是关联数组。
  2. 您的输入键将被转换为业务规则值中的变量。