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]); }