DefaultController.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <?php
  2. namespace addons\Boss\api\modules\v1\controllers;
  3. use addons\Boss\common\enums\LevelEnum;
  4. use addons\Boss\common\models\AddonsBoss;
  5. use addons\Boss\common\models\AddonsBossCommissionLog;
  6. use addons\Boss\common\models\AddonsBossLevel;
  7. use addons\ZaoDoubleCopy\common\models\ZaoDoubleCopyUser;
  8. use common\enums\AddonsEnum;
  9. use addons\Boss\common\models\AddonsBossRevenueLog;
  10. use addons\Boss\common\models\AddonsBossRewardLog;
  11. use addons\Boss\common\models\BossPoolPrizeCommissionLog;
  12. use common\enums\StatusEnum;
  13. use common\models\mall\MallAddons;
  14. use Yii;
  15. use api\controllers\OnAuthController;
  16. /**
  17. * 默认控制器
  18. *
  19. * Class DefaultController
  20. * @package addons\Boss\api\modules\v1\controllers
  21. */
  22. class DefaultController extends OnAuthController
  23. {
  24. public $modelClass = '';
  25. public $enableCsrfValidation = false;
  26. /**
  27. * 不用进行登录验证的方法
  28. *
  29. * 例如: ['index', 'update', 'create', 'view', 'delete']
  30. * 默认全部需要验证
  31. *
  32. * @var array
  33. */
  34. // protected $authOptional = ['index'];
  35. /**
  36. * 股东分红首页
  37. *
  38. * @return string
  39. */
  40. public function actionIndex()
  41. {
  42. if (Yii::$app->request->isGet) {
  43. $get = Yii::$app->request->get();
  44. // 检查提交的参数
  45. $res = Yii::$app->services->validate->validate($get, [
  46. [['page', 'limit'], 'integer']
  47. ]);
  48. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  49. $data['user_id'] = $this->user_id;
  50. $data['nickname'] = $this->user->nickname ?? '';
  51. $data['avatar_url'] = $this->user->avatar_url ?? '';
  52. // 获取股东信息
  53. $boss = AddonsBoss::getOne([['mall_id' => $this->mall_id, 'user_id' => $this->user_id, 'status' => StatusEnum::ENABLED]]);
  54. // 数据初始化
  55. $amounts = 0;
  56. $commission = 0;
  57. // 获取收益列表
  58. $where = [];
  59. $where[] = ['=', 'mall_id', $this->mall_id];
  60. $where[] = ['=', 'user_id', $this->user_id];
  61. $where[] = ['=', 'status', StatusEnum::ENABLED];
  62. $order = 'created_at desc,end_time desc';
  63. $select = 'amounts,commission,type,compute_period,revenue,start_time,end_time,from_type';
  64. $params = array('where' => $where, 'order' => $order, 'select' => $select, 'limit' => $get['limit']);
  65. $digital_name = \Yii::$app->services->setting->mall->get($this->mall_id, 'digital.name') ?? '数字币';
  66. $list = AddonsBossCommissionLog::listPage($params, false, true);
  67. $is_has = [];
  68. if(!empty($list['list'])){
  69. $start_time = $list['list'][0]['start_time'];
  70. $end_time = $list['list'][0]['end_time'];
  71. }
  72. $amounts = 0;
  73. $logInfo = AddonsBossCommissionLog::find()->where(['user_id' => $this->user_id, 'status'=>[StatusEnum::ENABLED], 'mall_id' => $this->mall_id, 'type' => 1])->orderBy("end_time desc, id desc")->one();
  74. if(!empty($logInfo)){
  75. $amounts = $logInfo->amounts;
  76. }
  77. foreach ($list['list'] as $key => &$item) {
  78. if($item['start_time']==$start_time && $item['end_time']==$end_time){
  79. $commission += $item['commission'];
  80. }
  81. $item['start_time'] = date_format(date_create($item['start_time']), "Y-m-d");
  82. $item['end_time'] = date_format(date_create($item['end_time']), "Y-m-d");
  83. $item['money_msg'] = '元';
  84. if(in_array($item['type'],[LevelEnum::DIGITAL_PRIZE,LevelEnum::EXTRA_DIGITAL_PRIZE])){
  85. $item['money_msg'] = $digital_name;
  86. }
  87. }
  88. $data['is_boss'] = $boss ? 1 : 0; // 是否是股东,0=否,1=是
  89. $data['amounts'] = sprintf("%.2f", substr(sprintf("%.3f", $amounts), 0, -1)); // 分红池
  90. $data['commission'] = sprintf("%.2f", substr(sprintf("%.3f", $commission), 0, -1)); // 本期收益
  91. $data['performance'] = sprintf("%.2f", substr(sprintf("%.3f", $boss->performance), 0, -1)); // 团队业绩
  92. $data['performance_commission'] = sprintf("%.2f", substr(sprintf("%.3f", $boss->performance_commission), 0, -1)); // 业绩分红
  93. $data['able_withdrawal_commission'] = $boss->commission; // 可提现收益
  94. $data['unsettled_commission'] = AddonsBossRewardLog::getUnsettledCommission($this->user_id, $this->mall_id); // 未结算收益
  95. if (MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_ZAO_DOUBLE_COPY)) {
  96. //二二复制:直推团队总业绩
  97. $copy_user = ZaoDoubleCopyUser::find()->select('user_id,achievement')->where(['user_id' => $this->user_id, 'status' => StatusEnum::ENABLED,'mall_id' => $this->mall_id])->asArray()->one();
  98. $data['zao_double_copy_achievement'] = $copy_user ? $copy_user['achievement'] : 0;
  99. }
  100. $data['list'] = $list;
  101. $this->success('获取成功', $data);
  102. }
  103. }
  104. public function actionRights()
  105. {
  106. if (Yii::$app->request->isGet) {
  107. // 获取股东信息
  108. $boss = AddonsBoss::getOne([['mall_id' => $this->mall_id, 'user_id' => $this->user_id, 'status' => StatusEnum::ENABLED]]);
  109. // 获取股东等级
  110. $list = AddonsBossLevel::getBossLevel([['mall_id' => $this->mall_id]], [], true, 'level,name,explain', 'level asc');
  111. foreach ($list as $level) {
  112. if ($boss->level == $level['level']) {
  113. $level_name = $level['name'];
  114. break;
  115. }
  116. }
  117. $data['user_id'] = $this->user_id;
  118. $data['nickname'] = $this->user->nickname ?? '';
  119. $data['avatar_url'] = $this->user->avatar_url ?? '';
  120. $data['level_name'] = $level_name ?? '';
  121. $data['list'] = $list;
  122. $this->success('获取成功', $data);
  123. }
  124. }
  125. /**
  126. * 获取营业额(最近7天记录)
  127. * @return void
  128. */
  129. public function actionRevenueLog()
  130. {
  131. $where[] = ['=', 'mall_id', $this->mall_id];
  132. $where[] = ['=', 'is_settlement', StatusEnum::ENABLED];
  133. $order = 'created_at desc';
  134. $list = AddonsBossRevenueLog::lists(['limit' => 7, 'where' => $where, 'order' => $order]);
  135. $this->success('获取成功', $list);
  136. }
  137. /**
  138. * @Description: 奖金池结算记录
  139. * @Author: zsan
  140. * @DateTime 2023-10-13 11:05:25
  141. * @return mixed
  142. */
  143. public function actionPoolPrizeLog()
  144. {
  145. if (Yii::$app->request->isGet) {
  146. $get = Yii::$app->request->get();
  147. $res = Yii::$app->services->validate->validate($get, [
  148. [['page', 'limit'], 'integer']
  149. ]);
  150. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  151. $boss_id = AddonsBoss::find()->where(['user_id' => $this->user_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]])
  152. ->select('id')->scalar() ?? 0;
  153. if(empty($boss_id)) return $this->success('数据请求成功', ['list' => [], 'count' => 0, 'page_count' => 0, 'row_count' => 0]);
  154. $params = [
  155. 'where' => [
  156. ['mall_id' => $this->mall_id],
  157. ['boss_id' => $boss_id],
  158. ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]
  159. ],
  160. 'select' => 'id, user_id, billing_cycle, num, total_amount, amount, personal_performance, total_performance, start_at, end_at, created_at',
  161. 'with' => [
  162. 'user' => function ($query) {
  163. return $query->select('id, nickname, avatar_url');
  164. }
  165. ],
  166. 'page' => $get['page'] ?? 1,
  167. 'order' => 'created_at desc',
  168. 'limit' => $get['limit'] ?? 10,
  169. ];
  170. $list = BossPoolPrizeCommissionLog::listPage($params, false, true);
  171. if($list === false) return $this->error(BossPoolPrizeCommissionLog::getStaticError());
  172. foreach($list['list'] as &$v){
  173. $v['created_at'] = date('Y-m-d H:i:s', $v['created_at']);
  174. $v['start_at'] = date('Y-m-d', strtotime($v['start_at']));
  175. $v['end_at'] = date('Y-m-d', strtotime($v['end_at']));
  176. $v['billing_cycle'] = $v['billing_cycle'] == 1 ? '天': ($v['billing_cycle'] == 2 ? '周' : '月');
  177. }
  178. unset($v);
  179. return $this->success('数据请求成功',$list);
  180. }
  181. }
  182. }