GoodsController.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. namespace addons\ShortVideo\api\modules\v1\controllers;
  3. use addons\ShortVideo\common\models\ShortVideoCommissionItemSetting;
  4. use addons\ShortVideo\common\models\ShortVideoConfig;
  5. use addons\ShortVideo\common\models\ShortVideoGoods;
  6. use addons\ShortVideo\common\models\ShortVideoOrderAward;
  7. use addons\ShortVideo\common\models\ShortVideoTag;
  8. use Yii;
  9. use api\controllers\OnAuthController;
  10. use common\enums\StatusEnum;
  11. use common\models\goods\Goods;
  12. use common\models\goods\GoodsCate;
  13. use common\models\goods\GoodsCateRelate;
  14. use common\models\goods\GoodsMarketing;
  15. use common\models\order\OrderDetail;
  16. use common\models\user\User;
  17. use Prophecy\Argument\Token\InArrayToken;
  18. /**
  19. * 视频商品控制器
  20. *
  21. * Class DefaultController
  22. * @package addons\ShortVideo\api\modules\v1\controllers
  23. */
  24. class GoodsController extends BaseController
  25. {
  26. public $modelClass = '';
  27. /**
  28. * 不用进行登录验证的方法
  29. *
  30. * 例如: ['index', 'update', 'create', 'view', 'delete']
  31. * 默认全部需要验证
  32. *
  33. * @var array
  34. */
  35. protected $authOptional = ['list', 'bought-list'];
  36. /**
  37. * @name:
  38. * @msg: 商品列表(发布视频页面)
  39. * @param {integer} $cate_id 商品分类id
  40. * @param {string} $goods_name 商品名称
  41. * @param {string} $order_field 排序字段
  42. * @param {string} $order_by 排序方式
  43. * @param {integer} $page 当前页码
  44. * @param {integer} $limit 每页限制条数
  45. * @return {*}
  46. */
  47. public function actionList()
  48. {
  49. if (!\Yii::$app->request->isGet) {
  50. return $this->error('请求方式错误');
  51. }
  52. $cate_id = \Yii::$app->request->get('cate_id', 0);
  53. $goods_name = \Yii::$app->request->get('goods_name');
  54. $order_field = \Yii::$app->request->get('order_field');
  55. $order_by = \Yii::$app->request->get('order_by', 'desc');
  56. $page = \Yii::$app->request->get('page', 1);
  57. $limit = \Yii::$app->request->get('limit', $this->pageSize);
  58. if (
  59. (!empty($order_field) && !in_array($order_field, ['sales', 'price'])) ||
  60. (!empty($order_by) && !in_array($order_by, ['desc', 'asc']))
  61. ) {
  62. return $this->error('参数错误');
  63. }
  64. $wheres[] = ['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'is_on_sale' => 1];
  65. if (!empty($cate_id)) {
  66. $good_cates = GoodsCateRelate::findAll(['cate_id' => $cate_id]);
  67. if (!empty($good_cates)) $wheres[] = ['id' => array_column($good_cates, 'goods_id')];
  68. }
  69. if (!empty($goods_name)) $wheres[] = ['liek', 'goods_name', $goods_name];
  70. $group_buy_goodids = GoodsMarketing::find()
  71. ->select('goods_id')
  72. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'marketing_type' => 'GroupBuy'])
  73. ->asArray()
  74. ->column();
  75. if (!empty($group_buy_goodids)) $wheres[] = ['not id', 'id', $group_buy_goodids];
  76. $order = 'sort asc,created_at desc';
  77. if (!empty($order_field) && !empty($order_by)) {
  78. $order .= ',' . $order_field . ' ' . $order_by;
  79. }
  80. $params = [
  81. 'select' => 'id,goods_name,cover_pic,price,sales_num',
  82. 'where' => $wheres,
  83. 'order' => $order,
  84. 'page' => $page,
  85. 'limit' => $limit,
  86. ];
  87. $goods = Goods::listPage($params);
  88. if (empty($goods['list'])) {
  89. if (is_array($goods['list'])) {
  90. return $this->success('success', $goods);
  91. } else {
  92. return $this->error(Goods::getStaticError());
  93. }
  94. }
  95. $configs = ShortVideoConfig::getConfig($this->mall_id);
  96. foreach ($goods['list'] as &$good) {
  97. $reward_rst = ShortVideoCommissionItemSetting::calculateReward($this->mall_id, $good['id'], $good['price']);
  98. $good['commission'] = $reward_rst['commission'];
  99. }
  100. return $this->success('success', $goods);
  101. }
  102. /**
  103. * @name:
  104. * @msg: 已购买当前商品的会员列表
  105. * @param {*}
  106. * @return {*}
  107. */
  108. public function actionBoughtList()
  109. {
  110. if (!\Yii::$app->request->isGet) {
  111. return $this->error('请求方式错误');
  112. }
  113. $video_id = \Yii::$app->request->get('video_id');
  114. $page = \Yii::$app->request->get('page', 1);
  115. $limit = \Yii::$app->request->get('limit', $this->pageSize);
  116. if (empty($video_id)) return $this->error('参数错误');
  117. $wheres[] = ['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'video_id' => $video_id];
  118. $params = [
  119. 'select' => 'id,user_id,order_id',
  120. 'where' => $wheres,
  121. 'order' => 'created_at desc',
  122. 'page' => $page,
  123. 'limit' => $limit,
  124. ];
  125. $video_orders = ShortVideoOrderAward::listPage($params);
  126. if (empty($video_orders['list'])) {
  127. if (!is_array($video_orders['list'])) {
  128. return $this->error(ShortVideoOrderAward::getStaticError());
  129. }
  130. }
  131. $user_ids = array_column($video_orders['list'], 'user_id');
  132. $users = User::find()
  133. ->select('id,nickname,avatar_url')
  134. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $user_ids])
  135. ->asArray()
  136. ->indexBy('id')
  137. ->all();
  138. $order_ids = array_column($video_orders['list'], 'order_id');
  139. $order_details = OrderDetail::find()
  140. ->select('order_id,num')
  141. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'order_id' => $order_ids])
  142. ->asArray()
  143. ->indexBy('order_id')
  144. ->all();
  145. $bought_num = 0;
  146. foreach ($video_orders['list'] as &$order) {
  147. $user = $users[$order['order_id']] ?? [];
  148. $order['nickname'] = $user['nickname'] ?? '默认会员';
  149. $order['avatar_url'] = $user['avatar_url'] ?? \Yii::$app->request->hostInfo . '/resources/img/common/default-avatar.png';
  150. $order['bought_num'] = $order_details[$order['order_id']]['num'] ?? 0;
  151. $bought_num += $order_details[$order['order_id']]['num'] ?? 0;
  152. }
  153. $bought_users = count(array_unique($user_ids));
  154. $video_orders['bought_num'] = $bought_num;
  155. $video_orders['bought_users'] = $bought_users;
  156. return $this->success('success', $video_orders);
  157. }
  158. }