| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- <?php
- namespace addons\ReservationService\common\logic;
- use addons\ReservationService\common\enums\ReservationServiceEnum;
- use addons\ReservationService\common\models\ReservationServiceNotice;
- use addons\ReservationService\common\models\ReservationServiceOrder;
- use addons\ReservationService\common\models\ReservationServiceUser;
- use common\enums\OrderStatusEnum;
- use common\enums\RabbitMqEnum;
- use common\enums\ShippingTypeEnum;
- use common\enums\StatusEnum;
- use common\helpers\FormatHelper;
- use common\models\common\MallSetting;
- use common\models\order\Order;
- use common\models\user\User;
- use yii\helpers\Json;
- class NoticeLogic
- {
- /**
- * @param array $params
- * @return void
- * @throws \Exception
- */
- public function send(array $params)
- {
- \Yii::error(__METHOD__ . " 发送短信 " . Json::encode($params));
- \Yii::$app->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;
- }
- }
- }
|