ufutx.dma/app/Console/Commands/SendReserveRestaurantMsg.php
2026-03-04 14:42:40 +08:00

108 lines
3.7 KiB
PHP

<?php
namespace App\Console\Commands;
use App\Jobs\SendTemplateNotice;
use App\Models\Collaborator;
use App\Models\Restaurant;
use App\Models\Wechat;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redis;
class SendReserveRestaurantMsg extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'send:reserve:restaurant:msg {diet_type}';
/**
* The console command description.
*
* @var string
*/
protected $description = '发送订餐通知';
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
Log::info('SendReserveRestaurantMsg start');
//接收参数
$diet_type = $this->argument('diet_type');
// 获取当前日期的星期几
$day_of_week = date('w');
if ($day_of_week == 0) {
return Command::SUCCESS;
}
//获取所有订餐人员
$list = Restaurant::whereIn('status', [Restaurant::STATUS_PAY, Restaurant::STATUS_WAIT, Restaurant::STATUS_FINISHED, Restaurant::STATUS_EVALUATE])
->groupBy('user_id')
->pluck('user_id')
->toArray();
//查看用户是否设置开关
$redis_switch_key = Restaurant::REDIS_SEND_SWITCH;
$switch_uids = Redis::hgetall($redis_switch_key);
//查看哪些用户关闭了订餐提醒
$uids = [];
foreach ($switch_uids as $key => $value) {
if ($value == 1) {
continue;
}
$uids[] = $key;
}
//将所有历史订餐人员和设置关闭提醒的人取差集,如果已定餐人员不设置关闭,默认发送通知
$diff = array_diff($list, $uids);
$date = date('Y-m-d');
//查看当天已定餐人员,不重复发送通知
$today_user = Restaurant::where('date', $date)
->whereIn('status', [Restaurant::STATUS_PAY, Restaurant::STATUS_WAIT, Restaurant::STATUS_FINISHED, Restaurant::STATUS_EVALUATE])
->where('diet_type', $diet_type)
->groupBy('user_id')
->pluck('user_id')
->toArray();
$user_ids = array_diff($diff, $today_user);
foreach ($user_ids as $user_id) {
$open_id = Wechat::where('user_id', $user_id)->value('openid');
Log::info('SendReserveRestaurantMsg:user_id:' . $user_id . "|open_id:" . $open_id);
// $open_id = 'oHGap6F1HR-5q-JdRKrgb6DwztWQ';
if (!$open_id) {
continue;
}
$diet = '午餐订餐';
$reserve_time = '09:00~' . Restaurant::LUNCH_RESERVE_TIME;
if ($diet_type == Restaurant::DIET_TYPE_DINNER) {
$diet = '晚餐订餐';
$reserve_time = '14:00~' . Restaurant::DINNER_RESERVE_TIME;
}
//发送模板消息通知 url = /api/h5/wechat/user/auth?target_path=cateringApplyFor
$params = [
'touser' => $open_id,
'template_id' => config('wechat.tpls.reserve_restaurant'),
'url' => config('app.url') . '/order/#/cateringApplyFor',
'data' => [
'thing8' => ['value' => '友福健康'],
'thing12' => ['value' => '订餐提醒'],
'thing14' => ['value' => $diet],
'time13' => ['value' => $reserve_time],
]
];
SendTemplateNotice::dispatch($params)->onQueue('health');
}
Log::info('SendReserveRestaurantMsg end');
return Command::SUCCESS;
}
}