# 注:Excel首行标题名称要和 $FIELD 的title字段一致。表字段名要和$FIELD 的field一致。
set_time_limit(0);
ini_set('memory_limit', '1024M');
include_once(ROOT_PATH . 'extend/lib/PHPExcel.php');
$params=$this->request->param();
$file=$this->request->file('file');
$save_path='../uploads/student';
$info = $file->move( $save_path);
if($info){
// // 成功上传后 获取上传信息
// // 输出 jpg
// echo $info->getExtension();
// // 输出 /uploads/student/20160820/42a79759f284b767dfcb2a0197904287.jpg
// echo $info->getSaveName();
// // 输出 42a79759f284b767dfcb2a0197904287.jpg
// echo $info->getFilename();
$file_name=$save_path.'/'.$info->getSaveName();
$file_name=str_replace('\\','/',$file_name);
$objReader = \PHPExcel_IOFactory::createReader('Excel2007');
$objPHPExcel = $objReader->load($file_name, $encode = 'utf-8');
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数
if($highestRow<=1){
$msg['code']=0;
$msg['msg']='不能上传空文件!';
return json($msg);
die();
}
// 计算列表头英文字母
$letter_all=[];
$letter=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
$item=0;
$k=0;
$column='';
while($column!=$highestColumn){
$item_arr=[];
if($item==26){
$item=0;
}
$n=ceil(($k+1)/26);
if($n==1){
$column=$letter[$item];
$item_arr['column']=$column;
// array_push($letter_all,$letter[$item]);
}else{
$n=$n-2;
$column=$letter[$n].$letter[$item];
$item_arr['column']=$column;
// array_push($letter_all,$letter[$n].$letter[$item]);
}
$letter_all[]=$item_arr;
$k++;
$item++;
}
# 学生主键
$key_fileds=$StudentModel->getFields(StudentModel::FIELD_FLAG_KEY);
$key_field_arr=array_column($key_fileds,'field');
$key_field_titles=array_column($key_fileds,'title');
# 学生可修改字段
$yes_fileds=$StudentModel->getFields(StudentModel::FIELD_FLAG_YES);
$yes_field_arr=array_column($yes_fileds,'field');
# 下拉选项
$field_type_select=$StudentModel->getFields(0,StudentModel::FIELD_TYPE_SELECT);
$field_type_select_fields=array_column($field_type_select,'field');
// 判断表头是否存在主键
$key_num=0;
foreach($letter_all as $k => $v){
$value=(string)$objPHPExcel->getActiveSheet()->getCell($v['column'].'1')->getValue();
$v['title']=$value;
$v['field']=$StudentModel->getFieldByTitle($value);
if(in_array($value,$key_field_titles)){
$key_num++;
}
$letter_all[$k]=$v;
}
// 主键数量是否一致
if($key_num!=count($key_field_titles)){
$msg['code']=0;
$msg['msg']=implode('、',$key_field_titles).'必须存在!';
$msg['data']=$letter_all;
return json($msg);
die();
}
$error_idcards=[];
for ($i = 1; $i < $highestRow; $i++) {
// $name = (string)$objPHPExcel->getActiveSheet()->getCell("A" . ($i + 1))->getValue(); //证件号
foreach($letter_all as $k => $v){
// 获取excel内容
$value = (string)$objPHPExcel->getActiveSheet()->getCell($v['column'] . ($i + 1))->getValue();
$value=trim($value);
// 判断是否主键
if(!empty($v['field']) && in_array($v['field'],$key_field_arr)){
$where[$v['field']]=$value;
}
// 判断是否可修改字段
if(!empty($v['field']) && in_array($v['field'],$yes_field_arr)){
// 判断是否下拉选择的字段
if(in_array($v['field'],$field_type_select_fields)){
if(in_array($v['field'],['is_zzpks'])){
$value=$BaseModel->getWhetherKeyByName($value);
}else{
$value=$StudentModel->getSelectKeyByName(strtoupper($v['field']),$value);
}
}
$save_data[$v['field']]=$value;
}
}
$save_data['update_time']=time();
$save_data['opt_time']=time();
$save_data['opt_userid']=session('LOGIN_UID');
$save_data['opt_idcard']=session('user_idcard');
$save_data['opt_name']=session('username');
$save_data['is_excel']=BaseModel::WHETHER_YES;
$save_data['is_detail']=BaseModel::WHETHER_YES;
$where['delete_time']=0;
$where['class_id']=['in',session('charge_class_id')];
$where['graduation']=BaseModel::WHETHER_NO;//未毕业学生可以更新
$save_res=$StudentModel->where($where)->update($save_data);
if(!$save_res){
$error_idcards[]=$where['idcard'];
}
}
$StudentExcelLogModel->addData(['filepath'=>$file_name,'content'=>implode(',',$error_idcards)]);
$msg['code']=0;
$msg['msg']='上传成功';
// $msg['data']=$info->getSaveName();
return json($msg);
}else{
$msg['code']=1;
$msg['msg']=$file->getError();
// 上传失败获取错误信息
}
return json($msg);studentModel
<?php
/**
* Created by PhpStorm.
* User: eq
* Date: 2021/7/17
* Time: 11:18
*/
namespace app\index\model;
use think\Model;
use think\Db;
class Student extends Model
{
protected $table = 'zy_student';
// 字段标志
const FIELD_FLAG_YES=1;//可以修改
const FIELD_FLAG_NO=2; //禁止修改
const FIELD_FLAG_KEY=3;//主键
const FIELD_TYPE_TEXT=1; //文字输入
const FIELD_TYPE_SELECT=2; //下拉类型
public static $FIELD=[
['title'=>'姓名','field'=>'name','flag'=>self::FIELD_FLAG_NO,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'性别','field'=>'sex','flag'=>self::FIELD_FLAG_NO,'type'=>self::FIELD_TYPE_SELECT],
['title'=>'出生日期','field'=>'birth_date','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'学部','field'=>'grade_name','flag'=>self::FIELD_FLAG_NO,'type'=>self::FIELD_TYPE_SELECT],
['title'=>'班级','field'=>'class_name','flag'=>self::FIELD_FLAG_NO,'type'=>self::FIELD_TYPE_SELECT],
['title'=>'年级','field'=>'school_year','flag'=>self::FIELD_FLAG_NO,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'证件类型','field'=>'idtype','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_SELECT],
['title'=>'证件号','field'=>'idcard','flag'=>self::FIELD_FLAG_KEY,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'学籍号','field'=>'qgxjh','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'学号','field'=>'stu_no','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'民族','field'=>'nation','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'户籍详细地址','field'=>'hjxxdz','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'户籍所属派出所','field'=>'hjsspcs','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'家庭现地址','field'=>'jtxdz','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'政治面貌','field'=>'zzmm','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_SELECT],
['title'=>'健康状况','field'=>'jkzk','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_SELECT],
['title'=>'身心特殊体质','field'=>'sxtstz','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'禁忌症','field'=>'jjz','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'学生电话','field'=>'phone','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'学生来源','field'=>'xsly','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_SELECT],
['title'=>'招生对象','field'=>'zsdx','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_SELECT],
['title'=>'监护人姓名','field'=>'jhrxm','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'与监护人关系','field'=>'yjhrgx','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'监护人mob','field'=>'jhrlxdh','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'初中毕业学校','field'=>'czbyxx','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'初中毕业学校所在地','field'=>'czbyxxszd','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'中考准考证号','field'=>'zkzkzh','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'中考考生号','field'=>'zkksh','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'中考考试总分','field'=>'zkkszf','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'就读方式','field'=>'jdfs','flag'=>self::FIELD_FLAG_NO,'type'=>self::FIELD_TYPE_SELECT],
['title'=>'宿舍号','field'=>'ssh','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'在校情况','field'=>'zxqk','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_SELECT],
['title'=>'血型','field'=>'xx','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_SELECT],
['title'=>'军训成绩','field'=>'jx','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'是否享受国家中职贫困生资助','field'=>'is_zzpks','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_SELECT],
['title'=>'毕业后升学院校','field'=>'byhsxyx','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'就业单位','field'=>'jydw','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'技能测试分','field'=>'jncsf','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'学考总分','field'=>'xkzf','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'实习单位','field'=>'sxdw','flag'=>self::FIELD_FLAG_YES,'type'=>self::FIELD_TYPE_TEXT],
['title'=>'是否毕业','field'=>'graduation','flag'=>self::FIELD_FLAG_NO,'type'=>self::FIELD_TYPE_SELECT],
];
/**
* 获取字段
*/
public function getFields($flag=0,$type=0)
{
$stu_fields=[];
foreach(self::$FIELD as $k => $v){
if($flag>0 && $type>0){
if($v['flag']==$flag && $v['type']==$type){
$stu_fields[]=$v;
}
}elseif($flag){
if($v['flag']==$flag){
$stu_fields[]=$v;
}
}elseif($type){
if($v['type']==$type){
$stu_fields[]=$v;
}
}
}
return $stu_fields;
}
/**
* 通过title获取字段field
*/
public function getFieldByTitle($title=''){
$field='';
foreach(self::$FIELD as $k => $v){
if($v['title']==$title){
$field=$v['field'];
}
}
return $field;
}
/**
* 通过名称获取下拉的key
* */
public function getSelectKeyByName($field,$name)
{
$fleid=strtoupper($field);
$key='';
foreach(self::$$field as $k => $v){
if($v==$name){
$key=$k;
break;
}
}
return $key;
}
public static $SEX=[
1=>'男',
2=>'女'
] ;
const SEX_NAN=1;
const SEX_NV=2;
public function getSex($value){
if($value==-1){
$arr=[];
foreach(self::$SEX as $k => $v){
$item=[];
$item['id']=$k;
$item['name']=$v;
array_push($arr,$item);
}
return $arr;
}else{
return self::$SEX[$value];
}
}
// 在校情况
public static $ZXQK=[
22=>'正常在校',
23=>'实习',
24=>'退学',
25=>'休学',
];
const ZXQK_ZC=22;
const ZXQK_SX=23;
const ZXQK_TX=24;
const ZXQK_XX=25;
public function getZxqk($value){
if($value==-1){
$arr=[];
foreach(self::$ZXQK as $k => $v){
$item=[];
$item['id']=$k;
$item['name']=$v;
array_push($arr,$item);
}
return $arr;
}else{
return self::$ZXQK[$value];
}
}
// 政治面貌
public static $ZZMM=[
11=>'中国共产主义青年团团员',
12=>'群众',
];
const ZZMM_TY=11;
const ZZMM_QZ=12;
public function getZzmm($value){
if($value==-1){
$arr=[];
foreach(self::$ZZMM as $k => $v){
$item=[];
$item['id']=$k;
$item['name']=$v;
array_push($arr,$item);
}
return $arr;
}else{
return self::$ZZMM[$value];
}
}
// 健康状况
public static $JKZK=[
13=>'健康或良好',
14=>'一般或较弱',
15=>'有慢性病',
16=>'残疾',
];
const JKZK_LH=13;
const JKZK_YB=14;
const JKZK_MXB=15;
const JKZK_CJ=16;
public function getJkzk($value){
if($value==-1){
$arr=[];
foreach(self::$JKZK as $k => $v){
$item=[];
$item['id']=$k;
$item['name']=$v;
array_push($arr,$item);
}
return $arr;
}else{
return self::$JKZK[$value];
}
}
// 学生来源
public static $XSLY=[
17=>'应届',
18=>'非应届',
];
const XSLY_YJ=17;
const XSLY_FYJ=18;
public function getXsly($value){
if($value==-1){
$arr=[];
foreach(self::$XSLY as $k => $v){
$item=[];
$item['id']=$k;
$item['name']=$v;
array_push($arr,$item);
}
return $arr;
}else{
return self::$XSLY[$value];
}
}
// 招生对象
public static $ZSDX=[
19=>'应届初中毕业生',
20=>'应届高中毕业生',
21=>'往届初中毕业生',
];
const ZSDX_YJC=19;
const ZSDX_YJG=20;
const ZSDX_FYJC=21;
public function getZsdx($value){
if($value==-1){
$arr=[];
foreach(self::$ZSDX as $k => $v){
$item=[];
$item['id']=$k;
$item['name']=$v;
array_push($arr,$item);
}
return $arr;
}else{
return self::$ZSDX[$value];
}
}
// 证件类型
public static $IDTYPE=[
3=>'居民证件号',
4=>'香特区护照/信息证明',
5=>'澳特区护照/信息证明',
6=>'台湾居民来往大陆通行证',
7=>'境外永久居住证',
8=>'护照',
9=>'户口薄',
10=>'其他',
];
const IDTYPE_SFZ=3;
const IDTYPE_XG=4;
const IDTYPE_AM=5;
const IDTYPE_TW=6;
const IDTYPE_JW=7;
const IDTYPE_HZ=8;
const IDTYPE_HKP=9;
const IDTYPE_QT=10;
public function getIdtype($value){
if($value==-1){
$arr=[];
foreach(self::$IDTYPE as $k => $v){
$item=[];
$item['id']=$k;
$item['name']=$v;
array_push($arr,$item);
}
return $arr;
}else{
return self::$IDTYPE[$value];
}
}
// 血型
public static $XX=[
26=>'未知血型',
27=>'A血型',
28=>'B血型',
29=>'AB血型',
30=>'O血型',
31=>'RH阳性血型',
32=>'RH阴性血型',
33=>'HLA血型',
// 34=>'未定血型',
];
const XX_UN=26;
const XX_A=27;
const XX_B=28;
const XX_AB=29;
const XX_O=30;
const XX_RHY=31;
const XX_RHN=32;
const XX_HLA=33;
// const XX_WD=34;
public function getXx($value){
if($value==-1){
$arr=[];
foreach(self::$XX as $k => $v){
$item=[];
$item['id']=$k;
$item['name']=$v;
array_push($arr,$item);
}
return $arr;
}else{
return self::$XX[$value];
}
}
// 就读方式
public static $JDFS=[
713=>'住校',
714=>'走读',
];
const JDFS_ZX=713;
const JDFS_ZD=714;
public function getJdfs($value){
if($value==-1){
$arr=[];
foreach(self::$JDFS as $k => $v){
$item=[];
$item['id']=$k;
$item['name']=$v;
array_push($arr,$item);
}
return $arr;
}else{
return self::$JDFS[$value];
}
}
// 个人荣誉等级
public static $GRRY=[
715=>'国家级',
716=>'省级',
717=>'市级',
718=>'区县级',
719=>'校级',
];
const GRRY_GUO=715;
const GRRY_SHEN=716;
const GRRY_SHI=717;
const GRRY_QU=718;
const GRRY_XIAO=719;
public function getGrry($value){
if($value==-1){
$arr=[];
foreach(self::$GRRY as $k => $v){
$item=[];
$item['id']=$k;
$item['name']=$v;
array_push($arr,$item);
}
return $arr;
}else{
return self::$GRRY[$value];
}
}
// public function getYsTypeAttr($value)
// {
// $type = ['01' => '中午', '02' => '下午', '03' => '晚上', '04' => '早上', '05' => '其他'];
// $vArr = explode(',', $value);
// $attr = [];
// if (count($vArr) > 0) {
// foreach ($vArr as $item) {
// $attr[] = $type['0' . $item];
// }
// }
// return count($attr) > 0 ? implode(',', $attr) : '';
// }
/**
* 查询学生信息
* */
public function getInfo($where)
{
$info=self::where($where)->find();
return $info;
}
// 查询学生信息
public function getStudentInfoById($id)
{
$where['id']=$id;
$info=self::where($where)->find();
return $info;
}
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号