hyperf-view/app/System/Service/SystemNoticeService.php

65 lines
1.7 KiB
PHP

<?php
declare(strict_types = 1);
namespace App\System\Service;
use App\System\Mapper\SystemNoticeMapper;
use App\System\Mapper\SystemUserMapper;
use App\System\Model\SystemQueueMessage;
use App\System\Vo\QueueMessageVo;
use Co\System;
use Builder\Abstracts\AbstractService;
use Builder\Annotation\Transaction;
use Builder\Exception\NormalStatusException;
/**
* 通知管理服务类
*/
class SystemNoticeService extends AbstractService
{
/**
* @var SystemNoticeMapper
*/
public $mapper;
public function __construct(SystemNoticeMapper $mapper)
{
$this->mapper = $mapper;
}
/**
* 保存公告
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Throwable
* @throws \Psr\Container\NotFoundExceptionInterface
*/
#[Transaction]
public function save(array $data): int
{
$message = new QueueMessageVo();
$message->setTitle($data['title']);
$message->setContentType(
$data['type'] === '1'
? SystemQueueMessage::TYPE_NOTICE
: SystemQueueMessage::TYPE_ANNOUNCE
);
$message->setContent($data['content']);
$message->setSendBy(user()->getId());
// 待发送用户
$userIds = $data['users'] ?? [];
if (empty($userIds)) {
$userMapper = container()->get(SystemUserMapper::class);
$userIds = $userMapper->pluck(['status' => \Builder\BaseModel::ENABLE]);
}
$data['message_id'] = push_queue_message($message, $userIds);
if ($data['message_id'] !== -1) {
return parent::save($data);
}
throw new NormalStatusException;
}
}