Esempio n. 1
0
    /**
     * 导入教师记录(从excel文件中),
     */
    public function importteacher($sch_id = 0)
    {
        if ($_GET['dl'] == '1') {
            Func::dumpFile('application/vnd.ms-excel', 'file/import_school_teacher_template.xlsx', '教师导入模板.xlsx');
            exit;
        }
        if (!$sch_id || !SchoolModel::schoolInfo($sch_id)) {
            message('学校不存在,无法导入教师!');
        }
        $data = array();
        $data['sch_id'] = $sch_id;
        while (isset($_FILES['file'])) {
            $param = $_POST;
            $title = array('姓名', '年级', '学科', '简介');
            $col_char = array();
            $rows = Excel::readSimpleUploadFile($_FILES['file'], $title, $col_char);
            if (!is_array($rows)) {
                $data['error'] = $rows;
                break;
            }
            $grade_map = array_flip(C('grades'));
            $subject_map = array_flip(C('subject'));
            $ct_list = array();
            foreach ($rows as $k => $row) {
                //////////////////////////////
                //   姓名0 年级1 学科2  简介3
                //////////////////////////////
                // 姓名
                if ($row[0] == '') {
                    $data['error'] == $col_char[0] . ($k + 2) . ' - "姓名"不可为空';
                    break;
                }
                if (mb_strlen($row[0], 'UTF-8') > 30) {
                    $data['error'] = $col_char[0] . ($k + 2) . ' - "姓名"内容太长了,不可超过30个字符';
                    break;
                }
                // 年级
                if ($row[1] == '') {
                    $data['error'] = $col_char[1] . ($k + 2) . ' - "年级"不能为空';
                    break;
                }
                $row[1] = str_replace(array(',', ' ', ' ', '、', "\r\n", "\r", "\n"), ',', $row[1]);
                $row['ctg_gradeid'] = array();
                $arr = explode(',', $row[1]);
                foreach ($arr as $v) {
                    $v = trim($v);
                    if ($v == '') {
                        continue;
                    }
                    if (isset($grade_map[$v])) {
                        $row['ctg_gradeid'][] = $grade_map[$v];
                    } else {
                        $data['error'] = $col_char[1] . ($k + 2) . ' - "年级"里有不正确的选项';
                        break;
                    }
                }
                if (isset($data['error'])) {
                    break;
                }
                if (empty($row['ctg_gradeid'])) {
                    $data['error'] = $col_char[1] . ($k + 2) . ' - "年级"不能为空';
                    break;
                }
                $row['ctg_gradeid'] = array_unique($row['ctg_gradeid']);
                // 学科
                if ($row[2] == '') {
                    $data['error'] = $col_char[2] . ($k + 2) . ' - "学科"不能为空';
                    break;
                }
                $row[2] = str_replace(array(',', ' ', ' ', '、', "\r\n", "\r", "\n"), ',', $row[2]);
                $row['cts_subjectid'] = array();
                $arr = explode(',', $row[2]);
                foreach ($arr as $v) {
                    $v = trim($v);
                    if ($v == '') {
                        continue;
                    }
                    if (isset($subject_map[$v])) {
                        $row['cts_subjectid'][] = $subject_map[$v];
                    } else {
                        $data['error'] = $col_char[2] . ($k + 2) . ' - "学科"里有不正确的选项空';
                        break;
                    }
                }
                if (isset($data['error'])) {
                    break;
                }
                if (empty($row['cts_subjectid'])) {
                    $data['error'] = $col_char[2] . ($k + 2) . ' - "学科"不能为空';
                    break;
                }
                $row['cts_subjectid'] = array_unique($row['cts_subjectid']);
                // 简介
                if ($row[3] == '') {
                    $row[3] = NULL;
                }
                $ct_list[] = array('index' => $k + 2, 'ct_name' => $row[0], 'ct_memo' => $row[3], 'ctg_gradeid' => $row['ctg_gradeid'], 'cts_subjectid' => $row['cts_subjectid']);
            }
            if (isset($data['error'])) {
                break;
            }
            unset($grade_map);
            unset($subject_map);
            unset($rows);
            // 这里开始导入
            $db = Fn::db();
            try {
                $time = time();
                $adduid = Fn::sess()->userdata('admin_id');
                if (!$db->beginTransaction()) {
                    throw new Exception('开始导入事务处理失败');
                }
                $ct_insert = 0;
                // 导入教师
                foreach ($ct_list as $k => $row) {
                    // insert
                    $db->insert('t_cteacher', array('ct_name' => $row['ct_name'], 'ct_memo' => $row['ct_memo'], 'ct_flag' => $param['ct_flag']));
                    $ct_id = $db->lastInsertId('t_cteacher', 'ct_id');
                    $bind = array('scht_schid' => $sch_id, 'scht_ctid' => $ct_id);
                    $db->insert('t_cteacher_school', $bind);
                    foreach ($row['ctg_gradeid'] as $v) {
                        $db->insert('t_cteacher_gradeid', array('ctg_ctid' => $ct_id, 'ctg_gradeid' => $v));
                    }
                    foreach ($row['cts_subjectid'] as $v) {
                        $db->insert('t_cteacher_subjectid', array('cts_ctid' => $ct_id, 'cts_subjectid' => $v));
                    }
                    $ct_insert++;
                }
                if ($db->commit()) {
                    $data['success'] = <<<EOT
导入Excel文件({$_FILES['file']['name']})成功,共插入{$ct_insert}条教师记录
EOT;
                    admin_log('add', 'cteacher', $data['success']);
                } else {
                    $err = $db->errorInfo()[2];
                    $db->rollBack();
                    throw new Exception($err);
                }
            } catch (Exception $e) {
                $data['error'] = $e->getMessage();
            }
            break;
        }
        if (!isset($_FILES['file'])) {
            $param = array('ct_flag' => time());
        }
        $data['param'] = $param;
        $this->load->view('school/importteacher', $data);
    }