public function actionScoreCookbook() { $accountId = $this->getAccountId(); $mobile = $this->getParams('mobile', ''); if (strlen($mobile) == 0) { return ['code' => 1202, 'msg' => 'mobile is required.']; } $cookbookId = $this->getParams('cookbookId', ''); if (strlen($cookbookId) == 0) { return ['code' => 1202, 'msg' => 'cookbookId is required.']; } $score = $this->getParams('score', 0); if (strlen($score) == 0) { return ['code' => 1202, 'msg' => 'score is required.']; } $userCookbook = UserCookbook::find()->where(['mobile' => $mobile, 'cookbookId' => $cookbookId])->one(); $isScored = true; $oldScore = 0; if ($userCookbook == null) { $userCookbook = new UserCookbook(); $isScored = false; } else { $oldScore = $userCookbook->score; } $userCookbook->mobile = $mobile; $userCookbook->cookbookId = $cookbookId; $userCookbook->score = $score; $userCookbook->accountId = $accountId; $userCookbook->save(); //average score $cookbook = Cookbook::find()->where(['_id' => $cookbookId])->one(); if ($cookbook == null) { return ['code' => 1204, 'msg' => 'cookbook not found.']; } //score number $query = new Query(); $query->from('uhkklpUserCookbook')->where(['cookbookId' => $cookbookId]); $scorerNumber = $query->count(); $averageScore = 0.0; if (!isset($cookbook['averageScore'])) { $averageScore = $score; } else { if ($isScored) { $averageScore = ($score - $oldScore + $cookbook['averageScore'] * $scorerNumber) / $scorerNumber; } else { $averageScore = ($score + $cookbook['averageScore'] * ($scorerNumber - 1)) / $scorerNumber; } } $averageScore = round($averageScore, 1); $cookbook->averageScore = $averageScore; $cookbook->save(); $result['averageScore'] = $averageScore; $result['scorerNumber'] = $scorerNumber; Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return ['code' => 200, 'msg' => 'OK', 'result' => $result]; }