title; $subtitle = $request->subtitle; $status = $request->status ?? 0; $pic = $request->pic; $intro = $request->intro; $answer = $request->answer; $question = $request->question; $merchant_id = $request->account_id; $is_recommend = $request->is_recommend; $QATest = new QATest(); $QATest->title = $title; $QATest->subtitle = $subtitle; $QATest->status = $status; $QATest->pic = $pic; $QATest->intro = $intro; $QATest->merchant_id = $merchant_id; $QATest->is_recommend = $is_recommend ?? 0; $QATest->question = json_encode($question); $QATest->save(); MakeQrcode::dispatch('test', $QATest->id, $QATest->merchant_id)->onQueue('love'); foreach ($answer as $key => $value) { $answers = new QAAnswer(); $answers->q_a_test_id = $QATest->id; $answers->title = $value['title']; $answers->min_score = $value['min_score']; $answers->max_score = $value['max_score']; $answers->content = $value['content']; $answers->save(); } if (Cache::has('drafts_test_merchant_id_' . $request->account_id)) Cache::forget('drafts_test_merchant_id_' . $request->account_id); return $this->success('ok', ['id' => $QATest->id]); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 更新问答测试 * @param Request $request * @return JsonResponse|string */ public function UpdateQA_test(Request $request) { try { $id = $request->id; $title = $request->title; $subtitle = $request->subtitle; $status = $request->status ?? 0; $pic = $request->pic; $intro = $request->intro; $type = $request->type ?? 'default'; $way = $request->way; $value = $request->value; $answer = $request->answer ?? []; $question = $request->question; // return $this->success('ok',$request->all()); $QATest = QATest::where('id', $id)->where('merchant_id', $request->account_id)->first(); if (!$QATest) return $this->failure('数据不存在或已删除'); $QATest->title = $title ?? $QATest->title; $QATest->subtitle = $subtitle ?? $QATest->subtitle; $QATest->intro = $intro ?? $QATest->intro; if ($request->has('status')) { $QATest->status = $request->status; } if ($request->has('is_top')) { $QATest->is_top = $request->is_top; $QATest->top_time = $request->is_top ? date('Y-m-d H:i:s') : null; } $QATest->pic = $pic ?? $QATest->pic; $QATest->type = $type ?? $QATest->type; $QATest->way = $way ?? $QATest->way; $QATest->value = $value ?? $QATest->value; $QATest->question = $question ? json_encode($question) : $QATest->question; $QATest->save(); $ids = []; if (!empty($answer)) { foreach ($answer as $key => $value) { if (isset($value['id'])) { $answers = QAAnswer::where('id', $value['id'])->first(); } else { $answers = new QAAnswer(); $answers->q_a_test_id = $QATest->id; } $answers->title = $value['title'] ?? $answers->title; $answers->min_score = $value['min_score'] ?? $answers->min_score; $answers->max_score = $value['max_score'] ?? $answers->max_score; $answers->content = $value['content'] ?? $answers->content; $answers->save(); array_push($ids, $answers->id); } QAAnswer::where('q_a_test_id', $QATest->id)->wherenotin('id', $ids)->delete(); } return $this->success('ok'); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 删除问答测试列表 * @param Request $request * @return JsonResponse|string */ public function DelQA_test(Request $request) { try { $merchant_id = $request->account_id; $id = $request->id; $QATest = QATest::where('id', $id)->where('merchant_id', $merchant_id)->first(); if (!$QATest) return $this->failure('数据不存在'); $QATest->delete(); QAAnswer::where('q_a_test_id', $id)->delete(); return $this->success('操作成功'); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 获取问答测试列表 * @param Request $request * @return JsonResponse|string */ public function QA_testList(Request $request) { try { $keyword = $request->keyword; $merchant_id = $request->account_id; $status = $request->status ?? 2; $result = QATest::with(['qrcode'=>function($sql) { $sql->where('type', 'test'); }])->where('merchant_id', $merchant_id); if ($status != 2) { $result = $result->where('status', $status); } if ($keyword) { $keyword = trim($keyword); $result = $result->where('title', 'like', '%' . $keyword . '%'); } $result = $result->orderBy('is_top', 'desc') ->orderBy('top_time', 'desc') ->orderBy('id', 'desc') ->paginate(); foreach ($result as $item) { $pv = Redis::zscore('testpv', $item->id); $item->pv = $pv ?: 0; } return $this->success('ok', $result); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 获取问答测试详情 * @param Request $request * @return JsonResponse|string */ public function QA_testDetail(Request $request) { try { $merchant_id = $request->account_id; $id = $request->id; $QATest = QATest::where('id', $id)->where('merchant_id', $merchant_id)->first(); if (!$QATest) return $this->failure('数据不存在或已删除'); $QATest->answer; $QATest->question = json_decode($QATest->question, true); return $this->success('ok', $QATest); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 问答测试成员列表 * @param Request $request * @return JsonResponse|string */ public function QA_testUser(Request $request) { try { $merchant_id = $request->account_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); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 移动端测试详情 * @param Request $request * @param $test_id * @return JsonResponse|string */ public function phoneTestDetail(Request $request, $test_id) { try { $QATest = QATest::withTrashed()->where('id', $test_id)->first(); $serve_tab = $request->serve_tab; // 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/' . $test_id); $url = env('APP_URL') . '/api/official/live/wechat/FamilyAuth?merchant_id=' . $request->merchant_id . '&serve_tab=' . $serve_tab . '&url=' . $jump_url; $qr_code = Redis::get('TestDetail_S' . $test_id); if (!$qr_code) { $qr_code = $this->getPreviewQrcode($url); Redis::setex('TestDetail_S' . $test_id, 60 * 60 * 24 * 30, $qr_code); $qr_code = Redis::get('TestDetail_S' . $test_id); } $QATest->share_qr_code = $qr_code; $avatar = [];//参与测试用户头像 //参与测试人数 $QATest->consume_user_count = QATestRecord::where('q_a_test_id', $test_id)->count();/*->groupBy('merchant_user_id')->get()*/ //访问人数 $QATest->pv = Redis::zscore('testDetail', $test_id) ?: 0; $rocords = QATestRecord::where('q_a_test_id', $test_id)->groupBy('merchant_user_id')->limit(3)->get(); foreach ($rocords as $key => $record) { $avatar[$key] = $record->user ? $record->user->pic : User::DefaultAvatar; if (empty($avatar[$key])) $avatar[$key] = User::DefaultAvatar; unset($record->user); } $QATest->avatar = $avatar; //下架或删除状态 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; return $this->success('ok', $QATest); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 移动端测试用户 * @param Request $request * @param $test_id * @return JsonResponse|string */ public function phoneTestUsers(Request $request, $test_id) { try { $records = QATestRecord::where('q_a_test_id', $test_id)->select('id', 'merchant_user_id', 'score', 'created_at')->orderBy('id', 'desc')->paginate(); foreach ($records as $key => $record) { $goods = QATest::where('id', $test_id)->value('title'); $record->text = $record->created_at . ' 测试了《' . $goods . '》'; $record->avatar = $record->user ? $record->user->pic : User::DefaultAvatar; if (empty($record->avatar)) $record->avatar = User::DefaultAvatar; $record->name = $record->user ? $record->user->nickname : '匿名用户'; unset($record->user); } return $this->success('ok', $records); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } }