AwardController.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: wniu
  5. * Date: 2022/3/31
  6. * Time: 9:54 上午
  7. */
  8. namespace addons\LuckyGroup\api\modules\v1\controllers;
  9. use addons\LuckyGroup\common\enums\LuckyGroupEnum;
  10. use addons\LuckyGroup\common\models\LuckyGroupBonusLog;
  11. use addons\LuckyGroup\common\models\LuckyGroupBonusPool;
  12. use addons\LuckyGroup\common\models\LuckyGroupFrozenLog;
  13. use addons\LuckyGroup\common\models\LuckyGroupUser;
  14. use api\controllers\OnAuthController;
  15. use common\enums\AddonsEnum;
  16. use common\enums\AssetsType;
  17. use common\enums\StatusEnum;
  18. use common\enums\UserWalletEnum;
  19. use common\models\common\CapitalLog;
  20. use common\models\user\User;
  21. use common\models\user\UserPartitionRelationship;
  22. class AwardController extends OnAuthController
  23. {
  24. public $modelClass = '';
  25. /**
  26. * 不用进行登录验证的方法
  27. *
  28. * 例如: ['index', 'update', 'create', 'view', 'delete']
  29. * 默认全部需要验证
  30. *
  31. * @var array
  32. */
  33. protected $authOptional = ['index'];
  34. /**
  35. * 奖金池
  36. * 1,奖金池:虚拟奖金池+实际奖金。瓜分人数:虚拟人数+实际瓜分人数
  37. * @Author pin
  38. * @DateTime 2021-04-20 14:48:47
  39. * @return void
  40. * @copyright: Copyright (c) 2020 广东七件事集团
  41. */
  42. public function actionBonusPool()
  43. {
  44. $res = [
  45. 'total_bonus' => 0,
  46. 'my_bonus' => 0,
  47. 'already_give' => 0,
  48. 'wait_give' => 0,
  49. 'in_user_num' => 0,
  50. ];
  51. $frozen_log_list = LuckyGroupFrozenLog::lists(['where' => [
  52. ['<>', 'is_send', 1],
  53. ['=', 'prize_type', UserWalletEnum::POOL_REWARD],
  54. ['=', 'mall_id', $this->mall_id],
  55. ],
  56. 'order' => 'created_at asc'
  57. ], false);
  58. $bonus_pool_conf = \Yii::$app->services->setting->addons->get($this->mall_id, LuckyGroupEnum::ADDONS_NAME, 'bonus_pool');
  59. $pool_win_num = $bonus_pool_conf['cond_complete_num'] ?? 0; //奖金池分红拼中次数条件
  60. $user_id_arr = array_column($frozen_log_list, 'user_id');
  61. $data = LuckyGroupBonusPool::getOne([['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]]);
  62. $group_user_list = LuckyGroupUser::lists(['where' => [['user_id' => $user_id_arr], ['>=', 'win_num', $pool_win_num]], 'index' => 'user_id'], false);
  63. $user_wait_send_num = count($group_user_list);
  64. $res['in_user_num'] = $user_wait_send_num;
  65. //获取拼团用户
  66. $group_user = LuckyGroupUser::getGroupUser($this->mall_id, $this->user_id);
  67. if ($group_user === false) return $this->error(LuckyGroupUser::getStaticError());
  68. if ($data) {
  69. $res['total_bonus'] = $data->money;
  70. $res['my_bonus'] = $group_user->pool_commission;
  71. $res['wait_give'] = $group_user->frozen_commission;
  72. $res['already_give'] = bcsub($group_user->pool_commission, $group_user->frozen_commission, 2);
  73. }
  74. return $this->success('success', $res);
  75. }
  76. public function actionGetExpandNum()
  77. {
  78. $count1 = UserPartitionRelationship::getChildCounts($this->user_id, 1);
  79. $count2 = UserPartitionRelationship::getChildCounts($this->user_id, 2);
  80. return $this->success('success', ['level_one' => $count1, 'level_two' => $count2, 'all' => $count1 + $count2]);
  81. }
  82. /**
  83. * 我的推广
  84. * User: wniu
  85. * Date: 2022/3/31
  86. * Time: 3:36 下午
  87. *
  88. */
  89. public function actionExpand()
  90. {
  91. $get = \Yii::$app->request->get();
  92. $res = \Yii::$app->services->validate->validate($get, [
  93. [['level'], 'required'],
  94. ]);
  95. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  96. $params['where'][] = ['=', 'status', StatusEnum::ENABLED];
  97. $params['select'] = 'id,nickname,avatar_url,created_at';
  98. if ($get['level'] == 1) {
  99. $children_id_arr = UserPartitionRelationship::getChildIdArr($this->user_id, 1);
  100. } else {
  101. $children_id_arr = UserPartitionRelationship::getChildIdArr($this->user_id, 2);
  102. }
  103. $params['where'][] = ['in', 'id', $children_id_arr];
  104. $user_list = User::listPage($params);
  105. $group_list = [];
  106. if ($user_list['list']) {
  107. $group_ids = array_column($user_list['list'], 'id');
  108. $group_list = LuckyGroupUser::lists(['where' => [['in', 'user_id', $group_ids]], 'select' => 'user_id,attend_money', 'index' => 'user_id']);
  109. foreach ($user_list['list'] as $k => &$v) {
  110. $v['attend_money'] = 0;
  111. if (isset($group_list[$v['id']])) {
  112. $v['attend_money'] = $group_list[$v['id']]['attend_money'];
  113. }
  114. }
  115. }
  116. return $this->success('success', $user_list);
  117. }
  118. /**
  119. * 分红池排行榜
  120. * User: wniu
  121. * Date: 2022/3/31
  122. * Time: 3:36 下午
  123. *
  124. */
  125. public function actionRankList()
  126. {
  127. $params = \Yii::$app->request->get();
  128. $params['where'] = [
  129. ['mall_id' => $this->mall_id]
  130. ];
  131. $params['order'] = 'win_num desc ,user_id desc';
  132. $params['select'] = 'pool_commission ,user_id,win_num';
  133. $params['with'] = ['user'];
  134. $list = LuckyGroupUser::listPage($params);
  135. if ($list['list']) {
  136. $n = ($list['page'] - 1) * $list['page_size'] + 1;
  137. foreach ($list['list'] as $k => &$v) {
  138. $v['rank'] = $n;
  139. $n++;
  140. }
  141. }
  142. return $this->success('success', $list);
  143. }
  144. /**
  145. * 往期奖金列表
  146. * User: wniu
  147. * Date: 2022/3/31
  148. * Time: 3:37 下午
  149. *
  150. */
  151. public function actionHistoryList()
  152. {
  153. $params['where'] = [
  154. ['mall_id' => $this->mall_id]
  155. ];
  156. $params['order'] = 'created_at desc';
  157. $params['select'] = 'created_at,user_num,money,user_price';
  158. $list = LuckyGroupBonusLog::listPage($params);
  159. if(!empty($list['list'])){
  160. foreach ($list['list'] as &$item){
  161. if(empty($item['user_num'])) $item['user_price'] = 0;
  162. }
  163. }
  164. return $this->success('success', $list);
  165. }
  166. /**
  167. * 我的收益
  168. * User: wniu
  169. * Date: 2022/3/31
  170. * Time: 4:25 下午
  171. *
  172. */
  173. public function actionMyList()
  174. {
  175. $get = \Yii::$app->request->get();
  176. $res = \Yii::$app->services->validate->validate($get, [
  177. [['send_type', 'money_type'], 'required'],
  178. ]);
  179. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  180. $params['where'] = [
  181. ['mall_id' => $this->mall_id],
  182. ['change_type' => 'add'],
  183. ['user_id' => $this->user_id],
  184. ['from_type' => AddonsEnum::ADDONS_NAME_LUCKY_GROUP]
  185. ];
  186. $params['select'] = 'desc,capital_type,change_num,created_at';
  187. $params['order'] = 'created_at desc';
  188. $award = AssetsType::REWARD_MAP;
  189. $frozen = '';
  190. if ($get['send_type'] == 'wait') {//待结算
  191. $frozen = '_frozen';
  192. }
  193. if ($get['money_type'] == 'balance') {
  194. $capital_type = [
  195. UserWalletEnum::FIRST,
  196. UserWalletEnum::SECOND,
  197. UserWalletEnum::ATTEND_REWARD,
  198. UserWalletEnum::WIN_REWARD,
  199. UserWalletEnum::POOL_REWARD,
  200. UserWalletEnum::INVITE_REWARD,
  201. ];
  202. $params['where'][] = ['in','capital_type',$capital_type];
  203. $wallet_type = 'balance' . $frozen;
  204. } elseif ($get['money_type'] == 'score') {
  205. $wallet_type = 'score' . $frozen;
  206. } elseif ($get['money_type'] == 'commission') {
  207. $wallet_type = 'commission' . $frozen;
  208. }
  209. CapitalLog::$capitalType = "{$wallet_type}";
  210. $list = CapitalLog::listPage($params);
  211. if ($list['list']) {
  212. foreach ($list['list'] as $k => &$v) {
  213. $v['text'] = isset($award[$v['capital_type']]) ? $award[$v['capital_type']] : '';
  214. $v['created_at'] = date('Y-m-d H:i:s', $v['created_at']);
  215. }
  216. }
  217. return $this->success('success', $list);
  218. }
  219. }