rapidkit/laravel-camunda-client

高级模型,类似于Eloquent,通过REST API与Camunda资源进行交互。

v1.1.1 2024-07-22 12:52 UTC

This package is not auto-updated.

Last update: 2024-09-21 23:45:47 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Static Analysis Action Status GitHub Code Style Action Status Total Downloads

介绍一款方便的Laravel HTTP客户端包装器,旨在简化您与Camunda REST API的交互。这个专用工具简化了将您的Laravel应用程序连接到Camunda的过程,让您轻松发送请求和检索数据。使用这个包装器,您可以高效地将Camunda强大的工作流自动化功能集成到您的Laravel项目中,使管理和编排复杂业务流程更加容易。告别繁琐的手动API调用,迎接更顺畅、更高效的Camunda工作流集成。

安装

您可以通过composer安装此包

composer require rapidkit/laravel-camunda-client

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag='laravel-camunda-client-config'

这是发布配置文件的内容

return [
    'url' => env('CAMUNDA_URL', 'http://127.0.0.1:8080/engine-rest'),
    'user' => env('CAMUNDA_USER', 'demo'),
    'password' => env('CAMUNDA_PASSWORD', 'demo'),
    'tenant_id' => env('CAMUNDA_TENANT_ID', ''),
];

用法

流程定义

use RapidKit\LaravelCamundaClient\Http\ProcessDefinitionClient;

$variables = ['title' => ['value' => 'Sample Title', 'type' => 'string']];

// Start new process instance
$instance = ProcessDefinitionClient::start(key: 'process_1', variables: $variables);

// Start new process instance with some business key
$instance = ProcessDefinitionClient::start(key: 'process_1', variables: $variables, businessKey: 'somekey');

// Get BPMN definition in XML format
ProcessDefinitionClient::xml(key: 'process_1');
ProcessDefinitionClient::xml(id: 'process_1:xxxx');

// Get all definition
ProcessDefinitionClient::get();

// Get definitions based on some parameters
$params = ['latestVersion' => true];
ProcessDefinitionClient::get($params);

参考

流程实例

use RapidKit\LaravelCamundaClient\Http\ProcessInstanceClient;

// Find by ID
$processInstance = ProcessInstanceClient::find(id: 'some-id');

// Get all instances
ProcessInstanceClient::get();

// Get instances based on some parameters
$params = ['businessKeyLike' => 'somekey'];
ProcessInstanceClient::get($params);

ProcessInstanceClient::variables(id: 'some-id');
ProcessInstanceClient::delete(id: 'some-id');

消息开始事件

use RapidKit\LaravelCamundaClient\Http\MessageEventClient;

MessageEventClient::start(messageName: 'testing',  businessKey: 'businessKey');

消息事件

use Laravolt\Camunda\Http\MessageEventClient;
// Start processinstance with message event
// Required
// messageName : message event name
// businessKey : Busniess key for process instance

// Rerturn Process insntance from message event

MessageEventClient::start(messageName: "testing",  businessKey: "businessKey")


$vars = ['title' => ['type' => 'String', 'value' => 'Sample Title']];
MessageEventClient::start(messageName: 'testing',  businessKey: 'businessKey', variables: $vars);

任务

use RapidKit\LaravelCamundaClient\Http\TaskClient;

$task = TaskClient::find(id: 'task-id');
$tasks = TaskClient::getByProcessInstanceId(id: 'process-instance-id');
$tasks = TaskClient::getByProcessInstanceIds(ids: 'arrayof-process-instance-ids');
TaskClient::submit(id: 'task-id', variables: ['name' => ['value' => 'Foo', 'type' => 'String']]); // will return true or false
$variables = TaskClient::submitAndReturnVariables(id: 'task-id', variables: ['name' => ['value' => 'Foo', 'type' => 'String']]) // will return array of variable

// Claim a Task
$tasks = TaskClient::claim($task_id,  $user_id);
// Unclaim a Task
$tasks = TaskClient::unclaim($task_id);
// Assign a Task
$tasks = TaskClient::assign($task_id,  $user_id);

外部任务

use RapidKit\LaravelCamundaClient\Http\ExternalTaskClient;

$topics = [['topicName' => 'pdf', 'lockDuration' => 600_000]];
$externalTasks = ExternalTaskClient::fetchAndLock('worker1', $topics);
foreach ($externalTasks as $externalTask) {
    // do something with $externalTask
    // Mark as complete after finished
    ExternalTaskClient::complete($externalTask->id);
}

// Release some task
ExternalTaskClient::unlock($task->id)

// Get task locked
$externalTaskLocked = ExternalTaskClient::getTaskLocked();

消耗外部任务

通过 php artisan make:job <JobName> 创建一个新的作业来消耗外部任务,并修改骨架

use RapidKit\LaravelCamundaClient\Data\ExternalTaskData;
use RapidKit\LaravelCamundaClient\Http\ExternalTaskClient;

public function __construct(
    public string $workerId,
    public ExternalTaskData $task
) {
}

public function handle()
{
    // Do something with $this->task, e.g: get the variables and generate PDF
    $variables = \RapidKit\LaravelCamundaClient\Http\ProcessInstanceClient::variables($this->task->processDefinitionId);
    // PdfService::generate()

    // Complete the task
    $status = ExternalTaskClient::complete($this->task->id, $this->workerId);
}

订阅某些主题

// AppServiceProvider.php
use RapidKit\LaravelCamundaClient\Http\ExternalTaskClient;

public function boot()
{
    ExternalTaskClient::subscribe('pdf', GeneratePdf::class);
}

注册调度器

// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
    $schedule->command('camunda:consume-external-task --workerId=worker1')->everyMinute();
}

如果您需要更短的池化时间(每分钟以下频率),请查看 Laravel Short Schedule

参考

任务历史(完成任务)

use RapidKit\LaravelCamundaClient\Http\TaskHistoryClient;

$completedTask = TaskHistoryClient::find(id: 'task-id');
$completedTasks = TaskHistoryClient::getByProcessInstanceId(id: 'process-instance-id');

部署

use RapidKit\LaravelCamundaClient\Http\DeploymentClient;

// Deploy bpmn file(s)
DeploymentClient::create('test-deploy', '/path/to/file.bpmn');
DeploymentClient::create('test-deploy', ['/path/to/file1.bpmn', '/path/to/file2.bpmn']);

// Get deployment list
DeploymentClient::get();

// Find detailed info about some deployment
DeploymentClient::find($id);

// Truncate (delete all) deployments
$cascade = true;
DeploymentClient::truncate($cascade);

// Delete single deployment
DeploymentClient::delete(id: 'test-deploy', cascade: $cascade);

原始端点

您可以使用 RapidKit\LaravelCamundaClient\CamundaClient 调用任何Camunda REST端点。

use RapidKit\LaravelCamundaClient\CamundaClient;

$response = CamundaClient::make()->get('version');
echo $response->status(); // 200
echo $response->object(); // sdtClass
echo $response->json(); // array, something like ['version' => '7.14.0']

CamundaClient::make() 是一个包装器,用于 Laravel HTTP客户端,其基础URL已根据您的Camunda服务配置设置。更多信息请参阅文档。

测试

composer test

变更日志

请参阅 变更日志 了解最近的变化。

贡献

请参阅 贡献指南 获取详细信息。

安全漏洞

请参阅 我们的安全策略 了解如何报告安全漏洞。

鸣谢

许可证

MIT许可证(MIT)。更多信息请参阅 许可证文件

参考