UserAchievementController.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace api\modules\v1\controllers\user;
  3. use api\controllers\OnAuthController;
  4. use addons\GroupData\api\services\GroupDataService;
  5. use common\services\mall\user\UserAchievementService;
  6. use common\enums\StatusEnum;
  7. use common\helpers\DateHelper;
  8. use common\models\common\MallSetting;
  9. use common\models\statistics\UserAchievementStatistics;
  10. use common\models\statistics\UserAchievementStatisticsTotal;
  11. use common\models\statistics\UserTeamAchievementStatistics;
  12. use common\models\statistics\UserTeamStatistics;
  13. use common\models\user\User;
  14. use common\models\user\UserLevel;
  15. use common\models\user\UserPartitionRelationship;
  16. use Yii;
  17. class UserAchievementController extends OnAuthController
  18. {
  19. public $modelClass = '';
  20. /**
  21. *
  22. * 不用进行登录验证的方法
  23. *
  24. * 例如: ['index', 'update', 'create', 'view', 'delete']
  25. * 默认全部需要验证
  26. *
  27. * @var array
  28. */
  29. protected $authOptional = ['login', 'mobile-login', 'sms-code', 'register', 'up-pwd','user-agree','visit', 'is-subscribe', 'address-info'];
  30. /**
  31. * 汇总数据
  32. *
  33. * @return void
  34. */
  35. public function actionIndex()
  36. {
  37. // 头部汇总数据
  38. $userTeamStatisticsField = 'user_indirect_total, user_direct_total, user_team_total';
  39. $userTeamStatisticsData = UserTeamStatistics::getOne(
  40. [['user_id' => $this->user_id]],
  41. true,
  42. [],
  43. false,
  44. $userTeamStatisticsField
  45. );
  46. $userTeamAchievementStatisticsField = 'team_order_num, team_goods_price_total, team_pay_selling_price';
  47. $userTeamAchievementStatisticsData = UserTeamAchievementStatistics::getOne(
  48. [['user_id' => $this->user_id]],
  49. true,
  50. [],
  51. false,
  52. $userTeamAchievementStatisticsField
  53. );
  54. $userStatisticsTotalData = UserAchievementStatisticsTotal::getOne(
  55. [['user_id' => $this->user_id]],
  56. true,
  57. [],
  58. false,
  59. 'pay_selling_price, user_goods_price_total, user_order_num'
  60. );
  61. // 上级用户
  62. $pUser = User::getUser([['id' => $this->user->parent_id]], 'id, nickname, mobile, level, avatar_url', [], true);
  63. $user = [
  64. 'id' => $this->user->id,
  65. 'mobile' => $this->user->mobile,
  66. 'nickname' => $this->user->nickname,
  67. 'avatar_url' => $this->user->avatar_url,
  68. 'level' => $this->user->level,
  69. ];
  70. $this->success(
  71. 'success',
  72. [
  73. 'total_data' => [
  74. 'user_indirect_total' => $userTeamStatisticsData['user_indirect_total'] ?? 0,
  75. 'user_direct_total' => $userTeamStatisticsData['user_direct_total'] ?? 0,
  76. 'user_team_total' => ($userTeamStatisticsData['user_team_total'] ?? 0) + 1, // 包含自己
  77. 'user_team_order_total' => bcadd(
  78. ($userTeamAchievementStatisticsData['team_order_num'] ?? 0),
  79. ($userStatisticsTotalData['user_order_num'] ?? 0),
  80. 2
  81. ),
  82. 'team_goods_price_total' => bcadd(
  83. ($userTeamAchievementStatisticsData['team_goods_price_total'] ?? 0),
  84. ($userStatisticsTotalData['user_goods_price_total'] ?? 0),
  85. 2
  86. ),
  87. 'team_pay_selling_price' => bcadd(
  88. ($userTeamAchievementStatisticsData['team_pay_selling_price'] ?? 0),
  89. ($userStatisticsTotalData['pay_selling_price'] ?? 0),
  90. 2
  91. ),
  92. ],
  93. 'p_user' => $pUser,
  94. 'user' => $user
  95. ]
  96. );
  97. }
  98. /**
  99. * 团队统计
  100. *
  101. * @return void
  102. */
  103. public function actionGetTeamStatistics()
  104. {
  105. $params = $this->request->get();
  106. $params['user_id'] = $this->user_id;
  107. $params['date'] = [];
  108. !empty($params['startDate']) && !empty($params['endDate']) && $params['date'] = [$params['startDate'], $params['endDate']];
  109. $params['limit'] = $params['limit'] ?? 10;
  110. $params['mall_id'] = $this->mall_id;
  111. $userAchievementService = new UserAchievementService;
  112. $this->success('success', $userAchievementService->getListByUserId($params));
  113. }
  114. /**
  115. * 明细统计
  116. *
  117. * @return void
  118. */
  119. public function actionGetTeamDetail()
  120. {
  121. $userAchievementService = new UserAchievementService;
  122. $params = $this->request->get();
  123. !empty($params['startDate']) && !empty($params['endDate']) && $params['date'] = [$params['startDate'], $params['endDate']]; // 订单会变化,所以需要到当前的23:59:59
  124. $params['user_id'] = $this->user_id;
  125. $params['mall_id'] = $this->mall_id;
  126. $this->success('success', $userAchievementService->getGroupDetail($params));
  127. }
  128. }