PullDoPink.php 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. /**
  3. * 文件路径: \application\index\job\Hello.php
  4. * 这是一个消费者类,用于处理 helloJobQueue 队列中的任务
  5. */
  6. // +----------------------------------------------------------------------
  7. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  8. // +----------------------------------------------------------------------
  9. // | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
  10. // +----------------------------------------------------------------------
  11. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  12. // +----------------------------------------------------------------------
  13. // | Author: CRMEB Team <admin@crmeb.com>
  14. // +----------------------------------------------------------------------
  15. namespace app\index\job;
  16. use app\admin\model\ump\StorePink;
  17. use app\wap\model\special\SpecialBuy;
  18. use think\queue\Job;
  19. class PullDoPink {
  20. /**
  21. * fire方法是消息队列默认调用的方法
  22. * @param Job $job 当前的任务对象
  23. * @param array|mixed $data 发布任务时自定义的数据
  24. */
  25. public function fire(Job $job,$data)
  26. {
  27. // 有些消息在到达消费者时,可能已经不再需要执行了
  28. $isJobStillNeedToBeDone = $this->checkDatabaseToSeeIfJobNeedToBeDone($data);
  29. if(!$isJobStillNeedToBeDone){
  30. $job->delete();
  31. return;
  32. }
  33. $isJobDone = $this->doPinkJob($data);
  34. if ($isJobDone) {
  35. // 如果任务执行成功, 记得删除任务
  36. $job->delete();
  37. //print("<info>Hello Job has been done and deleted"."</info>\n");
  38. }else{
  39. if ($job->attempts() > 3) {
  40. //通过这个方法可以检查这个任务已经重试了几次了
  41. // print("<warn>Hello Job has been retried more than 3 times!"."</warn>\n");
  42. $job->delete();
  43. // 也可以重新发布这个任务
  44. //print("<info>Hello Job will be availabe again after 2s."."</info>\n");
  45. //$job->release(2); //$delay为延迟时间,表示该任务延迟2秒后再执行
  46. }
  47. }
  48. }
  49. /**
  50. * 有些消息在到达消费者时,可能已经不再需要执行了
  51. * @param array|mixed $data 发布任务时自定义的数据
  52. * @return boolean 任务执行的结果
  53. */
  54. private function checkDatabaseToSeeIfJobNeedToBeDone($data){
  55. return true;
  56. }
  57. /**
  58. * 根据消息中的数据进行实际的业务处理...
  59. */
  60. private function doPinkJob($data)
  61. {
  62. $pink_id = $data['pinkInfo']['pink_id'];
  63. if ($pink_id){
  64. $pink_info = \app\wap\model\store\StorePink::where(['id' => $pink_id,'k_id'=>0,'status'=>1])->find();
  65. if ($pink_info ? $pink_info = $pink_info->toArray() : []){
  66. list($pinkAll,$pinkT,$count,$idAll)=\app\wap\model\store\StorePink::getPinkMemberAndPinkK($pink_info);
  67. \app\wap\model\store\StorePink::PinkFail($pink_info['uid'],$idAll,$pinkAll,$pinkT,$count,1,[],true,true);
  68. }
  69. }
  70. //SpecialBuy::set(['order_id' => 1111, 'special_id' => $data['b'], 'uid' => 222]);
  71. // print("<info>Hello Job Started. job Data is: ".var_export($data,true)."</info> \n");
  72. // print("<info>Hello Job is Fired at " . date('Y-m-d H:i:s') ."</info> \n");
  73. // print("<info>Hello Job is Done!"."</info> \n");
  74. return true;
  75. }
  76. }