services->rabbitMq->push(RabbitMqEnum::EXCHANGE_TASK, RabbitMqEnum::TASK_QUEUE, $params, self::class, 'async_handle'); } /** * @param $params * @return void|bool */ public function async_handle($params) { if (empty($params['id'])) return; try { /** * @var $order Order */ $order = Order::getOne([ ['id' => $params['id']] ]); if (empty($order)) { return; } //获取主商城短信配置 $mall_config = MallSetting::getConfByGroup($order->mall_id, ['notice_sms'], true); $mall_sms = $mall_config['notice_sms']['platform']['value']; $sms_key = $params['sms_key']; if ($mall_sms != 'aliyun') $sms_key = $params['sms_key'].'_'.$mall_sms; $sms = \Yii::$app->services->setting->addons->get($order->mall_id, ReservationServiceEnum::ADDONS_NAME, "sms.$sms_key") ?? '[]'; $sms_config = !empty($sms) ? Json::decode($sms) : null; $sms_config = $sms_config['data'] ?? null; if (empty($sms_config) || empty($sms_config['template_id']) || empty($sms_config['content'])) { \Yii::error(__METHOD__ . " 未配置短信模板 {$params['id']}"); return true; } /** * @var $user User */ $user = $order->getUser()->one(); /** * @var $reserve ReservationServiceOrder */ $reserve = ReservationServiceOrder::getOne([ ['mall_id' => $order->mall_id], ['user_id' => $order->user_id], ['status' => StatusEnum::ENABLED], // ['service_status' => StatusEnum::DISABLED], ['order_id' => $order['id']], ]); /** * @var $staff ReservationServiceUser */ $staff = $reserve->getStaff()->one(); // 默认为收货人手机号码 $mobile = $order->mobile; switch ($sms_key) { case ReservationServiceEnum::SMS_KEY_RESERVE: // 发送给技师 case ReservationServiceEnum::SMS_KEY_RESERVE_QCLOUD: // 发送给技师 case ReservationServiceEnum::SMS_KEY_RESERVE_SUBMAIL: // 发送给技师 $mobile = $staff->mobile; break; case ReservationServiceEnum::SMS_KEY_AGREE: // 发送给买家 case ReservationServiceEnum::SMS_KEY_REJECT: // 发送给买家 break; } $collect_vars = []; foreach ($order as $key => $value) { if (in_array($key, ['created_at', 'updated_at', 'pay_time', 'shipping_time', 'sign_time', 'consign_time', 'finish_time', 'close_time']) && !empty($value)) { $value = date("Y-m-d H:i:s"); } $collect_vars["order.{$key}"] = $value; } foreach ($user as $key => $value) { if (in_array($key, ['created_at', 'updated_at', 'birthday', 'junior_at', 'last_login_at', 'upgrade_level_at', 'inviter_at']) && !empty($value)) { $value = date("Y-m-d H:i:s"); } $collect_vars["user.{$key}"] = $value; } foreach ($staff as $key => $value) { if (in_array($key, ['created_at', 'updated_at']) && !empty($value)) { $value = date("Y-m-d H:i:s"); } $collect_vars["staff.{$key}"] = $value; } foreach ($reserve as $key => $value) { if (in_array($key, ['created_at', 'updated_at', 'service_start_at', 'service_end_at']) && !empty($value)) { $value = date("Y-m-d H:i:s"); } $collect_vars["reserve_order.{$key}"] = $value; } $message_data = []; $content = $sms_config['content']; if (!empty($sms_config['vars'])) { $var_keys = array_column($sms_config['vars'], 'name', 'key'); foreach (ReservationServiceEnum::SMS_KEYS_MAP as $key => $value) { if (!empty($var_keys[$key])) { switch ($mall_sms) { case 'aliyun': $message_data[substr($var_keys[$key], 2, -1)] = $collect_vars[$key] ?? ''; break; case 'qcloud': $message_data[substr($var_keys[$key], 1, -1)] = $collect_vars[$key] ?? ''; break; case 'submail': $message_data[substr($var_keys[$key], 5, -1)] = $collect_vars[$key] ?? ''; break; } $content = str_replace($var_keys[$key], $collect_vars[$key] ?? '', $content); } } } $sms_message_attr = [ 'content' => $content, // 需要自己格式化内容? 'template' => $sms_config['template_id'], 'data' => $message_data, 'mall_sms' => $mall_sms, ]; $area_code = '86';// 初始化区号 $gateways = 'domestic';// 默认国内短信 // 检测是登录并且区号不为空则使用国际短信 if (!empty($user->area_code) && $user->area_code != $area_code) { $gateways = 'international'; $area_code = $user->area_code; } ReservationServiceNotice::setData($order->mall_id, $user['id'], $gateways, $area_code, $mobile, time(), $sms_message_attr); } catch (\Exception $e) { var_dump($e->getMessage(), $e->getFile(), $e->getLine()); \Yii::error(FormatHelper::exception($e, __METHOD__)); return false; } } }