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);
 }