Exemple #1
0
 public function run()
 {
     // Ключ кеша
     $key = $this->providerId . '_' . $this->filename . '_' . filectime(Yii::$app->params['uploadFolder'] . $this->filename);
     if (Yii::$app->cache->exists($key)) {
         $arRes = Yii::$app->cache->get($key);
     } else {
         // Удалить старые предложения поставщика
         \app\models\Offers::deleteAll('providers_id = :providers_id', [':providers_id' => $this->providerId]);
         // Сохранить дату последней загрузки прайса
         $provider = \app\models\Providers::findOne($this->providerId);
         $provider->date_last_down = time();
         $provider->save();
         // Получить файл
         $arrCSV = file(Yii::$app->params['uploadFolder'] . $this->filename);
         // Обработка каждой строки файла
         $arrToAccord = [];
         foreach ($arrCSV as $k => $strCSV) {
             // Строку в массив
             $arStrCSV = str_getcsv($strCSV, ';');
             // Пропустить неполные строки
             if (strlen(trim($arStrCSV[$this->arrAccords['name']])) == 0 || strlen(trim($arStrCSV[$this->arrAccords['price']])) == 0 || strlen(trim($arStrCSV[$this->arrAccords['quantity']])) == 0) {
                 continue;
             }
             // Нормализовать массив строки от текущего поставщика
             $arResRow = $this->normalizeStrOfPrice($arStrCSV);
             // Получить тип товара
             $arResRow = $this->getGoodType($arResRow);
             if (isset($this->arrAccords['identifier'])) {
                 // Задан артикул
                 $res = $this->getAccordsByIdentifier($arResRow);
             } else {
                 // Не задан артикул
                 $res = $this->getAccordsByName($arResRow);
             }
             if ($res instanceof Accords) {
                 // Есть соответствие
                 // Пишем в таблицу предложений
                 $offer = new \app\models\Offers();
                 $offer->quantity = $arResRow['quantity'];
                 $offer->price = $arResRow['price'];
                 $offer->goods_id = $res->goods_id;
                 $offer->providers_id = $res->providers_id;
                 $offer->save();
             } else {
                 // Нет соответствия
                 // Вывести на согласование
                 $arResRow['k'] = $k;
                 $arrToAccord[$k] = $arResRow;
             }
             //                if ($k > 10)
             //                    break;
             //            break;
         }
         // Сохранить полученные данные в кеш
         $arRes = ['arrToAccord' => $arrToAccord, 'arGoodTypes' => $this->arGoodTypes, 'providerId' => $this->providerId, 'key' => $key];
         Yii::$app->cache->set($key, $arRes);
     }
     return $arRes;
 }
 public function actionSaveFull($k, $saveAccord = 'y')
 {
     $post = $_POST;
     $goodTypeId = $post['type'];
     $cach = Yii::$app->cache->get($post['key']);
     $priceArr = $cach['arrToAccord'][$k];
     //Поиск в таблице Goods
     $code = \app\components\Goods::requiredParameters($post, $goodTypeId);
     $goods = \app\models\Goods::find()->where(['name' => $code])->one();
     if ($goods instanceof \app\models\Goods) {
         //Если нашли возвращаем id товара
         $goodId = $goods->id;
     } else {
         //Если не нашли записываем в Goods и возвращаем id товара
         $goodId = \app\components\Goods::save($goodTypeId, $post);
     }
     //Добавить запись в таблицу Accords
     if ($saveAccord == 'y') {
         $accord = new \app\models\Accords();
         $identifier = isset($priceArr['identifier']) && strlen($priceArr['identifier']) > 0 ? $priceArr['identifier'] : $priceArr['name'];
         $accord->identifier = $identifier;
         $accord->goods_id = $goodId;
         $accord->providers_id = $cach['providerId'];
         $accord->save();
     }
     //Добавить запись в таблицу Offers
     $offer = new \app\models\Offers();
     $offer->quantity = $priceArr['quantity'];
     $offer->price = $priceArr['price'];
     $offer->goods_id = $goodId;
     $offer->providers_id = $cach['providerId'];
     $offer->save();
     // Удалить строку из кеша
     unset($cach['arrToAccord'][$k]);
     Yii::$app->cache->set($post['key'], $cach);
     //Вренуть результат
     print json_encode(['res' => 'ok', 'k' => $k]);
 }