AgentUserGrade.php 2.6 KB

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