MessagePush.php 4.5 KB
<?php

namespace App\Models\Workchat;

use App\Models\Base;
use App\Models\Inquiry\InquiryFormData;
use App\Models\Project\Project;
use App\Models\ProjectAssociation\ProjectAssociation;
use App\Services\ProjectServer;
use App\Utils\LogUtils;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\Log;

/**
 * Class MessagePush
 * @package App\Models\Workchat
 * @author zbj
 * @date 2024/9/7
 */
class MessagePush extends Base
{
    use SoftDeletes;

    const STATUS_PENDING = 0;
    const STATUS_SUCCESS = 1;
    const STATUS_ERROR = 9;

    const TYPE_INQUIRY = 'inquiry';
    const TYPE_WEEK = 'week';
    const  TYPE_TICKET = 'Ticket';
    //设置关联表名
    /**
     * @var mixed
     */
    protected $table = 'gl_workchat_message_push';


    /**
     * @param $id
     * @param $project_id
     * @param $country
     * @param $name
     * @param $submit_at
     * @return bool
     * @param : is_forward_inquiry:0未开启转发询盘 1:开启转发询盘
     */
    public static function addInquiryMessage($id, $project_id, $country, $name, $submit_at){
        //查看项目是否开启转发询盘
        $projectModel = new Project();
        $projectInfo = $projectModel->read(['id'=>$project_id],['is_forward_inquiry']);
        if($projectInfo['is_forward_inquiry'] == 0){
            return false;
        }
        //项目是否有绑定群
        $friend_id = ProjectAssociation::where('project_id', $project_id)
            ->where('status', ProjectAssociation::STATUS_NORMAL)
            ->where('binding_app', ProjectAssociation::ENTERPRISE_WECHAT)
            ->value('friend_id');
        if(!$friend_id){
            Log::channel('inquiry')->info($project_id . '没有绑定企微群', [$id]);
            return false;
        }

        //特殊处理, 要求任何时候收到询盘都要及时推送到群里面
        $special_project_ids = [650, 2045, 916];
        //9-21 点,每条消息及时通知
        //21-第二天 9 点,整合一起通知
        $hour = date('H', strtotime($submit_at));
        if(($hour >= 8 && $hour < 21) || in_array($project_id, $special_project_ids)) {
            $model = new self();
            $model->project_id = $project_id;
            $model->friend_id = $friend_id;
            $model->type = self::TYPE_INQUIRY;
            $model->ref_ids = $id;
            $model->content = '[' . date('H:i', strtotime($submit_at)) . '] 您的全球搜网站收到来自【' . $country . $name . '】的询盘信息,请登录后台或APP进行查看!';
            $model->send_time = $submit_at;
        }else{
            //定时发送时间
            $send_time = $hour >= 8 ? date('Y-m-d 08:00:00', strtotime($submit_at . '+1 day')) : date('Y-m-d 08:00:00', strtotime($submit_at));
            $model = self::where('project_id', $project_id)->where('type', self::TYPE_INQUIRY)->where('send_time', $send_time)->first();
            if(!$model){
                $model = new self();
                $model->project_id = $project_id;
                $model->friend_id = $friend_id;
                $model->type = self::TYPE_INQUIRY;
                $model->ref_ids = $id;
                $model->countries = $country;
                $model->send_time = $send_time;
                $model->content = '[08:00] 您的全球搜网站收到来自【' . $country . $name . '】的询盘信息,请登录后台或APP进行查看!';
            }else{
                $ref_ids = explode(',', $model->ref_ids);
                $ref_ids[] = $id;
                $model->ref_ids = implode(',', $ref_ids);
                $countries = explode(',', $model->countries);
                $countries[] = $country;
                $model->countries = implode(',', $countries);

                // 升级项目部分询盘无法监控, 会通过接口通知, 但是ID会值为固定值0,在数据库查不到, 无法获取对应国家
                $count = count($countries);
                if ($countries) {
                    $countries = array_unique($countries);
                    if(count($countries) > 3){
                        $country = implode(',', array_slice($countries, 0, 3)) . '...';
                    }else{
                        $country = implode(',', $countries);
                    }
                }
                $model->content = '[08:00] 您的全球搜网站收到来自【' . $country . '】'.$count.'条询盘信息,请登录后台或APP进行查看!';
            }
        }
        $model->save();

        Log::channel('inquiry')->info($project_id . '通知消息', [$model->id]);
    }
}