DefaultController.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <?php
  2. namespace addons\BlindBox\api\modules\v1\controllers;
  3. use addons\BlindBox\common\enums\BlindBoxEnum;
  4. use addons\BlindBox\common\models\BlindBoxBonusLog;
  5. use addons\BlindBox\common\models\BlindBoxBonusLogDetail;
  6. use addons\BlindBox\common\models\BlindBoxCate;
  7. use addons\BlindBox\common\models\BlindBoxGoods;
  8. use addons\BlindBox\common\models\BlindBoxNotice;
  9. use addons\BlindBox\common\models\BlindBoxUser;
  10. use common\enums\AddonsEnum;
  11. use common\enums\StatusEnum;
  12. use common\models\common\AddonsMarketingSetting;
  13. use common\models\goods\Goods;
  14. use common\models\user\User;
  15. use Yii;
  16. use api\controllers\OnAuthController;
  17. use common\helpers\ArrayHelper;
  18. /**
  19. * 默认控制器
  20. *
  21. * Class DefaultController
  22. * @package addons\BlindBox\api\modules\v1\controllers
  23. */
  24. class DefaultController extends OnAuthController
  25. {
  26. public $modelClass = '';
  27. /**
  28. * 不用进行登录验证的方法
  29. *
  30. * 例如: ['index', 'update', 'create', 'view', 'delete']
  31. * 默认全部需要验证
  32. *
  33. * @var array
  34. */
  35. protected $authOptional = ['index'];
  36. /**
  37. * 装修首页
  38. * @return string
  39. */
  40. public function actionIndex()
  41. {
  42. $data = AddonsMarketingSetting::getOne([['mall_id' => $this->mall_id], ['addons_name' => AddonsEnum::ADDONS_NAME_BLIND_BOX], ['status' => StatusEnum::ENABLED]]);
  43. return $this->success('', $data ?? []);
  44. }
  45. public function actionUserData()
  46. {
  47. $data = BlindBoxUser::getOne([
  48. ['mall_id' => $this->mall_id],
  49. ['user_id' => $this->user_id],
  50. ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]],
  51. ], true, [], false, 'frozen_commission,total_commission,remaining_pay_money');
  52. return $this->success('', $data ?? ['frozen_commission'=>0,'total_commission'=>0,'remaining_pay_money'=>0]);
  53. }
  54. //奖金明细
  55. public function actionBonusLog()
  56. {
  57. $params = \Yii::$app->request->get();
  58. $params['where'][] = ['=', 'mall_id', $this->mall_id];
  59. $params['where'][] = ['=', 'user_id', $this->user_id];
  60. $params['where'][] = ['in', 'status', [StatusEnum::ENABLED, StatusEnum::DISABLED]];
  61. $params['where'][] = ['is_feedback'=>BlindBoxEnum::NO_FEEDBACK];
  62. $params['limit'] = 10;
  63. $params['order'] = 'id DESC';
  64. $params['select'] = 'id,mall_id,user_id,order_no,total_times,divided_times,divided_money,created_at,contribution';
  65. $pageData = BlindBoxBonusLog::listPage($params, false);
  66. if ($pageData === false) return $this->error(BlindBoxCate::getStaticError());
  67. if (!empty($pageData['list'])) {
  68. $user_id = array_column($pageData['list'], 'user_id');
  69. $user_list = User::lists(['where' => [['id' => $user_id]], 'index' => 'id', 'select' => 'id,nickname,avatar_url,mobile']);
  70. foreach ($pageData['list'] as &$item) {
  71. $item['nickname'] = $item['avatar_url'] = $item['mobile'] = '';
  72. if (isset($user_list[$item['user_id']])) {
  73. $item['nickname'] = $user_list[$item['user_id']]['nickname'];
  74. $item['avatar_url'] = $user_list[$item['user_id']]['avatar_url'];
  75. $item['mobile'] = $user_list[$item['user_id']]['mobile'];
  76. }
  77. $item['type'] = $item['order_no']['0'];
  78. }
  79. }
  80. return $this->success('操作成功', $pageData);
  81. }
  82. //奖金详情
  83. public function actionBonusLogDetail()
  84. {
  85. $params = \Yii::$app->request->get();
  86. $res = Yii::$app->services->validate->validate($params, [
  87. [['bonus_log_id'], 'required', 'message' => '请选择具体分红记录'],
  88. ]);
  89. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  90. $params['where'][] = ['mall_id' => $this->mall_id];
  91. $params['where'][] = ['bonus_log_id' => $params['bonus_log_id']];
  92. $params['where'][] = ['in', 'status', [StatusEnum::ENABLED, StatusEnum::DISABLED]];
  93. $params['where'][] = ['is_feedback'=>BlindBoxEnum::NO_FEEDBACK];
  94. $params['limit'] = 10;
  95. $params['order'] = 'id DESC';
  96. $params['select'] = 'id,mall_id,user_id,order_no,bonus_log_id,total_contribution,contribution,total_bonus,order_bonus,is_settlement,created_at';
  97. $pageData = BlindBoxBonusLogDetail::listPage($params, false);
  98. if ($pageData === false) return $this->error(BlindBoxCate::getStaticError());
  99. if (!empty($pageData['list'])) {
  100. $user_id = array_column($pageData['list'], 'user_id');
  101. $user_list = User::lists(['where' => [['id' => $user_id]], 'index' => 'id', 'select' => 'id,nickname,avatar_url,mobile']);
  102. foreach ($pageData['list'] as &$item) {
  103. $item['nickname'] = $item['avatar_url'] = $item['mobile'] = '';
  104. if (isset($user_list[$item['user_id']])) {
  105. $item['nickname'] = $user_list[$item['user_id']]['nickname'];
  106. $item['avatar_url'] = $user_list[$item['user_id']]['avatar_url'];
  107. $item['mobile'] = $user_list[$item['user_id']]['mobile'];
  108. }
  109. }
  110. }
  111. $pageData['is_settlement_map'] = BlindBoxEnum::getIsSettlementMap();
  112. return $this->success('操作成功', $pageData);
  113. }
  114. //通知列表
  115. public function actionNoticeList()
  116. {
  117. $params = \Yii::$app->request->get();
  118. $params['where'][] = ['mall_id' => $this->mall_id];
  119. $params['where'][] = ['=', 'user_id', $this->user_id];
  120. $params['where'][] = ['in', 'status', [StatusEnum::ENABLED, StatusEnum::DISABLED]];
  121. $params['limit'] = 10;
  122. $params['order'] = 'id DESC';
  123. $params['select'] = 'id,content,created_at';
  124. $pageData = BlindBoxNotice::listPage($params, false);
  125. if ($pageData === false) return $this->error(BlindBoxCate::getStaticError());
  126. return $this->success('操作成功', $pageData);
  127. }
  128. //商品列表
  129. public function actionGoodsList()
  130. {
  131. $params = \Yii::$app->request->get();
  132. $where[] = ['mall_id' => $this->mall_id];
  133. $where[] = ['status' => StatusEnum::ENABLED];
  134. if (!empty($params['cate_id'])) $where[] = ['cate_id' => $params['cate_id']];
  135. $is_bool=false;
  136. $goods_id = [];
  137. if(!empty($params['goods_id'])){
  138. $is_bool = true;
  139. $goods_id = explode(',',$params['goods_id']);
  140. if(!empty($goods_id)){
  141. $list = Goods::lists(['where'=>[['mall_id'=>$this->mall_id],['status'=>StatusEnum::ENABLED],['id'=>$goods_id],['is_on_sale'=>1]]]);
  142. $goods_id = array_column($list,'id');
  143. // $where[] = ['goods_id'=>$goods_id];
  144. }
  145. }
  146. if(!empty($params['goods_name'])){
  147. $list = Goods::lists(['where'=>[['mall_id'=>$this->mall_id],['status'=>StatusEnum::ENABLED],['like','goods_name',trim($params['goods_name'])],['is_on_sale'=>1]]]);
  148. $goods_ids = array_column($list,'id');
  149. if($is_bool){
  150. $goods_id = array_intersect($goods_id,$goods_ids);
  151. $where[] = ['goods_id'=>$goods_id];
  152. }else{
  153. $where[] = ['goods_id'=>$goods_ids];
  154. }
  155. }else{
  156. if($is_bool){
  157. $where[] = ['goods_id'=>$goods_id];
  158. }
  159. }
  160. $params['where'] = $where;
  161. $params['select'] = 'id,goods_id';
  162. $params['with'] = ['goods' => function ($query) {
  163. $select = 'id,goods_name,price,cover_pic,bannar_pic,is_attr,attr_groups,attr_groups_format,is_on_sale,status';
  164. $query->select($select)->with(['attr'=>function($query){
  165. $select = 'id,goods_id ,name,sign_id,stock,price,original_price,goods_no,weight,pic_url';
  166. $query->select($select);
  167. }]);
  168. }];
  169. $params['order'] = 'id desc';
  170. $list = BlindBoxGoods::listPage($params, false);
  171. // 剔除下架和删除的商品
  172. $goods_list = array_values(array_filter($list['list'], function($item) {
  173. return $item['goods']['is_on_sale'] && $item['goods']['status'];
  174. }));
  175. $list['list'] = $goods_list;
  176. return $this->success('操作成功', $list);
  177. }
  178. }