QuestionJob.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Job;
  4. use App\Utils\LogUtil;
  5. use Hyperf\AsyncQueue\Job;
  6. use Hyperf\DbConnection\Db;
  7. class QuestionJob extends Job
  8. {
  9. //日志板块
  10. private const LOG_MODULE = 'QuestionJob';
  11. public $params;
  12. /**
  13. * 任务执行失败后的重试次数,即最大执行次数为 $maxAttempts+1 次
  14. */
  15. protected int $maxAttempts = 2;
  16. public function __construct($params)
  17. {
  18. // 这里最好是普通数据,不要使用携带 IO 的对象,比如 PDO 对象
  19. $this->params = $params;
  20. }
  21. /**
  22. * Execute the job.
  23. *
  24. * @return void
  25. */
  26. public function handle()
  27. {
  28. //日志统一写入
  29. LogUtil::getInstance('Queues/');//设置日志存入通道
  30. LogUtil::info('开始处理', self::LOG_MODULE, __FUNCTION__, ['params' => $this->params]);
  31. // 根据参数处理具体逻辑
  32. // 通过具体参数获取模型等
  33. // 这里的逻辑会在 ConsumerProcess 进程中执行
  34. // var_dump($this->params);
  35. $res = $this->submit($this->params['log_data'],$this->params['is_right_number'],$this->params['bind_jigou_id']);
  36. LogUtil::info('处理结果', self::LOG_MODULE, __FUNCTION__,$res);
  37. LogUtil::close();
  38. }
  39. public function submit($logdata,$is_right_number,$bind_jigou_id){
  40. Db::beginTransaction();
  41. //答题日志
  42. $log_id = Db::table('user_question_log')->insert($logdata);
  43. if(!$log_id){
  44. Db::rollBack();
  45. return false;
  46. }
  47. if($is_right_number > 0){
  48. //给机构加分
  49. $rs = Db::table('vote_jigou')->where('id',$bind_jigou_id)->increment('score',$is_right_number);
  50. if(!$rs){
  51. Db::rollBack();
  52. return false;
  53. }
  54. }
  55. Db::commit();
  56. return true;
  57. }
  58. }