CheckRelegation.php 2.8 KB

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