ApplyController.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php
  2. namespace addons\BusinessBonus\backend\controllers;
  3. use addons\BusinessBonus\common\enums\BusinessBonusEnums;
  4. use addons\BusinessBonus\common\models\BusinessBonusUpgradeApply;
  5. use addons\BusinessBonus\common\models\BusinessBonusUpgradeRecord;
  6. use addons\BusinessBonus\common\models\BusinessBonusUser;
  7. use addons\BusinessBonus\common\events\user\UpgradeUserEvent;
  8. use common\enums\StatusEnum;
  9. use common\models\user\User;
  10. use Yii;
  11. use yii\db\Exception;
  12. use addons\BusinessBonus\common\models\BusinessBonusLevel;
  13. class ApplyController extends BaseController
  14. {
  15. /**
  16. * 申请列表
  17. */
  18. public function actionIndex()
  19. {
  20. if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
  21. $params = Yii::$app->request->post();
  22. $res = Yii::$app->services->validate->validate($params,[
  23. [['page', 'user_id', 'business_bonus_level', 'audit_status'], 'integer'],
  24. [['nickname'], 'string'],
  25. [['apply_time'], 'safe'],
  26. ]);
  27. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  28. $where = [
  29. ['=', 'mall_id', $this->mall_id],
  30. ['<>', 'status', StatusEnum::DELETE],
  31. ];
  32. if ($params['user_id']) {
  33. $where[] = ['=', 'user_id', (int)$params['user_id']];
  34. }
  35. // 昵称、手机号
  36. if ($params['nickname']) {
  37. $user_ids = User::find()
  38. ->orWhere(['like', 'nickname', "%" . $params['nickname'] . "%", false])
  39. ->orWhere(['like', 'mobile', "%" . $params['nickname'] . "%", false])
  40. ->select('id')
  41. ->asArray()
  42. ->column();
  43. $where[] = ['in', 'user_id', $user_ids];
  44. }
  45. if ($params['business_bonus_level']) {
  46. $where[] = ['=', 'business_bonus_level', (int)$params['business_bonus_level']];
  47. }
  48. if ($params['audit_status'] != null && $params['audit_status'] != '') {
  49. $where[] = ['=', 'audit_status', (int)$params['audit_status']];
  50. }
  51. // 申请时间
  52. $start_time = strtotime($params['apply_time'][0] ?? 0);
  53. $end_time = strtotime($params['apply_time'][1] ?? 0);
  54. if ($start_time > 0 && $end_time > 0 && $end_time >= $start_time) {
  55. $where[] = ['>=', 'apply_time', $start_time];
  56. $where[] = ['<=', 'apply_time', $end_time];
  57. }
  58. $condition = ['where' => $where, 'with' => ['user'], 'order' => 'id desc'];
  59. $page_data = BusinessBonusUpgradeApply::listPage($condition, false, true);
  60. $page_data['list'] = is_array($page_data['list']) ? $page_data['list'] : [];
  61. // 列表中的招商员等级
  62. $level_array = array_unique(array_filter(array_column($page_data['list'], 'business_bonus_level')));
  63. $level_list = BusinessBonusLevel::find()
  64. ->select('level,level_name,bonus_rate')
  65. ->andWhere(['>', 'status', StatusEnum::DISABLED])
  66. ->andWhere(['in', 'level', $level_array])
  67. ->andWhere(['=', 'mall_id', $this->mall_id])
  68. ->asArray()
  69. ->all();
  70. $level_name_data = array_column($level_list, null, 'level');
  71. foreach ($page_data['list'] as $index => $item) {
  72. $item['level_info'] = $level_name_data[$item['business_bonus_level']] ?? '';
  73. $page_data['list'][$index] = $item;
  74. }
  75. $this->success('获取成功', compact('page_data'));
  76. } else {
  77. return $this->render('index');
  78. }
  79. }
  80. /**
  81. * 审核操作
  82. */
  83. public function actionAudit() {
  84. if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
  85. $params = Yii::$app->request->post();
  86. $res = Yii::$app->services->validate->validate($params, [
  87. [['id', 'audit_status'], 'integer'],
  88. [['faid_reason'], 'string'],
  89. ]);
  90. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  91. $apply = BusinessBonusUpgradeApply::getOne([
  92. ['=', 'mall_id', $this->mall_id],
  93. ['=', 'id', $params['id']],
  94. ['<>', 'status', StatusEnum::DELETE],
  95. ], true);
  96. if (!$apply) {
  97. return $this->error('申请记录不存在');
  98. }
  99. if ($apply['audit_status'] == 1) {
  100. return $this->error('该申请已审核');
  101. }
  102. $bbu = BusinessBonusUser::getOne([
  103. ['=', 'mall_id', $this->mall_id],
  104. ['=', 'user_id', $apply['user_id']],
  105. ['<>', 'status', StatusEnum::DELETE],
  106. ], true);
  107. if ($bbu && $params['audit_status'] == 1) {
  108. return $this->error('该会员已是招商员,无需审核,请驳回审核');
  109. }
  110. if ($bbu && $apply['audit_status'] == 2) {
  111. return $this->error('该会员已是招商员,请勿重复审核');
  112. }
  113. $trans = Yii::$app->db->beginTransaction();
  114. try {
  115. if ($params['audit_status'] == 1) {// 审核通过,成为招商员
  116. $user_data = [
  117. 'user_id' => $apply['user_id'],
  118. 'business_bonus_level' => $apply['business_bonus_level'],
  119. 'mall_id' => $this->mall_id,
  120. 'status' => StatusEnum::ENABLED,
  121. 'register_time' => time()
  122. ];
  123. // 对应等级信息
  124. $level_info = BusinessBonusLevel::getOne([
  125. ['=', 'mall_id', $this->mall_id],
  126. ['=', 'level', $user_data['business_bonus_level']],
  127. ['>=', 'status', StatusEnum::DISABLED],
  128. ], true);
  129. $record = [
  130. 'mall_id' => $this->mall_id,
  131. 'user_id' => $user_data['user_id'],
  132. 'business_bonus_level' => $user_data['business_bonus_level'],
  133. 'bonus_rate' => $level_info['bonus_rate'] ?? 0,
  134. 'upgrade_time' => time(),
  135. 'status' => StatusEnum::ENABLED,
  136. 'upgrade_type' => BusinessBonusEnums::UPGRADE_TYPE_APPLY,
  137. 'extra_data' => json_encode([
  138. 'audit_admin' => $this->admin->username,
  139. 'audit_account' => $this->admin->account,
  140. 'mark' => '前端申请,后台审核,成为' . ($level_info['level_name'] ?? ''),
  141. ], JSON_UNESCAPED_UNICODE)
  142. ];
  143. $res = BusinessBonusUpgradeRecord::setData($record);
  144. if ($res == false) throw new Exception(BusinessBonusUpgradeRecord::getStaticError());
  145. $res = BusinessBonusUser::setData($user_data);
  146. if ($res == false) throw new Exception(BusinessBonusUser::getStaticError());
  147. }
  148. $params['id'] = $apply['id'];
  149. $params['mall_id'] = $this->mall_id;
  150. $params['audit_time'] = time();
  151. $params['audit_admin'] = $this->admin->username;
  152. $res = BusinessBonusUpgradeApply::setData($params);
  153. if ($res == false) throw new Exception(BusinessBonusUpgradeApply::getStaticError());
  154. $trans->commit();
  155. } catch (Exception $e) {
  156. $trans->rollBack();
  157. return $this->error($e->getMessage());
  158. }
  159. //触发用户条件升级
  160. $event = new UpgradeUserEvent($this->mall_id);
  161. $data = ['mall_id' => $this->mall_id, 'user_id' => $user_data['user_id']];
  162. \Yii::$app->services->events->dispatch($event, $data, $event->listeners);
  163. return $this->success("审核成功");
  164. }
  165. }
  166. }