GroupActivityController.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564
  1. <?php
  2. namespace addons\LuckyGroup\backend\controllers;
  3. use addons\LuckyGroup\common\enums\LuckyGroupEnum;
  4. use addons\LuckyGroup\common\models\LuckyGroupActivity;
  5. use addons\LuckyGroup\common\models\LuckyGroupActivityStatistics;
  6. use addons\LuckyGroup\common\models\LuckyGroupCategory;
  7. use addons\LuckyGroup\common\models\LuckyGroupCommissionLog;
  8. use addons\LuckyGroup\common\models\LuckyGroupGoods;
  9. use addons\LuckyGroup\common\models\LuckyGroupLevel;
  10. use addons\LuckyGroup\common\models\LuckyGroupLotteryPeriod;
  11. use addons\LuckyGroup\common\models\LuckyGroupOpenRewardLog;
  12. use addons\LuckyGroup\common\models\LuckyGroupOrder;
  13. use addons\LuckyGroup\common\models\LuckyGroupUser;
  14. use addons\LuckyGroup\common\queue\OrderPaidQueueLogic;
  15. use common\enums\StatusEnum;
  16. use common\enums\UserWalletEnum;
  17. use common\models\common\BalanceLog;
  18. use common\models\common\ScoreLog;
  19. use common\models\goods\Goods;
  20. use common\models\user\User;
  21. class GroupActivityController extends BaseController
  22. {
  23. /**
  24. * @name:
  25. * @msg: 拼团活动列表
  26. * @param {*}
  27. * @return {*}
  28. */
  29. public function actionIndex()
  30. {
  31. if (\Yii::$app->request->isAjax || \Yii::$app->request->post('flag', '') === 'EXPORT') {
  32. if (\Yii::$app->request->isGet) {
  33. $title = \Yii::$app->request->get('title');
  34. $activity_id = \Yii::$app->request->get('activity_id');
  35. $activity_status = \Yii::$app->request->get('activity_status');
  36. $start_time = \Yii::$app->request->get('start_time');
  37. $end_time = \Yii::$app->request->get('end_time');
  38. $page = \Yii::$app->request->get('page', 1);
  39. $limit = \Yii::$app->request->get('limit', $this->pageSize);
  40. $time = date('H:i:s', time());
  41. $wheres[] = ['and', ['mall_id' => $this->mall_id], ['!=', 'status', StatusEnum::DELETE]];
  42. if (!empty($title)) {
  43. $wheres[] = ['like', 'title', $title];
  44. }
  45. if (!empty($start_time)) {
  46. $wheres[] = ['>=', 'created_at', strtotime($start_time . ' 00:00:00')];
  47. }
  48. if (!empty($end_time)) {
  49. $wheres[] = ['<=', 'created_at', strtotime($end_time . ' 23:59:59')];
  50. }
  51. if (!empty($activity_id)) {
  52. $wheres[] = ['id' => $activity_id];
  53. }
  54. if (!empty($activity_status)) {
  55. if (LuckyGroupEnum::ACTIVITY_STATUS_DISABLED == $activity_status) {
  56. $wheres[] = ['status' => StatusEnum::DISABLED];
  57. } else {
  58. $wheres[] = ['status' => StatusEnum::ENABLED];
  59. switch ($activity_status) {
  60. case LuckyGroupEnum::ACTIVITY_STATUS_NOT_START:
  61. // 未开始
  62. $wheres[] = ['>=', 'start_time', $time];
  63. break;
  64. case LuckyGroupEnum::ACTIVITY_STATUS_RUNNING:
  65. // 进行中
  66. $wheres[] = ['and', ['<=', 'start_time', $time], ['>=', 'end_time', $time]];
  67. break;
  68. case LuckyGroupEnum::ACTIVITY_STATUS_FINISHED:
  69. // 已结束
  70. $wheres[] = ['<=', 'end_time', $time];
  71. break;
  72. }
  73. }
  74. }
  75. $params = [
  76. 'select' => 'id,cate_id,title,start_time,end_time,group_num,random_win_num,virtual_num,created_at,status',
  77. 'where' => $wheres,
  78. 'order' => 'created_at desc',
  79. 'page' => $page,
  80. 'limit' => $limit,
  81. ];
  82. //导出数据
  83. if (\Yii::$app->request->post('flag') === 'EXPORT') {
  84. // $data = LuckyGroupActivity::listPage($params, false, true, true);
  85. // $exp = new LuckyGroupActivityExport();
  86. // $exp->fieldsKeyList = explode(',', \Yii::$app->request->post('fields'));
  87. // $exp->export($data);
  88. // return;
  89. }
  90. $data = LuckyGroupActivity::listPage($params);
  91. // $data['exportList'] = (new LuckyGroupActivityExport())->fieldsList();
  92. if (false === $data['list']) {
  93. return $this->error(LuckyGroupActivity::getStaticError());
  94. }
  95. $activity_ids = array_column($data['list'], 'id');
  96. $activity_goods = LuckyGroupGoods::find()
  97. ->select('activity_id,count(goods_id) as number')
  98. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'activity_id' => $activity_ids])
  99. ->groupBy('activity_id')
  100. ->asArray()
  101. ->indexBy('activity_id')
  102. ->all();
  103. // dd($activity_goods, $activity_ids);
  104. foreach ($data['list'] as &$list) {
  105. $activity_good = $activity_goods[$list['id']] ?? [];
  106. $list['relate_good_number'] = $activity_good['number'] ?? 0;
  107. if ($list['status'] == StatusEnum::DISABLED) {
  108. $list['activity_status'] = LuckyGroupEnum::ACTIVITY_STATUS_DISABLED;
  109. } else {
  110. $start_time = strtotime($list['start_time']);
  111. $end_time = strtotime($list['end_time']);
  112. if ($start_time > strtotime($time)) {
  113. $list['activity_status'] = LuckyGroupEnum::ACTIVITY_STATUS_NOT_START;
  114. } else if ($end_time <= strtotime($time)) {
  115. $list['activity_status'] = LuckyGroupEnum::ACTIVITY_STATUS_FINISHED;
  116. } else {
  117. $list['activity_status'] = LuckyGroupEnum::ACTIVITY_STATUS_RUNNING;
  118. }
  119. }
  120. }
  121. $status_map = LuckyGroupEnum::getActivityStatusMap();
  122. $data['status_map'] = $status_map;
  123. return $this->success('请求成功', $data);
  124. } else {
  125. }
  126. } else {
  127. return $this->render('/activity/index');
  128. }
  129. }
  130. /**
  131. * @name:
  132. * @msg: 添加 or 编辑活动
  133. * @param {*}
  134. * @return {*}
  135. */
  136. public function actionStorage()
  137. {
  138. if (\Yii::$app->request->isAjax) {
  139. if (\Yii::$app->request->isGet) {
  140. $activity_id = \Yii::$app->request->get('id');
  141. $activity_cates = LuckyGroupCategory::find()
  142. ->select('id,sort,title')
  143. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])
  144. ->orderBy('sort asc,created_at desc')
  145. ->asArray()
  146. ->all();
  147. $level_list = LuckyGroupLevel::find()
  148. ->select('id,name,level')
  149. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])
  150. ->orderBy('level asc')
  151. ->asArray()
  152. ->indexBy('level')
  153. ->all();
  154. $currency_list = [
  155. ["code" => "score", "name" => "积分"],
  156. ["code" => "balance", "name" => "余额"],
  157. ];
  158. if (!empty($activity_id)) {
  159. // 编辑活动
  160. $activity = LuckyGroupActivity::find()
  161. ->where(['mall_id' => $this->mall_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED], 'id' => $activity_id])
  162. ->asArray()
  163. ->one();
  164. $start_time = strtotime($activity['start_time']);
  165. $end_time = strtotime($activity['end_time']);
  166. $time = time();
  167. $activity['activityTime'] = [$start_time * 1000, $end_time * 1000];
  168. if ($start_time > $time) {
  169. $activity['activity_status'] = LuckyGroupEnum::ACTIVITY_STATUS_NOT_START;
  170. } else if ($end_time <= $time) {
  171. $activity['activity_status'] = LuckyGroupEnum::ACTIVITY_STATUS_FINISHED;
  172. } else {
  173. $activity['activity_status'] = LuckyGroupEnum::ACTIVITY_STATUS_RUNNING;
  174. }
  175. // 如果活动已经停用,就算是在活动设置的时间范围内,也认为是 未开始状态
  176. if ($activity['status'] == StatusEnum::DISABLED) {
  177. $activity['activity_status'] = LuckyGroupEnum::ACTIVITY_STATUS_NOT_START;
  178. }
  179. if (!empty($activity['attend_award_setting'])) {
  180. $activity['attend_award_setting'] = json_decode($activity['attend_award_setting'], true);
  181. }
  182. if (!empty($activity['equal_commission_setting'])) {
  183. $activity['equal_commission_setting'] = json_decode($activity['equal_commission_setting'], true);
  184. }else{
  185. unset($activity['equal_commission_setting']);
  186. $equal_commission_setting = [];
  187. foreach ($level_list as $val){
  188. $equal_commission_setting[]=[
  189. 'level'=>$val['level'],
  190. 'equal_commission'=>0,
  191. ];
  192. }
  193. $activity['equal_commission_setting'] = $equal_commission_setting;
  194. }
  195. if (!empty($activity['over_commission_setting'])) {
  196. $activity['over_commission_setting'] = json_decode($activity['over_commission_setting'], true);
  197. }else{
  198. unset($activity['over_commission_setting']);
  199. $over_commission_setting = [];
  200. foreach ($level_list as $val){
  201. $over_commission_setting[]=[
  202. 'level'=>$val['level'],
  203. 'over_commission'=>0,
  204. ];
  205. }
  206. $activity['over_commission_setting'] = $over_commission_setting;
  207. }
  208. if (!empty($activity['team_commission_setting'])) {
  209. $activity['team_commission_setting'] = json_decode($activity['team_commission_setting'], true);
  210. }else{
  211. unset($activity['team_commission_setting']);
  212. $team_commission_setting = [];
  213. foreach ($level_list as $val){
  214. $team_commission_setting[]=[
  215. 'level'=>$val['level'],
  216. 'team_commission'=>0,
  217. ];
  218. }
  219. $activity['team_commission_setting'] = $team_commission_setting;
  220. }
  221. if (!empty($activity['win_award_setting'])) {
  222. $activity['win_award_setting'] = json_decode($activity['win_award_setting'], true);
  223. }
  224. $lucky_group_good = LuckyGroupGoods::find()
  225. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'activity_id' => $activity_id])
  226. ->asArray()
  227. ->all();
  228. $goods_list = Goods::find()
  229. ->select('id as goods_id,goods_name,price,original_price,cover_pic,status,stock as goods_stock')
  230. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => array_column($lucky_group_good, 'goods_id')])
  231. ->asArray()
  232. ->all();
  233. } else {
  234. $activity = [];
  235. $goods_list = [];
  236. }
  237. $query = LuckyGroupGoods::find()
  238. ->select('goods_id')
  239. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]);
  240. if (!empty($activity_id)) {
  241. $query->andWhere(['!=', 'activity_id', $activity_id]);
  242. }
  243. $activity_goods_ids = $query->asArray()->column();
  244. return $this->success('success', compact('activity_cates', 'activity', 'level_list', 'currency_list', 'goods_list', 'activity_goods_ids'));
  245. } else {
  246. $post = \Yii::$app->request->post();
  247. // dd($post);
  248. $rules = [
  249. [[
  250. 'title', 'start_time', 'end_time', 'group_num', 'random_win_num', 'expend_type', 'attend_user_type', 'attend_award_setting',
  251. 'win_times', 'win_award_setting', 'is_percent_pool_trans', 'pool_trans_money', 'enable_commison', 'goods_ids', 'cate_id'
  252. ], 'required'],
  253. [['title', 'start_time', 'end_time'], 'string', 'max' => 20],
  254. [['goods_ids', 'expend_type'], 'string'],
  255. [['group_num', 'random_win_num', 'attend_user_type', 'win_times', 'is_percent_pool_trans', 'enable_commison', 'cate_id'], 'integer'],
  256. [['id', 'virtual_num', 'team_commission_setting', 'equal_commission_setting', 'over_commission_setting', 'expend_num'], 'safe'],
  257. ];
  258. $res = \Yii::$app->services->validate->validate($post, $rules);
  259. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  260. $group_num = $post['group_num'];
  261. $random_win_num = $post['random_win_num'];
  262. $virtual_num = $post['virtual_num']??0;
  263. if($group_num<($random_win_num+$virtual_num)) return $this->error('成团人数<随机拼中人数+虚拟人数');
  264. // dd($post);
  265. if (!empty($post['id'])) {
  266. $activity = LuckyGroupActivity::findOne(['mall_id' => $this->mall_id, 'id' => $post['id'], 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]);
  267. if (empty($activity)) {
  268. return $this->error('活动不存在');
  269. }
  270. $start_time = strtotime($activity->start_time);
  271. $end_time = strtotime($activity->end_time);
  272. $time = time();
  273. if ($time >= $start_time && $time <= $end_time && $activity->status == StatusEnum::ENABLED) {
  274. return $this->error('正在进行中的活动不能编辑修改,请先停止活动后再修改');
  275. }
  276. }
  277. $res = LuckyGroupActivity::alterateActivity($this->mall_id, $post);
  278. if (false === $res) {
  279. return $this->error(LuckyGroupActivity::getStaticError());
  280. }
  281. return $this->success('操作成功');
  282. }
  283. } else {
  284. return $this->render('/activity/edit');
  285. }
  286. }
  287. /**
  288. * @name:
  289. * @msg: 删除拼团活动
  290. * @param {*}
  291. * @return {*}
  292. */
  293. public function actionDelete()
  294. {
  295. if (!\Yii::$app->request->isPost) {
  296. return $this->error('请求方式错误');
  297. }
  298. $id = \Yii::$app->request->post('id');
  299. if (empty($id)) {
  300. return $this->error('参数错误');
  301. }
  302. $activity = LuckyGroupActivity::findOne(['mall_id' => $this->mall_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED], 'id' => $id]);
  303. if (empty($activity)) {
  304. return $this->error('活动不存在');
  305. }
  306. $time = time();
  307. if (strtotime($activity->start_time) <= $time && $time <= strtotime($activity->end_time) && $activity->status == StatusEnum::ENABLED) {
  308. return $this->error('活动在进行中不能删除');
  309. }
  310. $res = (new OrderPaidQueueLogic())->delActivity($id);
  311. if ($res == false) return $this->error('该拼团活动还有待开团订单,请先禁用活动,等待清空队列后,再删除数据');
  312. $params = [
  313. 'activity_id' => $id,
  314. 'status' => StatusEnum::DELETE,
  315. ];
  316. $res = LuckyGroupActivity::deleteActivity($this->mall_id, $params);
  317. if (false === $res) {
  318. return $this->error(LuckyGroupActivity::getStaticError());
  319. }
  320. return $this->success('删除成功');
  321. }
  322. /**
  323. * @name:
  324. * @msg: 拼团活动切换状态
  325. * @param {*}
  326. * @return {*}
  327. */
  328. public function actionSwitchAcitity()
  329. {
  330. if (!\Yii::$app->request->isPost) {
  331. return $this->error('请求方式错误');
  332. }
  333. $id = \Yii::$app->request->post('id');
  334. $activity_status = \Yii::$app->request->post('status');
  335. if (empty($id) || !in_array($activity_status, [2, 3])) {
  336. return $this->error('参数错误');
  337. }
  338. $activity = LuckyGroupActivity::findOne(['mall_id' => $this->mall_id, 'id' => $id]);
  339. if (empty($activity)) {
  340. return $this->error('活动不存在');
  341. }
  342. if ($activity_status == 2) {
  343. // 启用
  344. if ($activity->status != StatusEnum::DISABLED) {
  345. return $this->error('活动数据异常:DISABLED');
  346. }
  347. $tip = '启用';
  348. } else {
  349. // 停用
  350. if ($activity->status != StatusEnum::ENABLED) {
  351. return $this->error('活动数据异常:DISABLED');
  352. }
  353. $tip = '停用';
  354. }
  355. $status = $activity_status == 2 ? StatusEnum::ENABLED : StatusEnum::DISABLED;
  356. $activity->status = $status;
  357. $res = $activity->save();
  358. if (false === $res) {
  359. return $this->error($tip . '失败:' . LuckyGroupActivity::getStaticError());
  360. }
  361. if (3 == $activity_status) {
  362. // TODO: 触发拼团活动停止事件
  363. (new OrderPaidQueueLogic())->trigger_disable_activity($this->mall_id, $id);
  364. }
  365. return $this->success($tip . '成功');
  366. }
  367. /**
  368. * @name:
  369. * @msg: 拼团活动数据统计
  370. * @param {*}
  371. * @return {*}
  372. */
  373. public function actionActivityData()
  374. {
  375. if (!\Yii::$app->request->isAjax) {
  376. return $this->render('/activity/stat-data');
  377. }
  378. if (\Yii::$app->request->isGet) {
  379. $activity_id = \Yii::$app->request->get('activity_id');
  380. if (empty($activity_id)) {
  381. return $this->error('参数错误');
  382. }
  383. $activity = LuckyGroupActivity::findOne(['mall_id' => $this->mall_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED], 'id' => $activity_id]);
  384. if (empty($activity)) {
  385. return $this->error('活动不存在');
  386. }
  387. /* 顶部统计数据 --- start --- */
  388. $activity_statistics = LuckyGroupActivityStatistics::find()
  389. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'activity_id' => $activity_id])
  390. ->asArray()
  391. ->one();
  392. /* 顶部统计数据 --- start --- */
  393. /* 商品列表(用于搜索) ---- start ---- */
  394. $group_goods_ids = LuckyGroupGoods::find()
  395. ->select('goods_id')
  396. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'activity_id' => $activity_id])
  397. ->asArray()
  398. ->column();
  399. $goods = Goods::find()
  400. ->select('id,goods_name,price,cover_pic,stock')
  401. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $group_goods_ids])
  402. ->asArray()
  403. ->all();
  404. /* 商品列表(用于搜索) ---- end ---- */
  405. /* 拼团活动明细列表 ---- start ----- */
  406. $goods_id = \Yii::$app->request->get('goods_id');
  407. $lottery_period_query = LuckyGroupLotteryPeriod::find() ->select('mall_id,activity_id,goods_id,number,win_order_ids,loss_order_ids,created_at,open_reward_log_id')->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'activity_id' => $activity_id]);
  408. if (!empty($goods_id)) {
  409. $lottery_period_query->andWhere(['goods_id' => $goods_id]);
  410. }
  411. $lottery_periods = $lottery_period_query
  412. ->select('goods_id,open_reward_log_id,win_order_ids,number')
  413. ->groupBy('goods_id,number')
  414. ->orderBy('number desc,created_at desc')
  415. ->asArray()
  416. ->all();
  417. if (!empty($lottery_periods)) {
  418. $goods_ids = array_column($lottery_periods, 'goods_id');
  419. $goods_list = Goods::find()
  420. ->select('id,goods_name,cover_pic')
  421. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $goods_ids])
  422. ->asArray()
  423. ->indexBy('id')
  424. ->all();
  425. $open_reward_log_ids = array_column($lottery_periods, 'open_reward_log_id');
  426. $open_reward_logs = LuckyGroupOpenRewardLog::find()
  427. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $open_reward_log_ids])
  428. ->asArray()
  429. ->indexBy('id')
  430. ->all();
  431. foreach ($lottery_periods as &$lottery_period) {
  432. $good = $goods_list[$lottery_period['goods_id']] ?? [];
  433. $open_reward_log = $open_reward_logs[$lottery_period['open_reward_log_id']] ?? [];
  434. $lottery_period['goods_name'] = $good['goods_name'] ?? '';
  435. $lottery_period['cover_pic'] = $good['cover_pic'] ?? '';
  436. // 状态:如果所有人都拼不中,认为是失败
  437. if (empty($lottery_period['win_order_ids'])) {
  438. $lottery_period['status'] = 0;
  439. } else {
  440. $lottery_period['status'] = 1;
  441. }
  442. // 成团金额
  443. $lottery_period['group_amounts'] = $open_reward_log['attend_reward_amounts'] ?? 0;
  444. // 分配奖金池金额
  445. $lottery_period['bonus_pool_amounts'] = $open_reward_log['distribute_bonus_pool_amounts'] ?? 0;
  446. // 消耗积分、余额
  447. $lottery_period['deplete_balances'] = $lottery_period['deplete_scores'] = 0;
  448. if ('balance' == $open_reward_log['expend_type']) {
  449. $expend_num = $open_reward_log['expend_num'] ?? 0;
  450. $peoples = $open_reward_log['group_require_num'] - $open_reward_log['virtual_num'];
  451. $peoples = max($peoples, 0);
  452. $deplete_balances = bcmul($expend_num, $peoples, 2);
  453. $lottery_period['deplete_balances'] = $deplete_balances;
  454. }
  455. if ('score' == $open_reward_log['expend_type']) {
  456. $expend_num = $open_reward_log['expend_num'] ?? 0;
  457. $peoples = $open_reward_log['group_require_num'] - $open_reward_log['virtual_num'];
  458. $peoples = max($peoples, 0);
  459. $deplete_scores = bcmul($expend_num, $peoples, 2);
  460. $lottery_period['deplete_scores'] = $deplete_scores;
  461. }
  462. // 拼中奖励余额
  463. $lottery_period['win_reward_balances'] = $open_reward_log['win_reward_balances'] ?? 0;
  464. // 拼中奖励积分
  465. $lottery_period['win_reward_scores'] = $open_reward_log['win_reward_scores'] ?? 0;
  466. }
  467. }
  468. /* 拼团活动明细列表 ---- end ----- */
  469. return $this->success('success', compact('activity_statistics', 'goods', 'lottery_periods'));
  470. }
  471. }
  472. /**
  473. * @name:
  474. * @msg: 某一期开奖参团会员列表
  475. * @param {*}
  476. * @return {*}
  477. */
  478. public function actionAttendUserList()
  479. {
  480. if (!\Yii::$app->request->isGet) {
  481. return $this->error('请求方式错误');
  482. }
  483. $number = \Yii::$app->request->get('number');
  484. $activity_id = \Yii::$app->request->get('activity_id');
  485. if (empty($number)) {
  486. return $this->error('参数错误');
  487. }
  488. $user_ids = LuckyGroupLotteryPeriod::find()
  489. ->select('user_id')
  490. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'activity_id' => $activity_id, 'number' => $number])
  491. ->asArray()
  492. ->column();
  493. if (!empty($user_ids)) {
  494. $user_ids = array_flip(array_flip($user_ids));
  495. $group_users = LuckyGroupUser::find()
  496. ->select('user_id,created_at')
  497. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'user_id' => $user_ids])
  498. ->asArray()
  499. ->indexBy('user_id')
  500. ->all();
  501. $users = User::find()
  502. ->select('id,nickname,avatar_url,mobile')
  503. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $user_ids])
  504. ->asArray()
  505. ->all();
  506. foreach ($users as &$user) {
  507. $group_user = $group_users[$user['id']] ?? [];
  508. $user['created_at'] = $group_user['created_at'] ?? 0;
  509. if (empty($user['avatar_url'])) {
  510. $user['avatar_url'] = \Yii::$app->request->hostInfo . '/resources/img/common/default-avatar.png';
  511. }
  512. }
  513. } else {
  514. $users = [];
  515. }
  516. return $this->success('success', $users);
  517. }
  518. public function actionGetData(){
  519. if (!\Yii::$app->request->isAjax) {
  520. return $this->render('/activity/queue-data');
  521. }
  522. $activity_id = \Yii::$app->request->get('activity_id');
  523. $activity_goods_list = LuckyGroupGoods::lists([
  524. 'where'=>[
  525. ['activity_id'=>$activity_id],
  526. ['status'=>StatusEnum::ENABLED]
  527. ],
  528. 'with'=>['activity','goods']
  529. ]);
  530. if(empty($activity_goods_list)) return $this->success('',[]);
  531. foreach ($activity_goods_list as $k=>&$item){
  532. $logic = new OrderPaidQueueLogic();
  533. $activity_id = $item['activity_id'];
  534. $queue = $logic->getQueueName($activity_id, $item['goods_id']);
  535. // if(empty($queue)) unset($activity_goods_list[$k]);
  536. //获取队列长度
  537. $queue_len = \Yii::$app->redis->llen($queue);
  538. $item['queue_len'] =$queue_len;
  539. }
  540. return $this->success('',['list'=>$activity_goods_list]);
  541. }
  542. }