AnswerListController.class.php 5.12 KB
<?php
/**
 * 【调研中心-后台】22_导出问题的回答列表
 * AnswerListController.class.php
 * CreateBy:dj
 * Date:2017-03-08
 */

namespace Apicp\Controller\Export;

use Com\PythonExcel;
use Common\Common\ExportDownload;
use Common\Common\User;
use Common\Service\AnswerService;
use Common\Service\BaseinfoService;
use Common\Service\QuestionService;
use Common\Service\RecordService;

class AnswerListController extends \Apicp\Controller\AbstractController
{

    // 导出excel文件名
    const QUESTIONNAIRE_XLS_FILE_NAME = '调研已填写记录数据';

    public function Index()
    {

        // 问题id
        $q_id = trim(I('post.q_id'));

        // 实例化调研问题信息Service
        $question_s = new QuestionService();
        // 问题信息
        $q_data = $question_s->get($q_id);

        // 实例化调研基本信息Service
        $baseinfo_s = new BaseinfoService();
        // 调研基本信息
        $qu_data = $baseinfo_s->get($q_data['qu_id']);

        if (!in_array($q_data['q_type'], [4, 5, 6, 7, 8, 13, 15, 16, 17, 18, 19, 20, 21, 22])) {

            return true;
        }

        // 实例化调研回答详情信息Service
        $record_s = new RecordService();
        // 获取问题的回答详情
        $record_list = $record_s->list_by_conds(['q_id' => $q_id]);

        $list = [];
        // 匿名
        if (BaseinfoService::ANONYMOUS == $qu_data['anonymous']) {

            $i = 1;
            foreach ($record_list as $v) {
                // 排序
                $list[] = [
                    $i, // 序号
                    '', // 部门
                    '匿名' . $i, // 姓名
                    '', // 邮箱
                    '', // 手机
                    $v['answer'] . ' ' . $v['other'],
                    rgmdate(strval($v['created']), 'Y-m-d H:i')
                ];

                $i++;
            }
        } else {
            // 实例化调研回答用户记录Service
            $answer_s = new AnswerService();
            // 获取问题的回答记录
            $answer_list = $answer_s->list_by_conds(['qu_id' => $q_data['qu_id']]);
            // 组成以回答ID为主键的二维数组
            $answer_list = array_combine_by_key($answer_list, 'a_id');
            // 获取回答该调研的用户的ID集合
            $uids = array_column($answer_list, 'uid');

            $user = User::instance();
            // 查询用户列表
            $user_list = $user->listAll(['memUids' => $uids]);
            // 组成以用户ID为主键的二维数据
            $user_list = array_combine_by_key($user_list, 'memUid');

            // 序号
            $i = 1;
            foreach ($record_list as $v) {

                if ($v['answer'] == '' && $v['other'] == '') {
                    // 如果答案为空,则不导出该条记录
                    continue;
                }

                // 获取当前的回答记录
                $answer_data = $answer_list[$v['a_id']];

                // 获取用户信息和部门
                $user_data = [];
                $dp_name = '';
                if (!empty($answer_data['uid'])) {

                    $user_data = $user_list[$answer_data['uid']];
                    $dp_list = $user_data['dpName'];

                    if (!empty($dp_list)) {

                        $dp_names = array_column($dp_list, 'dpName');
                        $dp_name = implode(',', $dp_names);
                    }
                }

                $list[] = [
                    $i, // 序号
                    $dp_name, // 部门
                    !empty($user_data['memUsername']) ? $user_data['memUsername'] : $answer_data['username'], // 姓名
                    !empty($user_data['memEmail']) ? $user_data['memEmail'] : '', // 邮箱
                    !empty($user_data['memMobile']) ? $user_data['memMobile'] : '', // 手机
                    $v['answer'] . ' ' . $v['other'],
                    rgmdate(strval($v['created']), 'Y-m-d H:i')
                ];

                $i++;
            }
        }

        $this->_download($q_data, $list);

        return true;
    }

    /**
     * 导出模板信息
     *
     * @param array $q_data 问题基本信息
     * @param array $list 问题列表
     */
    private function _download($q_data, $list)
    {

        $fileName = $q_data['q_title'] . date('_YmdHi');

        $titles = ['序号', '组织', '姓名', '邮箱', '手机', '填写内容', '填写时间'];

        // 生成Excel 下载
        $real_path = get_data_dir('Excel') . $fileName . '.xls';

        $ret = PythonExcel::instance()->write($real_path, $titles, $list);

        if ($ret) {
            // 数据写入到下载中心
            $conditon = [
                'title' => $fileName,
                'ea_id' => $this->_login->user['eaId'],
                'type' => ExportDownload::EXCEL_TYPE,
                'size' => filesize($real_path),
                'url' => $real_path,
                'username' => $this->_login->user['eaRealname'],
                'app_dir' => APP_DIR
            ];

            ExportDownload::insert_down_load($conditon);
        }
    }
}