ExportStudyRankController.class.php 5.72 KB
<?php
/**
 * Created by PhpStorm.
 * User: zhonglei
 * Date: 17/10/11
 * Time: 20:43
 */

namespace Apicp\Controller\DataRank;

use Com\PackageValidate;
use Com\PythonExcel;
use Common\Common\Constant;
use Common\Common\DataHelper;
use Common\Common\ExportDownload;

class ExportStudyRankController extends \Apicp\Controller\AbstractController
{
    /**
     * ExportStudyRank
     * @author zhonglei
     * @desc 导出学习排行数据接口
     * @param string app:true 应用(course=课程;news=新闻;doc=资料库)
     * @param Int starttime:true 开始时间戳
     * @param Int endtime:true 结束时间戳
     * @return mixed
     */
    public function Index_post()
    {
        // 请求数据
        $post_data = I('post.');

        // 验证规则
        $rules = [
            'app' => 'require|in:course,news,doc',
            'starttime' => 'require|integer',
            'endtime' => 'require|integer',
        ];

        // 验证请求数据
        $validate = new PackageValidate();
        $validate->postData = $post_data;
        $validate->validateParams($rules);

        $dataHelper = &DataHelper::instance();
        $starttime = $dataHelper->formatStarttime($post_data['starttime']);
        $endtime = $dataHelper->formatEndtime($post_data['endtime']);

        $file_name = '';
        $columns = [];
        $rows = [];

        // 获取数据列、数据行
        switch ($post_data['app']) {
            case Constant::APP_COURSE:
                $file_name = '最受欢迎课程排行.xls';
                list($columns, $rows) = $this->_getCourseRank($starttime, $endtime);
                break;

            case Constant::APP_NEWS:
                $file_name = '最受关注头条排行.xls';
                list($columns, $rows) = $this->_getNewsRank($starttime, $endtime);
                break;

            case Constant::APP_DOC:
                $file_name = '最有帮助文件排行.xls';
                list($columns, $rows) = $this->_getDocRank($starttime, $endtime);
                break;
        }

        $file_path = ExportDownload::get_down_dir($this->_login->user['eaId'] . microtime(true)) . $file_name;
        $ret = PythonExcel::instance()->write($file_path, $columns, $rows);

        // header('Pragma: public');
        // header('Expires: 0');
        // header('Cache-Control:must-revalidate, post-check=0, pre-check=0');
        // header('Content-Type:application/force-download');
        // header('Content-Type:application/vnd.ms-execl');
        // header('Content-Type:application/octet-stream');
        // header('Content-Type:application/download');
        // header("Content-Disposition:attachment;filename={$file_name}");
        // header('Content-Transfer-Encoding:binary');

        // echo file_get_contents($file_path);
        // exit;

        if ($ret) {
            // 写入数据到下载中心
            $params = [
                'title' => $file_name,
                'ea_id' => $this->_login->user['eaId'],
                'username' => $this->_login->user['eaRealname'],
                'type' => 0,
                'url' => $file_path,
            ];

            ExportDownload::insert_down_load($params);
        }

        return true;
    }

    /**
     * 获取课程排行数据
     * @author zhonglei
     * @param int $starttime 开始时间戳
     * @param int $endtime 结束时间戳
     * @return array
     */
    private function _getCourseRank($starttime, $endtime)
    {
        $columns = ['排行', '课程名称', '课程发布时间', '学习人数', '点赞数', '评论数'];
        $dataHelper = &DataHelper::instance();
        $list = $dataHelper->listCourseRank($starttime, $endtime);
        $rows = [];
        $index = 1;

        foreach ($list as $v) {
            $rows[] = [
                $index,
                $v['article_title'],
                rgmdate($v['created']),
                (int)$v['total'],
                (int)$v['like'],
                (int)$v['comment'],
            ];

            $index++;
        }

        return [$columns, $rows];
    }

    /**
     * 获取新闻排行数据
     * @author zhonglei
     * @param int $starttime 开始时间戳
     * @param int $endtime 结束时间戳
     * @return array
     */
    private function _getNewsRank($starttime, $endtime)
    {
        $columns = ['排行', '头条名称', '点击量', '点赞数', '评论数', '已读人数', '未读人数', '发布人'];
        $dataHelper = &DataHelper::instance();
        $list = $dataHelper->listNewsRank($starttime, $endtime);
        $rows = [];
        $index = 1;

        foreach ($list as $v) {
            $rows[] = [
                $index,
                $v['article_title'],
                (int)$v['total'],
                (int)$v['like'],
                (int)$v['comment'],
                (int)$v['read_total'],
                (int)$v['unread_total'],
                (string)$v['author'],
            ];

            $index++;
        }

        return [$columns, $rows];
    }

    /**
     * 获取资料库排行数据
     * @author zhonglei
     * @param int $starttime 开始时间戳
     * @param int $endtime 结束时间戳
     * @return array
     */
    private function _getDocRank($starttime, $endtime)
    {
        $columns = ['排行', '文件名称', '文件路径', '点击量'];
        $dataHelper = &DataHelper::instance();
        $list = $dataHelper->listDocRank($starttime, $endtime, 0);
        $rows = [];
        $index = 1;

        foreach ($list as $v) {
            $rows[] = [
                $index,
                $v['file_name'],
                $dataHelper->getDocFilePath($v['file_id']),
                (int)$v['total'],
            ];

            $index++;
        }

        return [$columns, $rows];
    }
}