public function saveStudentsForClass($classId, $students) { try { $tId = session('instId'); $class = new \Home\Model\ClassModel(); $class->startTrans(); $result = $class->showStudentsFromClass((int) $classId, $tId); for ($i = 0; $i < count($result); $i++) { $oldStudentIds[] = $result[$i]['student_id']; } //students if ($students == null || $students == "") { $newStudentIds = array(); } else { $newStudentIds = explode('|', $students); } //find $deleteIds[] and $addIds[] if (!empty($oldStudentIds)) { if (empty($newStudentIds)) { $deleteIds = $oldStudentIds; } else { for ($i = 0; $i < count($oldStudentIds); $i++) { $shouldDelete = true; for ($j = 0; $j < count($newStudentIds); $j++) { if ((int) $oldStudentIds[$i] == (int) $newStudentIds[$j]) { $shouldDelete = false; } } if ($shouldDelete) { $deleteIds[] = $oldStudentIds[$i]; } } } } if (!empty($newStudentIds)) { if (empty($oldStudentIds)) { $addIds = $newStudentIds; } else { for ($i = 0; $i < count($newStudentIds); $i++) { $shouldAdd = true; for ($j = 0; $j < count($oldStudentIds); $j++) { if ((int) $newStudentIds[$i] == (int) $oldStudentIds[$j]) { $shouldAdd = false; } } if ($shouldAdd) { $addIds[] = $newStudentIds[$i]; } } } } $studentModel = new \Home\Model\StudentModel(); $class = new \Home\Model\ClassModel(); $classInfo = $class->getClassById((int) $classId, $tId); $tuition = $classInfo[0]['tuition_per_class']; $classDetails = $class->showClassDetailsById((int) $classId, $tId); $ndate = date("Y-m-d"); //(int)(str_replace(':','',date('H:i'))); $nstarttimeint = (int) date('Gi', time() + 8 * 3600); for ($i = 0; $i < count($classDetails); $i++) { $cdate = $classDetails[$i]['date']; $cstarttimeint = $classDetails[$i]['start_time_int']; if ($cdate == $ndate && $cstarttimeint > $nstarttimeint || $cdate > $ndate) { $leftClassDetails = array_slice($classDetails, $i); break; } } $changedTuition = count($leftClassDetails) * $tuition; //发生改变的学费 if (!empty($deleteIds)) { for ($i = 0; $i < count($deleteIds); $i++) { //logic delete $class->updateStudentStatusFromClass($tId, (int) $classId, (int) $deleteIds[$i], 1, -$changedTuition); if (!empty($leftClassDetails) && count($leftClassDetails) > 0) { for ($m = 0; $m < count($leftClassDetails); $m++) { //logic delete $class->updateStudentStatusFromClassDetail($tId, (int) $classId, $leftClassDetails[$m]['class_detail_id'], (int) $deleteIds[$i], 1); } } } } if (!empty($addIds)) { for ($i = 0; $i < count($addIds); $i++) { //update student status $studentModel->changeStudentStatus((int) $addIds[$i], $tId, 2); //try update first $result = $class->updateStudentStatusFromClass($tId, (int) $classId, (int) $addIds[$i], 0, $changedTuition); if ($result == 0) { $class->saveClassAndStudentRela((int) $classId, (int) $addIds[$i], $tuition, 0, $tId, $changedTuition, 0); } if (!empty($leftClassDetails) && count($leftClassDetails) > 0) { for ($m = 0; $m < count($leftClassDetails); $m++) { //先尝试删除此课程,以免重复添加 $class->updateStudentStatusFromClassDetail($tId, (int) $classId, $leftClassDetails[$m]['class_detail_id'], (int) $addIds[$i], 1); $class->saveClassDetailAndStudentRela($leftClassDetails[$m]['class_detail_id'], (int) $classId, (int) $addIds[$i], $tuition, $tId); } } } } $class->commit(); $data = "true"; } catch (Exception $e) { $class->rollback(); $data = "false"; } $this->ajaxReturn($data); }
public function attendNewClass($studentId, $receivableTuition, $tuition, $tuitionPerClass, $attended) { try { $instId = session('instId'); $classId = $attended; $studentModel = new \Home\Model\StudentModel(); $classModel = new \Home\Model\ClassModel(); $institutionModel = new \Home\Model\InstitutionModel(); //logModel $instBalanceChangeLogModel = new \Home\Model\InstBalanceChangeLogModel(); $studentBalanceChangeLogModel = new \Home\Model\StudentBalanceChangeLogModel(); $studentModel->startTrans(); //add tuition to student total tuition $studentModel->addStudentBalance($tuition * 100, $studentId, $instId); $reason = 1; //充值 $studentBalanceChangeLogModel->savelog($studentId, $reason, 0, $tuition * 100); //finance transaction part1 start $balance = $studentModel->showStudentBalance($instId, $studentId); $actuallyPaid = $receivableTuition > $balance[0]['balance'] ? $balance : $receivableTuition; //实际能付的或需要付的对应此课程的学费 $studentModel->addStudentBalance(-$actuallyPaid * 100, $studentId, $instId); $reason = 3; //3:学费划转给机构 $studentBalanceChangeLogModel->savelog($studentId, $reason, $classId, -$actuallyPaid * 100); //finance transaction part1 end //save student attends class info (classId and tuitionPerClass and totalTuition) $classDetails = $classModel->showClassDetailsById((int) $classId, $instId); $ndate = date("Y-m-d"); $nstarttimeint = (int) date('Gi', time() + 8 * 3600); for ($i = 0; $i < count($classDetails); $i++) { $cdate = $classDetails[$i]['date']; $cstarttimeint = $classDetails[$i]['start_time_int']; if ($cdate == $ndate && $cstarttimeint > $nstarttimeint || $cdate > $ndate) { $leftClassDetails = array_slice($classDetails, $i); break; } } //update student status $studentModel->changeStudentStatus($studentId, $instId, 2); //save student fee info $classModel->saveClassAndStudentRela((int) $classId, $studentId, $tuitionPerClass * 100, 0, $instId, $receivableTuition * 100, $actuallyPaid * 100); if (!empty($leftClassDetails) && count($leftClassDetails) > 0) { for ($m = 0; $m < count($leftClassDetails); $m++) { //add student and classDetail rela $classModel->saveClassDetailAndStudentRela($leftClassDetails[$m]['class_detail_id'], (int) $classId, $studentId, $tuitionPerClass * 100, $instId); } } //finance transaction part2 start //change inst balance $institutionModel->updateInstitutionBalance($actuallyPaid * 100, $instId); $reason = 1; //1:学费转入 $instBalanceChangeLogModel->saveLog($instId, $reason, $studentId, $actuallyPaid * 100); //finance transaction part2 end $data = "true"; $studentModel->commit(); } catch (Exception $e) { $data = "false"; $studentModel->rollback(); } $this->ajaxReturn($data); }