230 lines
9.8 KiB
PHP
230 lines
9.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Server\Admin;
|
|
|
|
use App\Models\CommunityActivity;
|
|
use App\Models\MEarning;
|
|
use App\Models\Server\MerchantAccount;
|
|
use App\Models\Server\MerchantUser;
|
|
use App\Models\Server\TouristOrder;
|
|
use App\Models\User;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Support\Facades\Redis;
|
|
|
|
class MerchantServiceController extends Controller
|
|
{
|
|
/**
|
|
* 测试方法
|
|
* **/
|
|
public function testAdmin()
|
|
{
|
|
return $this->success("这是一个Admin测试接口");
|
|
}
|
|
|
|
/**
|
|
* 服务商活动成员
|
|
* @param Request $request
|
|
* @return JsonResponse|string
|
|
*/
|
|
public function members(Request $request){
|
|
try {
|
|
$type_id = $request->type_id;
|
|
$type = $request->type;
|
|
$keyword = $request->keyword;
|
|
$pay_status = $request->pay_status??2;
|
|
switch ($type) {
|
|
case 'information':
|
|
$type = 'reward_info';
|
|
break;
|
|
case 'activity':
|
|
$type = 'community';
|
|
break;
|
|
case 'service':
|
|
$type = 'community';
|
|
break;
|
|
default:
|
|
$type = $type;
|
|
break;
|
|
}
|
|
$members = TouristOrder::where('type', $type)->where('type_id',$type_id)->orderBy('id','desc');
|
|
if($pay_status != 2){
|
|
$members = $members->where('pay_status',$pay_status);
|
|
}
|
|
if($keyword){
|
|
$keyword = trim($keyword);
|
|
$members = $members->where(function($sql) use($keyword){
|
|
$sql->where('name','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%');
|
|
});
|
|
}
|
|
$members = $members->paginate();
|
|
return $this->success('ok',$members);
|
|
} catch (\Exception $e) {
|
|
$this->getError($e);
|
|
return $this->failure('操作失败');
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* 数据分析
|
|
* @param Request $request
|
|
* @return JsonResponse|string
|
|
*/
|
|
public function dataAnalysis(Request $request){
|
|
try {
|
|
$type = $request->type;
|
|
$type_id = $request->type_id;
|
|
$data = [];
|
|
$watch_user_count = 0;//访问人数
|
|
$consume_user_count = 0;//消费人数
|
|
$consume_cash_amount = 0;//支付金额
|
|
$love_watch_user_count = 0;//福恋消费人数
|
|
|
|
if ($type == 'course') {
|
|
$watch_user_count = Redis::zscore('coursepv', $type_id) ?? 0;
|
|
} elseif ($type == 'community') {
|
|
$watch_user_count = CommunityActivity::where('id', $type_id)->value('pv') ?? 0;
|
|
} elseif ($type == 'consult') {
|
|
$watch_user_count = Redis::zscore('consulation', $type_id) ?? 0;
|
|
} elseif ($type == 'shop') {
|
|
$watch_user_count = Redis::zscore('shop', $type_id) ?? 0;
|
|
} elseif ($type == 'information') {
|
|
$watch_user_count = Redis::zscore('information', $type_id);
|
|
$type = 'reward_info';
|
|
}
|
|
$obj = TouristOrder::where('type', $type)->where('type_id', $type_id)->whereIn('pay_status', [1, 4]);
|
|
$love_obj = TouristOrder::where('type', $type)->where('type_id', $type_id)->wherein('channel', [1, 2, 3])->whereIn('pay_status', [1, 4]);
|
|
$consume_user_count = $obj->count();
|
|
$consume_cash_amount = $obj->sum('price');
|
|
$love_consume_user_count = $love_obj->count();
|
|
$love_consume_cash_amount = $love_obj->sum('price');
|
|
$data['consume_user_count'] = $consume_user_count;
|
|
$data['consume_cash_amount'] = $consume_cash_amount;
|
|
$data['love_consume_user_count'] = $love_consume_user_count;
|
|
$data['love_consume_cash_amount'] = $love_consume_cash_amount;
|
|
$data['watch_user_count'] = $watch_user_count;
|
|
$data['love_watch_user_count'] = Redis::zscore('love_' . $type . '_pv', $type_id) ?? 0;
|
|
return $this->success('ok', $data);
|
|
}catch (\Exception $e){
|
|
$this->getError($e);
|
|
return $this->failure('服务器休息了,请稍后再试');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 订单数据统计
|
|
* @param Request $request
|
|
* @return JsonResponse|string
|
|
*/
|
|
public function weekOrdersStat(Request $request){
|
|
try {
|
|
$type_id = $request->type_id;//id
|
|
$type = $request->type;
|
|
if ($type == 'information') $type = 'reward_info';
|
|
$week_consume_user_count = 0;//一周消费人数
|
|
$week_consume_cash_amount = 0;//一周支付金额
|
|
|
|
if ($request->start_time && $request->end_time) {
|
|
$start_time = $request->start_time;
|
|
$end_time = $request->end_time;
|
|
//间隔天数
|
|
$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)));
|
|
}
|
|
}
|
|
foreach ($date as $start_time) {
|
|
$date_arr[] = $start_time;
|
|
$start_time = $start_time . ' 00:00:00';
|
|
$end_time = date("Y-m-d 23:59:59", strtotime($start_time));
|
|
$week_consume_user_count = TouristOrder::where('type', $type)->where('type_id', $type_id)->whereIn('pay_status', [1, 4])->whereBetween('created_at', [$start_time, $end_time])->count();
|
|
$consume_user_count[] = $week_consume_user_count;
|
|
$love_week_consume_user_count = TouristOrder::where('type', $type)->where('type_id', $type_id)->whereIn('pay_status', [1, 4])->wherein('channel', [1, 2, 3])->whereBetween('created_at', [$start_time, $end_time])->count();
|
|
$love_consume_user_count[] = $love_week_consume_user_count;
|
|
}
|
|
|
|
return $this->success('ok', compact('date_arr', 'consume_user_count', 'love_consume_user_count'));
|
|
}catch (\Exception $e){
|
|
$this->getError($e);
|
|
return $this->failure('服务器休息了,请稍后再试');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 分成收益记录
|
|
* @param Request $request
|
|
* @return JsonResponse|string
|
|
*/
|
|
public function earningRecord(Request $request)
|
|
{
|
|
try {
|
|
$keyword = $request->keyword;
|
|
$sharer = $request->sharer;
|
|
$m_order_id = TouristOrder::where('type', $request->type)->where('type_id', $request->type_id)->pluck('id');
|
|
$result = MEarning::select('id', 'm_id', 'm_user_id', 'ratio', 'sub_ratio', 'm_order_id', 'sharer', 'value', 'status', 'created_at')->wherein('m_order_id', $m_order_id)->wherenotin('type', ['system', 'reward']);
|
|
if ($sharer)
|
|
$result = $result->where('sharer', $sharer);
|
|
if ($keyword) {
|
|
$keyword = trim($keyword);
|
|
$result = $result->whereHas('order', function ($sql) use ($keyword) {
|
|
$sql->where('name', 'like', '%' . $keyword . '%')
|
|
->orWhere('mobile', 'like', '%' . $keyword . '%')
|
|
->orWhere('desc', 'like', '%' . $keyword . '%');
|
|
});
|
|
}
|
|
$result = $result->where('type', '<>', 'enter');
|
|
$result = $result->orderBy('id', 'desc')->paginate();
|
|
foreach ($result as $key => $value) {
|
|
if ($value->user) {
|
|
$value->sharer_user_name = $value->user->nickname ?? '匿名用户';
|
|
$value->sharer_user_pic = $value->user->pic ?? User::DefaultAvatar;
|
|
$value->sharer_user_mobile = $value->user->mobile ?? '';
|
|
} else {
|
|
$merchant_id = TouristOrder::where('id', $m_order_id)->value('merchant_id');
|
|
$user = MerchantAccount::where('id', $merchant_id)->first();
|
|
$value->sharer_user_name = $user->anchor->name ?? '匿名用户';
|
|
$value->sharer_user_pic = $user->anchor->pic ?? User::DefaultAvatar;
|
|
$value->sharer_user_mobile = $user->mobile ?? '';
|
|
}
|
|
|
|
$value->pay_user_mobile = $value->order->mobile ?? '';
|
|
$payUser = 0;
|
|
if ($value->order) {
|
|
$payUser = MerchantUser::where('id', $value->order->account_id)->first();
|
|
}
|
|
$value->pay_user_mobile = $value->order->mobile ?? '';
|
|
$value->title = $value->order->desc ?? '';
|
|
$value->order_price = $value->order->price ?? 0;
|
|
$value->pay_user_name = !empty($payUser) ? $payUser->nickname : '匿名用户';
|
|
$value->pay_user_pic = !empty($payUser) ? $payUser->pic : User::DefaultAvatar;
|
|
switch ($value->sharer) {
|
|
case 'first_sharer':
|
|
$value->sharer = '首邀';
|
|
break;
|
|
case 'other_sharer':
|
|
$value->sharer = '间接';
|
|
break;
|
|
case 'last_sharer':
|
|
$value->sharer = '促成';
|
|
break;
|
|
case 'merchant':
|
|
$value->sharer = '商家';
|
|
break;
|
|
default:
|
|
$value->sharer = '商家';
|
|
break;
|
|
}
|
|
unset($value->user);
|
|
unset($value->order);
|
|
}
|
|
return $this->success('ok', $result);
|
|
}catch (\Exception $e){
|
|
$this->getError($e);
|
|
return $this->failure('服务器休息了,请稍后再试');
|
|
}
|
|
}
|
|
|
|
}
|