Grade.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace app\task\behavior\user;
  3. use think\Cache;
  4. use app\task\model\User as UserModel;
  5. use app\task\model\user\Grade as GradeModel;
  6. class Grade
  7. {
  8. /* @var GradeModel $model */
  9. private $model;
  10. /**
  11. * 执行函数
  12. * @param $model
  13. * @return bool
  14. * @throws \Exception
  15. */
  16. public function run($model)
  17. {
  18. if (!$model instanceof GradeModel) {
  19. return new GradeModel and false;
  20. }
  21. $this->model = $model;
  22. if (!$model::$wxapp_id) {
  23. return false;
  24. }
  25. $cacheKey = "__task_space__[user/Grade]__{$model::$wxapp_id}";
  26. if (!Cache::has($cacheKey)) {
  27. // 设置用户的会员等级
  28. // $this->setUserGrade();
  29. Cache::set($cacheKey, time(), 60 * 10);
  30. }
  31. return true;
  32. }
  33. /**
  34. * 设置用户的会员等级
  35. * @return array|bool|false
  36. * @throws \Exception
  37. */
  38. private function setUserGrade()
  39. {
  40. return false; // 暂时屏蔽
  41. // 用户模型
  42. $UserModel = new UserModel;
  43. // 获取所有等级
  44. $list = GradeModel::getUsableList(null, ['weight' => 'desc']);
  45. if ($list->isEmpty()) {
  46. return false;
  47. }
  48. // 遍历等级,根据升级条件 查询满足消费金额的用户列表,并且他的等级小于该等级
  49. $data = [];
  50. foreach ($list as $grade) {
  51. $userList = $UserModel->getUpgradeUserList($grade, array_keys($data));
  52. foreach ($userList as $user) {
  53. if (!isset($data[$user['user_id']])) {
  54. $data[$user['user_id']] = [
  55. 'user_id' => $user['user_id'],
  56. 'old_grade_id' => $user['grade_id'],
  57. 'new_grade_id' => $grade['grade_id'],
  58. ];
  59. }
  60. }
  61. }
  62. // 批量修改会员的等级
  63. return $UserModel->setBatchGrade($data);
  64. }
  65. }