| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 | <?phpnamespace App\Jobs;use App\Services\SmsService;use App\Services\Eav\EavSetService;use App\Services\Eav\MaterialService;use Illuminate\Bus\Queueable;use Illuminate\Contracts\Queue\ShouldQueue;use Illuminate\Queue\SerializesModels;use Illuminate\Queue\InteractsWithQueue;use Illuminate\Support\Facades\Log;/** * 发送消息 * 集合 message * * * Class SendMessage * @package App\Jobs */class SendMessage implements ShouldQueue{    use InteractsWithQueue, Queueable, SerializesModels;    private $setAlias = 'message';    private $store_id = '';    private $type = '';    private $messageArr = [];    private $paramsArr = [];    private $userId = '';    /**     * SendMessage constructor.     *     * @param $store_id     * @param $type     * @param $paramsArr     * @param string $userId     */    public function __construct($store_id, $type, $paramsArr, $userId = '')    {        $this->store_id = $store_id;        $this->type = $type;        $this->paramsArr = $paramsArr;        $this->userId = $userId;        $this->messageArr = [            'PAY_SUCCESS' => [ // 订单支付成功                'user' => [                    'msg' => [ // 消息通知,商家后台的消息里面显示                        'type' => 1,                        'title' => '订单支付成功',                        'content' => '您的订单已成功支付,订单号:${orderNo}',                        'order_id' => '',                    ],                    'duanxin' => [ // 短信通知,通过发送短信的方式通知                        'temp_id' => 'SMS_185823291',                        'content' => '您在应用${storeName}的订单已成功支付,订单号:${orderNo}。'                    ]                ],                'seller' => [                    'msg' => [ // 消息通知,商家后台的消息里面显示                        'type' => 1,                        'title' => '订单支付成功',                        'content' => '${userName}支付订单成功,请及时发货!订单号:${orderNo}。',                        'order_id' => '',                    ],                    'duanxin' => [ // 短信通知,通过发送短信的方式通知                        'temp_id' => 'SMS_186395860',                        'content' => '${userName}支付订单成功,请及时发货!订单号:${orderNo}。'                    ]                ]            ],            'REFUND_APPLY' => [ // 用户发起退款申请                'seller' => [                    'msg' => [ // 消息通知,商家后台的消息里面显示                        'type' => 1,                        'title' => '用户发起退款申请',                        'content' => '${userName}发起退款申请,订单号:${orderNo},请及时处理!',                        'order_id' => '',                    ],                    'duanxin' => [ // 短信通知,通过发送短信的方式通知                        'temp_id' => 'SMS_186400875',                        'content' => '${userName}发起退款申请,订单号:${orderNo},请及时处理!'                    ]                ]            ],            'REFUND_SUCCESS' => [ // 订单退款成功                'user' => [                    'msg' => [ // 消息通知,商家后台的消息里面显示                        'type' => 1,                        'title' => '订单退款成功',                        'content' => '商家${storeName},已同意你的退款申请,退款单号:${orderNo}!',                        'order_id' => '',                    ],                    'duanxin' => [ // 短信通知,通过发送短信的方式通知                        'temp_id' => 'SMS_186360964',                        'content' => '您在应用${storeName}的退款申请,商家已同意,请注意查收!订单号:${orderNo}。'                    ]                ]            ],            'REFUSE_REFUND' => [ // 商家拒绝退款                'user' => [                    'msg' => [ // 消息通知,商家后台的消息里面显示                        'type' => 1,                        'title' => '商家拒绝退款',                        'content' => '您在应用${storeName}申请的退款商家已拒绝,订单号:${orderNo}!',                        'order_id' => '',                    ]                ],                'seller' => [                    'msg' => [ // 消息通知,商家后台的消息里面显示                        'type' => 1,                        'title' => '商家拒绝退款',                        'content' => '已拒绝${userName}的退款申请,订单号:${orderNo}。请妥善处理售后问题,避免引起客诉!',                        'order_id' => '',                    ]                ]            ],            // 订单确认收货            'RECEIPT_SUCCESS' => [                'seller' => [                    'msg' => [ // 消息通知,商家后台的消息里面显示                        'type' => 1,                        'title' => '订单确认收货',                        'content' => '${userName}已确认收货,订单号:${orderNo}!',                        'order_id' => '',                    ]                ]            ],            // 系统自动确认收货            'SYS_RECEIPT_SUCCESS' => [                'user' => [                    'msg' => [ // 消息通知,商家后台的消息里面显示                        'type' => 1,                        'title' => '系统自动确认收货',                        'content' => '您的订单逾期,已默认收货,订单号:${orderNo}!',                        'order_id' => '',                    ]                ],                'seller' => [                    'msg' => [ // 消息通知,商家后台的消息里面显示                        'type' => 1,                        'title' => '系统自动确认收货',                        'content' => '${userName}已确认收货,订单号:${orderNo}!',                        'order_id' => '',                    ]                ]            ],            // 商家发货            'DELIVER_GOOD' => [                'user' => [                    'msg' => [ // 消息通知,商家后台的消息里面显示                        'type' => 1,                        'title' => '系统自动确认收货',                        'content' => '尊敬的客户,您在应用${storeName}的订单${orderNo}已出库发货,正在配送中,请您耐心等待。',                        'order_id' => '',                    ],                    'duanxin' => [ // 短信通知,通过发送短信的方式通知                        'temp_id' => 'SMS_185823328',                        'content' => '尊敬的客户,您在应用${storeName}的订单${orderNo}已出库发货,正在配送中,请您耐心等待。'                    ]                ]            ],            // 商家接单,预约产品        ];    }    public function handle()    {        // 获取店铺信息        $materialService = new MaterialService(new EavSetService('store'));        $storeInfo = $materialService->elasticClientService()->docGet($this->store_id);        $this->paramsArr['storeName'] = $storeInfo['name'] ?? ''; // 店铺名称        // 获取信息        if (isset($this->messageArr[$this->type])) {            $msgArr = $this->messageArr[$this->type];            // 买家信息            $materialUserService = new MaterialService(new EavSetService('member_store'));            // 客户信息发送            $userArr = $msgArr['user'] ?? [];            if ($userArr) {                $info = $materialUserService->elasticClientService()->getInfo($this->userId);                $this->paramsArr['userName'] = hidestr($info['mobile'], 3, 4); // 用户名称 手机号                $this->send(1, $userArr, $info['mobile']);            }            // 商家信息发送            $sellerArr = $msgArr['seller'] ?? [];            if ($sellerArr) {                if ($this->userId) {                    // 买家信息                    $info = $materialUserService->elasticClientService()->getInfo($this->userId);                    $this->paramsArr['userName'] = hidestr($info['mobile'], 3, 4); // 用户名称 手机号                }                $mobile = '';                if (isset($userArr['duanxin']) && $userArr['duanxin']) {                    $materialSellerService = new MaterialService(new EavSetService('user'));                    $info = $materialSellerService->elasticClientService()->getInfo($storeInfo['creator_id']);                    $mobile = $info['mobile'] ?? '';                }                $this->send(2, $sellerArr, $mobile);            }        }    }    private function send($type, $userArr, $mobile = '')    {        $msgSend = $userArr['msg'] ?? [];        $duanxinSend = $userArr['duanxin'] ?? [];        if ($msgSend) {            $content = $msgSend['content'];            foreach ($this->paramsArr as $column => $value) {                $content = preg_replace('/\$\s*{\s*' . $column . '\s*}/i', $value, $content);            }            $data = $msgSend;            $data['store_id'] = $this->store_id;            $data['content'] = $content;            $data['is_read'] = 0; // 是否已读 0 未读 1 已读            if ($type == 1) {                $data['member_id'] = $this->userId;            }else{                $data['member_id'] = 0;            }            $materialService = new MaterialService(new EavSetService($this->setAlias));            $is_success = $materialService->addProduct($data);            if ($is_success) {            } else {                Log::error('消息数据保存失败,请尽快处理!', $data);            }        }        if ($duanxinSend && $duanxinSend['temp_id']) {            $result = (new SmsService())->sendToUser($mobile, $duanxinSend['temp_id'], $this->paramsArr);            Log::info('短信发送', ['result' => $result, 'content' => $duanxinSend['content'] ?? '']);        }    }}
 |