Example #1
0
    public function report($exam_id)
    {
        $sql1 = <<<EOT
SELECT count(1) as 'count' 
from rd_student rs,rd_exam_place_student reps , rd_exam_place rep 
where rep.exam_pid='{$exam_id}' and rep.place_id=reps.place_id and rs.uid=reps.uid
EOT;
        $sql2 = <<<EOT
SELECT rs.exam_ticket,CONCAT(rs.last_name,rs.first_name) as xname 
from rd_student rs,rd_exam_place_student reps , rd_exam_place rep 
where rep.exam_pid='{$exam_id}' and rep.place_id=reps.place_id and rs.uid=reps.uid
EOT;
        $result1 = Fn::db()->fetchRow($sql1);
        // 读取数据
        if ($result1['count'] > 0) {
            $sql3 = "SELECT exam_name FROM rd_exam WHERE exam_id={$exam_id}";
            $row = Fn::db()->fetchRow($sql3);
            $title = $row['exam_name'] . '.xls';
            $data = array();
            $data['list'] = $this->db->query($sql2)->result_array();
            $header = array('准考证号', '姓名');
            $excel_model = new ExcelModel();
            $excel_model->addHeader($header);
            $excel_model->addBody($data['list']);
            $excel_model->download($title);
        } else {
            echo '暂无学生,请先添加学生';
        }
    }
Example #2
0
    public function schools()
    {
        $schools = array();
        $sql = <<<EOT
SELECT school_id, school_name FROM rd_school
EOT;
        $where = array();
        $bind = array();
        if ($keyword = trim($this->input->post('keyword'))) {
            $where[] = 'school_name LIKE ?';
            $bind[] = '%' . $keyword . '%';
        }
        if ($grade_id = intval($this->input->post('grade_id'))) {
            $grade_period = get_grade_period($grade_id);
            if ($grade_period) {
                $where[] = 'grade_period LIKE ?';
                $bind[] = '%' . $grade_period . '%';
            }
        }
        if ($where) {
            $sql .= ' WHERE ' . implode(' AND ', $where);
        }
        $schools = Fn::db()->fetchAll($sql, $bind);
        echo json_encode($schools);
    }
Example #3
0
 private static function delarray($dbName, $array, $is_export_student)
 {
     // 处理传入进来的数组
     $tableList = array();
     foreach ($array as $tables) {
         if ($tables == '*') {
             // 所有的表(获得表名时不能按常规方式来组成一个数组)
             $sql = "SELECT table_name, table_type \n                        FROM information_schema.tables \n                        WHERE table_schema = '{$dbName}'";
             $stmt = Fn::db()->query($sql);
             while ($item = $stmt->fetch(PDO_DB::FETCH_ASSOC)) {
                 if (strtolower($item['table_type']) == 'view') {
                     $tableList['view'][] = $item['table_name'];
                 } else {
                     if (!$is_export_student && (is_int(strpos($item['table_name'], 'student')) || is_int(strpos($item['table_name'], 'summary')))) {
                         continue;
                     }
                     $tableList['table'][] = $item['table_name'];
                 }
             }
         } else {
             $tableList['table'] = $array;
             break;
         }
     }
     return $tableList;
 }
 public function __construct()
 {
     parent::__construct();
     self::$_db = Fn::db();
     self::$_data = array();
     $this->load->model('cron/report/subject_report/common_model');
 }
Example #5
0
    /**
     * 考试类型列表
     *          
     * @return  array
     */
    public static function get_type_list()
    {
        $sql = <<<EOT
SELECT * FROM rd_interview_type ORDER BY pid ASC
EOT;
        $rows = Fn::db()->fetchAll($sql);
        $list = array();
        foreach ($rows as $row) {
            if ($row['pid']) {
                $list[$row['pid']]['children'][$row['type_id']] = $row;
            } else {
                $list[$row['type_id']] = $row;
            }
        }
        // 分级排序
        $result = array();
        foreach ($list as $row) {
            $result[$row['type_id']] = $row;
            if (!empty($row['children'])) {
                $result = $result + $row['children'];
                unset($result[$row['type_id']]['children']);
            }
        }
        return $result;
    }
Example #6
0
    /**
     * 按学科ID,父ID,读取信息提取方式列表
     *          
     * @param   int       学科ID
     * @param   int       上级ID
     * @return  array
     */
    public static function get_group_type_list($pid = 0, $subject_id = 0, $relate_num = TRUE, $relate_child = false)
    {
        static $result = array();
        $hash = $subject_id . '-' . $pid;
        if (isset($result[$hash])) {
            return $result[$hash];
        }
        $list = array();
        $sql = <<<EOT
SELECT * FROM rd_group_type WHERE pid = {$pid}
EOT;
        if ($subject_id) {
            $sql .= " AND subject_id = {$subject_id}";
        }
        $rows = Fn::db()->fetchAll($sql);
        foreach ($rows as $row) {
            $list[$row['id']] = $row;
        }
        if ($relate_num) {
            foreach ($list as &$val) {
                $val = self::get_group_type_num($val);
            }
        }
        if ($relate_child) {
            foreach ($list as &$val) {
                $val['childlist'] = array_values(self::get_group_type_list($val['id'], $val['subject_id'], false));
            }
        }
        $result[$hash] = $list;
        return $result[$hash];
    }
Example #7
0
 /**
  * 读取角色列表
  *          
  * @return  array
  */
 public static function get_role_list()
 {
     $rows = Fn::db()->fetchAll("SELECT * FROM rd_role");
     $list = array();
     foreach ($rows as $row) {
         $list[$row['role_id']] = $row;
     }
     return $list;
 }
Example #8
0
 /**
  * 获取平均值
  *
  * @param array $param 查询条件
  * @param string $field 查询字段
  * @return array 数据结果集
  */
 public static function get_average($param, $field)
 {
     PDO_DB::build_where($param, $where_sql, $bind);
     $sql = "SELECT AVG({$field}) AS {$field} FROM rd_interview_result";
     if ($where_sql) {
         $sql .= " WHERE {$where_sql}";
     }
     return Fn::db()->fetchRow($sql, $bind);
 }
