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

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('服务器休息了,请稍后再试');
}
}
}