UserGrade.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace app\job\event;
  3. use app\job\model\user\Grade as GradeModel;
  4. use app\job\model\user\User as UserModel;
  5. /**
  6. * 用户等级事件管理
  7. */
  8. class UserGrade
  9. {
  10. /**
  11. * 执行函数
  12. */
  13. public function handle($userId)
  14. {
  15. // 设置用户的会员等级
  16. $this->setUserGrade($userId);
  17. return true;
  18. }
  19. /**
  20. * 设置用户的会员等级
  21. */
  22. private function setUserGrade($userId)
  23. {
  24. // 用户模型
  25. $user = UserModel::detail($userId);
  26. // 获取所有等级
  27. $list = GradeModel::getUsableList($user['app_id']);
  28. if ($list->isEmpty()) {
  29. return false;
  30. }
  31. // 遍历等级,根据升级条件 查询满足消费金额的用户列表,并且他的等级小于该等级
  32. $upgradeGrade = null;
  33. foreach ($list as $grade) {
  34. if($grade['is_default'] == 1){
  35. continue;
  36. }
  37. $is_upgrade = $this->checkCanUpdate($user, $grade);
  38. if($is_upgrade){
  39. $upgradeGrade = $grade;
  40. continue;
  41. }else{
  42. break;
  43. }
  44. }
  45. if($upgradeGrade){
  46. $this->dologs('setUserGrade', [
  47. 'user_id' => $user['user_id'],
  48. 'grade_id' => $upgradeGrade['grade_id'],
  49. ]);
  50. // 修改会员的等级
  51. (new UserModel())->upgradeGrade($user, $upgradeGrade);
  52. }
  53. return false;
  54. }
  55. /**
  56. * 查询满足会员等级升级条件的用户列表
  57. */
  58. public function checkCanUpdate($user, $grade)
  59. {
  60. // 按消费升级
  61. if($grade['open_money'] == 1 && $user['expend_money'] >= $grade['upgrade_money']){
  62. return true;
  63. }
  64. // 按积分升级
  65. if($grade['open_points'] == 1 && $user['total_points'] >= $grade['upgrade_points']){
  66. return true;
  67. }
  68. // 按消费升级
  69. if($grade['open_invite'] == 1 && $user['total_invite'] >= $grade['upgrade_invite']){
  70. return true;
  71. }
  72. return false;
  73. }
  74. /**
  75. * 记录日志
  76. */
  77. private function dologs($method, $params = [])
  78. {
  79. $value = 'UserGrade --' . $method;
  80. foreach ($params as $key => $val)
  81. $value .= ' --' . $key . ' ' . $val;
  82. return log_write($value, 'task');
  83. }
  84. }