merchant_id; $merchant_user_id = $request->merchant_user_id ?? 0; $result = QATest::select('id', 'title', 'subtitle', 'pic', 'status', 'intro', 'created_at')->where('merchant_id', $merchant_id)->where('status', 1)->orderBy('is_top', 'desc')->orderBy('top_time', 'desc')->orderBy('id', 'desc')->paginate(); foreach ($result as $key => $value) { $value->user_num = QATestRecord::where('q_a_test_id', $value->id)->groupby('merchant_user_id')->get()->count(); $value->status = QATestRecord::where('merchant_user_id', $merchant_user_id)->where('q_a_test_id', $value->id)->exists() ? 1 : 0; } return $this->success('ok', $result); } /** * 获取问答测试详情 * */ public function QA_testDetail(Request $request) { $id = $request->id; $QATest = QATest::withTrashed()->where('id', $id)->first(); // if(!$QATest) return $this->failure('测试不存在或已下架。'); $QATest->answer; $QATest->question = json_decode($QATest->question, true); $QATest->question_num = count($QATest->question) ?? 0; $jump_url = urlencode(env('APP_URL') . '/pu/#/questionnaire/' . $id); $url = env('APP_URL') . '/api/official/live/wechat/FamilyAuth?merchant_id=' . $request->merchant_id . '&url=' . $jump_url; $qr_code = Redis::get('TestDetail_S' . $id); if (!$qr_code) { $qr_code = $this->getPreviewQrcode($url); Redis::setex('TestDetail_S' . $id, 60 * 60 * 24 * 30, $qr_code); $qr_code = Redis::get('TestDetail_S' . $id); } $QATest->share_qr_code = $qr_code; // 访问记录 $QATest->qr_code = $QATest->merchant->qr_code ?? null; unset($QATest->merchant); $user = MerchantUser::where('id', $request->merchant_user_id)->first(); if (config('app.env') == 'production') { $user->addlog($QATest); } //下架或删除状态 0下架 1正常上架 2已删除 $publish_state = 0; if ($QATest->deleted_at) { $publish_state = 2; } elseif ($QATest->status == 1) { $publish_state = 1; } else { $publish_state = 0; } $QATest->publish_state = $publish_state; $merchant_user_id = $request->merchant_user_id; $merchant_user = MerchantUser::where('id', $merchant_user_id)->first(); if ($merchant_user) { $QATest['share_nickname'] = $merchant_user->nickname ?? '匿名用户'; $QATest['share_avatar'] = $merchant_user->pic ?? User::DefaultAvatar; } return $this->success('ok', $QATest); } /** * 提交问答测试 * */ public function QA_test(Request $request) { $merchant_id = $request->merchant_id; $merchant_user_id = $request->merchant_user_id; $q_a_test_id = $request->q_a_test_id; $answer = $request->answer; $score = 0; foreach ($answer as $key => $value) { $score += $value['score']; } $QATest = QATest::where('id', $q_a_test_id)->where('merchant_id', $merchant_id)->first(); if ($QATest->type != 'default') { switch ($QATest->way) { case '+': $score = $score + $QATest->value; break; case '-': $score = $score - $QATest->value; break; case '*': $score = $score * $QATest->value; break; case '/': $score = $score / $QATest->value; break; default: $score = $score; break; } } $score = number_format($score, 2); $q_a_answer = QAAnswer::where('min_score', '<=', $score)->where('max_score', '>=', $score)->where('q_a_test_id', $q_a_test_id)->first(); if (!$q_a_answer) { $q_a_answer = QAAnswer::where('q_a_test_id', $q_a_test_id)->orderBY('max_score', 'desc')->first(); }; $obj = new QATestRecord(); $obj->merchant_user_id = $merchant_user_id; $obj->q_a_test_id = $q_a_test_id; $obj->q_a_answer_id = $q_a_answer->id; $obj->score = $score ?? 0; $obj->merchant_id = $merchant_id; $obj->answer = json_encode($answer); $obj->save(); $q_a_answer->score = $score; return $this->success('ok', $q_a_answer); } /** * 我的问答测试 * */ public function My_QA_test(Request $request) { $merchant_id = $request->merchant_id; $merchant_user_id = $request->merchant_user_id; $sql = QATestRecord::orderBy('id', 'DESC')->limit(1000); $result = QATestRecord::from(\DB::raw('(' . $sql->toSql() . ') as a'))->where('merchant_user_id', $merchant_user_id)->where('merchant_id', $merchant_id)->groupBy('q_a_test_id')->orderBy('id', 'desc')->paginate(); foreach ($result as $key => $value) { $value->answer = json_decode($value->answer, true); $value->pic = $value->test->pic ?? ''; $value->title = $value->test->title ?? '测试不存在或已删除'; $value->question_num = 0; if ($value->test) { $value->question_num = count(json_decode($value->test->question)) ?? 0; } unset($value->test); unset($value->answer); } return $this->success('ok', $result); } /** * 获取问答测试详情 * */ public function my_QA_test_Detail(Request $request, $id) { $merchant_user_id = $request->merchant_user_id; if ($request->type == 'user') { $Record = QATestRecord::where('id', $id)->first(); } else { $Record = QATestRecord::where('q_a_test_id', $id)->orderBy('id', 'desc')->first(); } $result = QAAnswer::select('title', 'content')->where('id', $Record->q_a_answer_id)->first(); if (!$result) { $result = QAAnswer::withTrashed()->where('id', $Record->q_a_answer_id)->select('title', 'content')->orderBy('id', 'desc')->first(); } $result->score = $Record->score; $result->pic = $Record->test ? $Record->test->pic : User::DefaultAvatar; $jump_url = urlencode(env('APP_URL') . '/pu/#/questionnaire/' . $id); $url = env('APP_URL') . '/api/official/live/wechat/FamilyAuth?merchant_id=' . $request->merchant_id . '&url=' . $jump_url; $qr_code = Redis::get('TestDetail_S' . $id); if (!$qr_code) { $qr_code = $this->getPreviewQrcode($url); Redis::setex('TestDetail_S' . $id, 60 * 60 * 24 * 30, $qr_code); $qr_code = Redis::get('TestDetail_S' . $id); } $result->share_qr_code = $qr_code; $result->pv = Redis::zincrby('testpv', 1, $id); return $this->success('ok', $result); } /** * 问答测试用户 **/ public function QA_testUser(Request $request) { $merchant_id = $request->merchant_id; $id = $request->id; $ids = QATestRecord::where('q_a_test_id', $id)->where('merchant_id', $merchant_id)->groupBy('merchant_user_id')->pluck('merchant_user_id'); $QATest = QATestRecord::select('id', 'merchant_user_id', 'q_a_test_id', 'score', 'q_a_answer_id', 'created_at') ->where('q_a_test_id', $id) ->where('merchant_id', $merchant_id) ->wherein('merchant_user_id', $ids) ->orderBy('id', 'desc') ->paginate(); foreach ($QATest as $key => $value) { $value->nickname = $value->user->nickname ?? '匿名用户'; $value->pic = $value->user->pic ?? User::DefaultAvatar; $value->title = $value->answer->title ?? '该测试不存在或已下架'; $value->content = $value->answer->content ?? null; unset($value->answer); unset($value->user); } return $this->success('ok', $QATest); } }