823 lines
35 KiB
PHP
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());
|
|
}
|
|
}
|
|
|
|
}
|