Nowy proces - obsługa 3m i 7m
This commit is contained in:
parent
4c2c56f0dc
commit
7717562504
@ -216,10 +216,15 @@ class WorkflowEngine {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 2. Create a new process instance.
|
// 2. Create a new process instance.
|
||||||
|
$initialDataJson = null;
|
||||||
|
if (isset($definition_json['initial_data'])) {
|
||||||
|
$initialDataJson = json_encode($definition_json['initial_data']);
|
||||||
|
}
|
||||||
|
|
||||||
$stmt_insert = $this->pdo->prepare(
|
$stmt_insert = $this->pdo->prepare(
|
||||||
"INSERT INTO process_instances (person_id, process_definition_id, current_node_id, current_status, last_activity_at) VALUES (?, ?, ?, 'in_progress', NOW())"
|
"INSERT INTO process_instances (person_id, process_definition_id, current_node_id, current_status, last_activity_at, data_json) VALUES (?, ?, ?, 'in_progress', NOW(), ?)"
|
||||||
);
|
);
|
||||||
$stmt_insert->execute([$personId, $definition['id'], $startNodeId]);
|
$stmt_insert->execute([$personId, $definition['id'], $startNodeId, $initialDataJson]);
|
||||||
$instanceId = $this->pdo->lastInsertId();
|
$instanceId = $this->pdo->lastInsertId();
|
||||||
|
|
||||||
// 3. Create a system event for process start.
|
// 3. Create a system event for process start.
|
||||||
@ -341,7 +346,7 @@ class WorkflowEngine {
|
|||||||
$instanceId
|
$instanceId
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$message = $inputPayload['message'] ?? $transition['name'];
|
$message = $inputPayload['note'] ?? $inputPayload['message'] ?? $transition['name'];
|
||||||
$this->addEvent($instanceId, 'transition_applied', $message, $newNodeId, $inputPayload, $userId);
|
$this->addEvent($instanceId, 'transition_applied', $message, $newNodeId, $inputPayload, $userId);
|
||||||
|
|
||||||
if (isset($transition['actions'])) {
|
if (isset($transition['actions'])) {
|
||||||
@ -351,6 +356,10 @@ class WorkflowEngine {
|
|||||||
} elseif ($action['type'] === 'set_data') {
|
} elseif ($action['type'] === 'set_data') {
|
||||||
// Pass the instance by reference to be updated with new data
|
// Pass the instance by reference to be updated with new data
|
||||||
$this->executeSetDataAction($instanceId, $instance, $action, $inputPayload);
|
$this->executeSetDataAction($instanceId, $instance, $action, $inputPayload);
|
||||||
|
} elseif ($action['type'] === 'increment_data') {
|
||||||
|
$this->executeIncrementDataAction($instanceId, $instance, $action);
|
||||||
|
} elseif ($action['type'] === 'reset_data') {
|
||||||
|
$this->executeResetDataAction($instanceId, $instance, $action);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -712,6 +721,10 @@ class WorkflowEngine {
|
|||||||
$condition = $transition['condition'];
|
$condition = $transition['condition'];
|
||||||
$data = isset($instanceData['data_json']) ? json_decode($instanceData['data_json'], true) : [];
|
$data = isset($instanceData['data_json']) ? json_decode($instanceData['data_json'], true) : [];
|
||||||
|
|
||||||
|
if (isset($condition['type']) && $condition['type'] === 'always_true') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($condition['type']) && $condition['type'] === 'all_true') {
|
if (isset($condition['type']) && $condition['type'] === 'all_true') {
|
||||||
if (!isset($condition['fields']) || !is_array($condition['fields'])) return false;
|
if (!isset($condition['fields']) || !is_array($condition['fields'])) return false;
|
||||||
foreach ($condition['fields'] as $f) {
|
foreach ($condition['fields'] as $f) {
|
||||||
@ -752,6 +765,12 @@ class WorkflowEngine {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($action['params']['map']) && is_array($action['params']['map'])) {
|
||||||
|
foreach ($action['params']['map'] as $key => $val) {
|
||||||
|
$data[$key] = $val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$newDataJson = json_encode($data);
|
$newDataJson = json_encode($data);
|
||||||
|
|
||||||
// Update the database
|
// Update the database
|
||||||
@ -762,6 +781,41 @@ class WorkflowEngine {
|
|||||||
$instance['data_json'] = $newDataJson;
|
$instance['data_json'] = $newDataJson;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function executeIncrementDataAction(int $instanceId, array &$instance, array $action): void {
|
||||||
|
$dataJson = $instance['data_json'];
|
||||||
|
$data = $dataJson ? json_decode($dataJson, true) : [];
|
||||||
|
|
||||||
|
$key = $action['params']['key'] ?? null;
|
||||||
|
$by = $action['params']['by'] ?? 1;
|
||||||
|
|
||||||
|
if ($key) {
|
||||||
|
$default_base = $action['params']['default_base'] ?? 0;
|
||||||
|
$val = isset($data[$key]) ? (int)$data[$key] : $default_base;
|
||||||
|
$data[$key] = $val + $by;
|
||||||
|
}
|
||||||
|
|
||||||
|
$newDataJson = json_encode($data);
|
||||||
|
$stmt_update = $this->pdo->prepare("UPDATE process_instances SET data_json = ? WHERE id = ?");
|
||||||
|
$stmt_update->execute([$newDataJson, $instanceId]);
|
||||||
|
$instance['data_json'] = $newDataJson;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function executeResetDataAction(int $instanceId, array &$instance, array $action): void {
|
||||||
|
$dataJson = $instance['data_json'];
|
||||||
|
$data = $dataJson ? json_decode($dataJson, true) : [];
|
||||||
|
|
||||||
|
if (isset($action['params']['keys']) && is_array($action['params']['keys'])) {
|
||||||
|
foreach ($action['params']['keys'] as $key) {
|
||||||
|
$data[$key] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$newDataJson = json_encode($data);
|
||||||
|
$stmt_update = $this->pdo->prepare("UPDATE process_instances SET data_json = ? WHERE id = ?");
|
||||||
|
$stmt_update->execute([$newDataJson, $instanceId]);
|
||||||
|
$instance['data_json'] = $newDataJson;
|
||||||
|
}
|
||||||
|
|
||||||
public function deleteInstance(int $instanceId): void {
|
public function deleteInstance(int $instanceId): void {
|
||||||
$inTransaction = $this->pdo->inTransaction();
|
$inTransaction = $this->pdo->inTransaction();
|
||||||
if (!$inTransaction) { $this->pdo->beginTransaction(); }
|
if (!$inTransaction) { $this->pdo->beginTransaction(); }
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user