| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- <?php
- namespace addons\QiJuhe\common\service;
- use addons\QiJuhe\common\models\GoodsModel;
- use addons\QiJuhe\common\models\StorageModel;
- use common\enums\RabbitMqEnum;
- use Yii;
- use yii\helpers\Json;
- class GoodsService extends BaseService
- {
- public $mall_id;
- public $supply_id;
- /**
- * @param $param
- *
- * @return mixed
- * time:2021-10-10-16:09
- * user: 林深时见鹿
- * title: 获取商品列表
- * desc: 精选好货和选品库调用
- */
- public function getGoodsList($param)
- {
- $api = ApiService::getConnect($this->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;
- }
- }
|