<?php
namespace app\teach\model;
use app\BaseModel;
class Banji extends BaseModel
{
public function search($srcfrom)
{
$src = [
'school_id' => ''
,'ruxuenian' => ''
,'status' => ''
];
$src = array_cover($srcfrom, $src);
$src['school_id'] = strToarray($src['school_id']);
$src['ruxuenian'] = strToarray($src['ruxuenian']);
if(count($src['ruxuenian']) == 0)
{
$njname = $this->gradeName('num', time()); # 年级名对应表
$src['ruxuenian'] = array_values($njname);
}
$data = $this
->when(count($src['school_id']) > 0, function($query) use($src){
$query->where('school_id', 'in', $src['school_id']);
})
->when(count($src['ruxuenian']) > 0, function($query) use($src){
$query->where('ruxuenian', 'in', $src['ruxuenian']);
})
->when(strlen($src['status']) > 0, function($query) use($src){
$query->where('status', $src['status']);
})
->with(
[
'glSchool'=>function($query){
$query->field('id, title, jiancheng');
},
'glTeacher'=>function($query){
$query->field('id, xingming');
},
]
)
->withCount([
'glStudent'=>function($query){
$query->where('status', 1);
}
])
->append(['banjiTitle', 'banTitle', 'grade', 'ban'])
->select();
return $data;
}
public function searchNjGroup($srcfrom)
{
$src = [
'school_id' => ''
,'ruxuenian' => ''
,'status' => '1'
];
$src = array_cover($srcfrom, $src) ;
$src['ruxuenian'] = strToarray($src['ruxuenian']);
$data = self:: where('school_id', $src['school_id'])
->where('ruxuenian', 'in', $src['ruxuenian'])
->where('status', $src['status'])
->distinct(true)
->field('ruxuenian')
->with([
'njBanji'=>function($query)use($src){
$query->where('status',1)
->where('school_id', $src['school_id'])
->field('id, ruxuenian, paixu')
->where('status', 1)
->order('paixu')
->append(['banjiTitle', 'banTitle']);
}
])
->select();
return $data;
}
public function glSchool(){
return $this->belongsTo('\app\system\model\School', 'school_id', 'id');
}
public function glStudent(){
return $this->hasMany('\app\student\model\Student', 'banji_id', 'id');
}
public function glTeacher(){
return $this->belongsTo('\app\teacher\model\Teacher', 'banzhuren', 'id');
}
public function njBanji()
{
return $this->hasMany('Banji', 'ruxuenian', 'ruxuenian');
}
public function getNumTitleAttr()
{
$njname = $this->gradeName('str', time()); # 年级名对应表
$nj = $this->getAttr('ruxuenian');
$bj = $this->getAttr('paixu');
$numnj = array_flip(array_keys($njname));
if(array_key_exists($nj, $numnj))
{
$numname = ($numnj[$nj] + 1) . '.' . $bj;
}else{
$numname = $nj . '.' . $bj;
}
return $numname;
}
public function getBanjiTitleAttr()
{
$title = self::getGradeAttr() . self::getBanTitleAttr();
return $title;
}
public function getBanTitleAttr()
{
$alias = \app\facade\System::sysClass();
if($alias->classalias)
{
$title = $this->alias;
if($title == '')
{
$bj = $this->getAttr('paixu');
$title = self::numToWord($bj) . '班';
$del = $this->getAttr('delete_time');
$del == null ? $title : $title = $title & '(删)' ;
}else{
$title = $title . '班';
}
}else{
$bj = $this->getAttr('paixu');
$title = self::numToWord($bj) . '班';
$del = $this->getAttr('delete_time');
$del == null ? $title : $title = $title & '(删)' ;
}
return $title;
}
public function getGradeAttr()
{
$njList = $this->gradeName('str', time());
if(isset($njList[$this->getAttr('ruxuenian')]))
{
$title = $njList[$this->getAttr('ruxuenian')];
}else{
$title = $this->getAttr('ruxuenian') . '界';
}
return $title;
}
public function getBanAttr()
{
$bj = $this->getAttr('paixu');
$title = self::numToWord($bj) . '班';
$del = $this->getAttr('delete_time');
$del == null ? $title : $title = $title & '(删)' ;
return $title;
}
public function srcBanJiID($str, $school_id)
{
if(stristr($str,'年级', true) === false || stristr($str, '班' , true) === false)
{
return false;
}
$njlist = $this->gradeName('str', time());
$bjlist = $this->className();
$find = strpos($str,"级") + 3;
$nj = substr($str, 0, $find);
$bj = substr($str, $find, strlen($str) - $find);
$nj = array_search($nj, $njlist);
$bj = array_search($bj, $bjlist);
$banji = new \app\teach\model\Banji;
$id = $banji->where('ruxuenian', $nj)
->where('paixu', $bj)
->where('school_id', $school_id)
->value('id');
return $id;
}
public function fClassTitle($grade = 1950, $jiedian = 0, $paixu = 1, $category = true)
{
$njlist = $this->gradeName('str', $jiedian);
$title = '';
if( isset($njlist[$grade]) )
{
switch ($category) {
case true:
$title = $njlist[$grade] . self::numToWord($paixu) . '班';
break;
default:
$njlist = array_flip(array_keys($njlist));
$title = $njlist[$grade].''.$paixu;
break;
}
}else{
switch ($category) {
case true:
$title = $grade . '界' . self::numToWord($paixu) . '班';
break;
default:
$njlist = array_flip(array_keys($njlist));
$title = $njlist[$grade].'.'.$paixu;
break;
}
}
return $title;
}
public function gradeName($value = 'str', $riqi=0)
{
$sysClass = \app\facade\System::sysClass();
$jd = date('-m-d', $sysClass->getData('xuenian'));
if($riqi == 0)
{
$jiedian = strtotime(date('Y') . $jd);
$thisday = time();
$nian = date('Y');
}else{
$jiedian = strtotime(date('Y', $riqi) . $jd);
$thisday = $riqi;
$nian = date('Y', $riqi);
}
$thisday <= $jiedian ? $str = 1 : $str = 0;
$nian = $nian - $str;
$gradelist = explode('|', $sysClass->gradelist);
$gradeMax = count($gradelist);
$njlist = array();
if($value != 'str')
{
for($i = 0; $i < $gradeMax; $i ++)
{
$njlist[$gradelist[$i]] = $nian - $i;
}
}else{
for($i = 0; $i < $gradeMax; $i ++)
{
$njlist[$nian - $i] = $gradelist[$i];
}
}
return $njlist;
}
public function className()
{
$sys = \app\facade\System::sysClass();
$classmax = $sys->classmax;
$bjarr = array();
for($i = 1; $i <= $classmax; $i++)
{
$bjarr[$i] = self::numToWord($i) . '班';
}
return $bjarr;
}
public function numToWord($num)
{
if(!preg_match("/^[1-9][0-9]*$/", $num))
{
return '';
}
$chiUni = array('', '万', '亿', '万');
$cnt = strlen($num); #取数字长度
$num = (string)$num;
$chiStr = '';
$x = 0;
$y = 0;
for ($i = $cnt - 1; $i >= 0; $i --) {
if($x < 4)
{
$arr[$y][$x] = $num[$i];
}else{
$x = 0;
$y = $y + 1;
$arr[$y][$x] = $num[$i];
}
$x = $x + 1;
}
foreach ($arr as $key => $value) {
$cnt = count($value);
$thisStr = self::numTo($value, $key);
if($thisStr == '零')
{
$chiStr = self::numTo($value, $key) . $chiStr;
}else{
$chiStr = self::numTo($value, $key) . $chiUni[$key] . $chiStr;
}
}
$chiStr = str_replace("零零", "零", $chiStr);
return $chiStr;
}
private function numTo($arr = array(), $key = 0)
{
$cnt = count($arr);
$chiNum = array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九');
$chiUni = array('','十', '百', '千');
$chiStr = '';
$zero = true; # 上一个数字是否为0
$key = $key * 4;
if($cnt == 0 || array_sum($arr) == 0)
{
return $chiNum[0];
}
switch ($cnt) {
case 2:
$temp = $arr[1];
if($temp == 1)
{
$chiStr = $chiUni[1];
}else{
$chiStr = $chiNum[$temp] . $chiUni[1];
}
$temp = $arr[0];
$temp != 0 ? $chiStr = $chiStr . $chiNum[$temp] : '' ;
break;
default:
for($i = 0; $i<$cnt; $i++)
{
$temp = $arr[$i];
if($temp == 0)
{
if($zero != true)
{
$chiStr = $chiNum[$temp] .$chiStr;
}
$zero = true;
}else{
$chiStr = $chiNum[$temp] . $chiUni[$i] .$chiStr;
$zero = false;
}
}
break;
}
return $chiStr;
}
}