questionnaire_id; $result = Questionnaire::where('id',$questionnaire_id)->select('id','title','type','type_id','status', 'content','created_at','updated_at')->first(); if($result) $result->content = json_decode($result->content); if($result->status != 1) return $this->failure('该问卷已过期或已下架'); //判断用户是否参与活动 // $is_join = TouristOrder::where('type','community')->where('type_id',$result->type_id)->whereIn('pay_status',[1,4])->where('account_id',$request->merchant_user_id)->first(); // if(!$is_join) return $this->failure('未参与,无法填写'); $user_id = $request->merchant_user_id; $merchant_user = MerchantUser::select('nickname', 'mobile','openid','sex')->where('id', $user_id)->first(); $wechatUser = session('wechat.oauth_user.new'); if ($wechatUser) { $openid = $wechatUser->getId(); } else { $openid = $merchant_user->openid; } //判断用户性别 $answer = []; if($merchant_user->sex && $merchant_user->sex != 0){ $sex = $merchant_user->sex; }else{ $sex = $this->getUserSexByOpenid($openid,0); } foreach ($result->content as $key => $value) { if($value->choice != 3) continue;//3是投票匹配 if($sex == 1){ //女嘉宾 $female_members = TouristOrder::where('type','community')->where('type_id',$result->type_id) ->whereIn('pay_status',[1,4])->where('remark','like',"%女%")->select('name','open_id','remark','linkmen', 'mobile')->get() //->leftjoin('tencent_faceid_logs', 'tourist_orders.open_id','=', 'tencent_faceid_logs.openid') ->toArray(); $openid_list = []; $mobile_list = []; foreach ($female_members as $key => $member) { $linkmen = json_decode($member['linkmen'], 1); $mobile_list = $member['mobile']; $openid_list[] = $member['open_id']; } $name_data = TencentFaceidLog::whereIn('openid', $openid_list)->select('openid', 'name')->get()->toArray(); $namelist = []; foreach ($name_data as $name) { $namelist[$name['openid']] = $name['name']; } // $name_data2 = User::whereIn("mobile", $mobile_list)->where('is_real_approved', 1)->select('mobile', 'name')->get()->toArray(); // $namelist2 = []; // foreach($name_data2 as $name2) // { // $namelist2[$name2['mobile']] = $name2['name']; // } foreach ($female_members as $key => $member) { $linkmen = json_decode($member['linkmen'], 1); if (isset($namelist[$member['open_id']])) { $answer[] = $namelist[$member['open_id']]; }elseif(isset($namelist2[$member['mobile']])){ // $answer[] = $namelist2[$member['mobile']]; } } $value->answer = $answer; }elseif($sex == 2){ //男嘉宾 $male_members = TouristOrder::where('type','community')->where('type_id',$result->type_id) ->whereIn('pay_status',[1,4])->where('remark','like',"%男%")->select('name','open_id','remark','linkmen') ->get() ->toArray(); $openid_list = []; foreach ($male_members as $key => $member) { $openid_list[] = $member['open_id']; } $name_data = TencentFaceidLog::whereIn('openid', $openid_list)->select('openid', 'name')->get()->toArray(); $namelist = []; foreach ($name_data as $name) { $namelist[$name['openid']] = $name['name']; } foreach ($male_members as $key => $member) { $linkmen = json_decode($member['linkmen'], 1); if (isset($namelist[$member['open_id']])) { $answer[] = $namelist[$member['open_id']]; } } $value->answer = $answer; }else{ //获取所有参与用户及编号 $members = TouristOrder::where('type','community')->where('type_id',$result->type_id) ->whereIn('pay_status',[1,4])->select('name','remark') ->get() ->toArray(); foreach ($members as $key => $member) { $answer[] = $member['remark']; } $value->answer = ['非认证用户不能参与选择']; // $answer; 没有认证的用户,直接不给选项 } $answer = []; } return $this->success('ok',$result); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息,请稍后再试'); } } //提交问卷调查 public function submitQuestionnaire(Request $request){ try { $m_user_id = $request->merchant_user_id; $questionnaire_id = $request->questionnaire_id; $value = Answers::where('user_id',$m_user_id)->where('questionnaire_id',$questionnaire_id)->first(); if($value) { // if(!($questionnaire_id == 30 || $questionnaire_id == 35)){ // return $this->failure('你已填写过该问卷,不用重复提交'); // } } $questionnaire = Questionnaire::find($questionnaire_id); if($questionnaire_id == 30 || $questionnaire_id == 33 || $questionnaire_id == 35 || $questionnaire_id == 38){ $remark = MerchantUser::where('id',$m_user_id)->value('nickname'); }else{ //我是几号嘉宾 $order = TouristOrder::where('type','community')->where('type_id',$questionnaire->type_id) ->where('account_id',$m_user_id)->whereIn('pay_status',[1,4])->first(); if(!$order) { \Log::info('填写问卷用户id:'.$m_user_id.' 问卷id=>'.$questionnaire_id); // if($questionnaire->id != 31){ // return $this->failure('报名人员才可填写'); // } $remark = '无订单问卷'; }else{ $remark = $order->remark.'-'.$order->name; } } $data = $request->data; Answers::create([ 'user_id'=>$m_user_id, 'questionnaire_id'=>$questionnaire_id, 'content'=>json_encode($data), 'desc'=> $remark, ]); $user_id = $this->matchFulinkUser($m_user_id); $array = [ 'user_id'=>$user_id, 'm_user_id'=>$m_user_id, 'questionnaire_id'=>$questionnaire_id, ]; //选择了谁增加备注 if($user_id && ($questionnaire_id != 30 || $questionnaire_id != 33 || $questionnaire_id != 35)) BlindboxMatchComment::dispatch($array)->onQueue('love'); $url = ''; if($questionnaire_id == 33) { $url = 'https://love.ufutx.com/pu/#/activityDetails/1596?merchant_id=491&from_openid=&share_channel_id='; } return $this->success('ok',$url); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息,请稍后再试'); } } public function test(Request $request){ $m_user_id = $request->merchant_user_id; $user_id = $this->matchFulinkUser($m_user_id); $questionnaire_id = $request->questionnaire_id; //选了谁 $a = Answers::where('user_id',$m_user_id)->where('questionnaire_id',$questionnaire_id)->first(); $content = json_decode($a->content,true); $choose_user = []; foreach ($content as $key => $value) { if($value['choice'] != 3) continue; $answers = $value['answer']; foreach ($answers as $key => $answer) { $choose_user[] = explode('-',$answer)[0]; } } // dd($choose_user); //获取这个活动的嘉宾id $q = Questionnaire::find($questionnaire_id); $choose_user_name = []; foreach ($choose_user as $key => $remark) { $choose_user_name [] =TouristOrder::where('type','community')->where('type_id',$q->type_id) ->whereIn('pay_status',[1,3,4])->where('remark',$remark)->value('name'); } $client_comment = []; foreach ($choose_user_name as $key => $value) { $client_comment_sub = [ 'user_id'=>$user_id, 'maker_user_id'=>0, 'type'=>'active', 'pics'=>null, 'comment'=>'ta在'.$q->title.' 盲盒活动中选择了'.$value, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s'), ]; $client_comment[] = $client_comment_sub; } ClientComment::insert($client_comment); return $this->success('ok'); } /** * 第二个版本的调查问卷 */ /** * */ public function answerQuestion(Request $request, $q_id, $qq_id) { try { $m_user_id = $request->merchant_user_id; $questionnaire_id = $request->questionnaire_id; $value = Answers::where('user_id', $m_user_id)->where('questionnaire_id', $questionnaire_id)->first(); if ($value) { if (!($questionnaire_id == 30 || $questionnaire_id == 35)) { return $this->failure('你已填写过该问卷,不用重复提交'); } } $questionnaire = Questionnaire::find($questionnaire_id); if ($questionnaire_id == 30 || $questionnaire_id == 33 || $questionnaire_id == 35 || $questionnaire_id == 38) { $remark = MerchantUser::where('id', $m_user_id)->value('nickname'); } else { //我是几号嘉宾 $order = TouristOrder::where('type', 'community')->where('type_id', $questionnaire->type_id) ->where('account_id', $m_user_id)->whereIn('pay_status', [1, 4])->first(); if (!$order) { \Log::info('填写问卷用户id:' . $m_user_id . ' 问卷id=>' . $questionnaire_id); // if($questionnaire->id != 31){ // return $this->failure('报名人员才可填写'); // } $remark = '无订单问卷'; } else { $remark = $order->remark . '-' . $order->name; } } $data = $request->data; Answers::create([ 'user_id' => $m_user_id, 'questionnaire_id' => $questionnaire_id, 'content' => json_encode($data), 'desc' => $remark, ]); $user_id = $this->matchFulinkUser($m_user_id); $array = [ 'user_id' => $user_id, 'm_user_id' => $m_user_id, 'questionnaire_id' => $questionnaire_id, ]; //选择了谁增加备注 if ($user_id && ($questionnaire_id != 30 || $questionnaire_id != 33 || $questionnaire_id != 35)) BlindboxMatchComment::dispatch($array)->onQueue('love'); $url = ''; if ($questionnaire_id == 33) { $url = 'https://love.ufutx.com/pu/#/activityDetails/1596?merchant_id=491&from_openid=&share_channel_id='; } return $this->success('ok', $url); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息,请稍后再试'); } } public function survey(Request $request, $id) { $type = $request->input('type'); $type_id = $request->input('type_id'); $survey = Survey::find($id); if(!$survey){ return $this->success('ok'); } $survey->detail_title = SurveyService::where('survey_id',$id) ->where('type',$type) ->where('type_id',$type_id) ->value('title'); return $this->success('ok',$survey); } public function storeSurveyUser(Request $request, $id) { $type = $request->input('type'); $type_id = $request->input('type_id'); $content = $request->input('content'); if (empty($content) || count($content) == 0) throw new \Exception("缺少参数content"); $user_id = $request->merchant_user_id; $wechatUser = session('wechat.oauth_user.new'); $openid = $wechatUser?$wechatUser->getId():MerchantUser::where('id', $user_id)->value('openid'); $survey = Survey::find($id); $survey_service_id = null; DB::beginTransaction(); $type = $type == 'undefined'?null:$type; $type_id = $type_id == 'undefined'?null:$type_id; if ($type && $type_id) { $survey_service = SurveyService::where('survey_id',$id)->where('type',$type)->where('type_id',$type_id)->first(); if (!$survey_service) throw new \Exception("服务未绑定问卷调查"); $survey_service_id = $survey_service->id; $survey_service->increment('num'); } $survey_user = SurveyUser::create([ 'openid'=>$openid, 'user_id'=>$user_id, 'survey_id'=>$id, 'survey_service_id'=>$survey_service_id, 'type'=>$type, 'type_id'=>$type_id, 'content'=>json_encode($content) ]); $order = $this->makeSurveyOrder($survey, $openid); SurveyUser::where('id', $survey_user->id)->update(['order_id'=>$order->id]); DB::commit(); return $this->success('ok', $order); } public function makeSurveyOrder($survey, $openid) { $pay_status = $survey->price > 0?0:1; $account_id = MerchantUser::where('openid', $openid)->value('id'); $trade_no = CommonUtilsService::getTradeNo(); //生成订单 $order = TouristOrder::create([ 'open_id'=>$openid, 'price'=>$survey->price, 'num'=>1, 'pay_type'=>'wechat', 'type'=>'survey', 'type_id'=>$survey->id, 'pay_status'=>$pay_status, 'trade_no'=>$trade_no, 'desc'=>$survey->title, 'merchant_id'=>$survey->m_id, 'account_id'=>$account_id ]); $wx_pay = []; $callback = config('app.url') . '/api/s/h5/callback/survey/' . $trade_no; if ($survey->price > 0) { $attributes = array( 'trade_type' => 'JSAPI', // JSAPI,NATIVE,APP... 'body' => $survey->title, 'detail' => $survey->title, 'out_trade_no' => $trade_no, 'total_fee' => round($survey->price * 100), 'notify_url' => $callback, // 支付结果通知网址,如果不设置则会使用配置里的默认地址 'openid' => $openid, 'debug' =>config('wechat.payment.debug'), ); $wx_pay = WechatService::officialPay($attributes); } $order->wx_pay = $wx_pay; return $order; } /** * 问卷调查订单回调 * @param $trade_no * @return false|void */ public function surveyCallback($trade_no) { $order = TouristOrder::where('trade_no', $trade_no)->first(); if (empty($order)) return ; if ($order->pay_status != 0) return ; $result = WechatService::serverH5OrderPaid($trade_no); if ($result) { TouristOrder::where('id', $order->id)->update(['pay_status'=>1]); return ; } return ; } }