PullDoPink.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. /**
  3. * 文件路径: \application\index\job\Hello.php
  4. * 这是一个消费者类,用于处理 helloJobQueue 队列中的任务
  5. */
  6. // +----------------------------------------------------------------------
  7. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  8. // +----------------------------------------------------------------------
  9. // | Copyright (c) 2016~2022 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. /**
  22. * fire方法是消息队列默认调用的方法
  23. * @param Job $job 当前的任务对象
  24. * @param array|mixed $data 发布任务时自定义的数据
  25. */
  26. public function fire(Job $job, $data)
  27. {
  28. // 有些消息在到达消费者时,可能已经不再需要执行了
  29. $isJobStillNeedToBeDone = $this->checkDatabaseToSeeIfJobNeedToBeDone($data);
  30. if (!$isJobStillNeedToBeDone) {
  31. $job->delete();
  32. return;
  33. }
  34. if (isset($data['doName']) && $data['doName']) {
  35. $doName = $data['doName'];
  36. $isJobDone = $this->$doName($data);
  37. } else
  38. $isJobDone = $this->doPinkJob($data);
  39. if ($isJobDone) {
  40. // 如果任务执行成功, 记得删除任务
  41. $job->delete();
  42. //print("<info>Hello Job has been done and deleted"."</info>\n");
  43. } else {
  44. if ($job->attempts() > 3) {
  45. //通过这个方法可以检查这个任务已经重试了几次了
  46. // print("<warn>Hello Job has been retried more than 3 times!"."</warn>\n");
  47. $job->delete();
  48. // 也可以重新发布这个任务
  49. //print("<info>Hello Job will be availabe again after 2s."."</info>\n");
  50. //$job->release(2); //$delay为延迟时间,表示该任务延迟2秒后再执行
  51. }
  52. }
  53. }
  54. /**
  55. * 有些消息在到达消费者时,可能已经不再需要执行了
  56. * @param array|mixed $data 发布任务时自定义的数据
  57. * @return boolean 任务执行的结果
  58. */
  59. private function checkDatabaseToSeeIfJobNeedToBeDone($data)
  60. {
  61. return true;
  62. }
  63. /**
  64. * 根据消息中的数据进行实际的业务处理...
  65. */
  66. private function doPinkJob($data)
  67. {
  68. $pink_id = $data['pinkInfo']['pink_id'];
  69. if ($pink_id) {
  70. $pink_info = \app\wap\model\store\StorePink::where(['id' => $pink_id, 'k_id' => 0, 'status' => 1])->find();
  71. if ($pink_info ? $pink_info = $pink_info->toArray() : []) {
  72. list($pinkAll, $pinkT, $count, $idAll) = \app\wap\model\store\StorePink::getPinkMemberAndPinkK($pink_info);
  73. \app\wap\model\store\StorePink::PinkFail($pink_info['uid'], $idAll, $pinkAll, $pinkT, $count, 1, [], true, true);
  74. }
  75. }
  76. return true;
  77. }
  78. private function doLiveStudioJob($data)
  79. {
  80. $item = $data['pinkInfo'];
  81. if ($item) {
  82. if ($openId = \app\wap\model\user\WechatUser::where('uid', $item['uid'])->value('openid')) {
  83. $wechat_notification_message = \service\SystemConfigService::get('wechat_notification_message');
  84. if ($wechat_notification_message == 1) {
  85. \service\WechatTemplateService::sendTemplate($openId, \service\WechatTemplateService::LIVE_START_NOTICE, [
  86. 'first' => '叮!直播马上开始啦,精彩不容错过!',
  87. 'keyword1' => $item['live_title'],
  88. 'keyword2' => $item['start_play_time'],
  89. 'remark' => '直播间通道'
  90. ], $item['site_url'] . \think\Url::build('wap/special/details', ['id' => $item['id']]));
  91. } else {
  92. $data['thing5']['value'] = $item['live_title'];
  93. $data['time2']['value'] = $item['start_play_time'];
  94. \app\wap\model\routine\RoutineTemplate::sendBroadcastReminder($data, $item['uid'], $item['site_url'] . \think\Url::build('wap/special/details', ['id' => $item['id']]));
  95. }
  96. }
  97. $dat['title'] = $item['live_title'];
  98. \app\wap\model\wap\SmsTemplate::sendSms($item['uid'], $dat, 'LIVE_START_NOTICE');
  99. }
  100. return true;
  101. }
  102. }