|
|
|
|
@ -4,6 +4,7 @@ namespace App\Console\Commands;
|
|
|
|
|
|
|
|
|
|
use App\Models\BirthdayMessage;
|
|
|
|
|
use App\Models\Config;
|
|
|
|
|
use App\Models\EmailRecordUser;
|
|
|
|
|
use App\Models\User;
|
|
|
|
|
use App\Repositories\MeetRepository;
|
|
|
|
|
use Illuminate\Console\Command;
|
|
|
|
|
@ -56,42 +57,82 @@ class CheckBirthday extends Command
|
|
|
|
|
|
|
|
|
|
// 发送通知给用户
|
|
|
|
|
$smsSign = Config::getValueByKey('sms_sign') ?: '';
|
|
|
|
|
$userSuccessCount = 0;
|
|
|
|
|
$userFailCount = 0;
|
|
|
|
|
$userSmsSuccessCount = 0;
|
|
|
|
|
$userSmsFailCount = 0;
|
|
|
|
|
$userEmailSuccessCount = 0;
|
|
|
|
|
$userEmailFailCount = 0;
|
|
|
|
|
|
|
|
|
|
foreach ($users as $user) {
|
|
|
|
|
// 检查用户是否有手机号
|
|
|
|
|
if (empty($user->mobile)) {
|
|
|
|
|
continue;
|
|
|
|
|
$username = $user->username ?: '校友';
|
|
|
|
|
$hasMobile = !empty($user->mobile);
|
|
|
|
|
$hasEmail = !empty($user->email);
|
|
|
|
|
|
|
|
|
|
// 发送短信
|
|
|
|
|
if ($hasMobile) {
|
|
|
|
|
// 获取随机短信模板
|
|
|
|
|
$smsMessage = BirthdayMessage::getRandomSmsMessage();
|
|
|
|
|
if ($smsMessage) {
|
|
|
|
|
// 替换用户名占位符
|
|
|
|
|
$smsContent = str_replace('{username}', $username, $smsMessage);
|
|
|
|
|
|
|
|
|
|
// 添加短信签名
|
|
|
|
|
$smsContent = $smsSign . $smsContent;
|
|
|
|
|
|
|
|
|
|
// 直接发送短信
|
|
|
|
|
$result = ymSms($user->mobile, $smsContent);
|
|
|
|
|
if ($result) {
|
|
|
|
|
$userSmsSuccessCount++;
|
|
|
|
|
$this->info("已向用户 {$username}({$user->mobile}) 发送生日祝福短信");
|
|
|
|
|
} else {
|
|
|
|
|
$userSmsFailCount++;
|
|
|
|
|
$this->error("向用户 {$username}({$user->mobile}) 发送短信失败");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取随机文案
|
|
|
|
|
$message = BirthdayMessage::getRandomMessage();
|
|
|
|
|
if ($message) {
|
|
|
|
|
// 替换用户名占位符
|
|
|
|
|
$username = $user->username ?: '校友';
|
|
|
|
|
$content = str_replace('{username}', $username, $message);
|
|
|
|
|
|
|
|
|
|
// 添加短信签名
|
|
|
|
|
$content = $smsSign . $content;
|
|
|
|
|
|
|
|
|
|
// 直接发送短信
|
|
|
|
|
$result = ymSms($user->mobile, $content);
|
|
|
|
|
if ($result) {
|
|
|
|
|
$userSuccessCount++;
|
|
|
|
|
$this->info("已向用户 {$user->username}({$user->mobile}) 发送生日祝福短信");
|
|
|
|
|
// 发送邮件
|
|
|
|
|
if ($hasEmail) {
|
|
|
|
|
// 获取随机邮件模板
|
|
|
|
|
$emailTemplate = BirthdayMessage::getRandomEmailMessage();
|
|
|
|
|
if ($emailTemplate) {
|
|
|
|
|
try {
|
|
|
|
|
// 准备变量数据
|
|
|
|
|
$varData = [
|
|
|
|
|
'username' => $username,
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
// 使用模板方法替换邮件标题和内容中的变量
|
|
|
|
|
$emailSubject = EmailRecordUser::template($emailTemplate['subject'], $varData);
|
|
|
|
|
$emailContent = EmailRecordUser::template($emailTemplate['content'], $varData);
|
|
|
|
|
|
|
|
|
|
// 发送邮件
|
|
|
|
|
EmailRecordUser::email($emailSubject, $emailContent, $user->email);
|
|
|
|
|
$userEmailSuccessCount++;
|
|
|
|
|
$this->info("已向用户 {$username}({$user->email}) 发送生日祝福邮件");
|
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
|
$userEmailFailCount++;
|
|
|
|
|
$this->error("向用户 {$username}({$user->email}) 发送邮件失败: " . $e->getMessage());
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$userFailCount++;
|
|
|
|
|
$this->error("向用户 {$user->username}({$user->mobile}) 发送短信失败");
|
|
|
|
|
$this->warn("未找到可用的邮件模板,跳过向用户 {$username}({$user->email}) 发送邮件");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($userSuccessCount > 0) {
|
|
|
|
|
$this->info("共向 {$userSuccessCount} 位用户发送生日祝福短信成功");
|
|
|
|
|
// 输出短信发送统计
|
|
|
|
|
if ($userSmsSuccessCount > 0) {
|
|
|
|
|
$this->info("共向 {$userSmsSuccessCount} 位用户发送生日祝福短信成功");
|
|
|
|
|
}
|
|
|
|
|
if ($userSmsFailCount > 0) {
|
|
|
|
|
$this->error("共 {$userSmsFailCount} 位用户短信发送失败");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 输出邮件发送统计
|
|
|
|
|
if ($userEmailSuccessCount > 0) {
|
|
|
|
|
$this->info("共向 {$userEmailSuccessCount} 位用户发送生日祝福邮件成功");
|
|
|
|
|
}
|
|
|
|
|
if ($userFailCount > 0) {
|
|
|
|
|
$this->error("共 {$userFailCount} 位用户短信发送失败");
|
|
|
|
|
if ($userEmailFailCount > 0) {
|
|
|
|
|
$this->error("共 {$userEmailFailCount} 位用户邮件发送失败");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 如果有生日用户,给管理员发送短信
|
|
|
|
|
|