catId; $page = $request->page ?? 1; $perPage = $request->perPage ?? 15; $merchant_id = $request->merchant_id; // $test_list_id = MerchantEvaluate::where('merchant_id', $merchant_id) // ->where('status', 1) // ->when($test_type, function ($query) use ($test_type) { // $query->where('test_item_type', $test_type); // }) // ->leftJoin('evaluate_lists', 'merchant_evaluates.test_item_id', '=', 'evaluate_lists.test_item_id') // ->orderBy('is_top', 'desc')->orderBy('top_time', 'desc')->orderBy('id', 'desc') // ->select('evaluate_lists.*') // ->paginate($perPage, ['*'], 'page', $page); $orders = \DB::table('tourist_orders')->where('type', 'evaluate')->where('pay_status', '>', 0) ->groupBy('type_id') ->selectRaw('type_id, count(*) as pay_orders_count'); $evaluates = DB::table('merchant_evaluates as me') ->leftJoin('evaluate_lists as el', 'me.test_item_id', '=', 'el.test_item_id') ->leftJoinSub($orders, 'ufutx_o', function($join) { $join->on('me.id', '=', 'o.type_id'); })->where('me.merchant_id', $merchant_id) ->where('me.status',1) ->selectRaw('ufutx_o.*, ufutx_el.*, ufutx_me.id as evaluate_id') ->orderBy('me.is_top', 'desc') ->orderBy('me.top_time', 'desc') ->orderBy('me.id', 'desc') ->paginate(); foreach ($evaluates as $evaluate) { $evaluate->evaNum = $evaluate->pay_orders_count ? : 0; } return $this->success('ok', $evaluates); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 服务关键字搜索 * @param Request $request */ public function searchEvaluate(Request $request) { try { $keyword = $request->keyword; $test_item_type = $request->test_item_type; $merchant_id = $request->merchant_id; $test_item_ids = MerchantEvaluate::where('merchant_id', $merchant_id) ->when($test_item_type, function ($query) use ($test_item_type) { $query->where('test_item_type', $test_item_type); }) ->pluck('test_item_id'); $return_data = EvaluateList::whereIn('test_item_id', $test_item_ids) ->when($keyword, function ($query) use ($keyword) { $query->where('desc', 'like', $keyword) ->orWhere('name', 'like', $keyword); }) ->get(); return $this->success('ok', $return_data); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 获取评测详情 * @param Request $request */ public function getTestDetail(Request $request) { try { $test_id = $request->itemId; $merchant_id = $request->merchant_id; $merchant_user_id = $request->merchant_user_id; $merchant_evaluate = MerchantEvaluate::where('merchant_id', $merchant_id) ->withTrashed() ->where('id', $test_id) ->first(); if (!$merchant_evaluate) { return $this->failure('商家没有这项评测服务'); } $list = EvaluateList::where('test_item_id',$merchant_evaluate->test_item_id) ->first(); if($list->type == 1){ $test_details = EvaluateService::testDetails($merchant_evaluate->test_item_id); $test_details['test_item_id'] = $test_details['itemId']; unset($test_details['itemId']); $test_details['report_pages'] = $test_details['reportPages']; unset($test_details['reportPages']); $test_details['question_count'] = $test_details['questionCount']; unset($test_details['questionCount']); $test_details['questions'] = json_encode($test_details['questions']); if ($merchant_evaluate->deleted_at) { $test_details['deleted_at'] = $merchant_evaluate->deleted_at; } //EvaluateDetail::where('test_item_id', $merchant_evaluate->test_item_id)->update($test_details); $test_details['price'] = $test_details['price'] / 100; }else{ $test_details = EvaluateDetail::where('test_item_id',$merchant_evaluate->test_item_id) ->first(); } if ($test_details) { $test_details['visitNum'] = \DB::table('tourist_orders')->where('type', 'evaluate') ->where('type_id', $merchant_evaluate->id)->where('pay_status', '>', 0) ->count(); } else { return $this->failure('商品不存在或已下架'); } Redis::zincrby('evaluate', 1, $merchant_evaluate->test_item_id); $merchant_user = MerchantUser::where('id', $request->merchant_user_id)->first(); if($merchant_user){ $merchant_user->preview($merchant_evaluate); } //if(config('app.env') == 'production'){ // $merchant_user->addlog($test_item); //} $test_details['questions'] = json_decode($test_details['questions'], true); //查询用户有没有参加过评测 $tourist = TouristOrder::where('type', 'evaluate') ->where('type_id', $test_id) ->where('merchant_id', $merchant_id) ->where('account_id', $merchant_user_id) ->whereIn('pay_status', [1, 4]) ->orderBy('id', 'desc') ->first(); if (!$tourist) { $test_details['trade_no'] = null; $test_details['evaluate_status'] = 1; } else { $user_evaluate = UserEvaluate::where('order_id', $tourist->trade_no) ->first(); if (!$user_evaluate) { $test_details['trade_no'] = $tourist->trade_no; $test_details['evaluate_status'] = 2; } else { $test_details['trade_no'] = $tourist->trade_no; $test_details['evaluate_status'] = 1; } } //优惠券 $coupons = Coupon::where('type', 'evaluate') ->where('type_id', $test_id) ->where('status', '1') ->where('m_id', $merchant_id) ->pluck('id'); $user_coupon_id = UserCoupon::where('m_user_id', $merchant_user_id) ->whereIn('coupons_id', $coupons) ->where('m_id', $merchant_id) ->where('status', 0) ->value('coupons_id'); if ($user_coupon_id) { $test_details['coupon_id'] = $user_coupon_id; } else { $test_details['coupon_id'] = null; } $merchant_user_id = $request->merchant_user_id; $merchant_user = MerchantUser::where('id', $merchant_user_id)->first(); $linkmen['mobile'] = ''; $linkmen['name'] = ''; if ($merchant_user) { $test_details['share_nickname'] = $merchant_user->nickname ?? '匿名用户'; $test_details['share_avatar'] = $merchant_user->pic ?? User::DefaultAvatar; $linkmen['mobile'] = $merchant_user->mobile; $linkmen['name'] = $merchant_user->nickname; } $wechatUser = session('wechat.oauth_user.new'); if ($wechatUser) { $openid = $wechatUser->getId(); } else { $openid = MerchantUser::where('id', $request->merchant_user_id)->value('openid'); } $jump_url = urlencode(env('APP_URL') . '/pu/#/evaluateDetails/' . $merchant_evaluate['id']); $url = env('APP_URL') . '/api/official/live/wechat/FamilyAuth?merchant_id=' . $merchant_id . '&from_openid=' . $openid . '&url=' . $jump_url.'&evaluate_type='.$list->type; $qr_code_url = $this->getPreviewQrcode($url); $test_details['jump_url'] = $url; $test_details['url'] = $qr_code_url; $test_details['linkmen'] = $linkmen; $test_details['evaluate_id'] = $merchant_evaluate->id; if($request->from_openid && $request->from_openid != 'null'){ $user_service = new UserService(); $user_service->generateClientComment(0,$openid,$request->from_openid,'测评',$test_details['test_item_id'],$test_details['title']); } /** $merchant = MerchantAccount::find($merchant_evaluate->merchant_id); $test_details->has_group = $merchant->hasGroup($test_details) ? 1 : 0; $test_details->group = $merchant->groupInformation($test_details); * */ if ($request->from_openid && $request->from_openid != $merchant_user->openid) { MEarningShare::create(["user_id"=>$merchant_user->id, "type"=>MerchantEvaluate::class, 'type_id'=>$merchant_evaluate->id, 'from_openid'=>$request->from_openid]); } return $this->success('ok', $test_details); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 一点零 ,评测下单 * * * @param Request $request * @return JsonResponse|string */ public function postTestCreate(Request $request) { try { $merchant_user_id = $request->merchant_user_id; $MerchantUser = MerchantUsers::select('openid', 'mobile', 'nickname')->where('id', $merchant_user_id) ->first(); $test_item_id = $request->itemId; $merchant_id = $request->merchant_id; $wechatUser = session('wechat.oauth_user.new'); if ($wechatUser) { $open_id = $wechatUser->getId(); } else { $open_id = $MerchantUser->openid; } $coupon_id = $request->coupon_id; $mobile = $request->mobile; $name = $request->name; if (!$mobile && !$name) { $mobile = $MerchantUser->mobile??''; $name = $MerchantUser->nickname; } if (!$merchant_id || !$test_item_id) { return $this->failure('参数不全'); } $trade_no = $this->getTradeNO(); $merchant_evaluates = MerchantEvaluate::where('merchant_id', $merchant_id) ->where('test_item_id', $test_item_id) ->first(); if (!$merchant_evaluates) { return $this->failure('商品不存在'); } if($merchant_evaluates->type ==1){ //查询一点灵价格 $result = EvaluateService::testDetails($test_item_id); if (!$result) { return $this->failure('商品已下架'); } }else{ $result = EvaluateDetail::where('test_item_id', $test_item_id) ->first(); $result->price = $result->price * 100; } /* if($merchant_evaluates->price < $result['price']){ return $this->failure('销售价格异常,请联系客家'); } */ //获取利润分成比例 //检查优惠券 if ($coupon_id) { $user_coupon = UserCoupon::where('coupons_id', $coupon_id) ->where('m_user_id', $merchant_user_id) ->where('m_id', $merchant_id) ->where('status', 0) ->first(); if (!$user_coupon) { return $this->failure('优惠券不存在'); } $coupon = Coupon::where('id', $user_coupon->coupons_id) ->where('type', 'evaluate') ->where('type_id', $merchant_evaluates->id) ->where('m_id', $merchant_id) ->where('status', 1) ->first(); if ($coupon) { $user_coupon->status = 1; $user_coupon->save(); } else { return $this->failure('优惠券已用完或已下架'); } } //写入订单表 $touristOrder = new TouristOrder(); $touristOrder->open_id = $open_id; $touristOrder->price = $result['price'] / 100; $touristOrder->num = 1; $touristOrder->pay_type = $coupon_id ? 'free' : 'wechat'; $touristOrder->type = 'evaluate'; $touristOrder->type_id = $merchant_evaluates->id; $touristOrder->pay_status = 0; $touristOrder->goods = '评测_' . $result['title']; $touristOrder->trade_no = $trade_no; $touristOrder->withdrawal_radio = 100; //分成比例 $touristOrder->from_openid = $request->from_openid; $touristOrder->share_channel_id = $request->share_channel_id; $touristOrder->alliance_id = $request->alliance_id; $link_name = $request->linkmen['name']??($request->linkmen[0]['name']??null); $link_mobile = $request->linkmen['mobile']??($request->linkmen[0]['mobile']??''); $touristOrder->name = $request->name ?? ($MerchantUser->nickname ?? $link_name); $touristOrder->mobile = $request->mobile ?? ($MerchantUser->mobile ?? $link_mobile); $touristOrder->account_id = $merchant_user_id; $touristOrder->merchant_id = $merchant_id; $touristOrder->channel = $coupon_id ? 4 : 0; $touristOrder->desc = $result['subtitle']; $touristOrder->area_code = null; $touristOrder->linkmen = json_encode($request->linkmen); $touristOrder->save(); $list = EvaluateList::where('test_item_id',$test_item_id) ->first(); if($list->type ==1) { //调用一点灵评测下单接口下单 $evaluate = EvaluateService::testCreate($test_item_id, $result['price'], $trade_no); if (!$evaluate) { return $this->failure('操作失败', ['message' => '第三方无返回']); } } if ($result['price'] <= 0.00 || !empty($coupon_id)) { $touristOrder->pay_status = 1; $touristOrder->save(); DB::commit(); if($list->type ==1) { EvaluateService::testUpdate($trade_no); } $touristOrder->pay_config = null; $touristOrder->wx_pay = []; if( $touristOrder->merchant_id == 491 ){ //给客服脱单姐 管理员 $openids = [ "oPC_2vn6Q3M5jQpw9xAS7NNCMfjs", "oPC_2vudkf3stdiNgjA-e2n6t9_M","oPC_2vtrwOLgWHLwVEFTFsJ7N7fw","oPC_2vt7nGwKk_OFzJL70SlVuTiU","oPC_2vg_Eur-Wa_Vwnx9JiyRVn9Q " ]; foreach ($openids as $openid) { \CommonUtilsService::sendBuySuccessNoticeToBusiness($touristOrder, $openid,'merchant',$touristOrder->price, $touristOrder->mobile, $touristOrder->name); } } return $this->success('ok', $touristOrder); } else { $callback = config('app.url') . '/api/app/callback/Community/' . $trade_no; $attributes = array( 'trade_type' => 'JSAPI', // JSAPI,NATIVE,APP... 'body' => $result['title'], 'detail' => $result['subtitle'], 'out_trade_no' => $trade_no, 'total_fee' => $result['price'], 'notify_url' => $callback, // 支付结果通知网址,如果不设置则会使用配置里的默认地址 'openid' => $open_id, ); //$sub_mch_id = WechatSubMerchant::where('merchant_id',$merchant_id) // ->value('sub_mch_id'); //if($sub_mch_id){ // $result = \WechatService::officialServicePay($attributes,$sub_mch_id); //}else{ $result = \WechatService::officialPay($attributes); //} return $this->success('ok', $result); } }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 更新评测状态 * @param Request $request * @return JsonResponse|string */ public function updateTestPayStatus(Request $request) { try { $orderId = $request->order_id; $result = EvaluateService::testUpdate($orderId); return $this->success('ok', $result); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 一点零 ,提交评测题答案 * * * @param Request $request * @return JsonResponse|string */ public function postTestCommit(Request $request) { try { $orderId = $request->order_id; $merchant_id = $request->merchant_id; $answer = json_decode($request->answer, true); $test_item_id = $request->test_item_id; $merchant_user_id = $request->merchant_user_id; if (!$orderId || !$answer || !$merchant_id || !$test_item_id || !$merchant_user_id) { return $this->failure('参数不全'); } //写用户评测结果表 $tourist_order = TouristOrder::where('trade_no', $orderId) ->where('account_id', $merchant_user_id) ->where('merchant_id', $merchant_id) ->where('type', 'evaluate') ->whereIn('pay_status', [1, 4]) ->first(); if ($tourist_order) { if ($tourist_order->pay_status == 0) { return $this->failure('订单未支付'); } $userEvaluate = UserEvaluate::where('order_id', $orderId) ->first(); $question = EvaluateDetail::where('test_item_id', $tourist_order->type_id) ->value('questions'); if (!$userEvaluate) { $user_evaluate = new UserEvaluate(); $user_evaluate->order_id = $orderId; $user_evaluate->questions = $question; $user_evaluate->price = $tourist_order->price; $user_evaluate->answer = json_encode($answer); $user_evaluate->save(); $result = EvaluateService::testCommit($orderId, $test_item_id, $answer); if (empty($result['data'])) { return $this->failure('数据异常', $result); } $temp = json_decode($result['data'], true); $data['resultUrl'] = $temp['resultUrl']; $user_evaluate->evaluate_report = json_encode($data); $user_evaluate->save(); if ($result) { return $this->success('ok', $result['data']); } } else { return $this->success('ok', $userEvaluate['evaluate_report']); } } else { return $this->failure('订单不存在'); } }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 一点零 ,获取测评报告 * * * @param Request $request * @return JsonResponse|string */ public function getTestResult(Request $request) { try { $orderId = $request->order_id; $result = EvaluateService::testResult($orderId); if ($result) { $order = TouristOrder::where('trade_no', $orderId) ->first(); if (!$order) { return $this->failure('订单不存在'); } $user_evaluate = UserEvaluate::where('order_id', $orderId) ->first(); if ($user_evaluate) { if ($user_evaluate->report) { return $this->success('ok', ['resultUrl' => $user_evaluate->report]); } else { $user_evaluate->report = $result; $user_evaluate->save(); if (!json_decode($user_evaluate->evaluate_report)) { $user_evaluate->evaluate_report = json_encode(['resultUrl' => $result]); $user_evaluate->save(); } return $this->success('ok', ['resultUrl' => $user_evaluate->report]); } } else { //$report = EvaluateService::getYdlHtmlReport($result); //$headers['user-agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.83 Safari/537.36'; //$headers['accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'; //$report = $this->curl($result.'?cps_channel_p=B.324.484.1833.18092881','GET',$headers); return $this->success('ok', ['resultUrl' => $result]); } } else { return $this->failure('接口未返回数据'); } }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 查询订单评测详情 * @param Request $request */ public function getTestOrderDetail(Request $request) { try { $orderId = $request->order_id; $merchant_user_id = $request->merchant_user_id; $merchant_id = $request->merchant_id; if (!$orderId || !$merchant_user_id || !$merchant_id) { return $this->failure('参数不全'); } $touristOrder = TouristOrder::where('account_id', $merchant_user_id) ->where('merchant_id', $merchant_id) ->where('type', 'evaluate') ->where('trade_no', $orderId) ->first(); if (!$touristOrder) { return $this->failure('订单号不存在'); } $user_evaluate = UserEvaluate::where('order_id', $orderId) ->first(); if ($user_evaluate) { $report = json_decode($user_evaluate['evaluate_report'], true); if (!$report) { $result = EvaluateService::testResult($touristOrder->trade_no); $user_evaluate->evaluate_report = json_encode(['resultUrl' => $result]); $user_evaluate->save(); } $report = json_decode($user_evaluate->evaluate_report,true); if(!empty($report['analysis'])){ if(!is_array($report['analysis'])){ $report['analysis'] = [$report['analysis']]; } } $user_evaluate['evaluate_report'] = $report; $user_evaluate['questions'] = json_decode($user_evaluate['questions']); $user_evaluate['answer'] = json_decode($user_evaluate['answer']); $title = MerchantEvaluate::where('id', $touristOrder->type_id)->value('title'); $user_evaluate['title'] = $title; } else { $user_evaluate['evaluate_report']['resultUrl'] = EvaluateService::testResult($touristOrder->trade_no); $user_evaluate['order_id'] = $orderId; } return $this->success('ok', $user_evaluate); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 获取历史查询记录 * @param Request $request * @return JsonResponse|string */ public function getTestHistory(Request $request) { try { $merchant_user_id = $request->merchant_user_id; $merchant_id = $request->merchant_id; $order = TouristOrder::with('user_evaluate:id,order_id', 'merchant_evaluate') ->whereHas('merchant_evaluate') ->where('account_id', $merchant_user_id) ->where('merchant_id', $merchant_id) ->where('type', 'evaluate') ->whereIn('pay_status', [1, 4]) ->select('pay_status', 'trade_no', 'created_at', 'type_id') ->orderBy('id', "desc") ->paginate(); foreach ($order as $key => $val) { $type = EvaluateList::where('test_item_id', $val['merchant_evaluate']['test_item_id']) ->value('type'); $val->evaluate_type = $type; if (!$val->user_evaluate) { //$result = EvaluateService::testResult($val->trade_no); //if(!$result){ $order[$key]['evaluate_status'] = 2; //未完成 //} } else { $order[$key]['evaluate_status'] = 1; //已完成评测 } $evaluate_detail = EvaluateDetail::where('test_item_id', $val['merchant_evaluate']['test_item_id']) ->select('title', 'subtitle', 'image', 'tabImage', 'price') ->first(); if ($evaluate_detail && $order[$key]) { $evaluate_detail = $evaluate_detail->toArray(); $order[$key] = $order[$key]->toArray(); $order[$key] = array_merge($order[$key], $evaluate_detail); } } return $this->success('ok', $order); }catch (\Exception $e){ $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } public function getDetails(Request $request) { try { $test_id = $request->test_id; $merchant_id = $request->merchant_id; $merchant_user_id = $request->merchant_user_id; $merchant_evaluate = MerchantEvaluate::where('merchant_id', $merchant_id) ->withTrashed() ->where('id', $test_id) ->first(); if (!$merchant_evaluate) { return $this->failure('商家没有这项评测服务'); } $test_details = EvaluateDetail::where('test_item_id', $merchant_evaluate->test_item_id) ->first(); if (!$test_details) { return $this->failure('商品不存在或已下架'); } $merchant_user = MerchantUser::where('id', $request->merchant_user_id)->first(); //$merchant_user->preview($merchant_evaluate); //if(config('app.env') == 'production'){ // $merchant_user->addlog($test_item); //} $test_details['questions'] = json_decode($test_details['questions'], true); //查询用户有没有参加过评测 $tourist = TouristOrder::where('type', 'evaluate') ->where('type_id', $test_id) ->where('merchant_id', $merchant_id) ->where('account_id', $merchant_user_id) ->whereIn('pay_status', [1, 4]) ->orderBy('id', 'desc') ->first(); if (!$tourist) { $test_details['trade_no'] = null; $test_details['evaluate_status'] = 1; } else { $user_evaluate = UserEvaluate::where('order_id', $tourist->trade_no) ->first(); if (!$user_evaluate) { $test_details['trade_no'] = $tourist->trade_no; $test_details['evaluate_status'] = 2; } else { $test_details['trade_no'] = $tourist->trade_no; $test_details['evaluate_status'] = 1; } } //优惠券 $coupons = Coupon::where('type', 'evaluate') ->where('type_id', $test_id) ->where('status', '1') ->where('m_id', $merchant_id) ->pluck('id'); $user_coupon_id = UserCoupon::where('m_user_id', $merchant_user_id) ->whereIn('coupons_id', $coupons) ->where('m_id', $merchant_id) ->where('status', 0) ->value('coupons_id'); if ($user_coupon_id) { $test_details['coupon_id'] = $user_coupon_id; } else { $test_details['coupon_id'] = null; } $merchant_user_id = $request->merchant_user_id; $merchant_user = MerchantUser::where('id', $merchant_user_id)->first(); $linkmen['mobile'] = ''; $linkmen['name'] = ''; if ($merchant_user) { $test_details['share_nickname'] = $merchant_user->nickname ?? '匿名用户'; $test_details['share_avatar'] = $merchant_user->pic ?? null; $linkmen['mobile'] = $merchant_user->mobile; $linkmen['name'] = $merchant_user->nickname; } $wechatUser = session('wechat.oauth_user.new'); if ($wechatUser) { $openid = $wechatUser->getId(); } else { $openid = MerchantUser::where('id', $request->merchant_user_id)->value('openid'); } $evaluate_type = EvaluateList::where('test_item_id',$merchant_evaluate->test_item_id)->value('type'); $jump_url = urlencode(env('APP_URL') . '/pu/#/evaluateDetails/' . $merchant_evaluate['id']).'?evaluate_type='.$evaluate_type; $url = env('APP_URL') . '/api/official/live/wechat/FamilyAuth?merchant_id=' . $merchant_id . '&evaluate_type=' . $evaluate_type. '&from_openid=' . $openid . '&url=' . $jump_url; $qr_code_url = $this->getPreviewQrcode($url); $test_details['jump_url'] = $url; $test_details['url'] = $qr_code_url; $test_details['linkmen'] = $linkmen; $test_details['visitNum'] = TouristOrder::where('type', 'evaluate') ->where('type_id', $test_id) ->whereIn('pay_status', [1, 4]) ->count(); return $this->success('ok', $test_details); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } public function testQuestions(Request $request, $test_id) { try { $merchant_id = $request->merchant_id; $merchant_user_id = $request->merchant_user_id; $merchant_evaluate = MerchantEvaluate::where('merchant_id', $merchant_id) ->withTrashed() ->where('id', $test_id) ->first(); if (!$merchant_evaluate) return $this->failure('商家没有这项评测服务'); $test_detail = EvaluateDetail::where('test_item_id', $merchant_evaluate->test_item_id) ->first(); if (!$test_detail) throw new \Exception("测试不存在"); $questions = json_decode($test_detail->questions, true); $test_item_id = $test_detail->test_item_id; if ($test_item_id == 10007) { //题目重组 $questions = $this->regroupQuestions($questions); } $trade_no = TouristOrder::where('type', 'evaluate') ->where('type_id', $test_id) ->where('merchant_id', $merchant_id) ->where('account_id', $merchant_user_id) ->whereIn('pay_status', [1, 4]) ->orderBy('id', 'desc') ->value('trade_no'); return $this->success('ok', compact('questions','test_item_id', 'trade_no')); }catch (\Exception $e) { $this->getError($e); $this->failure(); } } public function regroupQuestions($questions) { $arr = []; for ($index = 1; $index <= count($questions); $index++) { unset($questions[$index-1]['answer']); // dd((int)ceil(($index / 4)) - 1); $questions[$index-1]['row_id'] = (int)ceil(($index / 4)); $arr [(int)ceil(($index / 4)) - 1][] = $questions[$index-1]; } return $arr; } public function commitDISC(Request $request) { try { $trade_no = $request->input('trade_no'); $merchant_user_id = $request->merchant_user_id; $merchant_id = $request->merchant_id; $test_item_id = $request->input('test_item_id'); $answers = $request->input("answers"); $test_id = $request->input('test_id'); if (empty($test_item_id) || $test_item_id != 10007) throw new \Exception("缺少test_item_id"); //写用户评测结果表 $tourist_order = TouristOrder::where('trade_no', $trade_no) ->where('account_id', $merchant_user_id) ->where('merchant_id', $merchant_id) ->where('type', 'evaluate') ->where('type_id', $test_id) ->whereIn('pay_status', [1, 4]) ->first(); if ($tourist_order) { $userEvaluate = UserEvaluate::where('order_id', $trade_no) ->first(); if (!$userEvaluate) { $merchant_eval = MerchantEvaluate::where("id", $tourist_order->type_id)->first(); $question = EvaluateDetail::where('test_item_id', $merchant_eval->test_item_id) ->value('questions'); $userEvaluate = new UserEvaluate(); $userEvaluate->order_id = $trade_no; $userEvaluate->questions = $question; $userEvaluate->price = $tourist_order->price; $userEvaluate->answer = $answers; $userEvaluate->evaluate_report = EvaluateService::commitDISC($answers); $userEvaluate->save(); } return $this->success('ok', $userEvaluate['evaluate_report']); } else { return $this->failure('订单不存在'); } }catch (\Exception $e) { $this->getError($e); return $this->failure(); } } /** * 获取用户评测详情 * @param Request $request * @return JsonResponse|string */ public function getUserEvaluate(Request $request){ $order_id = $request->order_id; if(config('app.debug')){ if(!$order_id){ return $this->failure('订单号必传'); } } $order = TouristOrder::where('trade_no',$order_id)->first(); $details = UserEvaluate::where('order_id',$order_id)->select('id','order_id','answer','report') ->first(); if(!$details){ return $this->failure('评测不存在'); } $details->answer = json_decode($details->answer); $details->evaluate_report = json_decode($details->evaluate_report); foreach ($details->answer as $key => $val){ $user_question = EvaluateQuestion::where('id',$val->questionId)->value('question_name'); $user_answer = EvaluateAnswer::where('id',$val->answerId)->value('content'); $val->user_question = $user_question; $val->user_answer = $user_answer; } $url = env('APP_URL') . '/pu/#/reviewResults/'.$order_id.'?merchant_id='.$order->merchant_id; $qr_code_url = $this->getPreviewQrcode($url); $details->jump_ur = $url; $details->url = $qr_code_url; return $this->success('ok',$details); } }