GoodsService.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. namespace addons\QiJuhe\common\service;
  3. use addons\QiJuhe\common\models\GoodsModel;
  4. use addons\QiJuhe\common\models\StorageModel;
  5. use common\enums\RabbitMqEnum;
  6. use Yii;
  7. use yii\helpers\Json;
  8. class GoodsService extends BaseService
  9. {
  10. public $mall_id;
  11. public $supply_id;
  12. /**
  13. * @param $param
  14. *
  15. * @return mixed
  16. * time:2021-10-10-16:09
  17. * user: 林深时见鹿
  18. * title: 获取商品列表
  19. * desc: 精选好货和选品库调用
  20. */
  21. public function getGoodsList($param)
  22. {
  23. $api = ApiService::getConnect($this->mall_id, $this->supply_id);
  24. $data['page'] = intval($param['page'] ?? 1);
  25. $data['pageSize'] = intval($param['pageSize'] ?? 50);
  26. !empty($param['source_id']) && $data['source'] = (int) $param['source_id'];
  27. !empty($param['type']) && $data['type'] = $param['type'];
  28. if (!empty($param['sort'])) {
  29. $data['sort'] = $param['sort'] == 'desc' ? false : true;
  30. }
  31. !empty($param['category_1_id']) && $data['category_1_id'] = (int) $param['category_1_id'];
  32. !empty($param['category_2_id']) && $data['category_2_id'] = (int) $param['category_2_id'];
  33. !empty($param['category_id']) && $data['category_3_id'] = (int) $param['category_id'];
  34. !empty($param['freight_type']) && $data['freight_type'] = (int) $param['freight_type'];
  35. !empty($param['search_words']) && $data['title'] = $param['search_words'];
  36. !empty($param['supplier_id']) && $data['supplier_id'] = (int) $param['supplier_id'];
  37. !empty($param['is_import']) && $data['is_import'] = (int) $param['is_import'];
  38. $param['is_display'] !== '' && $data['is_display'] = (int) $param['is_display'];
  39. !empty($param['freight_type']) && $data['freight_type'] = (int) $param['freight_type'];
  40. // 区间选择,需要转数字
  41. if (!empty($param['range_type'])) {
  42. $from = intval($param['range_from'] ?? 0);
  43. $to = intval($param['range_to'] ?? 0);
  44. $data[$param['range_type']] = [
  45. 'from' => $from,
  46. 'to' => $to,
  47. ];
  48. }
  49. $goods_list = $api->storageList($data);
  50. if (!$goods_list) {
  51. return $this->error($api->error);
  52. }
  53. $list = $goods_list['list'];
  54. if (empty($list)) {
  55. return $goods_list;
  56. }
  57. $goods_id = array_column($list, 'id');
  58. $storage_id = StorageModel::findGoodsIds($this->mall_id, $this->supply_id, $goods_id);
  59. foreach ($list as &$item) {
  60. $item['is_storage'] = false;
  61. if (in_array($item['id'], $storage_id)) {
  62. $item['is_storage'] = true;
  63. }
  64. }
  65. $goods_list['list'] = $list;
  66. return $goods_list;
  67. }
  68. /**
  69. * 获取中台商品数据,往商品qimall_addons_qijuhe_goods表导
  70. * @param array $goods_ids
  71. * @param bool $is_import_sys 添加时是否要同时导入系统
  72. *
  73. * @throws \Exception
  74. */
  75. public function add(array $storage_ids, bool $is_import_sys = false)
  76. {
  77. // 20一组
  78. // $num = ceil(count($storage_ids) / 20) - 1;
  79. // for ($i = 0; $i <= $num; $i++) {
  80. // $storage_id = array_slice($storage_ids, $i * 20, 20);
  81. // Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_TASK, RabbitMqEnum::TASK_QUEUE, [
  82. // 'mall_id' => $this->mall_id,
  83. // 'supply_id' => $this->supply_id,
  84. // 'storage_id' => $storage_id,
  85. // 'is_import_sys' => $is_import_sys,
  86. // ], self::class, 'addHandle');
  87. // }
  88. // 不使用mq
  89. self::addHandle([
  90. 'mall_id' => $this->mall_id,
  91. 'supply_id' => $this->supply_id,
  92. 'storage_id' => $storage_ids,
  93. 'is_import_sys' => $is_import_sys,
  94. ]);
  95. }
  96. /**
  97. * 执行导入
  98. *
  99. * @param array $param
  100. * @return void
  101. */
  102. public static function addHandle(array $param)
  103. {
  104. $service = new self($param);
  105. $storage_id = $param['storage_id'] ?? [];
  106. $service->importLocal($storage_id);
  107. }
  108. /**
  109. * 中台商品,导入插件商品库
  110. *
  111. * @param array $storage_id
  112. * @return boolean
  113. */
  114. public function importLocal(array $storage_id)
  115. {
  116. $storage_list = StorageModel::find()->select('id, mall_id, supply_id, middle_goods_id')->where(['id' => $storage_id])->asArray()->all();
  117. // 根据供应商分组
  118. $supply_list = [];
  119. foreach ($storage_list as $item) {
  120. $supply_list[$item['supply_id']][] = $item;
  121. }
  122. foreach ($supply_list as $supply_id => $goods_list) {
  123. $api = ApiService::getConnect(0, $supply_id);
  124. $list = $api->goodsInfo(array_column($goods_list, 'middle_goods_id'));
  125. if (!$list) {
  126. continue;
  127. }
  128. foreach ($list as $goods) {
  129. foreach ($goods as $key => $val) {
  130. if (is_array($val)) {
  131. $goods[$key] = Json::encode($val);
  132. }
  133. }
  134. $goods = GoodsModel::filterField($goods);
  135. $goods['mall_id'] = $goods_list[0]['mall_id'];
  136. $goods['supply_id'] = $supply_id;
  137. $goods['goods_id'] = $goods['id'];
  138. unset($goods['id']);
  139. unset($goods['skus']);
  140. $model = GoodsModel::find()->where(['supply_id' => $supply_id, 'goods_id' => $goods['goods_id']])->one();
  141. if (empty($model)) {
  142. $model = new GoodsModel();
  143. }
  144. if ($model->load($goods, '') && $model->save()) {
  145. // 新增,更改选品库的商品id
  146. $goods_id = $model->id;
  147. $index = array_search($goods['goods_id'], array_column($goods_list, 'middle_goods_id'));
  148. if ($index === false) {
  149. continue;
  150. }
  151. $id = $storage_id[$index] ?? 0;
  152. $id > 0 && StorageModel::updateAll(['goods_id' => $goods_id], ['id' => $id]);
  153. }
  154. }
  155. }
  156. return true;
  157. }
  158. }