接口比較複雜,還不知道該如何分離,先做記錄,都有詳細的注釋
//智能配置設定 —— 核心功能
public function intelligentAlloc() {
$user = $this->auto_login();
$grade = Db::table('tc_grade')->order('grade desc')->select();
// $user['department'] = "資訊安全與網絡工程系";
// $user['workNumber'] = "00001";
$wishList = ['wishFirst','wishSecond','wishThird','wishForth','wishFifth'];
$voluntaryNum = Db::table('tc_voluntaryinfosetting')->where('workNumber',$user['workNumber'])->find();
//擷取未配置設定到導師的學生資訊
$student = Db::table('user_student_'.$grade[0]['grade'])->where('chosen',0)->where('department',$user['department'])->field('sid,serialNum,gpa,chosen')->select();
$countStudent = count($student);
$inputStudent = [];
for ($i=0; $i <$countStudent ; $i++) {
//擷取每個學生的志願資訊
if (Db::table('tc_voluntary_'.$grade[0]['grade'])->where('sid', $student[$i]['sid'])->field('wishFirst,wishSecond,wishThird,wishForth,wishFifth')->find()) {
$student[$i]['voluntary'] = Db::table('tc_voluntary_'.$grade[0]['grade'])->where('sid', $student[$i]['sid'])->field('wishFirst,wishSecond,wishThird,wishForth,wishFifth')->find();
//将每個學生的志願資訊轉換成規定格式的txt檔案
$inputStudent[$i] = $student[$i]['serialNum'] . ' ' . $student[$i]['gpa'] . PHP_EOL;
for ($j=0; $j <$voluntaryNum['voluntaryNum'] ; $j++) {
$inputStudent[$i] = $inputStudent[$i] . $student[$i]['voluntary'][$wishList[$j]] . PHP_EOL;
}
if (($i+1) != $countStudent) {
$inputStudent[$i] = $inputStudent[$i] . PHP_EOL;
}
}
}
$countInputStudent = count($inputStudent);
if ($countInputStudent != 0) {
//将擷取的學生資訊轉換為.txt檔案
file_put_contents('student.txt', $inputStudent);
//擷取導師資訊
if ($user['department'] == "計算機實驗班") {
$teacher = Db::table('user_teacher')->where('isExperial',1)->whereOr('isExperial',3)->select();
$countTeacher = count($teacher);
for ($i=0; $i <$countTeacher ; $i++) {
//擷取每個老師的目前可帶的計算機實驗班的學生數
$teacherIssue[$i] = Db::table('tc_issue_'.$grade[0]['grade'])->where('workNumber', $teacher[$i]['workNumber'])->find();
$teacher[$i]['avaliableNumber'] = $teacherIssue[$i]['totalCompExper'] - $teacherIssue[$i]['compExperNow'];
//将每個導師的資訊轉換成規定格式的txt檔案
$inputTeacher[$i] = $teacher[$i]['workNumber'] . ' ' . $teacher[$i]['avaliableNumber'] . PHP_EOL;
}
} elseif ($user['department'] == "數學實驗班") {
$teacher = Db::table('user_teacher')->where('isExperial',2)->whereOr('isExperial',3)->select();
$countTeacher = count($teacher);
for ($i=0; $i <$countTeacher ; $i++) {
//擷取每個老師的目前可帶的數學實驗班的學生數
$teacherIssue[$i] = Db::table('tc_issue_'.$grade[0]['grade'])->where('workNumber', $teacher[$i]['workNumber'])->find();
$teacher[$i]['avaliableNumber'] = $teacherIssue[$i]['totalMathExper'] - $teacherIssue[$i]['mathExperNow'];
//将每個導師的資訊轉換成規定格式的txt檔案
$inputTeacher[$i] = $teacher[$i]['workNumber'] . ' ' . $teacher[$i]['avaliableNumber'] . PHP_EOL;
}
} else {
$teacher = Db::table('user_teacher')->where('department',$user['department'])->select();
$countTeacher = count($teacher);
for ($i=0; $i <$countTeacher ; $i++) {
//擷取每個老師的目前可帶的自然班的學生數
$teacherIssue[$i] = Db::table('tc_issue_'.$grade[0]['grade'])->where('workNumber', $teacher[$i]['workNumber'])->find();
$teacher[$i]['avaliableNumber'] = $teacherIssue[$i]['totalNatur'] - $teacherIssue[$i]['naturNow'];
//将每個導師的資訊轉換成規定格式的txt檔案
$inputTeacher[$i] = $teacher[$i]['workNumber'] . ' ' . $teacher[$i]['avaliableNumber'] . PHP_EOL;
}
}
//将擷取的老師資訊轉換為.txt檔案
file_put_contents('teacher.txt', $inputTeacher);
//調用算法進行配置設定
$fileNameWithParam = 'distribute.exe ' . $countStudent . ' ' . $countTeacher . ' ' . $voluntaryNum['voluntaryNum'];
system($fileNameWithParam);
$studentElected = file_get_contents('student_elected.txt');
//擷取通過算法得到配置設定的學生的結果,轉換為string
//分割studentElected字元串,轉換為數組,并存到臨時的結果表中
if ($studentElected != "") {
$studentElected = str_replace("\r\n", '', $studentElected);
$studentElectedArr = explode(',', $studentElected);
for ($i = 0; $i < count($studentElectedArr); $i++) {
$studentElectedArr[$i] = explode(' ', $studentElectedArr[$i]);
$studentElectedResult[$i]['serialNum'] = $studentElectedArr[$i][0];
$studentElectedResult[$i]['stuInfo'] = Db::table('user_student_'.$grade[0]['grade'])->where('serialNum', $studentElectedResult[$i]['serialNum'])->field('sid,serialNum,name,gpa')->find();
$studentElectedResult[$i]['workNumber'] = $studentElectedArr[$i][1];
$studentElectedResult[$i]['teaInfo'] = Db::table('user_teacher')->where('workNumber', $studentElectedResult[$i]['workNumber'])->field('workNumber,name')->find();
if (Db::table('tc_voluntary_'.$grade[0]['grade'])->where('sid',$studentElectedResult[$i]['stuInfo']['sid'])->field('wishFirst,wishSecond,wishThird,wishForth,wishFifth')->find()) {
$vol_num[$i] = array_keys(Db::table('tc_voluntary_'.$grade[0]['grade'])->where('sid',$studentElectedResult[$i]['stuInfo']['sid'])->field('wishFirst,wishSecond,wishThird,wishForth,wishFifth')->find(),$studentElectedResult[$i]['teaInfo']['workNumber']);
if ($vol_num[$i][0] == "wishFirst") {
$volOrder = "第一志願";
} elseif ($vol_num[$i][0] == "wishSecond") {
$volOrder = "第二志願";
} elseif ($vol_num[$i][0] == "wishThird") {
$volOrder = "第三志願";
} elseif ($vol_num[$i][0] == "wishForth") {
$volOrder = "第四志願";
} elseif ($vol_num[$i][0] == "wishFifth") {
$volOrder = "第五志願";
}
$insert[$i]['sid'] = $studentElectedResult[$i]['stuInfo']['sid'];
$insert[$i]['serialNum'] = $studentElectedResult[$i]['stuInfo']['serialNum'];
$insert[$i]['student_name'] = $studentElectedResult[$i]['stuInfo']['name'];
$insert[$i]['vol_num'] = $volOrder;
$insert[$i]['gpa'] = $studentElectedResult[$i]['stuInfo']['gpa'];
$insert[$i]['teacher_name'] = $studentElectedResult[$i]['teaInfo']['name'];
$insert[$i]['workNumber'] = $studentElectedResult[$i]['teaInfo']['workNumber'];
$insert[$i]['checked'] = 0;
if (Db::table('tc_temp_result')->where('sid',$insert[$i]['sid'])->find()) {
Db::table('tc_temp_result')->update($insert[$i]);
} else {
Db::table('tc_temp_result')->insert($insert[$i]);
}
}
}
}
$data['status'] = "success";
return json($data);
} else {
$data['amount'] = 0;
$data['msg'] = "所有學生均未填報志願,無法進行智能配置設定";
$data['student'] = "";
return json($data);
}
// return json($insert);
$this->assign('user', $user);
}