MessageDispatch.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. /**
  3. * Created by: PhpStorm
  4. * User: lytian
  5. * Date: 2020/2/25
  6. * Time: 14:22
  7. */
  8. namespace app\admin\command;
  9. use think\console\Command;
  10. use think\console\Input;
  11. use think\console\Output;
  12. use think\Log;
  13. use think\Model;
  14. use think\Request;
  15. class MessageDispatch extends Command
  16. {
  17. /**
  18. * @var Model
  19. */
  20. private $messageModel = null;
  21. private $earlyTime = 7200;
  22. protected function configure()
  23. {
  24. $this->setName('messageDispatch')
  25. ->setDescription('高级群发之创建渠道消息');
  26. }
  27. protected function execute(Input $input, Output $output)
  28. {
  29. Request::instance()->module('admin'); //cli模式下无法获取到当前的项目模块,手动指定一下
  30. $this->messageModel = model("SendChannelMessage");
  31. //待处理消息 10分钟前进行素材处理
  32. $stime = time();
  33. $maps = [
  34. 'send_time' => ['<=', $stime+$this->earlyTime],
  35. 'send_status' => ['eq', 1],
  36. 'message_status' => ['eq', 1],
  37. ];
  38. $messages = model("SendMessage")->where($maps)->select();
  39. if ($messages) {
  40. foreach ($messages as $message) {
  41. $channelIds = array_unique(array_filter(explode(',', $message['subscription_ids'])));
  42. if ($channelIds) {
  43. foreach ($channelIds as $channelId) {
  44. //判断消息是否已经存在
  45. $data = [
  46. 'mass_id' => $message['id'],
  47. 'channel_id' => $channelId,
  48. 'type' => $message['message_type'],
  49. 'message_content' => '',
  50. 'wx_media_id' => '',
  51. 'send_time' => $message['send_time'],
  52. 'media_status' => 0,
  53. 'send_status' => 0,
  54. 'media_updatetime' => 0,
  55. 'createtime' => $stime,
  56. 'updatetime' => $stime,
  57. 'version' => 0,
  58. 'amount' => 0
  59. ];
  60. $channelMessageId = $this->messageModel->allowField(true)->insertGetId($data);
  61. if ($channelMessageId == false) {
  62. Log::error("渠道消息创建失败 error: {$this->messageModel->getError()}");
  63. }
  64. }
  65. //更新状态
  66. model("SendMessage")->update(['send_status' => 2], ['id' => $message['id']]);
  67. } else {
  68. model("SendMessage")->update(['message_status' => 2], ['id' => $message['id']]);
  69. Log::error("渠道消息创建失败 error: 服务号为空");
  70. }
  71. }
  72. }
  73. }
  74. }