public function actionApply() { $trainId = Yii::$app->request->get('id'); $trainInfo = Train::findOne(['id' => $trainId]); if ($trainInfo['status'] != Train::BEGIN_SIGN_UP) { throw new ServerErrorHttpException('该课程的状态不是开始报名,谢谢。'); } if (Yii::$app->user->isGuest) { return $this->redirect(['/user/register', 'train_id' => $trainId]); } else { $userId = Yii::$app->user->id; if (Yii::$app->user->identity->status != '1') { throw new ServerErrorHttpException('您目前的状态是未审核,不能报名课程,谢谢。'); } $trainLevelInfo = Level::findOne($trainInfo['level_id']); if ($trainLevelInfo['order'] != Yii::$app->user->identity->level_order + 1) { throw new ServerErrorHttpException('您目前没有权限报名该级别下的课程,谢谢。'); } //检查用户参与的课程,状态不是取消的都算是已经参与了报名 $isExist = TrainUsers::getUserIsExistTrainStatus($userId, $trainInfo['level_id']); if (!empty($isExist)) { throw new ServerErrorHttpException('您已经参与了该级别下的培训课程,请耐心等待培训结果,谢谢。'); } // if (strtotime($trainInfo['sign_up_begin_time']) < time()) { // throw new ServerErrorHttpException('此课程已过期。'); // } $noPassInfo = TrainUsers::findOne(['user_id' => Yii::$app->user->id, 'level_id' => Yii::$app->user->identity->level_id + 1, 'status' => TrainUsers::NO_PASS]); if (!empty($noPassInfo)) { $noPassTrainInfo = Train::findOne($noPassInfo['train_id']); if (!empty($noPassTrainInfo)) { if ($noPassTrainInfo['end_time'] > $trainInfo['begin_time']) { throw new ServerErrorHttpException('训课课程的开课时间一定要大于未通过考试培训课程结束时间。'); } } } //报名成功,给出用户的序号 $trainUsersOrder = TrainUsers::getMaxSignUpOrder($trainId); if (empty($trainUsersOrder)) { $trainUsersOrder = 1; } else { $trainUsersOrder = $trainUsersOrder + 1; } $data = ['train_id' => $trainId, 'user_id' => $userId, 'status' => TrainUsers::APPROVED, 'practice_score' => 0, 'theory_score' => 0, 'rule_score' => 0, 'level_id' => $trainInfo['level_id'], 'orders' => $trainUsersOrder]; $model = new TrainUsers(); $model->setAttributes($data); if ($model->save()) { $trainUserId = $model->id; $trainUser = TrainUsers::findOne(['id' => $trainUserId]); $trainName = Train::getOneTrainNameById($trainUser['train_id']); $data = ['orders' => $trainUser['orders'], 'trainName' => $trainName]; //更新级别信息的信息 UsersLevel::updateAll(['train_id' => $trainId], ['user_id' => $userId, 'level_id' => Yii::$app->user->identity->level_id]); return $this->render('/train/apply-success', ['data' => $data]); } else { throw new ServerErrorHttpException('' . json_encode($model->errors, JSON_UNESCAPED_UNICODE)); } } }
public function actionApply() { $trainId = Yii::$app->request->get('train_id'); $trainInfo = Train::findOne(['id' => $trainId]); if ($trainInfo['status'] != Train::BEGIN_SIGN_UP) { throw new ServerErrorHttpException('该课程的状态不是开始报名,谢谢。'); } if (Yii::$app->user->isGuest) { return $this->redirect(['/user/register', 'train_id' => $trainId]); } else { $userId = Yii::$app->user->id; if (Yii::$app->user->identity->status != '1') { throw new ServerErrorHttpException('您目前的状态是未审核,不能报名课程,谢谢。'); } $trainLevelInfo = Level::findOne($trainInfo['level_id']); if ($trainLevelInfo['order'] != Yii::$app->user->identity->level_order + 1) { throw new ServerErrorHttpException('您目前没有权限报名该级别下的课程,谢谢。'); } //检查用户参与的课程,状态不是取消,注册未完成,审核未通过,未通过的都算是已经参与了报名 $isExist = TrainUsers::getUserIsExistTrainStatus($userId, $trainInfo['level_id']); if (!empty($isExist)) { throw new ServerErrorHttpException('您已经参与了该级别下的培训课程,请耐心等待培训结果,谢谢。'); } //报名成功,给出用户的序号 $trainUsersOrder = TrainUsers::getTrainUsersOrder($trainId); if (empty($trainUsersOrder)) { $trainUsersOrder = 1; } else { $trainUsersOrder = $trainUsersOrder + 1; } $transaction = Yii::$app->db->beginTransaction(); //如果用户未完成报名流程,更新状态为审核中 $isSignExist = TrainUsers::getUserIsExistTrainStatusSign($userId, $trainInfo['level_id']); if (!empty($isSignExist)) { TrainUsers::updateAll(['status' => TrainUsers::APPROVED], ['id' => $isSignExist['id']]); $trainName = Train::getOneTrainNameById($isSignExist['train_id']); $data = ['orders' => $isSignExist['orders'], 'trainName' => $trainName]; $transaction->commit(); return $this->render('/user/apply-success', ['data' => $data]); } else { //如果没有记录,新增一条 $data = ['train_id' => $trainId, 'user_id' => $userId, 'status' => TrainUsers::APPROVED, 'practice_score' => 0, 'theory_score' => 0, 'rule_score' => 0, 'level_id' => $trainInfo['level_id'], 'orders' => $trainUsersOrder]; $model = new TrainUsers(); $model->setAttributes($data); if ($model->save()) { $trainName = Train::getOneTrainNameById($model->train_id); $data = ['orders' => $model->orders, 'trainName' => $trainName]; $transaction->commit(); return $this->render('/user/apply-success', ['data' => $data]); } else { throw new ServerErrorHttpException('系统错误,原因:' . json_encode($model->errors, JSON_UNESCAPED_UNICODE)); } } } }