mall_id, $this->supply_id); $data['page'] = intval($param['page'] ?? 1); $data['pageSize'] = intval($param['pageSize'] ?? 50); !empty($param['source_id']) && $data['source'] = (int) $param['source_id']; !empty($param['type']) && $data['type'] = $param['type']; if (!empty($param['sort'])) { $data['sort'] = $param['sort'] == 'desc' ? false : true; } !empty($param['category_1_id']) && $data['category_1_id'] = (int) $param['category_1_id']; !empty($param['category_2_id']) && $data['category_2_id'] = (int) $param['category_2_id']; !empty($param['category_id']) && $data['category_3_id'] = (int) $param['category_id']; !empty($param['freight_type']) && $data['freight_type'] = (int) $param['freight_type']; !empty($param['search_words']) && $data['title'] = $param['search_words']; !empty($param['supplier_id']) && $data['supplier_id'] = (int) $param['supplier_id']; !empty($param['is_import']) && $data['is_import'] = (int) $param['is_import']; $param['is_display'] !== '' && $data['is_display'] = (int) $param['is_display']; !empty($param['freight_type']) && $data['freight_type'] = (int) $param['freight_type']; // 区间选择,需要转数字 if (!empty($param['range_type'])) { $from = intval($param['range_from'] ?? 0); $to = intval($param['range_to'] ?? 0); $data[$param['range_type']] = [ 'from' => $from, 'to' => $to, ]; } $goods_list = $api->storageList($data); if (!$goods_list) { return $this->error($api->error); } $list = $goods_list['list']; if (empty($list)) { return $goods_list; } $goods_id = array_column($list, 'id'); $storage_id = StorageModel::findGoodsIds($this->mall_id, $this->supply_id, $goods_id); foreach ($list as &$item) { $item['is_storage'] = false; if (in_array($item['id'], $storage_id)) { $item['is_storage'] = true; } } $goods_list['list'] = $list; return $goods_list; } /** * 获取中台商品数据,往商品qimall_addons_qijuhe_goods表导 * @param array $goods_ids * @param bool $is_import_sys 添加时是否要同时导入系统 * * @throws \Exception */ public function add(array $storage_ids, bool $is_import_sys = false) { // 20一组 // $num = ceil(count($storage_ids) / 20) - 1; // for ($i = 0; $i <= $num; $i++) { // $storage_id = array_slice($storage_ids, $i * 20, 20); // Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_TASK, RabbitMqEnum::TASK_QUEUE, [ // 'mall_id' => $this->mall_id, // 'supply_id' => $this->supply_id, // 'storage_id' => $storage_id, // 'is_import_sys' => $is_import_sys, // ], self::class, 'addHandle'); // } // 不使用mq self::addHandle([ 'mall_id' => $this->mall_id, 'supply_id' => $this->supply_id, 'storage_id' => $storage_ids, 'is_import_sys' => $is_import_sys, ]); } /** * 执行导入 * * @param array $param * @return void */ public static function addHandle(array $param) { $service = new self($param); $storage_id = $param['storage_id'] ?? []; $service->importLocal($storage_id); } /** * 中台商品,导入插件商品库 * * @param array $storage_id * @return boolean */ public function importLocal(array $storage_id) { $storage_list = StorageModel::find()->select('id, mall_id, supply_id, middle_goods_id')->where(['id' => $storage_id])->asArray()->all(); // 根据供应商分组 $supply_list = []; foreach ($storage_list as $item) { $supply_list[$item['supply_id']][] = $item; } foreach ($supply_list as $supply_id => $goods_list) { $api = ApiService::getConnect(0, $supply_id); $list = $api->goodsInfo(array_column($goods_list, 'middle_goods_id')); if (!$list) { continue; } foreach ($list as $goods) { foreach ($goods as $key => $val) { if (is_array($val)) { $goods[$key] = Json::encode($val); } } $goods = GoodsModel::filterField($goods); $goods['mall_id'] = $goods_list[0]['mall_id']; $goods['supply_id'] = $supply_id; $goods['goods_id'] = $goods['id']; unset($goods['id']); unset($goods['skus']); $model = GoodsModel::find()->where(['supply_id' => $supply_id, 'goods_id' => $goods['goods_id']])->one(); if (empty($model)) { $model = new GoodsModel(); } if ($model->load($goods, '') && $model->save()) { // 新增,更改选品库的商品id $goods_id = $model->id; $index = array_search($goods['goods_id'], array_column($goods_list, 'middle_goods_id')); if ($index === false) { continue; } $id = $storage_id[$index] ?? 0; $id > 0 && StorageModel::updateAll(['goods_id' => $goods_id], ['id' => $id]); } } } return true; } }