SendNoticeController.class.php 3.17 KB
<?php
/**
 * Created by PhpStorm.
 * User: liyifei2012it
 * Date: 17/6/13
 * Time: 18:13
 */

namespace Frontend\Controller\Callback;

use Common\Common\Msg;
use Common\Service\ArticleService;
use Common\Service\ClassService;
use Think\Log;
use VcySDK\Cron;
use VcySDK\Service;

class SendNoticeController extends AbstractController
{
    /**
     * 发送消息
     * @author tangxingguo
     */
    public function Index()
    {
        $stream_data = file_get_contents('php://input');
        $stream_data = empty($stream_data) ? [] : json_decode($stream_data, true);
        Log::record('---SendNotice stream data:' . var_export($stream_data, true), Log::INFO);

        $cron_id = I('get.cron_id', '', 'trim');
        $article_id = I('get.article_id', 0, 'intval');
        $uids = isset($stream_data['uids']) ? $stream_data['uids'] : [];

        // 删除计划任务
        if (!empty($cron_id)) {

            $cronSdk = new Cron(Service::instance());
            $cronSdk->delete($cron_id);
        }

        // 发送消息
        $this->_sendNotice($article_id, $uids);

        exit('SUCCESS');
    }

    /**
     * 发送新课程消息通知
     * @param int $article_id 课程数据
     * @param array $uids 人员数据
     * @return bool
     */
    private function _sendNotice($article_id, $uids)
    {
        // 参数检查
        if (empty($article_id) || !is_array($uids) || empty($uids)) {

            return false;
        }

        // 课程检查
        $articleServ = new ArticleService();
        $article = $articleServ->get($article_id);
        if (empty($article)) {

            Log::record('---SendNotice article empty', Log::ERR);
            return false;
        }

        // 发送消息
        $className = $this->_className($article['class_id']);
        if (empty($className)) {

            Log::record('---SendNotice parent calss empty', Log::ERR);
            return false;
        }

        $msgServ = &Msg::instance();
        $msg_data = [
            [
                'title' => "【{$className}{$article['article_title']}",
                'description' => $article['summary'],
                'url' => oaUrl('Frontend/Index/Detail/Index', ['article_id' => $article['article_id'], 'data_id' => $article['data_id'], 'article_type' => $article['article_type']]),
                'picUrl' => $article['cover_url'],
            ]
        ];

        // 推送
        $msgServ->sendNews($uids, null, null, $msg_data);

        return true;
    }

    /**
     * 取顶级分类名称
     * @author tangxingguo
     * @param int $class_id 分类名称
     * @return mixed
     */
    private function _className($class_id)
    {
        // 获取分类
        $classServ = new ClassService();
        $class_list = $classServ->list_all();
        if (empty($class_list)) {

            return '';
        }

        $class_list = array_combine_by_key($class_list, 'class_id');
        if (!isset($class_list[$class_id])) {

            return '';
        }

        // 获取一级分类
        while ($class_list[$class_id]['parent_id'] > 0) {

            $class_id = $class_list[$class_id]['parent_id'];
        }

        return $class_list[$class_id]['class_name'];
    }
}