SendSysMessage.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. namespace App\Listeners;
  3. use Illuminate\Auth\Events\Authenticated;
  4. use Illuminate\Bus\Queueable;
  5. use Illuminate\Queue\InteractsWithQueue;
  6. use Illuminate\Contracts\Queue\ShouldQueue;
  7. use Illuminate\Support\Facades\Log;
  8. use App\Services\Common\PmsService;
  9. /**
  10. * Class SendSysMessage
  11. * 用户登录后补发系统消息
  12. * @package App\Listeners
  13. * Auth Zhong
  14. * Date 2018/12/24
  15. */
  16. class SendSysMessage implements ShouldQueue
  17. {
  18. use InteractsWithQueue,Queueable;
  19. protected $pmsService;
  20. /**
  21. * Create the event listener.
  22. *
  23. * @return void
  24. */
  25. public function __construct(PmsService $pmsService)
  26. {
  27. $this->queue = "sys_message";
  28. $this->pmsService = $pmsService;
  29. }
  30. /**
  31. * Handle the event.
  32. *
  33. * @param Authenticated $event
  34. * @return void
  35. */
  36. public function handle(Authenticated $event)
  37. {
  38. //Log::info("用户认证成功", $event->user->toArray());
  39. //获取系统消息表sys_message中
  40. $user = $event->user;
  41. if (array_has($user, 'utype')) {
  42. $user_cratetime = $user->created_at;
  43. $subsite_id = $user->subsite_id;
  44. $where = '(user_type = 0 OR user_type = '.$user->utype.') and ((news_type = 1 and created_at >= "'.$user_cratetime.'") or (news_type = 2 and ended_at >= '.strtotime($user_cratetime).'))';
  45. $new_sys = $this->pmsService->getNewestSysMessage($where, $subsite_id);
  46. if ($new_sys) {
  47. //添加系统站内信/添加弹窗消息(老用户和在显示时间范围内的新用户)
  48. $sys_time = strtotime($new_sys->created_at);
  49. //获取pms表中最新添加的消息
  50. $pms_where = array(
  51. 'utype' => $user->utype,
  52. 'msgtouid' => $user->id,
  53. 'msgfromuid'=> 0
  54. );
  55. $pms = $this->pmsService->getNewestPms($pms_where);
  56. $origin_time = 0;
  57. $time = 0;
  58. $time1 = 0;
  59. if ($pms) {
  60. $time = strtotime($pms->created_at);
  61. $time1 = $pms->created_at;
  62. $origin_time = $time1;
  63. }
  64. if ($time< strtotime($user_cratetime)) {
  65. $time = strtotime($user_cratetime);
  66. $time1 = $user_cratetime;
  67. }
  68. if ((($time < $sys_time) && ($new_sys->news_type == 1))|| ($new_sys->news_type == 2) && ($time < $sys_time || $time1<$new_sys->ended_at)) {
  69. //获取符合条件的系统消息并添加到pms表中
  70. /*$sys_where = array(
  71. array('created_at','>', $time1)
  72. );
  73. $whereIn['user_type'] = [0,$user->utype];
  74. $sys_lists = $this->pmsService->getSysMessages($sys_where, $whereIn, $subsite_id);*/
  75. $filter_sys = 'user_type in (0,'.$user->utype.') and ((news_type =1 and created_at > "'.$time1.'") or (news_type = 2 and (created_at > "'.$origin_time.'" and ended_at> '.$time.')))';
  76. $sys_lists = $this->pmsService->getFilterMessages($filter_sys, $subsite_id);
  77. if ($sys_lists->toArray()) {
  78. //处理数据
  79. $insert_data = array();
  80. $time = date('Y-m-d H:i:s', time());
  81. foreach ($sys_lists as $key => $val) {
  82. $insert_data[$key] = array(
  83. 'utype' => $user->utype,
  84. 'msgtype' => $val->news_type,
  85. 'msgfromuid' => 0,
  86. 'msgfrom' => 'admin',
  87. 'msgtoname' => $user->username,
  88. 'msgtouid' => $user->id,
  89. 'message' => $val->content,
  90. 'started_at' => strtotime($val->started_at)>0?strtotime($val->started_at):0,
  91. 'ended_at' => strtotime($val->ended_at)>0?strtotime($val->ended_at):0,
  92. 'new' => 1,
  93. 'created_at' => $val->created_at,
  94. 'updated_at' => date('Y-m-d H:i:s', time())
  95. );
  96. }
  97. $rst = $this->pmsService->addBatchPms($insert_data);
  98. }
  99. }
  100. }
  101. }
  102. }
  103. }