780 lines
30 KiB
PHP
780 lines
30 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Server\Admin;
|
||
|
||
use App\Http\Controllers\UploadController;
|
||
use App\Jobs\MakeSurveyQrcode;
|
||
use App\Models\Server\CommunityActivity;
|
||
use App\Models\Server\Survey;
|
||
use App\Models\Server\SurveyService as SurveyServiceModel;
|
||
use App\Facades\SurveyService;
|
||
use App\Models\Server\SurveyUser;
|
||
use Illuminate\Http\Request;
|
||
use App\Http\Controllers\Controller;
|
||
use App\Models\Answers;
|
||
use App\Models\Live\Anchor;
|
||
use App\Models\Questionnaire;
|
||
use App\Models\Server\MerchantMembers;
|
||
use App\Models\Server\MerchantUser;
|
||
use App\Models\Server\TouristOrder;
|
||
use App\Models\Server\QuestionaireQuestion;
|
||
use App\Models\Server\QuestionaireAnswer;
|
||
use App\Models\User;
|
||
use Illuminate\Support\Facades\DB;
|
||
use Illuminate\Support\Facades\Log;
|
||
use SimpleSoftwareIO\QrCode\Facades\QrCode;
|
||
|
||
class QuestionnaireController extends Controller
|
||
{
|
||
//问卷调查控制器
|
||
public function addQuestionaire(Request $request){
|
||
try {
|
||
//todo Questionnaire表增加merchant_id admin_id 字段
|
||
$naire = Questionnaire::where('type',$request->type)->where('type_id',$request->type_id)->first();
|
||
if($naire) return $this->failure('请勿重复创建');
|
||
$data = $request->data;
|
||
// choice 0 单选 1多选 2输入框 3 投票匹配
|
||
Questionnaire::create([
|
||
'm_id'=>$request->account_id,
|
||
'admin_id'=>$request->merchant_admin_id ?? 0,
|
||
'type'=>$request->type ?? 'activity',
|
||
'type_id'=>$request->type_id ?? 1,
|
||
'title'=>$request->title ?? '测试',
|
||
'status'=>1,
|
||
'content'=>json_encode($data),
|
||
]);
|
||
return $this->success('ok');
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息,请稍后再试');
|
||
}
|
||
}
|
||
|
||
// 调查问卷详情
|
||
public function questionaireDetail(Request $request){
|
||
try {
|
||
$type = $request->type;
|
||
$type_id = $request->type_id;
|
||
$result = Questionnaire::where('type',$type)->where('type_id',$type_id)->select('m_id','admin_id','id','title','content','created_at','updated_at')->first();
|
||
if(!$result) return $this->success('ok',[]);
|
||
if($result) $result->content = json_decode($result->content);
|
||
if($result->admin_id){//创建人头像 昵称
|
||
$user = MerchantMembers::where(['mch_id'=>$result->m_id,'admin_id'=>$result->admin_id])->select('name','avatar')->first();
|
||
}else{
|
||
$user = Anchor::where('m_id',$result->m_id)->select('name','pic as avatar')->first();
|
||
}
|
||
$result->user = $user;
|
||
//todo 生成跳转二维码
|
||
$jump_url = urlencode(env('APP_URL') . '/pu/#/questionnaireV2/'.$result->id);
|
||
$share_url = env('APP_URL') . '/api/official/live/wechat/FamilyAuth?merchant_id='.$request->account_id.'&url=' . $jump_url;
|
||
$share_qrcode = $this->getPreviewQrcode($share_url);
|
||
$result->share_qrcode = $share_qrcode;
|
||
return $this->success('ok',$result);
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息,请稍后再试');
|
||
}
|
||
}
|
||
|
||
//修改问卷
|
||
public function updateQuestionnire(Request $request,$questionnaire_id){
|
||
$value = Questionnaire::find($questionnaire_id);
|
||
if(!$value) return $this->failure('要修改的问卷不存在');
|
||
$value->data = json_decode($request->data);
|
||
$value->save();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
//用户提交问卷列表
|
||
public function userAnswers(Request $request){
|
||
try {
|
||
$keyword = trim($request->input('keyword'));
|
||
$questionnaire_id = $request->questionnaire_id;
|
||
$result = Answers::with('mUser:id,nickname,pic,mobile')->whereHas('mUser')->where('questionnaire_id',$questionnaire_id)->select('id','user_id','questionnaire_id','content','created_at','desc');
|
||
if($keyword){
|
||
$result = $result->whereHas('mUser',function($sql) use($keyword){
|
||
$sql->where('nickname','like',"%$keyword%");
|
||
});
|
||
}
|
||
$result = $result->orderBy('id','desc')->paginate();
|
||
foreach ($result as $key => $value) {
|
||
$value->content = json_decode($value->content);
|
||
if($value->mUser->mobile) continue;
|
||
$value->mUser->mobile = TouristOrder::where('account_id',$value->mUser->id)->whereRaw('char_length(mobile)=11')->value('mobile');
|
||
}
|
||
return $this->success('ok',$result);
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息,请稍后再试');
|
||
}
|
||
}
|
||
|
||
//用户提交问卷列表
|
||
public function userAnswersV2(Request $request){
|
||
try {
|
||
$questionnaire_id = $request->questionnaire_id;
|
||
$title = [];
|
||
$results = Answers::with('mUser:id,nickname,pic,mobile')->whereHas('mUser')->where('questionnaire_id',$questionnaire_id)->select('id','user_id','questionnaire_id','content','created_at','desc');
|
||
$results = $results->orderBy('id','desc')->get();
|
||
foreach ($results as $key => $result) {
|
||
$result->content = json_decode($result->content);
|
||
foreach ($result->content as $value) {
|
||
if($key == 0) $title[] = $value->title;
|
||
$answers = implode(' ',$value->answer);
|
||
$value->answer = $answers;
|
||
}
|
||
if($result->mUser->mobile) continue;
|
||
$result->mUser->mobile = TouristOrder::where('account_id',$result->mUser->id)->whereRaw('char_length(mobile)=11')->value('mobile');
|
||
}
|
||
return $this->success('ok',compact('results','title'));
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息,请稍后再试');
|
||
}
|
||
}
|
||
|
||
//问卷调查列表
|
||
public function questionaireList(Request $request){
|
||
try {
|
||
$result = Questionnaire::where('m_id',$request->account_id)->select('id','type','type_id','title','content')->orderBy('id','desc')->paginate();
|
||
foreach ($result as $key => $value) {
|
||
$value->content = json_decode($value->content);
|
||
}
|
||
return $this->success('ok',$result);
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息,请稍后再试');
|
||
}
|
||
}
|
||
|
||
//嘉宾编号
|
||
public function memberSort(Request $request){
|
||
$questionnaire_id = $request->questionnaire_id;
|
||
$result = Questionnaire::find($questionnaire_id);
|
||
if(!$result) return $this->failure('问卷不存在');
|
||
$orders = TouristOrder::where('type','community')->where('type_id',$result->type_id)->whereIn('pay_status',[1,4])->get();
|
||
$i = 1;
|
||
$j = 1;
|
||
foreach ($orders as $key => $value) {
|
||
$m_user = MerchantUser::find($value->account_id);
|
||
if($m_user->sex){
|
||
if($m_user->sex == 1) {
|
||
$value->update(['remark'=>$i.'男']);
|
||
$i++;
|
||
}
|
||
if($m_user->sex == 2) {
|
||
$value->update(['remark'=>$j.'女']);
|
||
$j++;
|
||
}
|
||
continue;
|
||
}
|
||
if($value->channel == '福恋小程序'){
|
||
$user_id = $this->getUseridByOpenid($value->open_id,2);
|
||
}else{
|
||
$user_id = $this->getUseridByOpenid($value->open_id,0);
|
||
}
|
||
if($user_id){
|
||
$user = User::find($user_id);
|
||
if($user->sex == 0) continue;
|
||
if($user->sex == 1) {
|
||
$value->update(['remark'=>$i.'男']);
|
||
$i++;
|
||
}
|
||
if($user->sex == 2) {
|
||
$value->update(['remark'=>$j.'女']);
|
||
$j++;
|
||
}
|
||
}
|
||
}
|
||
return $this->success('ok',$orders);
|
||
}
|
||
|
||
//问卷互选
|
||
public function voteEachOther(Request $request){
|
||
try {
|
||
$m_id = $request->account_id;
|
||
$questionnaire_id = $request->questionnaire_id;
|
||
$questionnaire = Questionnaire::find($questionnaire_id);
|
||
if($questionnaire_id == 33 || $questionnaire_id == 30) return $this->failure('该活动未开启配对');
|
||
if($m_id != $questionnaire->m_id) return $this->failure('没有权限访问');
|
||
if(!$questionnaire) return $this->failure('问卷不存在');
|
||
$my_choose = [];
|
||
$choose_me = [];
|
||
$choose_each = [];
|
||
$user_id = $request->user_id;
|
||
//我是几号嘉宾
|
||
$order = TouristOrder::where('type','community')->where('type_id',$questionnaire->type_id)->where('account_id',$user_id)->whereIn('pay_status',[1,3,4])->first();
|
||
//$remark = $order->remark.'-'.$order->name;
|
||
$answer = Answers::with('mUser:id,nickname,pic')->where('user_id',$user_id)->where('questionnaire_id',$questionnaire_id)->first();
|
||
if($answer && $answer->content){
|
||
$desc = json_decode($answer->content);
|
||
foreach ($desc as $key => $value) {
|
||
if($value->choice != 3) continue;
|
||
//我选择了谁
|
||
$my_choose = $value->answer;
|
||
}
|
||
}
|
||
$answers = Answers::with('mUser:id,nickname,pic')->where('questionnaire_id',$questionnaire_id)->where('user_id','!=',$user_id)->select('id','user_id','questionnaire_id','content')->get();
|
||
// return $this->success('ok',$answers);
|
||
$other_order = TouristOrder::where('type','community')->where('type_id',$questionnaire->type_id)->where('account_id',$user_id)->whereIn('pay_status',[1,3,4])->first();
|
||
if($other_order){
|
||
$other_remark = $other_order->remark.'-'.$other_order->name;
|
||
}else{
|
||
$other_remark = null;
|
||
}
|
||
foreach ($answers as $key => $answer) {
|
||
$answer->content = json_decode($answer->content);
|
||
foreach ($answer->content as $key => $value) {
|
||
if($value->choice != 3) continue;
|
||
if(in_array($other_remark,$value->answer)) {
|
||
//选择了他的用户
|
||
$other_orders = TouristOrder::where('type','community')->where('type_id',$questionnaire->type_id)->where('account_id',$answer->user_id)->whereIn('pay_status',[1,3,4])->first();
|
||
$other_remarks = $other_orders->remark.'-'.$other_orders->name;
|
||
$choose_me[] = $other_remarks;
|
||
}
|
||
}
|
||
}
|
||
//互选
|
||
$choose_each = array_intersect($my_choose,$choose_me);
|
||
$my_choose_user_ids = [];
|
||
$choose_me_user_ids = [];
|
||
$choose_each_user_ids = [];
|
||
if($my_choose){
|
||
foreach ($my_choose as $key => $mc) {
|
||
$arr = explode('-',$mc);
|
||
$num = $arr[0];
|
||
$my_choose_user_ids[] = TouristOrder::where('type','community')->where('type_id',$questionnaire->type_id)->whereIn('pay_status',[1,3,4])->where('remark',$num)->value('account_id');
|
||
}
|
||
}
|
||
//我选择的用户
|
||
$my_choose_users = MerchantUser::whereIn('id',$my_choose_user_ids)->select('id','mobile','nickname','pic')->get();
|
||
if($choose_me){
|
||
foreach ($choose_me as $key => $mc) {
|
||
$arr = explode('-',$mc);
|
||
$num = $arr[0];
|
||
$choose_me_user_ids[] = TouristOrder::where('type','community')->where('type_id',$questionnaire->type_id)->whereIn('pay_status',[1,3,4])->where('remark',$num)->value('account_id');
|
||
}
|
||
}
|
||
//选择我的用户
|
||
$choose_me_users = MerchantUser::whereIn('id',$choose_me_user_ids)->select('id','mobile','nickname','pic')->get();
|
||
if($choose_each){
|
||
foreach ($choose_each as $key => $mc) {
|
||
$arr = explode('-',$mc);
|
||
$num = $arr[0];
|
||
$choose_each_user_ids[] = TouristOrder::where('type','community')->where('type_id',$questionnaire->type_id)->whereIn('pay_status',[1,3,4])->where('remark',$num)->value('account_id');
|
||
}
|
||
}
|
||
//互选用户
|
||
$choose_each_users = MerchantUser::whereIn('id',$choose_each_user_ids)->select('id','mobile','nickname','pic')->get();
|
||
return $this->success('ok',compact('my_choose_users','choose_me_users','choose_each_users'));
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息,请稍后再试');
|
||
}
|
||
|
||
}
|
||
|
||
|
||
/**
|
||
* 第二个版本,独立的调查问卷功能
|
||
*/
|
||
|
||
|
||
/**
|
||
*
|
||
*/
|
||
|
||
public function getQuestionaireList() {
|
||
$list = Questionnaire::orderby('id', 'DESC')->paginate();
|
||
return $this->success('ok', $list);
|
||
}
|
||
|
||
/**
|
||
* 创建新的调查问卷
|
||
*/
|
||
public function initQuestionaire(Request $request)
|
||
{
|
||
$data = $request->data;
|
||
Questionnaire::create([
|
||
'm_id'=>$request->account_id,
|
||
'admin_id'=>$request->merchant_admin_id ?? 0,
|
||
'type'=> '',
|
||
'type_id'=> '',
|
||
'title'=>$request->title ?? '测试',
|
||
'status'=>1,
|
||
'content'=>json_encode($data),
|
||
]);
|
||
return $this->success('ok');
|
||
}
|
||
public function updateQuestionaire(Request $request, $q_id)
|
||
{
|
||
|
||
$auth = $this->checkQuestionaireAuth($request->account_id, $q_id);
|
||
if(!$auth){
|
||
return $this->failure('权限不足');
|
||
}
|
||
$data = $request->data;
|
||
Questionnaire::where('id', $q_id)->update([
|
||
'title'=>$request->title ?? '新的调查问卷',
|
||
'content'=>json_encode($data),
|
||
]);
|
||
return $this->success('ok');
|
||
}
|
||
|
||
public function deleteQuestionaire(Request $request, $q_id)
|
||
{
|
||
|
||
$auth = $this->checkQuestionaireAuth($request->account_id, $q_id);
|
||
if(!$auth){
|
||
return $this->failure('权限不足');
|
||
}
|
||
|
||
$data = $request->data;
|
||
Questionnaire::where('id', $q_id)->delete();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
|
||
/**
|
||
* 增加调查问卷的问题
|
||
* @param $q_id questionaire_id
|
||
*/
|
||
|
||
public function addQuestion(Request $request, $q_id)
|
||
{
|
||
$title = $request->title;
|
||
$option = $request->option;
|
||
$input_type = $request->input_type?$request->input_type:'input';
|
||
if($input_type == 'radio' || $input_type == 'checkbox')
|
||
{
|
||
if(!(is_array($option) && count($option) > 0)){
|
||
return $this->failure('请添加选项内容');
|
||
}
|
||
}
|
||
|
||
$auth = $this->checkQuestionaireAuth($request->account_id, $q_id);
|
||
if(!$auth){
|
||
return $this->failure('权限不足');
|
||
}
|
||
|
||
QuestionaireQuestion::create(array(
|
||
'questionaire_id' => $q_id,
|
||
'title'=>$title,
|
||
'input_type' => $input_type,
|
||
'option'=> json_encode($option, JSON_UNESCAPED_UNICODE),
|
||
));
|
||
return $this->success('ok');
|
||
}
|
||
|
||
/**
|
||
* @param $m_id merchant_id
|
||
* @param $q_id questionaire_id
|
||
*/
|
||
private function checkQuestionaireAuth($m_id, $q_id)
|
||
{
|
||
$auth = false;
|
||
$count = Questionnaire::where('m_id', $m_id)->where('id',$q_id)->count();
|
||
if($count > 0)
|
||
{
|
||
$auth = true;
|
||
}
|
||
return $auth;
|
||
}
|
||
|
||
/**
|
||
* 修改调查问卷的问题
|
||
* @param $q_id questionaire_id
|
||
*/
|
||
public function updateQuestion(Request $request, $q_id, $id)
|
||
{
|
||
$title = $request->title;
|
||
$option = $request->option;
|
||
$input_type = $request->input_type;
|
||
|
||
$auth = $this->checkQuestionaireAuth($request->account_id, $q_id);
|
||
if(!$auth){
|
||
return $this->failure('权限不足');
|
||
}
|
||
QuestionaireQuestion::where('id', $id)->update(array(
|
||
'title'=> $title,
|
||
'input_type' => $input_type,
|
||
'option'=> json_encode($option, JSON_UNESCAPED_UNICODE),
|
||
));
|
||
return $this->success('ok');
|
||
}
|
||
|
||
/**
|
||
* 删除调查问卷的问题
|
||
* @param $q_id questionaire id
|
||
* @param $id question_id
|
||
*/
|
||
public function deleteQuestion(Request $request, $q_id, $id)
|
||
{
|
||
|
||
$auth = $this->checkQuestionaireAuth($request->account_id, $q_id);
|
||
if(!$auth){
|
||
return $this->failure('权限不足');
|
||
}
|
||
QuestionaireQuestion::where('id', $id)->delete();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
/**
|
||
* 绑定调查问卷到指定的 实体中去
|
||
*/
|
||
public function bindQuestionaire(Request $request, $id)
|
||
{
|
||
$type = $request->type;
|
||
$type_id = $request->type_id;
|
||
|
||
Questionnaire::where('id', $id)->update(array(
|
||
'type'=> $type,
|
||
'type_id'=> $type_id,
|
||
));
|
||
|
||
return $this->success('ok');
|
||
}
|
||
|
||
/**
|
||
* 获取单个调查问卷
|
||
*/
|
||
public function getQuestionaireDetail(Request $request, $id)
|
||
{
|
||
$questionarie = Questionnaire::where('id', $id)
|
||
->select('id', 'type', 'type_id', 'title')
|
||
->first();
|
||
if(empty($questionarie)){
|
||
return $this->failure("questionaire not found");
|
||
}
|
||
|
||
$question_list = QuestionaireQuestion::where('questionaire_id', $id)->get();
|
||
foreach($question_list as &$question)
|
||
{
|
||
$question->option_list = json_decode($question->option);
|
||
}
|
||
$questionarie->question_list = $question_list;
|
||
|
||
return $this->success('ok',$questionarie);
|
||
}
|
||
|
||
/**
|
||
* @depercated since 2022年12月12日18:12:41
|
||
* 这个功能是用户端功能,不在Admin端实现
|
||
* 填写调查问卷
|
||
*/
|
||
public function answerQuestion(Request $request, $questionaire_id, $question_id)
|
||
{
|
||
$answer = $request->answer;
|
||
$question = QuestionaireQuestion::where('id', $question_id)
|
||
->where('questionnaire_id', $questionaire_id)
|
||
->first();
|
||
|
||
if(empty($question)){
|
||
return $this->failure('question not found');
|
||
}
|
||
$fill = array(
|
||
'questionaire_id' => $questionaire_id,
|
||
'question_id' => $question_id,
|
||
'question' => json_decode($question),
|
||
'answer' => $answer
|
||
);
|
||
QuestionaireAnswer::create($fill);
|
||
return $this->success('ok');
|
||
}
|
||
|
||
|
||
/**
|
||
* @depercated since 2022年12月12日18:12:41
|
||
* 这个功能是用户端功能,不在Admin端实现
|
||
* 修改调查问卷
|
||
*/
|
||
public function updateQuestionAnswer(Request $request, $questionaire_id, $question_id)
|
||
{
|
||
$answer = $request->answer;
|
||
$question = QuestionaireQuestion::where('id', $question_id)
|
||
->where('questionnaire_id', $questionaire_id)
|
||
->first();
|
||
|
||
if(empty($question)){
|
||
return $this->failure('question not found');
|
||
}
|
||
$fill = array(
|
||
'questionaire_id' => $questionaire_id,
|
||
'question_id' => $question_id,
|
||
'question' => json_decode($question),
|
||
'answer' => $answer
|
||
);
|
||
QuestionaireAnswer::create($fill);
|
||
return $this->success('ok');
|
||
}
|
||
|
||
/**
|
||
* 公版问卷调查列表
|
||
* @param Request $request
|
||
*/
|
||
public function pubSurveys(Request $request)
|
||
{
|
||
$m_id = $request->account_id;
|
||
$surveys = Survey::where('m_id', $m_id);
|
||
$keyword = $request->input('keyword');
|
||
if ($keyword) {
|
||
$surveys = $surveys->where('title', 'like', '%'.$keyword.'%');
|
||
}
|
||
$surveys = $surveys->orderByDesc('id')->paginate();
|
||
return $this->success('ok', $surveys);
|
||
}
|
||
|
||
/**
|
||
* 公版问卷调查增加
|
||
* @param Request $request
|
||
* @return \Illuminate\Http\JsonResponse|string
|
||
*/
|
||
public function storePubSurveys(Request $request)
|
||
{
|
||
$m_id = $request->account_id;
|
||
$title = $request->input('title');
|
||
if (empty($title)) return $this->failure("请输入问卷调查标题");
|
||
$content = $request->input('content', []);
|
||
if (empty($content) || count($content) == 0) return $this->failure("请输入问卷调查内容");
|
||
$note = $request->input('note');
|
||
$price = $request->input('price');
|
||
DB::beginTransaction();
|
||
$survey = Survey::create(['m_id'=>$m_id, 'title'=>$title, 'content'=> json_encode($content), 'note'=>$note, 'price'=>$price]);
|
||
$type = $request->input('type');
|
||
$type_id = $request->input('type_id');
|
||
if ($type && $type_id) {
|
||
//是否已绑定其他服务
|
||
// $s_service = SurveyServiceModel::where(['type'=>$type, 'type_id'=>$type_id])->first();
|
||
// if ($s_service) return $this->failure("该服务已绑定其他问卷调查");
|
||
SurveyService::bindSurveyService(['m_id'=>$m_id, 'type'=>$type, 'type_id'=>$type_id, 'survey_id'=>$survey->id]);
|
||
MakeSurveyQrcode::dispatch($m_id, $type, $type_id, $survey->id)->onQueue('love');
|
||
// $this->MakeSurveyQrcode($m_id, $type, $type_id, $survey->id);
|
||
} else {
|
||
MakeSurveyQrcode::dispatch($m_id, null, null, $survey->id)->onQueue('love');
|
||
// $this->MakeSurveyQrcode($m_id, null, null, $survey->id);
|
||
}
|
||
DB::commit();
|
||
//todo 异步生成二维码
|
||
return $this->success('ok');
|
||
}
|
||
|
||
public function MakeSurveyQrcode($m_id, $type, $type_id, $survey_id)
|
||
{
|
||
$base_url = env('APP_URL')."/pu/#/questionnaireV3/".$survey_id."?merchant_id=".$m_id."&type=".$type."&type_id=".$type_id;
|
||
$base_url = urlencode($base_url);
|
||
$url = env('APP_URL')."/survey/auth?url=".$base_url;
|
||
$pic_path = storage_path('qrcode/'.$m_id.'_survey_'.$survey_id."_".$type.'_'.$type_id.'_sharer_qrcode.png');
|
||
//二维码图片
|
||
QrCode::format('png')->margin(1)->size(300)->generate($url, $pic_path);
|
||
if(file_exists($pic_path)){
|
||
$qrcode = $this->MakeSurveyQrcodeUploadFile($pic_path);
|
||
if ($type && $type_id) {
|
||
SurveyService::where('survey_id', $survey_id)->where('type', $type)->where('type_id', $type_id)->update(['qrcode'=>$qrcode, 'share_url'=>$url]);
|
||
}else {
|
||
Survey::where('id', $survey_id)->update(['qrcode'=>$qrcode, 'share_url'=>$url]);
|
||
}
|
||
unlink($pic_path);
|
||
}
|
||
}
|
||
public function MakeSurveyQrcodeUploadFile($file)
|
||
{
|
||
$ossClient = UploadController::getOssClient();
|
||
//生成file
|
||
$object = date('Y') . date('m') . "/" . date('d') . "/" . basename($file);
|
||
$url = 'https://' . config('alioss.picture_domain') . '/' . $object;
|
||
try {
|
||
$ossClient->uploadFile(config('alioss.buckets.picture'), $object, $file);
|
||
} catch (\OSS\Core\OssException $e) {
|
||
Log::info($e->getMessage());
|
||
return false;
|
||
}
|
||
return $url;
|
||
}
|
||
|
||
/**
|
||
* 公版问卷调查修改
|
||
* @param Request $request
|
||
* @param $id
|
||
* @return \Illuminate\Http\JsonResponse|string
|
||
*/
|
||
public function updatePubSurveys(Request $request, $id)
|
||
{
|
||
$m_id = $request->account_id;
|
||
$survey = Survey::where('m_id', $m_id)->where('id', $id)->first();
|
||
if ($request->has('title') ) {
|
||
$survey->title = $request->title;
|
||
}
|
||
if ($request->has('content') ) {
|
||
$survey->content = json_encode($request->input('content'));
|
||
}
|
||
if ($request->has('price') ) {
|
||
$survey->price = $request->price;
|
||
}
|
||
if ($request->has('note') ) {
|
||
$survey->note = $request->note;
|
||
}
|
||
$survey->save();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
/**
|
||
* 公版问卷调查详情
|
||
* @param Request $request
|
||
* @param $id
|
||
* @return \Illuminate\Http\JsonResponse|string
|
||
*/
|
||
public function pubSurvey(Request $request, $id)
|
||
{
|
||
$m_id = $request->account_id;
|
||
$survey = Survey::where('m_id', $m_id)->where('id', $id)->first();
|
||
return $this->success('ok', $survey);
|
||
}
|
||
|
||
/**
|
||
* 公版问卷调查删除
|
||
* @param Request $request
|
||
* @param $id
|
||
* @return \Illuminate\Http\JsonResponse|string
|
||
*/
|
||
public function deletePubSurvey(Request $request, $id)
|
||
{
|
||
$m_id = $request->account_id;
|
||
//todo 是否有被引用
|
||
$using = false;
|
||
if ($using) return $this->failure("删除失败-该问卷正被使用");
|
||
$survey = Survey::where('m_id', $m_id)->where('id', $id)->delete();
|
||
SurveyServiceModel::where("survey_id",$id)->delete();
|
||
return $this->success('ok', $survey);
|
||
}
|
||
|
||
/**
|
||
* 公版问卷-绑定服务
|
||
* @param Request $request
|
||
* @throws \Exception
|
||
*/
|
||
public function bindSurveyService(Request $request, $id)
|
||
{
|
||
$m_id = $request->account_id;
|
||
$type_id = $request->input('type_id');
|
||
$type = $request->input('type');
|
||
if (empty($type_id) || empty($type)) throw new \Exception("缺少类型参数或类型id");
|
||
SurveyService::bindSurveyService(['m_id'=>$m_id, 'type'=>$type, 'type_id'=>$type_id, 'survey_id'=>$id]);
|
||
MakeSurveyQrcode::dispatch($m_id, $type, $type_id, $id)->onQueue('love');
|
||
|
||
return $this->success('ok');
|
||
}
|
||
|
||
public function unbindSurveyService(Request $request, $id)
|
||
{
|
||
$m_id = $request->account_id;
|
||
$type_id = $request->input('type_id');
|
||
$type = $request->input('type');
|
||
if (empty($type_id) || empty($type)) throw new \Exception("缺少类型参数或类型id");
|
||
SurveyServiceModel::where(['m_id'=>$m_id, 'survey_id'=>$id, 'type'=>$type, 'type_id'=>$type_id])->delete();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
public function surveyServices(Request $request, $id)
|
||
{
|
||
$services = SurveyServiceModel::where('survey_id', $id);
|
||
$keyword = $request->input('keyword');
|
||
if ($keyword) {
|
||
$services = $services->where('title', 'like', '%'.$keyword.'%');
|
||
}
|
||
$type = $request->input('type');
|
||
if ($type) {
|
||
$services = $services->where('type', $type);
|
||
}
|
||
$services = $services->orderByDesc('id')->paginate();
|
||
return $this->success('ok', $services);
|
||
}
|
||
|
||
public function surveyService(Request $request)
|
||
{
|
||
$type = $request->input('type');
|
||
$type_id = $request->input('type_id');
|
||
$service = SurveyServiceModel::with('survey')->where('type', $type)->where('type_id',$type_id)->first();
|
||
return $this->success('ok', $service);
|
||
}
|
||
|
||
public function surveyServiceUsers(Request $request, $id=null)
|
||
{
|
||
$survey_users = SurveyUser::with('merchantUser:id,mobile,nickname,pic')->whereHas('payOrder');
|
||
if ($id) {
|
||
$survey_users = $survey_users->where('survey_service_id', $id);
|
||
}else {
|
||
$survey_service_id = $request->input('survey_service_id');
|
||
$type = $request->input('type');
|
||
$type_id = $request->input('type_id');
|
||
if (empty($type) || empty($type_id)) throw new \Exception("缺少参数type,type_id");
|
||
$where = [
|
||
['type','=',$type],
|
||
['type_id','=',$type_id],
|
||
['survey_service_id','=',$survey_service_id],
|
||
];
|
||
$survey_users = $survey_users->where($where);
|
||
}
|
||
$keyword = $request->input('keyword');
|
||
if ($keyword) {
|
||
$survey_users = $survey_users->whereHas('merchantUser', function($sql) use($keyword) {
|
||
$sql->where('nickname', 'like', '%'.$keyword.'%')
|
||
->orWhere('mobile', 'like', '%'.$keyword.'%');
|
||
});
|
||
}
|
||
$nopage = $request->input('nopage', 0);
|
||
if ($nopage) {
|
||
$survey_users = $survey_users->orderByDesc('id')->get();
|
||
}else {
|
||
$survey_users = $survey_users->orderByDesc('id')->paginate();
|
||
}
|
||
return $this->success('ok', $survey_users);
|
||
}
|
||
|
||
public function surveyUsers(Request $request, $id)
|
||
{
|
||
$survey_users = SurveyUser::with('merchantUser:id,mobile,nickname,pic')
|
||
->whereHas('payOrder')
|
||
->where('survey_id', $id)
|
||
->whereNull('survey_service_id')
|
||
->whereNull('type')->whereNull('type_id');
|
||
$keyword = $request->input('keyword');
|
||
if ($keyword) {
|
||
$survey_users = $survey_users->whereHas('merchantUser', function($sql) use($keyword) {
|
||
$sql->where('nickname', 'like', '%'.$keyword.'%')
|
||
->orWhere('mobile', 'like', '%'.$keyword.'%');
|
||
});
|
||
}
|
||
$nopage = $request->input('nopage', 0);
|
||
if ($nopage) {
|
||
$survey_users = $survey_users->orderByDesc('id')->get();
|
||
}else {
|
||
$survey_users = $survey_users->orderByDesc('id')->paginate();
|
||
}
|
||
return $this->success('ok', $survey_users);
|
||
}
|
||
|
||
/**
|
||
* 活动/服务详情 问卷列表
|
||
* @param Request $request
|
||
* @return \Illuminate\Http\JsonResponse|string
|
||
*/
|
||
public function surveysByService(Request $request)
|
||
{
|
||
try {
|
||
$merchant_id = $request->account_id;
|
||
$type = $request->input('type');
|
||
$type_id = $request->input('type_id');
|
||
$list = SurveyServiceModel::with('survey')
|
||
->where('type',$type)
|
||
->where('type_id',$type_id)
|
||
->where('m_id',$merchant_id)
|
||
->paginate();
|
||
return $this->success('ok',$list);
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure($e->getMessage());
|
||
}
|
||
}
|
||
|
||
}
|