| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- <?php
- namespace addons\ShortVideo\api\modules\v1\controllers;
- use addons\ShortVideo\common\models\ShortVideoCommissionItemSetting;
- use addons\ShortVideo\common\models\ShortVideoConfig;
- use addons\ShortVideo\common\models\ShortVideoGoods;
- use addons\ShortVideo\common\models\ShortVideoOrderAward;
- use addons\ShortVideo\common\models\ShortVideoTag;
- use Yii;
- use api\controllers\OnAuthController;
- use common\enums\StatusEnum;
- use common\models\goods\Goods;
- use common\models\goods\GoodsCate;
- use common\models\goods\GoodsCateRelate;
- use common\models\goods\GoodsMarketing;
- use common\models\order\OrderDetail;
- use common\models\user\User;
- use Prophecy\Argument\Token\InArrayToken;
- /**
- * 视频商品控制器
- *
- * Class DefaultController
- * @package addons\ShortVideo\api\modules\v1\controllers
- */
- class GoodsController extends BaseController
- {
- public $modelClass = '';
- /**
- * 不用进行登录验证的方法
- *
- * 例如: ['index', 'update', 'create', 'view', 'delete']
- * 默认全部需要验证
- *
- * @var array
- */
- protected $authOptional = ['list', 'bought-list'];
- /**
- * @name:
- * @msg: 商品列表(发布视频页面)
- * @param {integer} $cate_id 商品分类id
- * @param {string} $goods_name 商品名称
- * @param {string} $order_field 排序字段
- * @param {string} $order_by 排序方式
- * @param {integer} $page 当前页码
- * @param {integer} $limit 每页限制条数
- * @return {*}
- */
- public function actionList()
- {
- if (!\Yii::$app->request->isGet) {
- return $this->error('请求方式错误');
- }
- $cate_id = \Yii::$app->request->get('cate_id', 0);
- $goods_name = \Yii::$app->request->get('goods_name');
- $order_field = \Yii::$app->request->get('order_field');
- $order_by = \Yii::$app->request->get('order_by', 'desc');
- $page = \Yii::$app->request->get('page', 1);
- $limit = \Yii::$app->request->get('limit', $this->pageSize);
- if (
- (!empty($order_field) && !in_array($order_field, ['sales', 'price'])) ||
- (!empty($order_by) && !in_array($order_by, ['desc', 'asc']))
- ) {
- return $this->error('参数错误');
- }
- $wheres[] = ['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'is_on_sale' => 1];
- if (!empty($cate_id)) {
- $good_cates = GoodsCateRelate::findAll(['cate_id' => $cate_id]);
- if (!empty($good_cates)) $wheres[] = ['id' => array_column($good_cates, 'goods_id')];
- }
- if (!empty($goods_name)) $wheres[] = ['liek', 'goods_name', $goods_name];
- $group_buy_goodids = GoodsMarketing::find()
- ->select('goods_id')
- ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'marketing_type' => 'GroupBuy'])
- ->asArray()
- ->column();
- if (!empty($group_buy_goodids)) $wheres[] = ['not id', 'id', $group_buy_goodids];
- $order = 'sort asc,created_at desc';
- if (!empty($order_field) && !empty($order_by)) {
- $order .= ',' . $order_field . ' ' . $order_by;
- }
- $params = [
- 'select' => 'id,goods_name,cover_pic,price,sales_num',
- 'where' => $wheres,
- 'order' => $order,
- 'page' => $page,
- 'limit' => $limit,
- ];
- $goods = Goods::listPage($params);
- if (empty($goods['list'])) {
- if (is_array($goods['list'])) {
- return $this->success('success', $goods);
- } else {
- return $this->error(Goods::getStaticError());
- }
- }
- $configs = ShortVideoConfig::getConfig($this->mall_id);
- foreach ($goods['list'] as &$good) {
- $reward_rst = ShortVideoCommissionItemSetting::calculateReward($this->mall_id, $good['id'], $good['price']);
- $good['commission'] = $reward_rst['commission'];
- }
- return $this->success('success', $goods);
- }
- /**
- * @name:
- * @msg: 已购买当前商品的会员列表
- * @param {*}
- * @return {*}
- */
- public function actionBoughtList()
- {
- if (!\Yii::$app->request->isGet) {
- return $this->error('请求方式错误');
- }
- $video_id = \Yii::$app->request->get('video_id');
- $page = \Yii::$app->request->get('page', 1);
- $limit = \Yii::$app->request->get('limit', $this->pageSize);
- if (empty($video_id)) return $this->error('参数错误');
- $wheres[] = ['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'video_id' => $video_id];
- $params = [
- 'select' => 'id,user_id,order_id',
- 'where' => $wheres,
- 'order' => 'created_at desc',
- 'page' => $page,
- 'limit' => $limit,
- ];
- $video_orders = ShortVideoOrderAward::listPage($params);
- if (empty($video_orders['list'])) {
- if (!is_array($video_orders['list'])) {
- return $this->error(ShortVideoOrderAward::getStaticError());
- }
- }
- $user_ids = array_column($video_orders['list'], 'user_id');
- $users = User::find()
- ->select('id,nickname,avatar_url')
- ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $user_ids])
- ->asArray()
- ->indexBy('id')
- ->all();
- $order_ids = array_column($video_orders['list'], 'order_id');
- $order_details = OrderDetail::find()
- ->select('order_id,num')
- ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'order_id' => $order_ids])
- ->asArray()
- ->indexBy('order_id')
- ->all();
- $bought_num = 0;
- foreach ($video_orders['list'] as &$order) {
- $user = $users[$order['order_id']] ?? [];
- $order['nickname'] = $user['nickname'] ?? '默认会员';
- $order['avatar_url'] = $user['avatar_url'] ?? \Yii::$app->request->hostInfo . '/resources/img/common/default-avatar.png';
- $order['bought_num'] = $order_details[$order['order_id']]['num'] ?? 0;
- $bought_num += $order_details[$order['order_id']]['num'] ?? 0;
- }
- $bought_users = count(array_unique($user_ids));
- $video_orders['bought_num'] = $bought_num;
- $video_orders['bought_users'] = $bought_users;
- return $this->success('success', $video_orders);
- }
- }
|