]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
feat(ERP-292): консольная команда auto-mark
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 17 Apr 2026 14:04:01 +0000 (17:04 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 17 Apr 2026 14:04:01 +0000 (17:04 +0300)
erp24/commands/AutoMarkController.php [new file with mode: 0644]

diff --git a/erp24/commands/AutoMarkController.php b/erp24/commands/AutoMarkController.php
new file mode 100644 (file)
index 0000000..b48c661
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+
+declare(strict_types=1);
+
+namespace yii_app\commands;
+
+use yii\console\Controller;
+use yii\console\ExitCode;
+use yii_app\services\AutoMarkService;
+
+/**
+ * Авторазметка товаров из 1С (ERP-292).
+ *
+ * Использование:
+ *   php yii auto-mark/run-new         — разметить все товары без номенклатуры
+ *   php yii auto-mark/run-product GUID — разметить конкретный товар
+ *   php yii auto-mark/apply PRED_ID   — применить одобренное предсказание
+ */
+class AutoMarkController extends Controller
+{
+    public string $defaultAction = 'run-new';
+
+    public function actionRunNew(): int
+    {
+        $this->stdout("Запуск авторазметки новых товаров...\n");
+
+        $service = new AutoMarkService();
+        $count   = $service->batchPredict();
+
+        $this->stdout("Создано предсказаний: {$count}\n");
+        return ExitCode::OK;
+    }
+
+    public function actionRunProduct(string $guid): int
+    {
+        $service = new AutoMarkService();
+        $result  = $service->predictForProduct($guid);
+
+        if ($result === null) {
+            $this->stderr("Не удалось создать предсказание для {$guid}\n");
+            return ExitCode::UNSPECIFIED_ERROR;
+        }
+
+        $this->stdout("Предсказание создано (ID={$result->id}, confidence={$result->confidence}, method={$result->method})\n");
+        return ExitCode::OK;
+    }
+
+    public function actionApply(int $predictionId): int
+    {
+        $service = new AutoMarkService();
+        $success = $service->applyApprovedPrediction($predictionId);
+
+        if (!$success) {
+            $this->stderr("Не удалось применить предсказание ID={$predictionId}\n");
+            return ExitCode::UNSPECIFIED_ERROR;
+        }
+
+        $this->stdout("Предсказание ID={$predictionId} применено.\n");
+        return ExitCode::OK;
+    }
+}