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

823 lines
35 KiB
PHP

<?php
namespace App\Http\Controllers\Server\Admin;
use App\Models\SaasReservationConsultScheduling;
use App\Models\Server\MEarningRule;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\ConsultAccount;
use App\Models\Consultation;
use App\Models\ConsultationRecords;
use App\Models\Live\Anchor;
use App\Models\Server\MEarning;
use App\Models\Server\MerchantAccount;
use App\Models\Server\MerchantAdmins;
use App\Models\Server\MerchantUser;
use App\Models\Server\TouristOrder;
use App\Models\User;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Redis;
class ConsultController extends Controller
{
/**
* 创建老师
* *
* @param Request $request
* @return JsonResponse|string
*/
public function createConsultAccount(Request $request)
{
try {
$await_checkoutTextArray = [];
$merchant_id = $request->account_id;
$mobile = $request->mobile;
$credentials = $request->credentials;
if (empty($mobile)) return $this->failure('手机号不能为空');
$pic = $request->pic;
if (empty($pic)) return $this->failure('请上传头像');
$label = $request->label;
$name = $request->name;
$introduction = $request->introduction;
$experience = $request->experience;
$seniority = $request->seniority;
$designation = $request->designation;
//手机号不需要敏感词过滤
//$await_checkoutTextArray[] = $mobile;
$await_checkoutTextArray[] = $label;
// $await_checkoutTextArray[] = $introduction;
$await_checkoutTextArray[] = $name;
$await_checkoutTextArray[] = $experience;
$await_checkoutTextArray[] = $seniority;
$await_checkoutTextArray[] = $designation;
//敏感词汇过滤
$result = \CommonUtilsService::checkoutTextArrayV3($await_checkoutTextArray);
if ($result['code'] == 1) {
return $this->failure($result['cause']);
}
$result = \CommonUtilsService::imageContentCecurity([$request->pic]);
if ($result && isset($result['result']) && $result['result']) {
return $this->failure('图片' . $result['result'] . ',请换一张照片');
}
$consult = new ConsultAccount();
$consult->merchant_id = $merchant_id;
$consult->mobile = $mobile;
$consult->pic = $pic;
$consult->credentials = json_encode($credentials);
$consult->name = $name;
$consult->label = $label ? json_encode($label) : '';
$consult->introduction = $introduction;
$consult->seniority = $seniority;
$consult->experience = $experience;
$consult->designation = $designation;
$consult->save();
//保存后删除草稿箱内容
if (Cache::has('drafts_consult_account_merchant_id_' . $merchant_id)) Cache::forget('drafts_consult_account_merchant_id_' . $merchant_id);
return $this->success('ok');
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 老师咨询列表
* *
* @param Request $request
* @return JsonResponse|string
*/
public function consultAccounts(Request $request)
{
try {
$merchant_id = $request->account_id;
$keyword = $request->keyword;
$consults = ConsultAccount::where('merchant_id', $merchant_id)->orderBy('id', 'desc');
if ($keyword) {
$keyword = trim($keyword);
$consults = $consults->where(function ($sql) use ($keyword) {
$sql->where('name', 'like', '%' . $keyword . '%')
->orWhere('mobile', 'like', '%' . $keyword . '%');
});
}
if ($request->has('nopage') && $request->nopage) {
$consults = $consults->get();
} else {
$consults = $consults->paginate();
}
foreach ($consults as $key => $consult) {
$consult->label = json_decode($consult->label, true) ?? [];
}
return $this->success('ok', $consults);
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 咨询老师详情
* *
* @param Request $request
* @param $consult_id
* @return JsonResponse|string
*/
public function consultDetail(Request $request, $consult_id)
{
try {
$merchant_id = $request->account_id;
$consult = ConsultAccount::where('id', $consult_id)->where('merchant_id', $merchant_id)->first();
$consult->label = json_decode($consult->label, true) ?? [];
if ($consult->credentials && $consult->credentials != 'null') {
$consult->credentials = json_decode($consult->credentials, true);
} else {
$consult->credentials = [];
}
return $this->success('ok', $consult);
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 编辑咨询老师
* *
* @param Request $request
* @param $consult_id
* @return JsonResponse|string
*/
public function consultUpdate(Request $request, $consult_id)
{
try {
$await_checkoutTextArray = [];
$merchant_id = $request->account_id;
$consult = ConsultAccount::where('id', $consult_id)->where('merchant_id', $merchant_id)->first();
$credentials = $request->credentials;
$mobile = $request->mobile;
$pic = $request->pic;
$label = $request->label;
$name = $request->name;
$introduction = $request->introduction;
$experience = $request->experience;
$seniority = $request->seniority;
$designation = $request->designation;
//手机号免过滤
//$await_checkoutTextArray[] = $mobile;
$await_checkoutTextArray[] = $label;
// $await_checkoutTextArray[] = $introduction;
$await_checkoutTextArray[] = $name;
$await_checkoutTextArray[] = $experience;
$await_checkoutTextArray[] = $seniority;
$await_checkoutTextArray[] = $designation;
//敏感词汇过滤
$result = \CommonUtilsService::checkoutTextArrayV3($await_checkoutTextArray);
if ($result['code'] == 1) {
return $this->failure($result['cause']);
}
$result = \CommonUtilsService::imageContentCecurity([$request->pic]);
if ($result && isset($result['result']) && $result['result']) {
return $this->failure('图片' . $result['result'] . ',请换一张照片');
}
if ($mobile && $mobile != $consult->mobile) {
$consult->mobile = $mobile;
}
if ($pic && $pic != $consult->pic) {
$consult->pic = $pic;
}
if ($label && $label != json_decode($consult->label)) {
$consult->label = json_encode($label);
}
if ($name && $name != $consult->name) {
$consult->name = $name;
}
if ($introduction && $introduction != $consult->introduction) {
$consult->introduction = $introduction;
}
if ($experience && $experience != $consult->experience) {
$consult->experience = $experience;
}
if ($seniority && $seniority != $consult->seniority) {
$consult->seniority = $seniority;
}
if ($designation && $designation != $consult->designation) {
$consult->designation = $designation;
}
$consult->credentials = json_encode($credentials);
$consult->save();
return $this->success('ok');
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 移除咨询老师
* *
* @param Request $request
* @param $consult_id
* @return JsonResponse|string
*/
public function removeConsult(Request $request, $consult_id)
{
try {
$merchant_id = $request->account_id;
$consult = ConsultAccount::where('id', $consult_id)->where('merchant_id', $merchant_id)->first();
if (!$consult) return $this->failure('要删除的内容不存在');
$consult->delete();
return $this->success('ok');
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 创建咨询服务
* *
* @param Request $request
* @return JsonResponse|string
*/
public function createConsultService(Request $request)
{
try {
$await_checkoutTextArray = [];
$consult_account_id = $request->consult_account_id;
if (!$consult_account_id) return $this->failure('请先指定老师');
$title = $request->title;
if (!$title) return $this->failure('请先输入标题');
$introduction = $request->introduction;
if (!$introduction) return $this->failure('请输入简介');
$price = $request->price;
if (!is_numeric($price) || $price < 0) return $this->failure('请输入正确价格');
$duration = $request->duration;
if (!$duration || !is_numeric($duration)) return $this->failure('请输入咨询时长');
$status = $request->status ?? 0;
$pic = $request->pic;
$first_buy_discount = $request->first_buy_discount ?? 0;
$await_checkoutTextArray[] = $title;
// $await_checkoutTextArray[] = $introduction;
$await_checkoutTextArray[] = $price;
$await_checkoutTextArray[] = $duration;
//敏感词汇过滤
$result = \CommonUtilsService::checkoutTextArrayV3($await_checkoutTextArray);
if ($result['code'] == 1) {
return $this->failure($result['cause']);
}
$result = \CommonUtilsService::imageContentCecurity([$request->pic]);
if ($result && isset($result['result']) && $result['result']) {
return $this->failure('图片' . $result['result'] . ',请换一张照片');
}
$consult = new Consultation();
$consult->consult_account_id = $consult_account_id;
$consult->title = $title;
$consult->pic = $pic;
$consult->introduction = $introduction;
$consult->price = $price;
$consult->duration = $duration;
$consult->status = $status;
$consult->first_buy_discount = $first_buy_discount;
$consult->save();
if ($request->has('ratio') && $request->ratio >= 0) {
if ($request->ratio > 1.0) {
return $this->failure('利润分成比例不能大于100%');
}
$rule = MEarningRule::where('m_id', $request->account_id)
->where('name', 'consult')
->where('type_id', 0)
->first();
$MEarningRule = new MEarningRule();
$MEarningRule->forzen_time = $rule?$rule->forzen_time : 1;
$MEarningRule->m_id = $request->account_id;
$MEarningRule->name = 'consult';
$MEarningRule->ratio = $request->ratio;
$MEarningRule->type_id = $consult->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->save();
}
//保存后删除草稿箱内容
if (Cache::has('drafts_consult_merchant_id_' . $request->account_id)) Cache::forget('drafts_consult_merchant_id_' . $request->account_id);
return $this->success('ok');
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 咨询服务列表
* *
* @param Request $request
* @return JsonResponse|string
*/
public function ConsultServices(Request $request)
{
try {
$merchant_id = $request->account_id;
$status = $request->status ?? 2;
$keyword = $request->keyword;
//商户名下的老师id
$account_ids = ConsultAccount::where('merchant_id', $merchant_id)->pluck('id')->toArray();
$consults = Consultation::with('teacher')->whereIn('consult_account_id', $account_ids);
if ($status != 2) {
$consults = $consults->where('status', $status);
}
if ($keyword) {
$consults = $consults->whereHas('teacher', function ($sql) use ($keyword) {
$sql->where('name', 'like', '%' . $keyword . '%')
->orWhere('mobile', 'like', '%' . $keyword . '%');
});
}
$consults = $consults->orderBy('is_top', 'desc')->orderBy('top_time', 'desc')->orderBy('id', 'desc')->paginate();
foreach ($consults as $consult) {
$member_count = TouristOrder::where('type', 'consult')->where('type_id', $consult->id)->where('pay_status', '<>', 0)->count();
$consult->member_count = $member_count;
$pv = Redis::zscore('consulation', $consult->id);
$consult->pv = $pv ?: 0;
}
return $this->success('ok', $consults);
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 咨询服务详情
* @param Request $request
* @param $id
* @return JsonResponse|string
*/
public function ConsultService(Request $request, $id)
{
try {
$serve_tab = $request->serve_tab;
$con = Consultation::with('teacher')->where('id', $id)->first();
if ($con['teacher']['merchant_id'] != $request->account_id) {
return $this->failure('咨询不属于档登陆用户');
}
$openid = MerchantAccount::where('id', $request->account_id)->value('openid');
$con->teacher->label = json_decode($con->teacher->label, true) ?? [];
$con->pv = Redis::zincrby('consulation', 1, $id);
$jump_url = urlencode(env('APP_URL') . '/pu/#/consultingDetail/' . $id);
// $u = urlencode('anchor_openid='.$openid.'&url=http://love.ufutx.cn/pu/#/');
$url = env('APP_URL') . '/api/official/live/wechat/FamilyAuth?merchant_id=' . $request->account_id . '&serve_tab=' . $serve_tab . '&url=' . $jump_url . '&from_openid=' . $openid;
// $qr_code = $this->getPreviewQrcode($url);
// $qr_code = Redis::get('ConsultDetail_S' . $id);
// if (!$qr_code) {
$qr_code = $this->getPreviewQrcode($url);
// Redis::setex('ConsultDetail_S' . $id, 60 * 60 * 24 * 30, $qr_code);
// $qr_code = Redis::get('ConsultDetail_S' . $id);
// }
$MEarningRule = MEarningRule::where('m_id', $request->account_id)
->where('name', 'consult')->where('type_id', $id)->first();
$con['ratio'] = $MEarningRule['ratio'] ?? null;
if ($con['ratio'] === null) {
$con['ratio'] = MEarningRule::where('m_id', $request->account_id)
->where('name', 'consult')->where('type_id', 0)
->value('ratio');
}
$con['ratio'] = number_format($con['ratio'], 2);
$con['first_buy_discount'] = number_format($con['first_buy_discount'], 2);
$share_url = env('APP_URL') . '/api/official/live/wechat/FamilyAuth?merchant_id=' . $request->account_id . '&serve_tab=' . $serve_tab . '&url=' . $jump_url . '&from_openid=' . $openid;
$con->share_url = $share_url;
$con->qr_code = $qr_code;
return $this->success('ok.', $con);
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 商户咨询-用户评价列表
* @param Request $request
* @return JsonResponse|string
*/
public function getConsultCommentList(Request $request)
{
try {
$merchant_user_id = $request->merchant_user_id;
$consult_id = $request->consult_id;
if (!$consult_id) {
return $this->failure('咨询服务ID不能为空值');
}
$result = ConsultationRecords::select('id', 'anchor_id', 'name', 'price', 'type', 'comment', 'Praise',
'created_at', 'consulation_id', 'merchant_id', 'merchant_user_id', 'phone', 'updated_at','comment_time',
'is_anonymous')
->where('consulation_id', $consult_id)
// ->where('status', 2)
->whereNotNull('Praise')
// ->orderBy('id', 'desc')
->orderBy('comment_time','desc')
->orderBy('updated_at','desc')
->paginate();
foreach ($result as $key => $value) {
$time = date('Y-m-d H:i', strtotime($value->created_at));
$value->time = $time;
$teacher = Consultation::where('id', $consult_id)->first();
$user = MerchantUser::where('id', $value->merchant_user_id)->first();
$value->avatar = $user->pic ?? User::DefaultAvatar;
if ($user && $user->nickname) {
$value->name = $user->nickname;
}
$value->is_mine = $value->merchant_user_id == $merchant_user_id ? 1 : 0;
$value->duration = $teacher->duration ?? 60;
unset($value->viewer);
unset($value->anchor);
}
return $this->success('ok', $result);
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 删除咨询评论
* @param Request $request
* @return JsonResponse|string
*/
public function deleteConsultComment(Request $request)
{
try {
$merchant_id = $request->account_id;
$consult_recode_id = $request->consult_recode_id;
if (!$consult_recode_id) {
$this->failure('咨询订单ID不能为空');
}
$consultationRecords = ConsultationRecords::where('id', $consult_recode_id)
->where('merchant_id', $merchant_id)
->first();
if ($consultationRecords) {
$consultationRecords->comment = null;
$consultationRecords->Praise = null;
$consultationRecords->save();
} else {
$this->failure('评论不存在或不属于您的订单');
}
return $this->success('ok');
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 编辑咨询服务
* *
* @param Request $request
* @param $id
* @return JsonResponse|string
*/
public function updateConsultService(Request $request, $id)
{
try {
$await_checkoutTextArray = [];
$con = Consultation::where('id', $id)->first();
$price = $request->price ?? 0;
if ($request->price && !is_numeric($request->price)) return $this->failure('请输入正确价格');
if ($request->price && $request->price < 0) return $this->failure('请输入正确价格');
if ($request->consult_account_id && $con->consult_account_id != $request->consult_account_id) {
$con->consult_account_id = $request->consult_account_id;
}
if ($request->title && $con->title != $request->title) {
$con->title = $request->title;
$await_checkoutTextArray[] = $request->title;
}
if ($request->has('price') && $con->price != $price) {
$con->price = $price;
$await_checkoutTextArray[] = $price;
}
if ($request->introduction && $con->introduction != $request->introduction) {
$con->introduction = $request->introduction;
// $await_checkoutTextArray[] = $request->introduction;
}
if ($request->duration && $con->duration != $request->duration) {
$con->duration = $request->duration;
$await_checkoutTextArray[] = $request->duration;
}
if ($request->pic && $con->pic != $request->pic) {
$con->pic = $request->pic;
$result = \CommonUtilsService::imageContentCecurity([$request->pic]);
if ($result && isset($result['result']) && $result['result']) {
return $this->failure('图片' . $result['result'] . ',请换一张照片');
}
}
//敏感词汇过滤
$result = \CommonUtilsService::checkoutTextArrayV3($await_checkoutTextArray);
if ($result['code'] == 1) {
return $this->failure($result['cause']);
}
if ($request->has('status')) {
$con->status = $request->status;
}
if ($request->has('is_top')) {
$con->is_top = $request->is_top;
$con->top_time = $request->is_top ? date('Y-m-d H:i:s') : null;
}
if ($request->has('first_buy_discount')){
if ($request->first_buy_discount > 1) {
return $this->failure('首次购买折扣比例不可以大于1');
}
$con->first_buy_discount = $request->first_buy_discount;
}
$con->save();
if ($request->has('ratio') && $request->ratio >= 0) {
if ($request->ratio > 1.0) {
return $this->failure('利润分成不可以大于1');
}
$rule = MEarningRule::where('m_id', $request->account_id)->where('type_id', 0)->where('name', 'consult')->first();
$MEarningRule = MEarningRule::where('m_id', $request->account_id)->where('type_id', $id)
->where('name', 'consult')
->first();
if (empty($MEarningRule)) {
$MEarningRule = new MEarningRule();
$MEarningRule->forzen_time = $rule?$rule->forzen_time : 1;
$MEarningRule->m_id = $request->account_id;
$MEarningRule->name = 'consult';
$MEarningRule->ratio = $request->ratio;
$MEarningRule->type_id = $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->save();
} elseif ($MEarningRule['ratio'] != $request->ratio) {
$MEarningRule->forzen_time = $rule?$rule->forzen_time : 1;
$MEarningRule->ratio = $request->ratio;
$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
* @param $id
* @return JsonResponse|string
*/
public function removeConsultService(Request $request, $id)
{
try {
Consultation::where('id', $id)->delete();
return $this->success('ok');
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 咨询管理
* *
* @param Request $request
* @return JsonResponse|string
*/
public function consulateRecords(Request $request)
{
try {
$account_id = $request->account_id;
$mobile = MerchantAccount::where('id', $account_id)->value('mobile');
$anchor = Anchor::where('m_id', $request->account_id)->first();
$keyword = $request->keyword;
$status = $request->status ?? 0; //0:未受理 1:已受理 2:已完成
$pay_status = $request->pay_status ?? 0;//0未支付 1已支付
$records = ConsultationRecords::where('anchor_id', $anchor->id);
if ($status != 3) {
$records = $records->where('status', $status);
}
if ($pay_status != 2) {
$records = $records->where('pay_status', $pay_status);
}
if ($keyword) {
$records = $records->where(function ($sql) use ($keyword) {
$sql->where('phone', 'like', '%' . $keyword . '%')
->orWhere('name', 'like', '%' . $keyword . '%');
});
}
$records = $records->orderBy('id', 'desc')->paginate();
return $this->success('ok', $records);
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 咨询数据
* *
* @param Request $request
* @param $id
* @return JsonResponse|string
*/
public function consultStat(Request $request, $id)
{
try {
$end_time = $request->end_time;
$start_time = date('Y-m-d H:i:s', strtotime('-6 days', strtotime($end_time)));
$week_order_num = [];//近一周(支付)订单数
$date = [];
//间隔天数
$between_time = ceil((strtotime($end_time) - strtotime($start_time)) / 3600 / 24) + 1;
for ($i = 0; $i < $between_time; $i++) {
$date[] = date("Y-m-d", strtotime("+$i day", strtotime($start_time)));
}
// dd($date);
foreach ($date as $start_time) {
$date_arr[] = $start_time;
// dd($date_arr);
$start_time = $start_time . ' 00:00:00';
$end_time = date("Y-m-d 23:59:59", strtotime($start_time));
$week_order_num = ConsultationRecords::where('consulation_id', $id)->where('pay_status', 1)->whereBetween('created_at', [$start_time, $end_time])->count();
$daily_order_num[] = $week_order_num;
$consume_cash = ConsultationRecords::where('consulation_id', $id)->where('pay_status', 1)->whereBetween('created_at', [$start_time, $end_time])->sum('price');
$daily_consume_cash[] = $consume_cash;
$consume_num = ConsultationRecords::where('consulation_id', $id)->where('pay_status', 1)->groupBy('name')->count();
$daily_consume_num[] = $consume_num;
}
$pv = Redis::zscore('consulation', $id) ?? 0;
return $this->success('ok', compact('date_arr', 'daily_order_num', 'daily_consume_cash', 'daily_consume_num', 'pv'));
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 移动端咨询详情
* *
* @param Request $request
* @param $consult_id
* @return JsonResponse|string
*/
public function phoneConsultDetail(Request $request, $consult_id)
{
try {
$serve_tab = $request->serve_tab;
$result = Consultation::withTrashed()->where('id', $consult_id)->first();
// if(!$result) return $this->failure('咨询信息有误');
$teacher = ConsultAccount::where('id', $result->consult_account_id)->first();
$result->intro = $teacher->introduction;
$result->name = $teacher->name;
$result->mobile = $teacher->mobile;
$data = ConsultationRecords::where('consulation_id', $consult_id)->where('status', 2)->get();
$Praise = $data->sum('Praise');
$Praise_num = $data->count('Praise');
if ($Praise && $Praise_num) {
$data->Praise_num = number_format($Praise / $Praise_num, 1);
$result->Praise_num = intval($data->Praise_num / 5 * 100);
} else {
$result->Praise_num = 0;
}
$result->pay_num = $Praise_num;
$result->label = json_decode($teacher->label, true);
$result->t_pic = $teacher->pic;
$result->price = floatval($result->price);
$result->experience = $teacher->experience;
$result->seniority = $teacher->seniority;
$result->designation = $teacher->designation;
$result->credentials = json_decode($teacher->credentials, true) ?? [];
$result->mobile = $teacher->mobile;
$result->pv = Redis::zscore('consulation', $consult_id);
$jump_url = urlencode(env('APP_URL') . '/pu/#/consultingDetail/' . $consult_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('ConsultDetail_S' . $consult_id);
if (!$qr_code) {
$qr_code = $this->getPreviewQrcode($url);
Redis::setex('ConsultDetail_S' . $consult_id, 60 * 60 * 24 * 30, $qr_code);
$qr_code = Redis::get('ConsultDetail_S' . $consult_id);
}
$result->share_qr_code = $qr_code;
//消费人数
$result->consume_user_count = TouristOrder::where('type', 'consult')->where('type', $consult_id)->whereIn('pay_status', [1, 4])->groupBy('open_id')->get()->count();
//订单数
$result->consume_order_count = TouristOrder::where('type', 'consult')->where('type', $consult_id)->whereIn('pay_status', [1, 4])->count();
//收入(元)
$result->income_amount = TouristOrder::where('type', 'consult')->where('type_id', $consult_id)->whereIn('pay_status', [1, 4])->sum('price');
//商家分成金额
$order_ids = TouristOrder::where('type', 'consult')->where('type_id', $consult_id)->whereIn('pay_status', [1, 4])->pluck('id')->toArray();
$result->merchant_income_value = MEarning::whereIn('m_order_id', $order_ids)->where('m_user_id', 0)->sum('value');
$orders = TouristOrder::where('type', 'community')->where('type_id', $consult_id)->whereIn('pay_status', [1, 4])->orderBy('id', 'desc')->limit(3)->get();
$avatar = [];
foreach ($orders as $key => $order) {
$avatar[$key] = MerchantUser::where('id', $order->account_id)->value('pic') ?? User::DefaultAvatar;
if (empty($avatar[$key])) $avatar[$key] = User::DefaultAvatar;
}
$result->avatar = $avatar;
//下架或删除状态 0下架 1正常上架 2已删除
$publish_state = 0;
if ($result->deleted_at) {
$publish_state = 2;
} elseif ($result->status == 1) {
$publish_state = 1;
} else {
$publish_state = 0;
}
$result->publish_state = $publish_state;
return $this->success('ok', $result);
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 邀请评价
* @param Request $request
* @return JsonResponse|string
*/
public function inviteComment(Request $request)
{
try {
$id = $request->id;
$order = ConsultationRecords::find($id);
if (!$order) {
return $this->failure('订单未找到');
}
if ($order->pay_status != 1) {
return $this->failure('订单未支付');
}
// if($order->status == 2){
// return $this->failure('订单已结束');
// }
if ($order->comment) {
return $this->failure('订单已评论');
}
$url = env('APP_URL') . "/pu/#/evaluation?id={$order->consulation_id}&orderId={$id}&merchant_id={$order->merchant_id}";
$qrcode = $this->getPreviewQrcode($url);
return $this->success('ok',compact('url','qrcode'));
} catch (\Exception $e) {
$this->getError($e);
return $this->failure($e->getMessage());
}
}
/**
* 结束订单
* @param Request $request
* @return JsonResponse|string
*/
public function closeOrder(Request $request)
{
try {
$id = $request->id;
$order = ConsultationRecords::find($id);
if (!$order) {
return $this->failure('订单未找到');
}
if ($order->pay_status != 1) {
return $this->failure('订单未支付');
}
if($order->status == 2){
return $this->failure('订单已结束');
}
if ($order->comment) {
return $this->failure('订单已评论');
}
$order->status = 2;
$order->save();
$url = env('APP_URL') . "/pu/#/evaluation?id={$order->consulation_id}&orderId={$id}&merchant_id={$order->merchant_id}";
$merchant_user = MerchantUser::find($order->merchant_user_id);
if ($order->scheduling_id && empty($order->reservation_time)){
$scheduling = SaasReservationConsultScheduling::find($order->scheduling_id);
$order->reservation_time = "{$scheduling->date} {$scheduling->date_range}";
}
$consultation = Consultation::find($order->consulation_id);
$text = "咨询{$consultation->title},评价一下吧~";
\CommonUtilsService::consultInviteCommentNotice($merchant_user->openid,$url,$order->name,$order->reservation_time,$text);
return $this->success('ok');
} catch (\Exception $e) {
$this->getError($e);
return $this->failure($e->getMessage());
}
}
}