ColumnDataController.class.php 3.38 KB
<?php
/**
 * 整体数据总览(栏目访问占比)
 * User: daijun
 * Date: 2017/10/10
 * Time: 上午9:57
 */

namespace Apicp\Controller\AllData;

use Common\Common\ColumnHelper;
use Common\Common\DataHelper;
use Common\Service\ColumnService;

class ColumnDataController extends \Apicp\Controller\AbstractController
{

    /**
     * ColumnData
     * @author daijun
     * @desc 栏目访问占比接口
     *
     * @param array dp_ids 组织(部门)ID集合,为空时查询全公司
     * @param int starttime 开始时间(时间戳:毫秒)
     * @param int endtime 结束时间(时间戳:毫秒)
     *
     * @return array
        array(
          'data'=>array(
              array(
                  'title' => '调研中心', // 栏目名称
                  'total' => 20, // 访问次数
                  'percent' => 12.50 // 访问占比
              ),
          )
        );
     */
    public function Index_post()
    {

        // 获取组织id集合
        $dp_ids = I('post.dp_ids');
        // 获取开始统计时间
        $starttime = I('post.starttime');
        // 获取结束统计时间
        $endtime = I('post.endtime');

        if (empty($starttime) || empty($endtime)) {
            // 参数非空验证
            E('_EMPTY_DATE_AREA');
        }

        // 实例化
        $column_helper = &ColumnHelper::instance();
        // 获取栏目列表
        $column_list = $column_helper->list_column_data();
        // 获取栏目id集合
        $obj_ids = array_column($column_list, 'recommender_id');
        if (empty($obj_ids)) {
            // 如果栏目id集合为空,则直接返回
            $this->_result = [
                'data' => []
            ];

            return true;
        }

        $data_helper = &DataHelper::instance();

        // 格式化开始和结束时间
        $starttime = $data_helper->formatStarttime($starttime);
        $endtime = $data_helper->formatEndtime($endtime);

        // 组装查询条件
        $conds = [
            'starttime' => $starttime,
            'endtime' => $endtime,
            'dp_ids' => $dp_ids,
            'obj_ids' => $obj_ids
        ];

        $column_serv = new ColumnService();
        // 依据条件获取栏目访问统计数据
        $visit_list = $column_serv->getColumnData($conds);

        // 格式化返回数据
        $this->_result = [
            'data' => $this->format_data($visit_list, $column_list)
        ];

    }

    /**
     * 格式化返回数据
     *
     * @param $visit_list  用户栏目访问统计数据
     * @param $column_list 栏目列表
     *
     * @return array
     */
    private function format_data($visit_list, $column_list)
    {
        $data = [];

        // 将访问记录数据转换成以栏目id为主键的二维数组
        $visit_list = array_combine_by_key($visit_list, 'obj_id');

        // 将访问次数组成一维数组
        $total_arr = array_column($visit_list, 'total');

        // 计算访问总次数
        $totals = array_sum($total_arr);

        // 循环组装数据
        foreach ($column_list as $k => $v) {

            $total = (int)$visit_list[$v['recommender_id']]['total'];

            $data[$k] = [
                'title' => $v['title'],
                'total' => $total,
                'percent' => sprintf('%.2f', ($total / $totals) * 100)
            ];
        }

        return $data;
    }
}