travel/service/app/server/Orders.php

72 lines
2.1 KiB
PHP

<?php
namespace app\server;
use app\common\Error;
use app\model\Admins as AdminsModel;
use app\model\Orders as OrdersModel;
use support\Log;
use support\Redis;
class Orders {
/**
* @params []OrdersModel $order
* @return array
*/
public static function reminderOrders(OrdersModel ...$orders)
{
$admin_ids = [];
$sns = [];
foreach ($orders as $order) {
$admin_ids[] = $order->admin_id;
$sns[] = $order->sn;
}
$admins = AdminsModel::whereIn('id', $admin_ids)->select()->column('mobile', 'id');
if (empty($admins)) {
return array_fill_keys($sns, Error::undefined('admin check error'));
}
$ttl = 86400;
$result = [];
foreach($orders as $order) {
$admin_mobile = $admins[$order->admin_id] ?? '';
if (empty($order->mobile) || empty($admin_mobile)) {
$result[$order->sn] = Error::undefined('client mobile or admin mobile invalid');
continue;
}
if (Blacks::CExists($order->mobile)) {
$result[$order->sn] = Error::ERR_SMS_BLACKS;
Log::info(__METHOD__ . " blacks", [$order->mobile, $order->sn]);
continue;
}
$key = sprintf("CRM:%s:%s_%s", 'reminderOrders', $order->sn, $order->mobile);
$ok = Redis::set($key, time(), 'EX', $ttl, 'NX');
if (!$ok) {
$result[$order->sn] = Error::undefined('reminder cooldown');
continue;
}
$res = SMS::juhe_sms_send($order->mobile, SMS::JUHE_TMP_REMINDER_ORDER, ['title' => $order->product_name, 'mobile' => $admin_mobile]);
$err_code = $res['error_code'] ?? 0;
if ($err_code != 0) {
Log::error(__METHOD__ . " send error", [$res, $order->mobile, $order->sn]);
$result[$order->sn] = Error::ERR_SMS_SEND_FAIL;
continue;
}
$result[$order->sn] = [];
}
return count($orders) > 1 ? $result : reset($result);
}
}