Nowy proces - obsługa 3m i 7m

This commit is contained in:
Flatlogic Bot 2026-03-02 06:38:50 +00:00
parent 4c2c56f0dc
commit 7717562504

View File

@ -216,10 +216,15 @@ class WorkflowEngine {
}
// 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(
"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();
// 3. Create a system event for process start.
@ -341,7 +346,7 @@ class WorkflowEngine {
$instanceId
]);
$message = $inputPayload['message'] ?? $transition['name'];
$message = $inputPayload['note'] ?? $inputPayload['message'] ?? $transition['name'];
$this->addEvent($instanceId, 'transition_applied', $message, $newNodeId, $inputPayload, $userId);
if (isset($transition['actions'])) {
@ -351,6 +356,10 @@ class WorkflowEngine {
} elseif ($action['type'] === 'set_data') {
// Pass the instance by reference to be updated with new data
$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'];
$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['fields']) || !is_array($condition['fields'])) return false;
foreach ($condition['fields'] as $f) {
@ -751,6 +764,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);
@ -762,6 +781,41 @@ class WorkflowEngine {
$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 {
$inTransaction = $this->pdo->inTransaction();
if (!$inTransaction) { $this->pdo->beginTransaction(); }