CheckRelegation.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace addons\faqueue\library\jobs;
  3. use addons\faqueue\library\QueueApi;
  4. use addons\faqueue\model\FaqueueLog;
  5. use app\admin\model\AdminMessage;
  6. use app\admin\model\UserMessage;
  7. use app\common\library\weChat\weChatMp;
  8. use think\Db;
  9. use think\Log;
  10. use think\queue\job;
  11. class CheckRelegation
  12. {
  13. private $redis;
  14. function __construct()
  15. {
  16. $redis = new \Redis();
  17. $redisconfig = config("redis");
  18. $redis->connect($redisconfig["host"], $redisconfig["port"], 86400 * 31);
  19. $this->redis = $redis;
  20. }
  21. public function fire(Job $job, $data)
  22. {
  23. $user_id = $data['user_id'];
  24. $user = Db::name('user')->where('id',$user_id)->field('id,noble,noble_duetime')->find();
  25. //贵族等级高于30天前定时等级。视为无效任务
  26. if (!$user || $user['noble']>$data['noble'] || $user['noble_duetime']>$data['end_time']){
  27. $job->delete();
  28. echo 11111;
  29. return;
  30. }
  31. //玩家当前贵族等级
  32. $userNoble = $user['noble'];
  33. $nobleDuetime = $user['noble_duetime'];
  34. $userRenew2 = $this->redis->get('user_renew2_'.$user_id);
  35. $getNobleLevelData = $this->getNobleLevelData($userNoble);
  36. if (empty($getNobleLevelData)) {
  37. $job->delete();
  38. return;
  39. }
  40. $renew2 = $getNobleLevelData['renew2'];
  41. // $this->redis->set('user_renew_'.$user_id,0);
  42. $this->redis->set('user_renew2_'.$user_id,0);
  43. $duetime = strtotime("+1 month",$nobleDuetime);
  44. //如果不是最大等级保级说明是重新回到该爵位,需扣除之前回到回到该爵位的消保
  45. //增加月保级消费(处理保级),和月消费分开(处理升级)
  46. if ($userRenew2!=0 && $userRenew2>=$renew2){
  47. //保级成功,延长过期时间
  48. Db::name('user')->where('id',$user_id)->setField('noble_duetime',$duetime);
  49. }else{
  50. //降级,>骑士
  51. $userNoble = $userNoble - 1;
  52. if ($userNoble<1) {
  53. $job->delete();
  54. return;
  55. }
  56. Db::name('user')->where('id',$user_id)->update(['noble'=>$userNoble,'noble_duetime'=>$duetime]);
  57. }
  58. $job->delete();
  59. (new FaqueueLog())->log($job->getQueue(), $job->getName(), $data);
  60. //重新定时任务
  61. if ($userNoble>1) QueueApi::timeRelegation($user_id,$duetime,$userNoble);
  62. }
  63. public function failed($data)
  64. {
  65. Log::write("任务失败:" . print_r(['data' => $data,], true), 'error');
  66. }
  67. /**
  68. * 获取指定等级的贵族数据
  69. * @param $level_id
  70. */
  71. private function getNobleLevelData($level_id)
  72. {
  73. $getNobleLevelList = $this->redis->get('noble_level_list');
  74. if (empty($getNobleLevelList)) return [];
  75. $getNobleLevelList = unserialize($getNobleLevelList);
  76. foreach ($getNobleLevelList as $v){
  77. if ($level_id == $v['id']) return $v;
  78. }
  79. return [];
  80. }
  81. }