Example #9
0
    /**
     * 获取平均值
     *
     * @param array $param 查询条件
     * @param string $field 查询字段
     * @return array 数据结果集
     */
    public static function get_average($param, $field)
    {
        PDO_DB::build_where($param, $where_sql, $bind);
        $sql = <<<EOT
SELECT AVG({$field}) AS {$field} FROM rd_ruidabei_result
EOT;
        if ($where_sql) {
            $sql .= " WHERE " . $where_sql;
        }
        return Fn::db()->fetchRow($sql, $bind);
    }
 /**
  * 添加 生成考试期次学生的成绩任务
  */
 public function insert($data)
 {
     if (empty($data['exam_pid'])) {
         return false;
     }
     $data['c_time'] = time();
     $data['status'] = 0;
     $exam_ticket_maprule = ExamModel::get_exam($data['exam_pid'], 'exam_ticket_maprule');
     if ($exam_ticket_maprule > 0) {
         $data['status'] = 1;
     }
     return Fn::db()->replace('rd_cron_task_exam_result', $data);
 }
Example #11
0
    public static function get_admin_log($log_info = '', $item = '*')
    {
        if ($log_info == '') {
            return FALSE;
        }
        $sql = <<<EOT
SELECT {$item} FROM rd_admin_log WHERE log_info = ?
EOT;
        $row = Fn::db()->fetchRow($sql, $log_info);
        if ($item && isset($row[$item])) {
            return $row[$item];
        } else {
            return $row;
        }
    }
Example #12
0
    /**
     * 读取一个试题
     */
    public static function get_question($id = 0, $item = '*')
    {
        if ($id == 0) {
            return FALSE;
        }
        $sql = <<<EOT
SELECT {$item} FROM rd_interview_question WHERE id = {$id}
EOT;
        $row = Fn::db()->fetchRow($sql);
        if ($item && isset($row[$item])) {
            return $row[$item];
        } else {
            return $row;
        }
    }
Example #13
0
 /**
  * 控制界面首页
  */
 public function index($exam_pid = 0)
 {
     Fn::ajax_call($this, 'regenerateExamRecord', 'regenerateExamResults', 'endPlaceExam', 'regenerateSummaryReportData', 'regenerateReport', 'removeCronTaskReport');
     $exam_pid = intval($exam_pid);
     $param['exam_pid'] = 0;
     $param['exam_isfree'] = 0;
     $examlist = ExamModel::get_exam_list_all($param);
     $exam = array();
     if ($exam_pid > 0) {
         $exam = ExamModel::get_exam($exam_pid);
     }
     if (!$exam) {
         $exam = current($examlist);
     }
     $db = Fn::db();
     /////////////////////////考试记录是否生成/////////////
     $sql = "SELECT uid_data FROM rd_cron_task_place_student_paper ctps\n                LEFT JOIN rd_exam_place  ep ON ep.place_id = ctps.place_id\n                WHERE ep.exam_pid ={$exam['exam_id']} AND ctps.status=2";
     $uid_arr = $db->fetchCol($sql);
     $paper_count = 0;
     foreach ($uid_arr as $item) {
         $paper_count += count(json_decode($item));
     }
     $sql = "SELECT COUNT(*) FROM rd_exam_place_student eps\n               LEFT JOIN rd_exam_place ep ON ep.place_id = eps.place_id\n               WHERE ep.exam_pid = {$exam['exam_id']}";
     $student_count = $db->fetchOne($sql);
     if ($paper_count == $student_count) {
         $data['paper_status'] = true;
         //考试记录是否完全生成
     } else {
         $data['paper_status'] = false;
     }
     /////////////////////////////////////////
     $sql = "SELECT status FROM rd_cron_task_exam_result \n            WHERE exam_pid = {$exam['exam_id']}";
     $data['cter_status'] = $db->fetchOne($sql);
     //////////////////////////////////////////
     $sql = "SELECT DISTINCT(status) FROM rd_cron_task_report ctr \n                LEFT JOIN rd_evaluate_rule er ON er.id = ctr.rule_id \n                WHERE exam_pid =  {$exam['exam_id']}";
     $data['ctr_status'] = $db->fetchCol($sql);
     ////////////////////////////////////////
     $data['exam'] = $exam;
     $data['demo_exam'] = $this->demo_exam_list();
     $data['examlist'] = $examlist;
     $data['place'] = ExamPlaceModel::get_exam_place($exam_pid, 'MAX(end_time) as end_time');
     $data['crontaskexamresult'] = ReportCommandModel::cronTaskExamResultInfo($exam['exam_id']);
     $data['evaluerulelist'] = ReportCommandModel::cronTaskReportLists($exam['exam_id']);
     $this->load->view('report_command/index', $data);
 }
Example #14
0
 /**
  * 读取列表
  * @param   int $subject_id = 0 学科ID,为0表示不限学科
  * @return  map<int, variant>   获取某个学科(或不限学科)的所有技能列表
  */
 public static function get_skills($subject_id = 0)
 {
     static $result = array();
     $hash =& $subject_id;
     if (isset($result[$hash])) {
         return $result[$hash];
     }
     $sql = 'SELECT * FROM rd_skill';
     $list = array();
     if ($subject_id) {
         $sql .= ' WHERE subject_id = ' . $subject_id;
     }
     $rows = Fn::db()->fetchAll($sql);
     foreach ($rows as $row) {
         $list[$row['id']] = $row;
     }
     $result[$hash] = $list;
     return $list;
 }
 /**
  * 手动给参加考试的学生分配试卷及试题
  *
  * @return void
  */
 public function init_distribution_paper_manual()
 {
     set_time_limit(0);
     $db = Fn::db();
     $this->load->model('cron/cron_place_student_paper_model', 'init_model');
     /* 手动指定考场 */
     /* $places = array(57,58,59,60); */
     $places = array(60);
     $place_list = array();
     /* 获取考场学生 */
     foreach ($places as $key => $value) {
         $sql = "SELECT uid FROM rd_exam_place_student WHERE place_id='{$value}'";
         $place_list[$value]['uids'] = $db->fetchCol($sql);
     }
     $place_uids = array();
     $place_ids = array();
     foreach ($place_list as $place_id => $place) {
         $exam_pid = $place['exam_pid'];
         foreach ($place['uids'] as $uid) {
             //给学生分配试卷
             $result = $this->init_model->init_test_paper($place_id, $uid);
             if ($result) {
                 $place_ids[$exam_pid][$place_id][] = $uid;
             }
         }
     }
     //给考场学生分配试题
     if ($place_ids) {
         foreach ($place_ids as $exam_pid => $place) {
             foreach ($place as $place_id => $uids) {
                 $uids = array_unique($uids);
                 $this->init_model->init_test_question($exam_pid, $place_id, $uids);
             }
         }
     }
 }
