NoWriteListController.class.php 3.93 KB
<?php
/**
 * 【调研中心-后台】21_未填写人员数据导出
 * NoWriteListController.class.php
 * CreateBy:dj
 * Date:2017-03-08
 */

namespace Apicp\Controller\Export;

use Common\Service\AnswerService;
use Common\Service\BaseinfoService;
use Common\Service\RightService;

class NoWriteListController extends \Apicp\Controller\AbstractController
{

    // 导出excel文件名
    const EXAM_XLS_FILE_NAME = '调研未填写人员数据';

    /** @var BaseinfoService */
    protected $base_info_s;

    public function before_action($action = '')
    {

        if (parent::before_action($action) === false) {

            return false;
        }

        // 实例化调研基本信息Service
        $this->base_info_s = new BaseinfoService();

        return true;
    }

    public function Index()
    {

        // 调研id
        $qu_id = trim(I('post.qu_id'));

        // 调研基本信息
        $data = $this->base_info_s->get($qu_id);

        // 实例化权限Service
        $right_s = new RightService();
        // 获取调研可填写全部人员
        $all_users = $right_s->list_user($qu_id, $data['is_all']);

        // 实例化调研填写信息Service
        $answer_s = new AnswerService();
        // 查询已经参与调研的记录信息
        $join_list = $answer_s->list_by_conds(['qu_id' => $qu_id]);

        // 已填写人员uid集合
        $join_users = [];
        if (!empty($join_list)) {

            $join_users = array_unique(array_column($join_list, 'uid'));
        }

        // 未填写人员uid集合
        $no_join_users = array_diff($all_users, $join_users);
        sort($no_join_users);

        // 未填写人员列表
        $user_list = [];
        if (!empty($no_join_users)) {
            // 查询用户列表,将用户列表转换成以用户uid为主键的二维数组
            $user_list = $this->base_info_s->getUser($no_join_users);
        }

        // 序号
        $i = 1;
        // 未填写人员信息
        $no_join_list = [];

        // 遍历组装未参加人员返回数据
        foreach ($user_list as $_v) {
            // 组织名称
            $dp_name = '';
            // 组织名称赋值
            if (!empty($_v['dpName'])) {

                $arr_dp_name = array_column($_v['dpName'], 'dpName');
                $dp_name = implode(',', $arr_dp_name);
            }

            $no_join_list[] = [
                'num' => $i, // 序号
                'memUsername' => $_v['memUsername'],// 姓名
                'dp_name' => $dp_name, // 组织
                'memJob' => $_v['memJob'], // 岗位
                'memRole' => $_v['memRole'], // 角色
                'memMobile' => $_v['memMobile'] // 手机号
            ];

            $i++;
        }

        $this->export($no_join_list, $data);

        return true;
    }

    /**
     * 数据导出
     * @param array $list 导出的数据
     * @param array $data 调研详情
     */
    private function export($list = [], $data = [])
    {

        // Excel 表头
        $params['title'] = [
            '序号',
            '姓名',
            '组织',
            '岗位',
            '角色',
            '手机号'
        ];

        // Excel 数据行
        $params['rows'] = [];
        // 数据处理
        foreach ($list as $v) {

            $params['rows'][] = [
                $v['num'],
                $v['memUsername'],
                $v['dp_name'],
                $v['memJob'],
                $v['memRole'],
                $v['memMobile']
            ];
        }

        // 文件名
        $file_name = $data['title'] . '_' . self::EXAM_XLS_FILE_NAME . rgmdate(MILLI_TIME, '_YmdHis');
        // 下载
        $this->base_info_s->download($params, $file_name, $this->_login->user['eaId'], $this->_login->user['eaRealname']);
    }
}