DefaultController.php 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <?php
  2. namespace addons\ServeBonus\backend\controllers;
  3. use addons\ServeBonus\common\enums\LevelEnum;
  4. use addons\ServeBonus\common\enums\ServeBonusEnum;
  5. use addons\ServeBonus\common\logic\AchievementLogic;
  6. use addons\ServeBonus\common\models\ServeBonus;
  7. use addons\ServeBonus\common\models\ServeBonusLevel;
  8. use common\enums\RabbitMqEnum;
  9. use common\enums\StatusEnum;
  10. use common\models\statistics\UserStatisticsTotal;
  11. use common\models\statistics\UserTeamStatistics;
  12. use common\models\user\User;
  13. use common\models\user\UserTeamMonthStatistics;
  14. use Yii;
  15. /**
  16. * 默认控制器
  17. *
  18. * Class DefaultController
  19. * @package addons\ServeBonus\backend\controllers
  20. */
  21. class DefaultController extends BaseController
  22. {
  23. public $enableCsrfValidation = false;
  24. /**
  25. * 首页
  26. *
  27. * @return string
  28. */
  29. public function actionIndex()
  30. {
  31. $retuest = Yii::$app->request;
  32. if ($retuest->isAjax) {
  33. if ($retuest->isGet) {
  34. $get = Yii::$app->request->get();
  35. // 检查提交的参数
  36. $res = Yii::$app->services->validate->validate($get,[
  37. [['id','level'], 'integer'],
  38. [['id','keyword','user_id','datetime'], 'safe'],
  39. ]);
  40. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  41. $configs = Yii::$app->services->setting->addons->get($this->mall_id, ServeBonusEnum::ADDONS_NAME, 'basic');
  42. // 获取服务商等级
  43. $level_list = ServeBonusLevel::getServeBonusLevel([['mall_id' => $this->mall_id]],[],true,'level,name');
  44. // 升级类型
  45. $upgrade_type = LevelEnum::getUpgradeType();
  46. $where = $parents = $list = [];
  47. $where[] = ['=', 'status', StatusEnum::ENABLED];
  48. $where[] = ['=', 'mall_id', $this->mall_id];
  49. !empty($get['level']) && $where[] = ['=', 'level', $get['level']];
  50. !empty($get['user_id']) && $where[] = ['=', 'user_id', $get['user_id']];
  51. if($get['datetime']) $where[] = ['between', 'created_at', strtotime($get['datetime'][0]),strtotime($get['datetime'][1])];
  52. // 根据搜索手机号查询用户id
  53. if (!empty($get['keyword'])) {
  54. $user_ids = User::find()->select("id")->where(['mall_id' => $this->mall_id])->andWhere(['like', 'mobile', $get['keyword'] . '%', false])->asArray()->column();
  55. if (empty($user_ids)) $this->success('获取成功', compact('list','level_list', 'upgrade_type', 'parents'));
  56. $where[] = ['in', 'user_id', $user_ids];
  57. }
  58. $with = ['user'];
  59. $order = 'created_at desc';
  60. $params = array('where' => $where, 'order'=>$order, 'with' => $with, 'limit' => $get['limit']);
  61. $list = ServeBonus::listPage($params, false, true);
  62. if (isset($list['list'])) {
  63. // 获取用户上级推荐人id
  64. $parent_ids = [];
  65. $team_statistics = UserTeamStatistics::find()->where(['mall_id' => $this->mall_id, 'user_id' => array_column($list['list'], 'user_id')])->indexBy('user_id')->asArray()->all();
  66. $user_statistics = UserStatisticsTotal::find()->where(['mall_id' => $this->mall_id, 'user_id' => array_column($list['list'], 'user_id')])->indexBy('user_id')->asArray()->all();
  67. foreach ($list['list'] as &$ServeBonus) {
  68. $parent_ids[] = $ServeBonus['user']['parent_id'];
  69. if ($configs['achievement_count_method'] == 0) { // 支付完成
  70. $ServeBonus['total_price'] = bcadd(($team_statistics[$ServeBonus['user_id']]['user_team_order_price_total'] ?? 0), ($user_statistics[$ServeBonus['user_id']]['pay_money'] ?? 0), 2);
  71. } else { // 订单完成
  72. $ServeBonus['total_price'] = bcadd(($team_statistics[$ServeBonus['user_id']]['team_finish_order_price_total'] ?? 0), ($user_statistics[$ServeBonus['user_id']]['finish_order_money'] ?? 0), 2);
  73. }
  74. }
  75. if ($parent_ids) {
  76. // 获取上级用户信息
  77. $parents = User::getUserList([['in','id',array_unique($parent_ids)]], 'id,nickname', [], 1);
  78. $parents = array_column($parents, 'nickname', 'id');
  79. }
  80. }
  81. $this->success('获取成功', compact('list','level_list', 'upgrade_type', 'parents'));
  82. }
  83. } else {
  84. return $this->render($this->action->id);
  85. }
  86. }
  87. /**
  88. * 添加服务商
  89. * @Author: ltm
  90. * @DateTime: 2021/10/21 0021 17:56
  91. * @Copyright: copyright (c) 2021 广东七件事集团
  92. */
  93. public function actionAddServeBonus()
  94. {
  95. $retuest = Yii::$app->request;
  96. if ($retuest->isAjax) {
  97. if ($retuest->isPost) {
  98. $params = Yii::$app->request->post();
  99. $res = Yii::$app->services->validate->validate($params,[[['mobile','level'], 'integer'], [['mobile','level'], 'required']]);
  100. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  101. // 根据手机号码获取用户id
  102. $user = User::getOne([['mall_id' => $this->mall_id], ['mobile' => $params['mobile']]],true,[],false,'id');
  103. if (empty($user)) return $this->error('暂无此用户');
  104. $params['mall_id'] = $this->mall_id;
  105. $params['user_id'] = $user['id'];
  106. // 保存数据
  107. $res = ServeBonus::setData($params);
  108. if (!$res) return $this->error(ServeBonus::getStaticError());
  109. // 同步服务商业绩
  110. Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_LONG_DURATION, RabbitMqEnum::LONG_DURATION_QUEUE, ['mall_id' => $this->mall_id, 'user_id' => $user['id']], UserTeamMonthStatistics::class, 'calculatePerformance');
  111. $this->success('服务商添加成功');
  112. }
  113. }
  114. }
  115. /**
  116. * 根据用户名搜索用户
  117. * @Author: ltm
  118. * @DateTime: 2021/10/21 0021 18:36
  119. * @Copyright: copyright (c) 2021 广东七件事集团
  120. * @return mixed|void
  121. */
  122. public function actionSelectUser()
  123. {
  124. $retuest = Yii::$app->request;
  125. if ($retuest->isAjax && $retuest->isPost) {
  126. $params = Yii::$app->request->post();
  127. $res = Yii::$app->services->validate->validate($params,[[['keyword'], 'string'], [['keyword'], 'required']]);
  128. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  129. // 搜索用户列表
  130. $list = User::getUserList([['mall_id' => $this->mall_id],['like','mobile',$params['keyword']]], 'id,mobile', [], 1);
  131. $this->success('获取成功', $list);
  132. }
  133. }
  134. /**
  135. * 服务商数据编辑
  136. * @Author: ltm
  137. * @DateTime: 2021/10/23 0023 9:20
  138. * @Copyright: copyright (c) 2021 广东七件事集团
  139. * @return mixed|void
  140. */
  141. public function actionEdit()
  142. {
  143. $retuest = Yii::$app->request;
  144. if ($retuest->isAjax) {
  145. if ($retuest->isPost) {
  146. $params = Yii::$app->request->post();
  147. $res = Yii::$app->services->validate->validate($params,[
  148. [['user_id'], 'required'],
  149. [['remark'], 'string'],
  150. [['user_id','status','level'], 'integer']
  151. ]);
  152. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  153. $params = ServeBonus::exceptNullVal($params);
  154. $params['mall_id'] = $this->mall_id;
  155. // 修改等级操作
  156. if (!empty($params['level'])) {
  157. $params['upgrade_status'] = LevelEnum::UPGRADE_MANUAL;
  158. $params['upgrade_level_at'] = time();
  159. }
  160. // 保存数据
  161. $res = ServeBonus::setData($params);
  162. if (!$res) return $this->error(ServeBonus::getStaticError());
  163. // 同步服务商业绩
  164. Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_LONG_DURATION, RabbitMqEnum::LONG_DURATION_QUEUE, ['mall_id' => $this->mall_id, 'user_id' => $res['user_id']], UserTeamMonthStatistics::class, 'calculatePerformance');
  165. $this->success('修改成功');
  166. }
  167. }
  168. }
  169. // 团队业绩
  170. public function actionTeamPrice()
  171. {
  172. $request = \Yii::$app->request;
  173. if ($request->isAjax) {
  174. if ($request->isGet) {
  175. $user_id = $request->get('user_id');
  176. if (!is_numeric($user_id)) {
  177. return $this->error('参数错误');
  178. }
  179. $data = AchievementLogic::getUserAchievement($user_id, $this->mall_id);
  180. $this->success('获取成功', $data);
  181. }
  182. }
  183. return $this->error('错误请求');
  184. }
  185. }