Example #16
0
 /**
  * 读取管理员列表
  *
  * @return  array
  */
 public static function get_cpuser_list()
 {
     return Fn::db()->fetchAssoc("SELECT * FROM rd_admin");
 }
Example #17
0
 /**
  * 获取$profession_id所指定的职业信息,返回结果集
  * @param   mixed   $profession_id
  * @param   array   map<string, variant>
  */
 public static function professionInfo($profession_id)
 {
     if (!$profession_id) {
         return array();
     }
     if (Validate::isInt($profession_id)) {
         $sql = "SELECT * FROM t_profession\n                    WHERE profession_id = ?";
         return Fn::db()->fetchRow($sql, array($profession_id));
     } else {
         if (Validate::isJoinedIntStr($profession_id)) {
             $sql = "SELECT * FROM t_profession\n                    WHERE profession_id IN ({$profession_id})";
             return Fn::db()->fetchAssoc($sql);
         } else {
             return array();
         }
     }
 }
 public function __construct()
 {
     parent::__construct();
     self::$_db = Fn::db();
     $this->load->model('cron/report/class_report/class_common_model');
 }
Example #19
0
 /**
  * 删除学习风格属性信息,成功返回非0,失败返回0
  * @param   int     $lsattr_learnstyleid
  * @param   int     $lsattr_value
  * @return  bool    true|false
  */
 public static function removeLearnStyleAttribute($lsattr_learnstyleid, $lsattr_value)
 {
     if (!Validate::isInt($lsattr_learnstyleid) || $lsattr_learnstyleid <= 0 || !in_array($lsattr_value, array(1, 2))) {
         return false;
     }
     $where = 'lsattr_learnstyleid = ? AND lsattr_value = ?';
     $where_bind[] = $lsattr_learnstyleid;
     $where_bind[] = $lsattr_value;
     return Fn::db()->delete('t_learn_style_attribute', $where, $where_bind);
 }
Example #20
0
 /**
  * 检查考场名称是否重复
  */
 public static function checkPlaceNameIsRepeat($exam_pid, $place_id = null, $place_name)
 {
     if (!$exam_pid || !$place_name) {
         throw new Exception('考试期次或考场名称不能为空');
     }
     $bind = array($exam_pid, $place_name);
     $sql = "SELECT COUNT(*) FROM rd_exam_place\n                WHERE exam_pid = ? AND place_name = ?";
     if ($place_id > 0) {
         $sql .= " AND place_id <> ?";
         $bind[] = $place_id;
     }
     return Fn::db()->fetchOne($sql, $bind);
 }
 /**
  * @description 批量删除产品分类
  * @author
  * @final
  * @param array $ids 产品分类id
  */
 public function batch_delete()
 {
     if (!$this->check_power_new('production_category_batch_delete')) {
         return;
     }
     $ids = $this->input->post('ids');
     if (empty($ids) or !is_array($ids)) {
         message('请选择要删除的项目!');
         return;
     }
     // 检查被关联试题
     $success = $fail = 0;
     foreach ($ids as $id) {
         $pc_id = intval($id);
         $bool = true;
         $pc_ids = CommonModel::get_product_category($pc_id);
         if (empty($pc_ids)) {
             $bool = false;
         }
         $query = array();
         $data = array();
         $query['pc_id'] = $pc_id;
         $res = CommonModel::get_list($query, 'v_trans_log', 'count(pt_id) as pt_id_count');
         $pt_id_count = $res[0]['pt_id_count'];
         if ($pt_id_count > 0) {
             $bool = false;
         }
         if (!$bool) {
             $fail++;
             continue;
         }
         $num = Fn::db()->delete('rd_product_category', "pc_id={$pc_id}");
         admin_log('delete', 'product_category', $pc_id);
         if ($num > 0) {
             $success += $num;
         } else {
             $fail++;
         }
     }
     message('批量操作完成,成功删除:' . $success . ' 个,失败:' . $fail . ' 个。', 'javascript');
 }
