]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
добавление автопланограмммы
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 3 Jul 2025 07:40:31 +0000 (10:40 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 3 Jul 2025 07:40:31 +0000 (10:40 +0300)
erp24/config/console.php
erp24/config/web.php
erp24/jobs/RebuildAutoplannogramJob.php [deleted file]

index 7bedb5f530fd29a0e03f12fc975e54115038b075..bb3821bab679738857c43f1dfc53bd2114974fcf 100755 (executable)
@@ -42,8 +42,8 @@ $config = [
 //        ],
         'queue' => [
             'class' => Queue::class,
-            'dsn' => 'amqp://admin:3qqHK2MRgGgxUdVT61@rabbitmq-yii_erp24:5672',
-            //'dsn' => 'amqp://admin:3qqHK2MRgGgxUdVT61@localhost:5672',
+            //'dsn' => 'amqp://admin:3qqHK2MRgGgxUdVT61@rabbitmq-yii_erp24:5672',
+            'dsn' => 'amqp://admin:3qqHK2MRgGgxUdVT61@localhost:5672',
             'queueName' => 'telegram-queue',
             'as log' => \yii\queue\LogBehavior::class,
             'ttr' => 300, // Время для выполнения задания
index a0d8fb4548473cb3099bcd8b8afdf510d9564013..773e430da8aee70bda19f7d4f44720b77162175a 100644 (file)
@@ -42,8 +42,8 @@ $config = [
         ],
         'queue' => [
             'class' => Queue::class,
-            'dsn' => 'amqp://admin:3qqHK2MRgGgxUdVT61@rabbitmq-yii_erp24:5672',
-            //'dsn' => 'amqp://admin:3qqHK2MRgGgxUdVT61@localhost:5672',
+            //'dsn' => 'amqp://admin:3qqHK2MRgGgxUdVT61@rabbitmq-yii_erp24:5672',
+            'dsn' => 'amqp://admin:3qqHK2MRgGgxUdVT61@localhost:5672',
             'queueName' => 'telegram-queue',
             'as log' => \yii\queue\LogBehavior::class,
             'ttr' => 300, // Время для выполнения задания
diff --git a/erp24/jobs/RebuildAutoplannogramJob.php b/erp24/jobs/RebuildAutoplannogramJob.php
deleted file mode 100644 (file)
index 651d999..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-
-namespace yii_app\jobs;
-
-use DateTime;
-use Throwable;
-use yii\base\BaseObject;
-use yii\helpers\ArrayHelper;
-use yii\queue\JobInterface;
-use yii_app\records\Autoplannogramma;
-use yii_app\records\CityStore;
-use yii_app\services\AutoPlannogrammaService;
-
-class RebuildAutoplannogramJob extends BaseObject implements JobInterface
-{
-    public int $year;
-    public int $month;
-    public int $storeId;
-
-    public function execute($queue)
-    {
-        $service = new AutoPlannogrammaService();
-
-        $date = (new DateTime())->setDate($this->year, $this->month, 1);
-        $planDate = $date->format('Y-m-01');
-
-        /** @var CityStore $store */
-        $store = CityStore::findOne($this->storeId);
-        if (!$store) {
-            throw new \RuntimeException("Store #{$this->storeId} not found");
-        }
-
-        try {
-
-            $forecastParams = [
-                'month'            => $this->month,
-                'year'             => $this->year,
-                'type'             => AutoPlannogrammaService::TYPE_SALES,
-                'store_id'         => $this->storeId,
-                'category'         => 'Срезка',
-                'subcategory'      => null,
-                'species'          => null,
-                'plan_date'        => $planDate,
-            ];
-            $forecast = $service->calculateFullForecastForWeek($forecastParams);
-            $writeOffsForecast = $service->getWeeklyProductsWriteoffsForecast(
-                $this->month, $this->year, $forecast, $this->storeId
-            );
-            $salesForecast = $service->getWeeklyBouquetProductsSalesForecast(
-                $this->month, $this->year, $this->storeId
-            );
-
-            $existing = Autoplannogramma::find()
-                ->where([
-                    'store_id' => $this->storeId,
-                    'year'     => $this->year,
-                    'month'    => $this->month,
-                    'week'     => array_unique(ArrayHelper::getColumn($forecast, 'week')),
-                ])
-                ->indexBy(fn($m) => $m->week . '_' . $m->product_id)
-                ->all();
-
-            foreach ($forecast as $item) {
-                $key     = $item['week'] . '_' . $item['product_id'];
-                $model   = $existing[$key] ?? new Autoplannogramma();
-                $quantity = (float)($item['forecast_week_pieces'] ?? 0);
-                $details = [];
-                $total = $quantity;
-
-                if (!empty($writeOffsForecast[$item['product_id']][$item['week']]['writeOffs'])) {
-                    $w = $writeOffsForecast[$item['product_id']][$item['week']]['writeOffs'];
-                    $details['writeOffs']['quantity'] = $w;
-                    $total += is_array($w) ? array_sum($w) : (float)$w;
-                }
-
-                foreach (['offline','online','marketplace'] as $t) {
-                    $block = ['share'=>0,'quantity'=>0,'groups'=>[]];
-                    if (!empty($salesForecast[$this->storeId][$item['product_id']][$t])) {
-                        $share = $salesForecast[$this->storeId][$t]['share'] ?? 0;
-                        $block['share']    = $share;
-                        $block['quantity'] = round($quantity * $share,2);
-                        $total += $block['quantity'];
-
-                        foreach ($salesForecast[$this->storeId][$item['product_id']][$t] as $k=>$v) {
-                            $block['groups'][$k] = (float)$v;
-                            $total += (float)$v;
-                        }
-                    }
-                    $details[$t] = $block;
-                }
-
-                $details['forecast'] = ['quantity' => $quantity];
-                $total = (float) sprintf('%.2f', $total);
-
-                $needsUpdate = $model->isNewRecord
-                    || $model->calculate  != $quantity
-                    || ceil($model->total) != ceil($total)
-                    || json_encode($model->details, JSON_UNESCAPED_UNICODE)
-                    !== json_encode($details, JSON_UNESCAPED_UNICODE);
-
-                if ($needsUpdate) {
-                    $model->setAttributes([
-                        'year'          => $this->year,
-                        'month'         => $this->month,
-                        'week'          => $item['week'],
-                        'product_id'    => $item['product_id'],
-                        'store_id'      => $this->storeId,
-                        'is_archive'    => false,
-                        'capacity_type' => 1,
-                        'details'       => json_encode($details, JSON_UNESCAPED_UNICODE),
-                        'calculate'     => $quantity,
-                        'modify'        => ceil($total),
-                        'total'         => ceil($total),
-                    ]);
-                    if (!$model->save()) {
-                        \Yii::error(
-                            'Ошибка сохранения Autoplannogramma: '
-                            . json_encode($model->getErrors(), JSON_UNESCAPED_UNICODE),
-                            __METHOD__
-                        );
-                    }
-                }
-            }
-        } catch (Throwable $e) {
-            \Yii::error("Job failed: " . $e->getMessage(), __METHOD__);
-        }
-    }
-}
\ No newline at end of file