| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- <?php
- namespace addons\Community\common\logic;
- use addons\Community\common\enums\CommunityEnum;
- use addons\Community\common\models\CommunityHeadOrder;
- use addons\Community\common\models\CommunityNotice;
- use common\enums\OrderStatusEnum;
- use common\enums\RabbitMqEnum;
- use common\enums\ShippingTypeEnum;
- use common\enums\StatusEnum;
- use common\helpers\FormatHelper;
- use common\helpers\sms\Sms;
- use common\models\order\Order;
- use common\models\user\User;
- use Overtrue\EasySms\Exceptions\InvalidArgumentException;
- use Overtrue\EasySms\Exceptions\NoGatewayAvailableException;
- use Overtrue\EasySms\PhoneNumber;
- 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;
- $order = Order::getOne([
- ['id' => $params['id']]
- ]);
- if (empty($order)) return;
- $status = intval($params['status']);
- $sms_config = \Yii::$app->services->setting->addons->get($order->mall_id, CommunityEnum::ADDONS_NAME, 'basic.sms') ?? '[]';
- $sms_config = Json::decode($sms_config);
- // 买家与卖家
- foreach ($sms_config as $sms_key => $sms_value) {
- if (in_array($sms_key, ["seller_{$status}", "buyer_{$status}"])) { // 执行发送
- try {
- $to_type = strpos($sms_key, "seller") !== false ? StatusEnum::ENABLED : StatusEnum::DISABLED;
- // 发送对象
- $is_continue = false;
- switch ($status) {
- case OrderStatusEnum::NOT_PAY:
- case OrderStatusEnum::PAY:
- // 两个都需要 - 团长/买家,买家仅限于送货上门的订单才需要
- // 如果是发送给买家的短信,那么判断是否为配送上门
- if (strpos($sms_key, "buyer") !== false &&
- $order->shipping_type != ShippingTypeEnum::MERCHANT_DISTRIBUTION) {
- // 需要发短信给买家
- $is_continue = true;
- }
- if (strpos($sms_key, "seller") !== false) $sms_value['send_day'] = 0; // 卖家收短信为当时就收
- break;
- case OrderStatusEnum::SING:
- case OrderStatusEnum::ACCOMPLISH:
- case OrderStatusEnum::SHIPMENTS:
- }
- if ($is_continue) continue;
- $user = $order->user->toArray();
- if (empty($user)) return;
- $area_code = '86';// 初始化区号
- $gateways = 'domestic';// 默认国内短信
- // 检测是登录并且区号不为空则使用国际短信
- if (!empty($user['area_code']) && $user['area_code'] != '86') {
- $gateways = 'international';
- $area_code = $user['area_code'];
- }
- // $sms = new Sms($order->mall_id, $gateways);
- // order, head, user
- $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;
- }
- $headOrder = CommunityHeadOrder::getOne([
- ['order_id' => $order->id]
- ]);
- $head = $headOrder->head->toArray();
- foreach ($head as $key => $value) {
- if (in_array($key, ['created_at', 'updated_at']) && !empty($value)) {
- $value = date("Y-m-d H:i:s");
- }
- $collect_vars["head.{$key}"] = $value;
- }
- $message_data = [];
- $content = $sms_value['content'];
- $var_keys = array_column($sms_value['vars'], 'name', 'key');
- foreach (CommunityEnum::SMS_KEYS as $key => $value) {
- if (!empty($var_keys[$key])) {
- $message_data[substr($var_keys[$key], 2, -1)] = $collect_vars[$key] ?? '';
- $content = str_replace($var_keys[$key], $collect_vars[$key] ?? '', $content);
- }
- }
- $sms_message_attr = [
- 'content' => $content, // 需要自己格式化内容?
- 'template' => $sms_value['id'],
- 'data' => $message_data
- ];
- $send_at = time();
- $send_day = intval($sms_value['send_day'] ?? 0);
- if (!empty($send_day) && $send_day > 0) {
- $send_at += $send_day * 86400; // 天
- }
- CommunityNotice::setData($order->mall_id, $user['id'], $gateways, $area_code,
- $to_type == StatusEnum::ENABLED ? $head['mobile'] : $user['mobile'], $send_at, $sms_message_attr);
- // $message = new SmsMessage($sms_message_attr);
- //
- // // 接受角色不一样,有可能是买家,有可能是团长
- // $mobile = new PhoneNumber($to_type == StatusEnum::ENABLED ? $head['mobile'] : $user['mobile'], $area_code);
- //
- // $sms->easySms->send($mobile, $message);
- } catch (\Exception $e) {
- \Yii::error(FormatHelper::exception($e, __METHOD__));
- // return false;
- }
- }
- }
- }
- }
|