<?php
namespace app\student\model;
use app\BaseModel;use app\teach\model\Banji;
class Student extends BaseModel
{
public function stuBanji()
{
return $this->belongsTo('\app\teach\model\Banji', 'banji_id', 'id');
}
public function getAgeAttr()
{
$shengri = $this->getData('shengri');
if(strlen($shengri) == 0 ){
return '';
};
$tearch = new \app\teacher\model\Teacher;
$age = $tearch->fBirth($shengri, 1);
return $age;
}
public function setShengriAttr($value)
{
return strtotime($value);
}
public function getShengriAttr($value)
{
return date('Y-m-d',$value);
}
public function getSexAttr($value)
{
$sex = [
'0' => '女'
,'1' => '男'
,'2' => '保密'
];
$str = '';
if(isset($sex[$value]))
{
$str = $sex[$value];
}else{
$str = '未知';
}
return $str;
}
public function getKaoshiAttr($value)
{
$sex = [
'0' => '不参加'
,'1' => '参加'
];
$str = '';
if(isset($sex[$value]))
{
$str = $sex[$value];
}else{
$str = '未知';
}
return $str;
}
public function search($srcfrom)
{
$src = [
'banji_id' => array()
,'searchval' => ''
,'status' => ''
,'kaoshi' => ''
];
$src = array_cover($srcfrom, $src);
$src['banji_id'] = strToArray($src['banji_id']);
$data = $this
->where('banji_id', 'in', $src['banji_id'])
->when(strlen($src['searchval']) > 0, function($query) use($src){
$query
->where('xingming', 'like', '%' . $src['searchval'] . '%')
->with([
'glSchool' => function($q){
$q->field('id, title, jiancheng');
}
])
->field('id');
})
->when(strlen($src['status']) > 0, function($query) use($src){
$query
->where('status', $src['status'])
->field('id');
})
->when(strlen($src['kaoshi']) > 0, function($query) use($src){
$query
->where('kaoshi', $src['kaoshi'])
->field('id');
})
->with([
'stuBanji'=>function($query){
$query->field('id, ruxuenian, paixu, alias')->append(['banjiTitle']);
}
])
->field('id, xingming, sex, shengri, banji_id, kaoshi, status')
->append(['age'])
->select();
return $data;
}
public function searchDel($srcfrom)
{
$src = [
'banji_id' => array()
,'searchval' => ''
];
$src = array_cover($srcfrom, $src);
$src['banji_id'] = strToArray($src['banji_id']);
$data = $this::onlyTrashed()
->order('update_time')
->where('banji_id', 'in', $src['banji_id'])
->when(strlen($src['searchval']) > 0, function($query) use($src){
$query
->where('xingming', 'like', '%' . $src['searchval'] . '%')
->field('id');
})
->with([
'stuBanji'=>function($query){
$query
->field('id, ruxuenian, paixu, school_id')
->with([
'glSchool' => function($q) {
$q->field('id, title, jiancheng');
}
])
->append(['banjiTitle']);
}
])
->field('id, xingming, sex, shengri, banji_id, status')
->append(['age'])
->select();
return $data;
}
public function searchAll()
{
return $this->select();
}
public function tongBu($stuinfo, $school_id)
{
array_splice($stuinfo, 0, 3); # 删除标题行
$stuinfo = array_filter($stuinfo, function($q){ ## 过滤姓名、身份证号或班级为空的数据
return $q[1] != null && strlen($q[2]) >=6 && $q[3] != null;
});
$bj = array_column($stuinfo, 3);
$arr = array_unique($bj);
$bjStrName = array(); # 找不同班级
$bjmod = new \app\teach\model\Banji;
foreach ($arr as $key => $value) {
$bjid = $bjmod->srcBanJiID($value, $school_id); # 获取班级ID
if($bjid != false)
{
$bjStrName[$bjid] = $value;
}
}
$arr = array();
foreach ($bjStrName as $sbj_k => $sbj_val) {
foreach ($stuinfo as $stu_k => $stu_val) {
if($stu_val[3] == $sbj_val)
{
$arr[$sbj_k][] = $stu_val;
unset($stuinfo[$stu_k]);
}
}
}
$delarr = array(); # 记录要删除学生ID
$pinyin = new \Overtrue\Pinyin\Pinyin;
foreach ($arr as $key => $value) {
$xlsStuList = array_column($value, 2);
$xlsStuList = array_map('strtoupper', $xlsStuList); # 将小写字母转换成大写字母
$xlsStuList = array_map('trim', $xlsStuList); # 将大写字母转换成小写字母
$serStulist = self::withTrashed()
->where('banji_id',$bjid)
->field('id, xingming, shenfenzhenghao, sex')
->select();
$sfzh = $serStulist->column('shenfenzhenghao');
$jiaoji = array_intersect($xlsStuList, $sfzh); #返回交集
$add = array_diff($xlsStuList, $sfzh);
$del = array_diff($sfzh, $xlsStuList);
$add_temp = self::onlyTrashed()
->where('shenfenzhenghao', 'in', $add)
->field('shenfenzhenghao')
->column('shenfenzhenghao', 'id');
foreach ($add_temp as $add_temp_k => $add_temp_val) {
$k = array_search($add_temp_val, $add);
$jiaoji[$k] = $add[$k];
unset($add[$k]);
}
foreach ($jiaoji as $jj_k => $jj_val) {
$oneStu = self::withTrashed()
->where('shenfenzhenghao', $jj_val)
->field('id, xingming, banji_id, quanpin, shoupin, delete_time')
->find();
if($oneStu->delete_time > 0)
{
$oneStu->restore();
}
$quanpin = $pinyin->sentence($value[$jj_k][1]);
$shoupin = $pinyin->abbr($value[$jj_k][1]);
$oneStu->xingming = $value[$jj_k][1];
$oneStu->banji = $key;
$oneStu->quanpin = trim(strtolower(str_replace(' ', '', $quanpin)));
$oneStu->shoupin = trim(strtolower(str_replace(' ', '', $shoupin)));
$oneStu->save();
}
$pinyin = new \Overtrue\Pinyin\Pinyin;
$list = array();
foreach ($add as $add_k => $add_val) {
$sfzhval = strtoupper(trim($value[$add_k][2]));
$quanpin = $pinyin->sentence($value[$add_k][1]);
$shoupin = $pinyin->abbr($value[$add_k][1]);
$list[$add_k] = [
'xingming' => $value[$add_k][1]
,'shenfenzhenghao' => $sfzhval
,'banji_id' => $key
,'quanpin' => trim(strtolower(str_replace(' ', '', $quanpin)))
,'shoupin' => trim(strtolower(str_replace(' ', '', $shoupin)))
];
if(strlen($sfzhval) == 18)
{
$list[$add_k]['shengri'] = substr($sfzhval, 6, 4) . '-' . substr($sfzhval, 10, 2) . '-' . substr($sfzhval, 12, 2);
intval(substr($sfzhval,16,1) )% 2 ? $sex = 1 :$sex = 0 ;
$list[$add_k]['sex'] = $sex;
}else{
$list[$add_k]['shengri'] = '1970-1-1';
$list[$add_k]['sex'] = 2;
}
}
self::saveAll($list);
foreach ($del as $del_k => $del_val) {
$delarr[] = [
'id' => $serStulist[$del_k]->id
,'banjiTitle' => $bjStrName[$key]
,'xingming' => $serStulist[$del_k]->xingming
,'sex' => $serStulist[$del_k]->sex
];
}
}
return $delarr;
}
}