LiveRewardJobs.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php namespace App\Jobs\Company\Lottery;
  2. use Illuminate\Bus\Queueable;
  3. use Illuminate\Contracts\Queue\ShouldQueue;
  4. use Illuminate\Foundation\Bus\Dispatchable;
  5. use Illuminate\Queue\InteractsWithQueue;
  6. use Illuminate\Queue\SerializesModels;
  7. use App\Facades\Servers\Logs\Log;
  8. use App\Models\Manager\CustomAmount;
  9. use App\Models\Manager\CustomCoupon;
  10. use App\Models\Manager\CustomScore;
  11. use App\Models\Manager\Lottery\LiveRecord;
  12. use App\Servers\DB\DbService;
  13. /**
  14. * 奖品发放
  15. */
  16. class LiveRewardJobs implements ShouldQueue
  17. {
  18. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  19. /** 奖品数据 **/
  20. protected $winData;
  21. /**
  22. * 任务可尝试的次数
  23. *
  24. * @var int
  25. */
  26. public $tries = 3;
  27. /**
  28. * Create a new job instance.
  29. *
  30. * @return void
  31. */
  32. public function __construct($data)
  33. {
  34. $this->winData = $data;
  35. }
  36. /**
  37. * Execute the job.
  38. *
  39. * @return void
  40. */
  41. public function handle()
  42. {
  43. // 获取数据
  44. $winData = $this->winData;
  45. try {
  46. // 如果不是1,2,3 类型,不处理
  47. if( !in_array($winData['reward_type'],[1,2,3]) ) return 0;
  48. // 切换数据库
  49. (new DbService())->getConnectionNameByCompanyId($winData['company_id']);
  50. // 中奖记录
  51. $LiveRecord = (new LiveRecord);
  52. // 先查询是不是有未处理的
  53. $oldId = $LiveRecord->query()->where([['custom_uid','=',$winData['custom_uid']],['lottery_id','=',$winData['lottery_id']],['reward_id','=',$winData['reward_id']],['status','=',1],['insert_time','=',$winData['insert_time']]])->value('id');
  54. // 如果有没有的话,不处理
  55. if( !$oldId ) return 0;
  56. // 如果是积分
  57. if( $winData['reward_type'] == 1 ) {
  58. // 积分大于0
  59. if( $winData['reward_info'] > 0 ){
  60. // 积分发放
  61. $result = (new CustomScore)->trade($winData['custom_uid'],$winData['shop_id'],$winData['company_id'],$winData['lottery_id'],$winData['reward_info'],13,1);
  62. // 发放失败,改为未中奖
  63. if( isset($result['error']) ) Log::info('job_error/live_reward_jobs', $result['error'], $winData);
  64. }
  65. }
  66. // 优惠券,先进行发放
  67. if( $winData['reward_type'] == 2 ) {
  68. // 优惠券存在ID
  69. if( $winData['reward_info'] > 0 ){
  70. // 积分给与
  71. $result = (new CustomCoupon)->giveCoupon($winData['reward_info'],$winData['custom_uid'],$winData['shop_id'],$winData['company_id']);
  72. // 发放失败,改为未中奖
  73. if( !$result ) Log::info('job_error/live_reward_jobs', '优惠券发放失败', $winData);
  74. }
  75. }
  76. // 红包
  77. if( $winData['reward_type'] == 3 ) {
  78. // 积分大于0
  79. if( $winData['reward_info'] > 0 ){
  80. // 积分发放
  81. $result = (new CustomAmount)->trade($winData['custom_uid'],$winData['shop_id'],$winData['company_id'],$winData['lottery_id'],$winData['reward_info'],10,1);
  82. // 发放失败,改为未中奖
  83. if( isset($result['error']) ) Log::info('job_error/live_reward_jobs', '优惠券发放失败', $winData);
  84. }
  85. }
  86. // 修改状态
  87. $result = $LiveRecord->edit($oldId,['status'=>8]);
  88. // 发放失败,改为未中奖
  89. if( !$result ) Log::info('job_error/live_reward_jobs', '状态修改失败', $winData);
  90. // 返回结果
  91. return $result;
  92. } catch (Throwable $th) {
  93. Log::info('job_error/live_reward_jobs', $th->getMessage(), $winData);
  94. }
  95. }
  96. public function failed(\Throwable $th)
  97. {
  98. Log::info('job_error/live_reward_jobs', '直播参与下单抽奖队列失败', ['data' => $this->recordData, 'error' => $th->getMessage()]);
  99. }
  100. }