Example #22
0
 /**
  * 按 考试期次id 获取一个考试信息
  *
  * @param   int     考试期次ID(exam_id)
  * @param   string  字段列表(多个字段用逗号分割,默认取全部字段)
  * @return  mixed   指定单个字段则返回该字段值,否则返回关联数组
  */
 public static function get_exam_by_id($id = 0, $select_items = NULL)
 {
     if ($id == 0) {
         return FALSE;
     }
     if ($select_items) {
         $sql = 'SELECT ' . $select_items;
     } else {
         $sql = 'SELECT *';
     }
     $sql .= " FROM rd_exam WHERE exam_id = {$id} LIMIT 1";
     $row = Fn::db()->fetchRow($sql);
     if (is_string($select_items) && $select_items && isset($row[$select_items])) {
         return $row[$select_items];
     } else {
         return $row;
     }
 }
    /**
     * 导入机构和校区记录(从excel文件中),
     * 注意: 目前$ti_id参数未启用
     *
     * @param   int     $ti_id = NULL   默认将校区全导入到该机构ID下
     */
    public function import_titc_excel($ti_id = NULL)
    {
        if ($_GET['dl'] == '1') {
            Func::dumpFile('application/vnd.ms-excel', 'file/import_training_campus_template.xls', '培训机构及校区导入模板.xls');
            exit;
        }
        $data = array();
        while (isset($_FILES['file'])) {
            $param = $_POST;
            $err_map = array(UPLOAD_ERR_OK => '没有错误发生,文件上传成功', UPLOAD_ERR_INI_SIZE => '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值', UPLOAD_ERR_FORM_SIZE => '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值', UPLOAD_ERR_PARTIAL => '文件只有部分被上传', UPLOAD_ERR_NO_FILE => '没有文件被上传', UPLOAD_ERR_NO_TMP_DIR => '找不到临时文件夹', UPLOAD_ERR_CANT_WRITE => '文件写入失败');
            if ($_FILES['file']['error'] !== 0) {
                $data['error'] = $err_map[$_FILES['file']['error']];
                break;
            }
            if (strpos($_FILES['file']['type'], 'excel') === false) {
                $mime = mime_content_type($_FILES['file']['tmp_name']);
                if (!in_array($mime, array('application/vnd.ms-excel', 'application/vnd.ms-office', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'))) {
                    $data['error'] = "您上传的不是Excel文件({$mime})";
                    break;
                }
            }
            // 开始处理excel
            $excel = PHPExcel_IOFactory::load($_FILES['file']['tmp_name']);
            $sheet = $excel->getSheet(0);
            $row_num = $sheet->getHighestRow();
            $col_num = $sheet->getHighestColumn();
            $title = array('机构名称', '机构类型', '机构省份', '机构城市', '机构区县', '机构地址', '优先级', '学员人数/年', '机构网址', '校区名称', '校区省份', '校区城市', '校区区县', '校区地址', '联系人', '联系电话');
            $col_num = base_convert($col_num, 36, 10);
            if ($col_num < count($title)) {
                $data['error'] = 'Excel列数验证未通过';
                break;
            }
            $col_num = count($title);
            $col_char = array();
            for ($j = 0; $j < $col_num; $j++) {
                $col_char[$j] = strtoupper(base_convert(10 + $j, 10, 36));
                if ($title[$j] !== trim($sheet->getCell($col_char[$j] . '1')->getValue())) {
                    $data['error'] = $col_char[$j] . '列标题不符';
                    break;
                }
            }
            if (isset($data['error'])) {
                break;
            }
            $rows = array();
            for ($i = 2; $i <= $row_num; $i++) {
                $rows[$i - 2] = array();
                for ($j = 0; $j < $col_num; $j++) {
                    $rows[$i - 2][$j] = trim($sheet->getCell($col_char[$j] . $i)->getValue());
                }
                if ($rows[$i - 2][0] == '') {
                    unset($rows[$i - 2]);
                    break;
                }
            }
            unset($sheet);
            unset($excel);
            if (empty($rows)) {
                $data['error'] = 'Excel文件工作表中没有任何要导入的记录';
                break;
            }
            $tit_map = array_flip(array_map("trim", TrainingInstitutionModel::trainingInstitutionTypePairs()));
            $tipt_map = array_flip(array_map("trim", TrainingInstitutionModel::trainingInstitutionPriTypePairs()));
            $sql = <<<EOT
SELECT * FROM rd_region WHERE region_id > 1 ORDER BY region_type
EOT;
            $region_list = Fn::db()->fetchAll($sql);
            // 以region_id为键以行记录为值,同时加个children,以保存直接子项
            $region_map = array();
            // 以名字加'_'连接起来为键,以region_id为值
            $regionname_map = array();
            foreach ($region_list as $v) {
                $region_map[$v['region_id']] = $v;
                $region_map[$v['region_id']]['children'] = array();
                if ($v['region_type'] == 1) {
                    $regionname_map[trim($v['region_name'])] = $v['region_id'];
                } else {
                    if ($v['region_type'] == 2) {
                        $region_map[$v['parent_id']]['children'][] = $v['region_id'];
                        $regionname_map[trim($region_map[$v['parent_id']]['region_name']) . '_' . trim($v['region_name'])] = $v['region_id'];
                    } else {
                        if ($v['region_type'] == 3) {
                            $region_map[$v['parent_id']]['children'][] = $v['region_id'];
                            $regionname_map[trim($region_map[$region_map[$v['parent_id']]['parent_id']]['region_name']) . '_' . trim($region_map[$v['parent_id']]['region_name']) . '_' . trim($v['region_name'])] = $v['region_id'];
                        }
                    }
                }
            }
            unset($region_list);
            $row_num = count($rows);
            $ti_arr = array();
            //ti_arr[ti_name] => ti_list[i]
            $tc_arr = array();
            //tc_arr[ti_name][tc_name] => tc_list[i]
            $ti_list = array();
            $tc_list = array();
            foreach ($rows as $k => $row) {
                // 机构名称
                if (mb_strlen($row[0], 'UTF-8') > 60) {
                    $data['error'] = $col_char[0] . ($k + 2) . ' - "机构名称"内容太长了,不可超过60个字符';
                    break;
                }
                $row['ti_name'] = $row[0];
                // 机构类型
                if ($row[1] == '') {
                    $data['error'] = $col_char[1] . ($k + 2) . ' - "机构类型"内容不可为空';
                    break;
                }
                // 机构类型
                if (!isset($tit_map[$row[1]])) {
                    $data['error'] = $col_char[1] . ($k + 2) . ' - "机构类型"不正确';
                    break;
                }
                $row['ti_typeid'] = $tit_map[$row[1]];
                if ($row[2] == '') {
                    if ($param['ti_provid_required']) {
                        $data['error'] = $col_char[2] . ($k + 2) . ' - "机构省份"不可为空';
                        break;
                    } else {
                        $row['ti_provid'] = 0;
                    }
                } else {
                    if (!isset($regionname_map[$row[2]])) {
                        $data['error'] = $col_char[2] . ($k + 2) . ' - "机构省份"不存在';
                        break;
                    }
                    $row['ti_provid'] = $regionname_map[$row[2]];
                }
                $row['ti_cityid'] = 0;
                $row['ti_areaid'] = 0;
                if (!empty($region_map[$regionname_map[$row[2]]]['children'])) {
                    // 验证市
                    if ($row[3] == '') {
                        if ($param['ti_cityid_required']) {
                            $data['error'] = $col_char[3] . ($k + 2) . ' - "机构城市"不可为空';
                            break;
                        } else {
                            $row['ti_cityid'] = 0;
                        }
                    } else {
                        if (!isset($regionname_map[$row[2] . '_' . $row[3]])) {
                            $data['error'] = $col_char[3] . ($k + 2) . ' - "机构城市"不存在';
                            break;
                        }
                        $row['ti_cityid'] = $regionname_map[$row[2] . '_' . $row[3]];
                    }
                    // 验证区县
                    if ($row[4] == '') {
                        if ($param['ti_areaid_required']) {
                            $data['error'] = $col_char[4] . ($k + 2) . ' - "机构区县"不可为空';
                            break;
                        } else {
                            $row['ti_areaid'] = 0;
                        }
                    } else {
                        if (!isset($regionname_map[$row[2] . '_' . $row[3] . '_' . $row[4]])) {
                            $data['error'] = $col_char[4] . ($k + 2) . ' - "机构区县"不存在';
                            break;
                        }
                        $row['ti_areaid'] = $regionname_map[$row[2] . '_' . $row[3] . '_' . $row[4]];
                    }
                }
                // 机构地址
                if ($row[5] == '') {
                    if ($param['ti_addr_required']) {
                        $data['error'] = $col_char[5] . ($k + 2) . ' - "机构地址"不可为空';
                        break;
                    }
                }
                if (mb_strlen($row[5], 'UTF-8') > 255) {
                    $data['error'] = $col_char[5] . ($k + 2) . ' - "机构地址"内容太长了';
                    break;
                }
                $row['ti_addr'] = $row[5];
                // 优先级
                if ($row[6] == '') {
                    if ($param['ti_priid_required']) {
                        $data['error'] = $col_char[6] . ($k + 2) . ' - "优先级"不能为空';
                        break;
                    } else {
                        $row[6] = '一般';
                    }
                }
                if (!isset($tipt_map[$row[6]])) {
                    $data['error'] = $col_char[6] . ($k + 2) . ' - "优先级"不正确';
                    break;
                }
                $row['ti_priid'] = $tipt_map[$row[6]];
                if ($row[7] == '') {
                    if ($param['ti_stumax_required']) {
                        $data['error'] = $col_char[6] . ($k + 2) . ' - "学员人数/年"不能为空';
                        break;
                    } else {
                        $row[7] = '0';
                    }
                }
                // 学员人数/年
                if (!Validate::isInt($row[7]) || $row[7] < 0) {
                    $data['error'] = $col_char[7] . ($k + 2) . ' - "学员人数/年"必须为正整数';
                    break;
                }
                $row['ti_stumax'] = $row[7];
                // 机构网址
                if (mb_strlen($row[8], 'UTF-8') > 512) {
                    $data['error'] = $col_char[8] . ($k + 2) . ' - "机构网址"内容太长了';
                    break;
                }
                $row['ti_url'] = $row[8];
                // 校区名称
                if ($row[9] == '') {
                    $data['error'] = $col_char[9] . ($k + 2) . ' - "校区名称"不可为空';
                    break;
                }
                if (mb_strlen($row[9], 'UTF-8') > 60) {
                    $data['error'] = $col_char[9] . ($k + 2) . ' - "校区名称"太长了';
                    break;
                }
                $row['tc_name'] = $row[9];
                if ($row[10] == '') {
                    if ($param['tc_provid_required']) {
                        $data['error'] = $col_char[10] . ($k + 2) . ' - "校区省份"不可为空';
                        break;
                    } else {
                        $row['tc_provid'] = 0;
                    }
                } else {
                    if (!isset($regionname_map[$row[10]])) {
                        $data['error'] = $col_char[10] . ($k + 2) . ' - "校区省份"不存在';
                        break;
                    }
                    $row['tc_provid'] = $regionname_map[$row[10]];
                }
                $row['tc_cityid'] = 0;
                $row['tc_areaid'] = 0;
                if (!empty($region_map[$regionname_map[$row[10]]]['children'])) {
                    // 验证市
                    if ($row[11] == '') {
                        if ($param['tc_cityid_required']) {
                            $data['error'] = $col_char[11] . ($k + 2) . ' - "校区城市"不可为空';
                            break;
                        } else {
                            $row['tc_cityid'] = 0;
                        }
                    } else {
                        if (!isset($regionname_map[$row[10] . '_' . $row[11]])) {
                            $data['error'] = $col_char[11] . ($k + 2) . ' - "校区城市"不存在';
                            break;
                        }
                        $row['tc_cityid'] = $regionname_map[$row[10] . '_' . $row[11]];
                    }
                    // 验证区县
                    if ($row[12] == '') {
                        if ($param['tc_areaid_required']) {
                            $data['error'] = $col_char[12] . ($k + 2) . ' - "校区区县"不可为空';
                            break;
                        } else {
                            $row[12] = 0;
                        }
                    } else {
                        if (!isset($regionname_map[$row[10] . '_' . $row[11] . '_' . $row[12]])) {
                            $data['error'] = $col_char[12] . ($k + 2) . ' - "校区区县"不存在';
                            break;
                        }
                        $row['tc_areaid'] = $regionname_map[$row[10] . '_' . $row[11] . '_' . $row[12]];
                    }
                }
                // 校区地址
                if ($row[13] == '') {
                    if ($param['tc_ctcaddr_required']) {
                        $data['error'] = $col_char[13] . ($k + 2) . ' - "校区地址"不可为空';
                        break;
                    }
                }
                if (mb_strlen($row[13], 'UTF-8') > 255) {
                    $data['error'] = $col_char[13] . ($k + 2) . ' - "校区地址"太长了';
                    break;
                }
                $row['tc_ctcaddr'] = $row[13];
                // 联系人
                if (mb_strlen($row[14], 'UTF-8') > 60) {
                    $data['error'] = $col_char[14] . ($k + 2) . ' - "联系人"太长了';
                    break;
                }
                $row['tc_ctcperson'] = $row[14];
                // 联系电话
                if ($row['15'] == '') {
                    if ($param['tc_ctcphone_required']) {
                        $data['error'] = $col_char[15] . ($k + 2) . ' - "联系电话"不能为空';
                        break;
                    }
                }
                if (mb_strlen($row[15], 'UTF-8') > 120) {
                    $data['error'] = $col_char[15] . ($k + 2) . ' - "联系电话"太长了';
                    break;
                }
                $row['tc_ctcphone'] = $row[15];
                if (!isset($ti_arr[$row[0]])) {
                    $ti_arr[$row[0]] = count($ti_list);
                    $ti_list[] = array('index' => $k + 2, 'ti_id' => 0, 'ti_name' => $row[0], 'ti_typeid' => $row['ti_typeid'], 'ti_provid' => $row['ti_provid'], 'ti_cityid' => $row['ti_cityid'], 'ti_areaid' => $row['ti_areaid'], 'ti_addr' => $row[5], 'ti_priid' => $row['ti_priid'], 'ti_stumax' => $row[7], 'ti_url' => $row[8]);
                }
                if (!isset($tc_arr[$row[0]])) {
                    $tc_arr[$row[0]] = array();
                }
                if (isset($tc_arr[$row[0]][$row[9]])) {
                    $data['error'] = $col_char[9] . ($k + 2) . ' - "校区名称"同一机构内有重复';
                    break;
                }
                $tc_arr[$row[0]][$row[9]] = count($tc_list);
                $tc_list[] = array('index' => $k + 2, 'ti_name' => $row[0], 'tc_name' => $row[9], 'tc_provid' => $row['tc_provid'], 'tc_cityid' => $row['tc_cityid'], 'tc_areaid' => $row['tc_areaid'], 'tc_ctcaddr' => $row[13], 'tc_ctcperson' => $row[14], 'tc_ctcphone' => $row[15]);
            }
            if (isset($data['error'])) {
                break;
            }
            unset($region_map);
            unset($regionname_map);
            unset($tit_map);
            unset($tipt_map);
            unset($rows);
            // 这里开始导入
            try {
                $db = Fn::db();
                if (!$db->beginTransaction()) {
                    throw new Exception('开始导入事务处理失败');
                }
                $time = time();
                $adduid = Fn::sess()->userdata('admin_id');
                // 导入机构
                $sql1 = <<<EOT
SELECT ti_id FROM t_training_institution WHERE ti_name = ?
EOT;
                $sql2 = <<<EOT
SELECT tc_id FROM t_training_campus WHERE tc_tiid = ? AND tc_name = ?
EOT;
                $sql3 = <<<EOT
UPDATE t_training_institution SET ti_campusnum = ti_campusnum + 1 
WHERE ti_id = 
EOT;
                $tc_update = 0;
                $tc_insert = 0;
                $ti_update = 0;
                $ti_insert = 0;
                foreach ($ti_list as $k => $row) {
                    $ti_id = $db->fetchOne($sql1, array($row['ti_name']));
                    if ($ti_id) {
                        $ti_list[$k]['ti_id'] = $ti_id;
                        // update
                        $row2 = array();
                        if ($param['same_tiname_update_ti_typeid']) {
                            $row2['ti_typeid'] = $row['ti_typeid'];
                        }
                        if ($param['same_tiname_update_ti_region'] && intval($row['ti_provid']) != 0) {
                            $row2['ti_provid'] = $row['ti_provid'];
                            $row2['ti_cityid'] = $row['ti_provid'];
                            $row2['ti_areaid'] = $row['ti_areaid'];
                        }
                        if ($param['same_tiname_update_ti_addr'] && $row['ti_addr'] != '') {
                            $row2['ti_addr'] = $row['ti_addr'];
                        }
                        if ($param['same_tiname_update_ti_priid']) {
                            $row2['ti_priid'] = $row['ti_priid'];
                        }
                        if ($param['same_tiname_update_ti_stumax'] && intval($row['ti_stumax']) != '0') {
                            $row2['ti_stumax'] = $row['ti_stumax'];
                        }
                        if ($param['same_tiname_update_ti_url'] && $row['ti_url'] != '') {
                            $row2['ti_url'] = $row['ti_url'];
                        }
                        if ($row2) {
                            $db->update('t_training_institution', $row2, 'ti_id = ' . $ti_id);
                            $ti_update++;
                        }
                    } else {
                        // insert
                        unset($row['index']);
                        unset($row['ti_id']);
                        $row['ti_flag'] = $time;
                        if ($row['ti_addr'] == '') {
                            $row['ti_addr'] = NULL;
                        }
                        if ($row['ti_url'] == '') {
                            $row['ti_url'] = NULL;
                        }
                        $row['ti_addtime'] = date('Y-m-d H:i:s', $time);
                        $row['ti_adduid'] = $adduid;
                        $db->insert('t_training_institution', $row);
                        $ti_list[$k]['ti_id'] = $db->lastInsertId('t_training_institution', 'ti_id');
                        $ti_insert++;
                    }
                }
                // 导入校区
                foreach ($tc_list as $k => $row) {
                    $ti_id = $ti_list[$ti_arr[$row['ti_name']]]['ti_id'];
                    $tc_list[$k]['ti_id'] = $ti_id;
                    $tc_id = $db->fetchOne($sql2, array($ti_id, $row['tc_name']));
                    if ($tc_id) {
                        // update
                        $tc_list[$k]['tc_id'] = $tc_id;
                        $row2 = array();
                        if ($param['same_tcname_update_tc_region'] && intval($row['tc_provid']) != 0) {
                            $row2['tc_provid'] = $row['tc_provid'];
                            $row2['tc_cityid'] = $row['tc_provid'];
                            $row2['tc_areaid'] = $row['tc_areaid'];
                        }
                        if ($param['same_tcname_update_tc_ctcaddr'] && $row['tc_ctcaddr'] != '') {
                            $row2['tc_ctcaddr'] = $row['tc_ctcaddr'];
                        }
                        if ($param['same_tcname_update_tc_ctcperson'] && $row['tc_ctcperson'] != '') {
                            $row2['tc_ctcperson'] = $row['tc_ctcperson'];
                        }
                        if ($param['same_tcname_update_tc_ctcphone'] && $row['tc_ctcphone'] != '') {
                            $row2['tc_ctcphone'] = $row['tc_ctcphone'];
                        }
                        if ($row2) {
                            $db->update('t_training_campus', $row2, 'tc_id = ' . $tc_id);
                            $tc_update++;
                        }
                    } else {
                        // insert
                        unset($row['index']);
                        unset($row['ti_name']);
                        $row['tc_tiid'] = $ti_id;
                        $row['tc_flag'] = $time;
                        $row['tc_environ'] = 3;
                        $row['tc_addtime'] = date('Y-m-d H:i:s', $time);
                        $row['tc_adduid'] = $adduid;
                        if ($row['tc_ctcperson'] == '') {
                            $row['tc_ctcperson'] = NULL;
                        }
                        $db->insert('t_training_campus', $row);
                        $tc_list[$k]['tc_id'] = $db->lastInsertId('t_training_campus', 'tc_id');
                        $db->exec($sql3 . $ti_id);
                        $tc_insert++;
                    }
                }
                if ($db->commit()) {
                    $data['success'] = <<<EOT
导入Excel文件({$_FILES['file']['name']})成功,共更新{$ti_update}条机构记录, 插入{$ti_insert}条机构记录, 更新{$tc_update}条校区记录, 插入{$tc_insert}条校区记录
EOT;
                    admin_log('import', '', "培训机构和校区 " . $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('ti_provid_required' => 1, 'ti_cityid_required' => 2, 'ti_areaid_required' => 3, 'ti_addr_required' => 1, 'ti_priid_required' => 1, 'ti_stumax_required' => 1, 'tc_provid_required' => 1, 'tc_cityid_required' => 2, 'tc_areaid_required' => 3, 'tc_ctcaddr_required' => 1, 'tc_ctcphone_required' => 1, 'same_tiname_update_ti_typeid' => 1, 'same_tiname_update_ti_region' => 1, 'same_tiname_update_ti_addr' => 1, 'same_tiname_update_ti_priid' => 1, 'same_tiname_update_ti_stumax' => 1, 'same_tiname_update_ti_url' => 1, 'same_tcname_update_tc_region' => 1, 'same_tcname_update_tc_ctcaddr' => 1, 'same_tcname_update_tc_ctcperson' => 1, 'same_tcname_update_tc_ctcphone' => 1);
            // 同名校区更新联系电话
        }
        $data['param'] = $param;
        $this->load->view('traininginstitution/import_titc_excel', $data);
    }
Example #24
0
    /**
     * 支付宝调用回调方法
     */
    public static function paying_notify()
    {
        /**
         * 功能:支付宝服务器异步通知页面
         *************************页面功能说明*************************
         * 创建该页面文件时,请留心该页面文件中无任何HTML代码及空格。
         * 该页面不能在本机电脑测试,请到服务器上做测试。请确保外部可以访问该
         *   页面。
         * 该页面调试工具请使用写文本函数logResult,该函数已被默认关闭,见
         *      alipay_notify_class.php中的函数verifyNotify
         * 如果没有收到该页面返回的 success 信息,支付宝会在24小时内按一定的
         *    时间策略重发通知
         */
        //require_once("alipay.config.php");
        //require_once("lib/alipay_notify.class.php");
        //计算得出通知验证结果
        $alipay_config = AlipayConfig::config();
        $alipayNotify = new AlipayNotify($alipay_config);
        $verify_result = $alipayNotify->verifyNotify();
        if (!$verify_result) {
            die('error:verify_result_failed');
        }
        //验证成功
        //商户订单号
        $out_trade_no = $_POST['out_trade_no'];
        //支付宝交易号
        $trade_no = $_POST['trade_no'];
        //交易状态
        $trade_status = $_POST['trade_status'];
        $time = time();
        if (!in_array($_POST['trade_status'], array('TRADE_FINISHED', 'TRADE_SUCCESS'))) {
            die('error:trade_status_error');
        }
        //判断该笔订单是否在商户网站中已经做过处理
        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订
        //  单系统中查到该笔订单的详细,并执行商户的业务程序
        //如果有做过处理,不执行商户的业务程序
        $db = Fn::db();
        $row = TransactionRecordModel::transactionRecordInfoByTrNo($out_trade_no);
        if (!$row) {
            die('error:out_trade_no_not_exist');
        }
        if ($row['tr_flag'] == 1) {
            // 已处理过
            echo 'success';
            exit;
        }
        if (!$db->beginTransaction()) {
            die('error:start_transaction_failed');
        }
        $param = array('tr_flag' => 1, 'tr_finishtime' => $time);
        TransactionRecordModel::setTransactionRecordByTrNo($out_trade_no, $param);
        $sql = <<<EOT
UPDATE rd_student SET account = account + ({$row['tr_trade_amount']}) 
WHERE uid = {$row['tr_uid']}
EOT;
        $flag = $db->exec($sql);
        if (!$db->commit()) {
            $db->rollBack();
            die('error:commit_transaction_failed');
        }
        //注意:
        //付款完成后,支付宝系统发送该交易状态通知
        echo "success";
        exit;
    }
Example #25
0
 /**
  * 获取记录列表
  * @param array $query
  * @param integer $page
  * @param integer $per_page
  * @param string $order_by
  * @param string $select_what
  */
 public static function get_cron_schedule_list($query, $page = 1, $per_page = 20, $order_by = null, $select_what = '*')
 {
     try {
         $where = array();
         $bind = array();
         if (is_array($query) && count($query)) {
             foreach ($query as $key => $val) {
                 switch ($key) {
                     case 'job_code':
                         if (is_array($val)) {
                             $tmpStr = array();
                             foreach ($val as $k => $v) {
                                 $tmpStr[] = '?';
                                 $bind[] = intval($v);
                             }
                             $tmpStr = implode(', ', $tmpStr);
                             $where[] = "job_code IN ({$tmpStr})";
                         } else {
                             $where[] = 'job_code = ?';
                             $bind[] = $val;
                         }
                         break;
                     case 'status':
                         if (is_array($val)) {
                             $tmpStr = array();
                             foreach ($val as $k => $v) {
                                 $tmpStr[] = '?';
                                 $bind[] = intval($v);
                             }
                             $tmpStr = implode(', ', $tmpStr);
                             $where[] = "status IN ({$tmpStr})";
                         } else {
                             $where[] = 'status = ?';
                             $bind[] = $val;
                         }
                         break;
                     case 'created_at':
                         if (is_array($val)) {
                             foreach ($val as $k => $v) {
                                 $where[] = "created_at {$k} ?";
                                 $bind[] = $v;
                             }
                         } else {
                             $where[] = 'created_at = ?';
                             $bind[] = $val;
                         }
                         break;
                     case 'scheduled_at':
                         if (is_array($val)) {
                             foreach ($val as $k => $v) {
                                 $where[] = "scheduled_at {$k} ?";
                                 $bind[] = $v;
                             }
                         } else {
                             $where[] = 'scheduled_at = ?';
                             $bind[] = $val;
                         }
                         break;
                     case 'executed_at':
                         if (is_array($val)) {
                             foreach ($val as $k => $v) {
                                 $where[] = "executed_at {$k} ?";
                                 $bind[] = $v;
                             }
                         } else {
                             $where[] = 'executed_at = ?';
                             $bind[] = $val;
                         }
                         break;
                     case 'finished_at':
                         if (is_array($val)) {
                             foreach ($val as $k => $v) {
                                 $where[] = "finished_at {$k} ?";
                                 $bind[] = $v;
                             }
                         } else {
                             $where[] = 'finished_at = ?';
                             $bind[] = $val;
                         }
                         break;
                     default:
                         break;
                 }
             }
         }
         $where = count($where) ? "WHERE " . implode(' AND ', $where) : '';
         $order_by = !is_null($order_by) ? 'ORDER BY ' . $order_by : '';
         $group_by = '';
         $limit = '';
         $page = intval($page);
         if ($page > 0) {
             $per_page = intval($per_page);
             $start = ($page - 1) * $per_page;
             $limit = " LIMIT {$per_page} OFFSET {$start}";
         }
         $sql = "SELECT {$select_what} FROM rd_cron_schedule {$where} {$order_by} {$group_by} {$limit}";
         $data = Fn::db()->fetchAll($sql, $bind);
         return $data;
     } catch (Exception $e) {
         throw new Exception($e->getMessage());
     }
 }
Example #26
0
    /**
     * 检查某期考试的学科是否有关联 正在进行中的考场
     */
    public static function exam_subject_has_being_tested($exam_id = 0)
    {
        $exam_id = intval($exam_id);
        if (!$exam_id) {
            return false;
        }
        $now = time();
        $sql = <<<EOT
SELECT COUNT(eps.place_id) AS count 
FROM rd_exam_place_subject eps, rd_exam_place ep
WHERE eps.exam_id = {$exam_id} AND eps.place_id = ep.place_id 
AND ep.start_time <= {$now} AND ep.end_time >= {$now}
EOT;
        $test_result = Fn::db()->fetchAll($sql);
        return $test_result[0]['count'] > 0;
    }
Example #27
0
 /**
  * 批量更新数据
  *
  * @param   array   更新数据
  * @return  boolean
  */
 public static function update_batch($update_data)
 {
     $bOk = false;
     $db = Fn::db();
     if (!$db->beginTransaction()) {
         return $bOk;
     }
     try {
         foreach ($update_data as $v) {
             $id = $v['id'];
             unset($v['id']);
             $db->update('rd_question_stat', $v, 'id = ' . $id);
         }
         $bOk = $db->commit();
         if (!$bOk) {
             $db->rollBack();
         }
     } catch (Exception $e) {
     }
     return $bOk;
 }
Example #28
0
 /**
  * 执行考试成绩同步
  */
 public static function initSyncZmossExamResults()
 {
     $db = Fn::db();
     $sql = "SELECT er_examid, er_zmoss_examid FROM t_exam_relate\n                WHERE er_flag > 0 AND er_flag < 3 AND er_exampid > 0 limit 5";
     $list = $db->fetchAll($sql);
     if (!$list) {
         return false;
     }
     foreach ($list as $item) {
         $db->update('t_exam_relate', array('er_flag' => 100), 'er_examid = ? AND er_zmoss_examid = ?', array($item['er_examid'], $item['er_zmoss_examid']));
     }
     foreach ($list as $item) {
         $flag = self::syncZmossExamResults($item['er_examid'], $item['er_zmoss_examid']);
         if ($flag) {
             $bind = array('er_flag' => 3);
         } else {
             $bind = array('er_flag' => 2);
         }
         $db->update('t_exam_relate', $bind, 'er_examid = ? AND er_zmoss_examid = ?', array($item['er_examid'], $item['er_zmoss_examid']));
     }
 }
 public function __construct()
 {
     parent::__construct();
     self::$_db = Fn::db();
 }
Example #30
0
 /**
  * 获取交易记录
  * @param   string  $tr_no  交易号
  * @return  array   map<string, variant>类型数据
  */
 public static function transactionRecordInfoByTrNo($tr_no, $item = "*")
 {
     if (!$tr_no) {
         return false;
     }
     $item = $item ? $item : '*';
     $sql = "SELECT {$item} FROM t_transaction_record\n                WHERE tr_no = ?";
     return Fn::db()->fetchRow($sql, array($tr_no));
 }