love_php/app/Http/Controllers/Server/Admin/EvaluateController.php
2026-04-02 09:20:51 +08:00

646 lines
29 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers\Server\Admin;
use App\Http\Controllers\Controller;
use App\Models\CommunityActivity;
use App\Models\Coupon;
use App\Models\MerchantAccount;
use App\Models\Server\EvaluateAnswer;
use App\Models\Server\EvaluateDetail;
use App\Models\Server\EvaluateList;
use App\Models\Server\EvaluateQuestion;
use App\Models\Server\MEarningRule;
use App\Models\Server\MerchantEvaluate;
use App\Models\Server\TouristOrder;
use App\Models\Server\UserEvaluate;
use App\Models\User;
use App\Models\Wechat;
use App\Services\EvaluateService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class EvaluateController extends Controller
{
/**
* 获取一点灵评测列表并存入数据库
*/
public function getTestListToDB(){
for($i = 1;$i<=9;$i++){
$y = 1;
do {
$data = EvaluateService::testList($y, $i);
if($data && $data['list']){
foreach ($data['list'] as $key => $val){
$evaluateList = EvaluateList::where('test_item_id',$val['id'])
->where('name',$val['name'])
->first();
if($evaluateList){
continue;
}else{
$evaluateList = new EvaluateList();
$evaluateList->test_item_id = $val['id'];
$evaluateList->test_type = $i;
$evaluateList->name = $val['name'];
$evaluateList->desc = $val['desc'];
$evaluateList->question_number = $val['questionNumber'];
$evaluateList->cover = $val['cover'];
$evaluateList->price = $val['price'] /100;
$evaluateList->evaNum = $val['evaNum'];
$evaluateList->subtitle = $val['subtitle'];
$evaluateList->save();
}
}
}
sleep(10);
$y += 1;
$a = 1;
}while($data['list']);
$a = 1;
}
}
/**
* 获取一点灵评测列表并存入数据库
*/
public function getTestDetailToDB(){
$list = EvaluateList::pluck('test_item_id');
foreach ($list as $key => $val){
$data = EvaluateService::testDetails($val);
$evaluateList = EvaluateDetail::where('test_item_id',$data['itemId'])
->where('title',$data['title'])
->first();
if($evaluateList){
continue;
}else{
$evaluateDetail = new EvaluateDetail();
$evaluateDetail->test_item_id = $data['itemId'];
$evaluateDetail->title = $data['title'];
$evaluateDetail->subtitle = $data['subtitle'];
$evaluateDetail->image = $data['image'];
$evaluateDetail->tabImage = $data['tabImage'];
$evaluateDetail->cover = $data['cover'];
$evaluateDetail->summary = $data['summary'];
$evaluateDetail->report_pages = $data['reportPages'];
$evaluateDetail->notes = $data['notes'];
$evaluateDetail->price = $data['price'] /100;
$evaluateDetail->question_count = $data['questionCount'];
$evaluateDetail->visitNum = $data['visitNum'];
$evaluateDetail->hits = $data['hits'];
$evaluateDetail->questions = json_encode($data['questions']);
$evaluateDetail->save();
}
}
}
/**
* 获取商家服务列表
* @param Request $request
*/
public function getMerchantTestList(Request $request){
try {
$keyword = trim($request->keyword);
$merchant_id = $request->account_id;
$type = $request->test_type;
$nopage = $request->nopage;
$status = $request->status ?? 2;
$evaluate_lists = MerchantEvaluate::where('merchant_id', $merchant_id)
->when($type, function ($query) use ($type) {
$query->where('test_item_type', $type);
})
->when($keyword, function ($query) use ($keyword) {
$query->where('title', 'like', '%' . $keyword . '%');
})
->select('id', 'test_item_id', 'title', 'price', 'pv', 'status', 'created_at', 'is_top', 'top_time', 'image')
->orderBy('status', 'desc')->orderBy('is_top', 'desc')->orderBy('top_time', 'desc')->orderBy('id', 'desc');
if ($status != 2) {
$evaluate_lists = $evaluate_lists->where('status', $status);
}
if ($nopage) {
$evaluate_lists = $evaluate_lists->get();
} else {
$evaluate_lists = $evaluate_lists->paginate();;
}
foreach ($evaluate_lists as $key => $evaluate_list) {
$evaluate_list->totel_order_num = TouristOrder::where('type', 'evaluate')->where('type_id', $evaluate_list->id)->count();
}
return $this->success('ok', $evaluate_lists);
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息了,请稍后再试');
}
}
/**
* 获取评测服务列表
*/
public function getTestList(Request $request){
try {
$type = $request->test_type;
$keyword = $request->keyword;
$nopage = $request->nopage;
$evaluate_list = EvaluateList::when($type, function ($query) use ($type) {
$query->where('test_type', $type);
})
->when($keyword, function ($query) use ($keyword) {
$query->where('name', 'like', "%$keyword%");
//->orWhere('desc','like',"%$keyword%");
});
if($request->account_id != 491){
$evaluate_list = $evaluate_list ->where('type',1);
}
if ($nopage) {
$evaluate_list = $evaluate_list->get();
} else {
$evaluate_list = $evaluate_list->paginate();;
}
return $this->success('ok', $evaluate_list);
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息了,请稍后再试');
}
}
/**
* 获取评测详情
* @param Request $request
*/
public function getTestDetail(Request $request){
try {
$merchant_id = $request->account_id;
$id = $request->id;
$merchant_evaluate = MerchantEvaluate::where('merchant_id', $merchant_id)
->where('id', $id)
->select('id', 'status', 'test_item_type', 'test_item_id', 'sort', 'pv', 'is_top', 'top_time', 'created_at')
->first();
if (!$merchant_evaluate) {
return $this->failure('商家没有这项测评服务');
}
$list = EvaluateList::where('merchant_id',$merchant_id)->where('test_item_id',$merchant_evaluate['test_item_id'])
->first();
if($list && $list->type == 1){
$test_details = EvaluateService::testDetails($merchant_evaluate['test_item_id']);
$test_details['price'] = number_format($test_details['price'] / 100, 2);
}else{
$test_details = EvaluateDetail::where('test_item_id',$merchant_evaluate['test_item_id'])
->first();
if($test_details){
$test_details = $test_details->toArray();
}
}
$test_details['merchant_evaluate'] = $merchant_evaluate;
$test_details['test_type'] = EvaluateList::where('test_item_id', $test_details['merchant_evaluate']['test_item_id'])->value('test_type');
$openid = MerchantAccount::where('id', $merchant_id)->value('openid');
$test_details['rule'] = MEarningRule::where('m_id', $merchant_id)
->where('name', 'evaluate')->where('type_id', $test_details['merchant_evaluate']['id'])
->select('ratio', 'forzen_time')
->first();
if ($test_details['rule'] === null) {
$test_details['rule']['ratio'] = null;
$test_details['rule']['forzen_time'] = null;
}
$jump_url = urlencode(env('APP_URL') . '/pu/#/evaluateDetails/' . $test_details['merchant_evaluate']['id']);
$url = env('APP_URL') . '/api/official/live/wechat/FamilyAuth?merchant_id=' . $merchant_id . '&from_openid=' . $openid . '&url=' . $jump_url;
$qr_code_url = $this->getPreviewQrcode($url);
$test_details['jump_url'] = $url;
$test_details['url'] = $qr_code_url;
return $this->success('ok', $test_details);
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息了,请稍后再试');
}
}
/**
* 商家添加评测产品到自己的服务里
* @param Request $request
*/
public function putTestItemToMerchant(Request $request){
try {
$merchant_user_id = $request->account_id;
$test_item_id = $request->test_item_id;
$is_top = $request->is_top;
$status = $request->status;
if (!$test_item_id) {
return $this->failure('评测项目ID不能为空');
}
//查询一点灵订单价格,此单价不可低于一点灵订单价
$result = EvaluateService::testDetails($test_item_id);
if (!$result) {
return $this->failure('该产品已下架');
}
$merchant_evaluate = MerchantEvaluate::where('test_item_id', $test_item_id)
->where('merchant_id', $merchant_user_id)
->withTrashed()
->first();
if ($merchant_evaluate) {
if ($merchant_evaluate->deleted) {
$merchant_evaluate->restore();
}
$merchant_evaluate->status = $request->status;
$merchant_evaluate->price = $result['price'] / 100;
$merchant_evaluate->status = $status;
if ($is_top == 1) {
$merchant_evaluate->is_top = $is_top;
$merchant_evaluate->top_time = $request->top_time;
}
$merchant_evaluate->save();
} else {
$merchant_evaluate = new MerchantEvaluate();
$merchant_evaluate->test_item_id = $test_item_id;
$merchant_evaluate->status = $request->status;
$merchant_evaluate->merchant_id = $merchant_user_id;
$merchant_evaluate->title = $result['title'];
$merchant_evaluate->image = $result['image'];
$merchant_evaluate->status = $status;
if ($is_top == 1) {
$merchant_evaluate->is_top = $is_top;
$merchant_evaluate->top_time = $request->top_time;
}
$merchant_evaluate->test_item_type = $result['questions'][0]['type'];
$merchant_evaluate->price = $result['price'] / 100;
$merchant_evaluate->save();
}
if ($request->has('ratio') && $request->ratio >= 0) {
if ($request->ratio > 1.0) {
return $this->failure('利润分成不可以大于100%');
}
$MEarningRule = MEarningRule::where('m_id', $request->account_id)
->where('type_id', $merchant_evaluate->id)
->where('name', 'evaluate')
->first();
$rule = MEarningRule::where('m_id', $request->account_id)
->where('name', 'evaluate')
->where('type_id', 0)
->first();
if ($MEarningRule === null) {
$MEarningRule = new MEarningRule();
$MEarningRule->m_id = $request->account_id;
$MEarningRule->forzen_time = $request->forzen_time ?? 1;
$MEarningRule->ratio = number_format($request->ratio, 2);
$MEarningRule->type_id = $merchant_evaluate->id;
$MEarningRule->first_sharer = $rule?$rule->first_sharer:0.3;
$MEarningRule->last_sharer = $rule?$rule->last_sharer:0.5;
$MEarningRule->other_sharer = $rule?$rule->other_sharer:0.2;
$MEarningRule->name = 'evaluate';
$MEarningRule->save();
} else {
$MEarningRule->forzen_time = $request->forzen_time ?? 1;
$MEarningRule->ratio = number_format($request->ratio, 2);
$MEarningRule->first_sharer = $rule?$rule->first_sharer:0.3;
$MEarningRule->last_sharer = $rule?$rule->last_sharer:0.5;
$MEarningRule->other_sharer = $rule?$rule->other_sharer:0.2;
$MEarningRule->save();
}
}
return $this->success('ok');
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息了,请稍后再试');
}
}
/**
* 商家服务关键字搜索
* @param Request $request
*/
public function searchMerchantEvaluate(Request $request)
{
try {
$keyword = $request->keyword;
$test_item_type = $request->test_item_type;
$merchant_id = $request->account_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('name', 'like', "%$keyword%");
//$query->where('desc', 'like',"%$keyword%");
})
->get();
return $this->success('ok', $return_data);
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息了,请稍后再试');
}
}
/**
* 搜索所有的评测
* @param Request $request
* @return JsonResponse|string
*/
public function searchEvaluate(Request $request){
$keyword = $request->keyword;
$test_item_type = $request->test_item_type;
$return_data = EvaluateList::when($keyword, function ($query) use ($keyword) {
$query->where('desc', 'like', "%$keyword%")
->orWhere('name', 'like', "%$keyword%");
})
->when($test_item_type,function ($query) use ($test_item_type){
$query->where('test_type', $test_item_type);
})
->get();
return $this->success('ok', $return_data);
}
/**
* 更新评测信息(置顶等)
* @param Request $request
* @param $id
* @return JsonResponse
*/
public function updateMerchantEvaluate(Request $request,$id)
{
try {
$m_id = $request->account_id;
$is_top = $request->is_top;
$top_time = $request->top_time;
$id = $request->id;
$merchant_evaluate = MerchantEvaluate::where('id', $id)
->where('merchant_id', $m_id)
->first();
if (!$merchant_evaluate) {
return $this->failure('服务不存在');
}
if ($is_top == 1) {
$merchant_evaluate->is_top = $is_top;
$merchant_evaluate->top_time = $top_time;
$merchant_evaluate->save();
}
if ($request->has('status')) {
$merchant_evaluate->status = $request->status;
$merchant_evaluate->save();
}
if ($request->has('ratio') && $request->ratio >= 0) {
if ($request->ratio > 1.0) {
return $this->failure('利润分成不可以大于1');
}
$MEarningRule = MEarningRule::where('m_id', $request->account_id)
->where('type_id', $merchant_evaluate->id)
->where('name', 'evaluate')
->first();
if ($MEarningRule === null) {
$MEarningRule = new MEarningRule();
$MEarningRule->m_id = $request->account_id;
$MEarningRule->forzen_time = $request->forzen_time ?? 1;
$MEarningRule->name = 'evaluate';
$MEarningRule->ratio = number_format($request->ratio, 2);
$MEarningRule->type_id = $merchant_evaluate->id;
$MEarningRule->first_sharer = 0.3;
$MEarningRule->last_sharer = 0.5;
$MEarningRule->other_sharer = 0.2;
$MEarningRule->save();
} else {
MEarningRule::where('m_id', $request->account_id)
->where('name', 'evaluate')
->where('type_id', $merchant_evaluate->id)
->update([
'forzen_time' => $request->forzen_time ?? 1,
'ratio' => number_format($request->ratio, 2)
]);
}
}
return $this->success('ok');
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息了,请稍后再试');
}
}
/**
*获取
* @param Request $request
* @return JsonResponse|string
*/
public function getEvaluateOrder(Request $request){
try {
$id = $request->id;
$merchant_id = $request->account_id;
$nopage = $request->nopage;
$keyword = $request->keyword;
$merchant_evaluate_ids = MerchantEvaluate::where('merchant_id', $merchant_id);
if (isset($id)){
$merchant_evaluate_ids = $merchant_evaluate_ids->where('id',$id)->value('id');
if(!$merchant_evaluate_ids){
return $this->failure('评测不存在');
}
}else{
$merchant_evaluate_ids = $merchant_evaluate_ids->pluck('id');
}
$members = TouristOrder::with('viewer:avatar as pic,mobile,openid,sex,nickname',
'user_evaluate:id,created_at,order_id,evaluate_report','merUser', 'alliance',
'fromUser:user_id as id,avatar,mobile,openid,sex,nickname', 'mEarning:id,m_user_id,m_order_id,sharer,ratio,sub_ratio,value', 'mAdvanceEarning:id,m_user_id,m_order_id,sharer,ratio,sub_ratio,value', 'mEarning.user:id,pic,nickname,mobile', 'mAdvanceEarning.user:id,pic,nickname,mobile')
// ->where('type','evaluate')->where('merchant_id',$merchant_id)->withCount('follow');
->where('type','evaluate')->withCount('follow');
if(isset($id)) {
$members->when($id, function ($query) use ($merchant_evaluate_ids) {
$query->where('type_id', $merchant_evaluate_ids);
});
}else{
$members->whereIn('type_id',$merchant_evaluate_ids);
}
if(isset($request->pay_status)){
$members = $members->where('pay_status',$request->pay_status);
}
if($keyword){
$members = $members->where('name','like',"%$keyword%")
->orWhere('mobile','like',"%$keyword%");
}
if($nopage){
$members = $members->orderBy('id','desc')->get();
}else{
$members = $members->orderBy('id','desc')->paginate();
}
foreach ($members as $key => $value) {
if($value->created_at <'2022-3-21 18:00'){
$temp_sku = explode('-',$value->desc);
if(!empty($temp_sku[1])){
$value->goods = $temp_sku[1];
}
}
$test_item_id = MerchantEvaluate::where('id',$value->type_id)->value('test_item_id');
$value->evaluate_type = EvaluateList::where('test_item_id',$test_item_id)->value('type');
if($value->channel== '福恋小程序'){ //渠道:0商家H51福恋H52福恋app3福恋小程序
$wechat = Wechat::where('openid',$value->open_id)->first();
if($wechat){
$user = User::where('id',$wechat->user_id)->first();
if($user){
$userinfo['nickname'] = $user->nickname;
$userinfo['pic'] = $user->photo?:($user->circle_avatar?:User::DefaultAvatar);
$value->merchant_user = $userinfo;
}
}
}else{ //渠道:0商家H51福恋H52福恋app3福恋小程序
$rand_str = $this->randString(8);
$nickname = '用户'.$rand_str;
if($value->mobile && !($value->mobile == '匿名用户' || $value->mobile == '未获取' )) {
$user = User::where('mobile', $value->mobile)
->select('nickname', 'circle_avatar as pic')
->first();
if ($user && ($user['nickname'] || $user['pic'])) {
$value->merchant_user = $user;
} else {
if($value->mer_user && $value->mer_user['pic']){
$user_info['pic'] = $value->mer_user['pic'];
}elseif($value->viewer && $value->viewer['pic']){
$user_info['pic'] = $value->viewer['pic'];
}else{
$user_info['pic'] = User::DefaultAvatar;
}
if($value->mer_user && $value->mer_user['nickname']){
$user_info['nickname'] = $value->mer_user['nickname'];
}elseif($value->viewer && $value->viewer['nickname']){
$user_info['nickname'] = $value->viewer['nickname'];
}else{
$user_info['nickname'] = User::DefaultAvatar;
}
$value->merchant_user = $user_info;
}
}elseif($value->open_id){
$wechat = Wechat::where('official_openid',$value->open_id)
->select('user_id','nickname','avatar as pic')
->first();
if($wechat && ($wechat['nickname'] || $wechat['pic'] )) {
$value->merchant_user = $wechat;
}elseif($wechat && $wechat->user_id){
$user = User::where('id', $wechat->user_id)
->select('nickname', 'circle_avatar as pic')
->first();
if ($user && ($user['nickname'] || $user['pic'])) {
$value->merchant_user = $user;
} else {
if($value->mer_user && $value->mer_user['pic']){
$user_info['pic'] = $value->mer_user['pic'];
}elseif($value->viewer && $value->viewer['pic']){
$user_info['pic'] = $value->viewer['pic'];
}else{
$user_info['pic'] = User::DefaultAvatar;
}
if($value->mer_user && $value->mer_user['nickname']){
$user_info['nickname'] = $value->mer_user['nickname'];
}elseif($value->viewer && $value->viewer['nickname']){
$user_info['nickname'] = $value->viewer['nickname'];
}else{
$user_info['nickname'] = '未获取';;
}
$value->merchant_user = $user_info;
}
}else{
if($value->mer_user && $value->mer_user['pic']){
$user_info['pic'] = $value->mer_user['pic'];
}elseif($value->viewer && $value->viewer['pic']){
$user_info['pic'] = $value->viewer['pic'];
}else{
$user_info['pic'] = User::DefaultAvatar;
}
if($value->mer_user && $value->mer_user['nickname']){
$user_info['nickname'] = $value->mer_user['nickname'];
}elseif($value->viewer && $value->viewer['nickname']){
$user_info['nickname'] = $value->viewer['nickname'];
}else{
$user_info['nickname'] = '未获取';
}
$value->merchant_user = $user_info;
}
}else{
if($value->mer_user && $value->mer_user['pic']){
$user_info['pic'] = $value->mer_user['pic'];
}elseif($value->viewer && $value->viewer['pic']){
$user_info['pic'] = $value->viewer['pic'];
}else{
$user_info['pic'] = User::DefaultAvatar;
}
if($value->mer_user && $value->mer_user['nickname']){
$user_info['nickname'] = $value->mer_user['nickname'];
}elseif($value->viewer &&$value->viewer['nickname']){
$user_info['nickname'] = $value->viewer['nickname'];
}else{
$user_info['nickname'] = '未获取';
}
$value->merchant_user = $user_info;
}
}
$value->linkmen = json_decode( $value->linkmen,true);
if($value->mobile=='未获取'){
$value->mobile = $value->linkmen[0]['mobile']??'未获取';
}
if($value->name=='未获取'){
$value->name = $value->linkmen[0]['name']??'未获取';
}
}
return $this->success('ok',$members);
} 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();
$merchant_eval = MerchantEvaluate::where("id", $order->type_id)->first();
$is_disc = false;
if ($merchant_eval->test_item_id == 10007) {
$is_disc = true;
}
$details = UserEvaluate::where('order_id',$order_id)->select('id','order_id','answer','report', "questions")
->first();
if(!$details){
return $this->failure('评测不存在');
}
$details->evaluate_report = json_decode($details->evaluate_report);
if ($is_disc) {
$details->answer = $this->discResult($details);
} else {
$details->answer = json_decode($details->answer);
foreach ($details->answer as $key => $val){
if (empty($val) || empty(isset($val->questionId))) continue;
$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);
}
public function discResult($details) {
$answers = json_decode($details->answer, true);
$questions = json_decode($details->questions, true);
foreach($questions as $key => &$question) {
$question["user_answer"] = $answers[$key]["answerName"];
$question["user_question"] = $question["question_name"];
}
return $questions;
}
}