love_php/app/Http/Controllers/Server/Admin/SaasMemberController.php

432 lines
19 KiB
PHP
Raw Normal View History

2026-04-02 09:20:51 +08:00
<?php
namespace App\Http\Controllers\Server\Admin;
use App\Contracts\UserContract;
use App\Models\Server\MerchantEvaluate;
use App\Models\Server\MerchantUser;
use App\Models\Server\SaasMemberBuyInfo;
use App\Models\Server\SaasMemberColumns;
use App\Models\Server\SaasMemberLevel;
use App\Models\Server\SaasMemberUser;
use App\Models\TouristOrder;
use App\Models\User;
use App\Models\Wechat;
use App\Services\SaasVipSpreadService;
use App\Services\SaasVipUserService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Carbon;
class SaasMemberController extends Controller
{
protected $userCon;
public function __construct(UserContract $userCon)
{
$this->userCon = $userCon;
}
/**
* 创建会员等级
* @param Request $request
*/
public function createSaasMemberLevel(Request $request){
try {
$merchant_id = $request->account_id;
$member_level = $request->all();
if (!$member_level['level_title'] || !$member_level['level_pic'] || !isset($member_level['level_price']) ||
!isset($member_level['level_years']) || !isset($member_level['level_month'])) {
return $this->failure('参数不全');
}
$divide_status = $request->input('divide_status') ?? 0;
$merchant_ratio = $request->input('merchant_ratio') ?? 0;
$facilitate_ratio = $request->input('facilitate_ratio') ?? 0;
$describe = $request->input('describe') ?? '';
if(($merchant_ratio + $facilitate_ratio) > 1){
return $this->failure('商家比例和促成比例相加不能超过100%');
}
$gain = $request->input('gain');
$member_level_db = SaasMemberLevel::where('level_title', $member_level['level_title'])
->where('merchant_id', $merchant_id)
->where('level_years', $member_level['level_years'])
->where('level_month', $member_level['level_month'])
->first();
if (!$member_level_db) {
$member_level_db = new SaasMemberLevel();
$member_level_db->merchant_id = $merchant_id;
$member_level_db->level_years = $member_level['level_years'];
$member_level_db->level_month = $member_level['level_month'];
$member_level_db->level_title = $member_level['level_title'];
$member_level_db->level_sub_title = $member_level['level_sub_title'];
$member_level_db->level_pic = $member_level['level_pic'];
$member_level_db->level_price = $member_level['level_price'];
$member_level_db->divide_status = $divide_status;
$member_level_db->merchant_ratio = $merchant_ratio;
$member_level_db->facilitate_ratio = $facilitate_ratio;
$member_level_db->gain = $gain;
$member_level_db->describe = $describe;
$member_level_db->save();
} else {
$member_level_db->level_sub_title = $member_level['level_sub_title'];
$member_level_db->level_pic = $member_level['level_pic'];
$member_level_db->level_price = $member_level['level_price'];
$member_level_db->divide_status = $divide_status;
$member_level_db->merchant_ratio = $merchant_ratio;
$member_level_db->facilitate_ratio = $facilitate_ratio;
$member_level_db->gain = $gain;
$member_level_db->describe = $describe;
$member_level_db->save();
}
if (isset($member_level['level_column']) && is_array($member_level['level_column'])) {
foreach ($member_level['level_column'] as $key => $val) {
$column = SaasMemberColumns::where('merchant_id', $merchant_id)->where('level_id', $member_level_db->id)
->where('column_name', $val['column_name'])
->first();
if (!$column) {
$column = new SaasMemberColumns();
$column->merchant_id = $merchant_id;
$column->level_id = $member_level_db->id;
$column->column_name = $val['column_name'];
$column->column_value = $val['column_value'];
$column->save();
}
}
}
return $this->success('ok');
}catch (\Exception $e) {
$this->getError($e);
return $this->failure($e->getMessage());
}
}
/**
* 查询商家会员等级列表
* @param Request $request
*/
public function getSaasMemberLevelList(Request $request){
try {
$keyword = $request->keyword;
$merchant_id = $request->account_id;
$member_level = SaasMemberLevel::with('memberColumn')->where('merchant_id',$merchant_id)
->when($keyword,function ($query) use($keyword,$merchant_id){
$query->where(function ($sub_query) use($keyword,$merchant_id){
$sub_query->where('merchant_id', $merchant_id)
->Where('level_sub_title', 'like', "%$keyword%");
})
->orWhere(function ($sub_query) use($keyword,$merchant_id){
$sub_query->where('merchant_id', $merchant_id)
->Where('level_title', 'like', "%$keyword%");
});
})
->orderBy('updated_at','desc')
->paginate();
return $this->success('ok',$member_level);
}catch (\Exception $e) {
$this->getError($e);
return $this->failure('操作失败');
}
}
/**
* 查询商家会员等级详情
* @param Request $request
*/
public function getSaasMemberLevelDetail(Request $request,SaasVipSpreadService $s){
try {
$merchant_id = $request->account_id;
$level_id = $request->level_id;
$member_level = SaasMemberLevel::with('memberColumn')
->where('merchant_id',$merchant_id)
->where('id',$level_id)
->first();
if(!$member_level){
return $this->success('ok',$member_level);
}
$gain = json_decode($member_level->gain);
$member_level->gain = $gain;
if(!$gain){
return $this->success('ok',$member_level);
}
foreach ($gain as $item){
if($item->type && isset($item->merchant_id) && $item->id){
$item->data = $s->getGain($item->type,$item->merchant_id,$item->id);
if(isset($item->sku_id)){
$sku = $item->data->sku ?? null;
$item->sku_name = '';
$item->sku_price = '';
if(!$sku){
continue;
}
foreach ($sku as $u){
if($u->sku_id == $item->sku_id){
$item->sku_name = $u->name;
$item->sku_price = number_format($u->price,2);
}
}
}
}
}
return $this->success('ok',$member_level);
}catch (\Exception $e) {
$this->getError($e);
return $this->failure($e->getMessage() . $e->getLine());
}
}
/**
* 更新会员等级
* @param Request $request
* @return JsonResponse|string
*/
public function updateSaasMemberLevel(Request $request){
$merchant_id = $request->account_id;
$member_level = $request->all();
if (!$member_level['level_title'] || !$member_level['level_pic'] || !isset($member_level['level_price']) ||
!isset($member_level['level_years']) || !isset($member_level['level_month']) || !isset($member_level['level_id']) ) {
return $this->failure('参数不全');
}
$level = SaasMemberLevel::where('id', $member_level['level_id'])
->where('merchant_id', $merchant_id)
->first();
if(!$level){
return $this->failure('vip不存在');
}
if(isset($member_level['level_title']) && $member_level['level_title'] != $level->level_title){
$level->level_title = $member_level['level_title'];
}
if(isset($member_level['level_sub_title']) && $member_level['level_sub_title'] != $level->level_sub_title){
$level->level_sub_title = $member_level['level_sub_title'];
}
if(isset($member_level['level_pic']) && $member_level['level_pic'] != $level->level_pic){
$level->level_pic = $member_level['level_pic'];
}
if(isset($member_level['level_price']) && $member_level['level_price'] != $level->level_price){
$level->level_price = $member_level['level_price'];
}
if(isset($member_level['level_years']) && $member_level['level_years'] != $level->level_years){
$level->level_years = $member_level['level_years'];
}
if(isset($member_level['level_month']) && $member_level['level_month'] != $level->level_month){
$level->level_month = $member_level['level_month'];
}
//分成开关 1开 0关
if(isset($member_level['divide_status'])){
$level->divide_status = $member_level['divide_status'];
}
//商家比例
if(isset($member_level['merchant_ratio'])){
$level->merchant_ratio = $member_level['merchant_ratio'];
}
//促成比例
if(isset($member_level['facilitate_ratio'])){
$level->facilitate_ratio = $member_level['facilitate_ratio'];
}
if(isset($member_level['merchant_ratio']) && isset($member_level['facilitate_ratio'])){
if( ($member_level['merchant_ratio'] + $member_level['facilitate_ratio']) > 1){
return $this->failure('商家比例和促成比例相加不能超过100%');
}
}
//介绍
if (isset($member_level['describe'])){
$level->describe = $member_level['describe'];
}
$gain = $request->input('gain');
if($gain){
$level->gain = $gain;
}
$level->save();
if (isset($member_level['level_column']) && is_array($member_level['level_column'])) {
$value_name = [];
foreach ($member_level['level_column'] as $key => $val) {
$column = SaasMemberColumns::where('merchant_id', $merchant_id)->where('level_id', $level->id)
->where('column_name', $val['column_name'])
->first();
if (!$column) {
$column = new SaasMemberColumns();
$column->merchant_id = $merchant_id;
$column->level_id = $level->id;
$column->column_name = $val['column_name'];
$column->column_value = $val['column_value'];
$column->save();
}
$value_name[] = $val['column_name'];
}
$column_array = SaasMemberColumns::where('merchant_id', $merchant_id)->where('level_id', $level->id)
->pluck('column_name')
->toArray();
if(is_array($value_name) && is_array($column_array)){
$diff_array = array_diff($column_array,$value_name);
if(is_array($diff_array)){
foreach ($diff_array as $array_key => $array_val){
SaasMemberColumns::where('merchant_id', $merchant_id)->where('level_id', $level->id)
->where('column_name',$array_val)
->delete();
SaasMemberBuyInfo::where('merchant_id',$merchant_id)->where('level_id',$level->id)
->where('column_name',$array_val)
->delete();
}
}
}
}
return $this->success('ok');
}
/**
* 删除会员等级
*/
public function deleteSaasMemberLevel(Request $request){
try {
$merchant_id = $request->account_id;
$level_id = $request->level_id;
if (!$level_id) {
return $this->failure('等级ID不能为空');
}
SaasMemberLevel::where('merchant_id', $merchant_id)
->where('id', $level_id)
->delete();
SaasMemberColumns::where('merchant_id', $merchant_id)
->where('level_id', $level_id)
->delete();
return $this->success('ok');
}catch (\Exception $e) {
$this->getError($e);
return $this->failure('操作失败');
}
}
/**
* 用户填写信息列表
*/
public function getSaasMemberUserInfo(Request $request, SaasVipUserService $s)
{
try {
$merchant_id = $request->account_id;
$level_id = $request->level_id;
$keyword = $request->keyword;
$expire = $request->expire ?? null;
$where = [
['member_level_id', '=', $level_id],
['merchant_id', '=', $merchant_id]
];
if ($expire == 0) {
$where[] = ['expire_time', '>', date('Y-m-d H:i:s')];
} else {
$where[] = ['expire_time', '<', date('Y-m-d H:i:s')];
}
$data = SaasMemberUser::with('merchantUser')
->where($where)
->whereHas('merchantUser', function ($q) use ($keyword) {
if ($keyword) {
$q->where('nickname', 'like', "%{$keyword}%");
}
})
->orderBy('created_at', 'desc')
->paginate();
$data->transform(function ($value) use ($level_id, $merchant_id, $s) {
$where = [
['type', '=', 'member'],
['type_id', '=', $level_id],
['merchant_id', '=', $merchant_id],
['account_id', '=', $value->merchant_user_id],
['created_at', '<=', $value->expire_time]
];
$value->order = TouristOrder::where($where)->whereIn('pay_status', [1, 4])->first();
$value->order->linkmen = json_decode($value->order->linkmen);
$value->created_at = $value->order->created_at;
//默认头像
$value->merchantUser->pic = $value->merchantUser->pic ?: User::DefaultAvatar;
//是否注册福恋小程序
$fulink_user_id = $s->matchFulinkUser($value->merchant_user_id,$value->order->mobile);
$value->is_reg_fulink = $fulink_user_id ? 1 : 0;
$value->fulink_user_id = $fulink_user_id;
$fulink_user_status = [
'is_ban' => null, //封号状态 1封号 0未封
'information_close' => null,//资料关闭 1关闭 0未关闭
'information_perfect' => null, //资料完善 1已完善 0未完善
];
if($value->is_reg_fulink){
$frozen_state = $this->userCon->getUserBannedState($fulink_user_id);
$fulink_user_status['is_ban'] = $frozen_state ? 1 : 0;
$fulink_user = User::find($fulink_user_id);
$fulink_user_status['information_close'] = $fulink_user->hidden_profile == 'ALLSEX' ? 1 : 0;
$base_info = $this->userCon->isCompleteBaseInfo($fulink_user);
$fulink_user_status['information_perfect'] = $base_info == 2 ? 1 : 0;
}
$value->fulink_user_status = $fulink_user_status;
return $value;
});
return $this->success('ok', $data);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('操作失败');
}
}
/**
* 订单列表
*/
/**
*获取
* @param Request $request
* @return JsonResponse|string
*/
public function getMemberOrder(Request $request){
try {
$merchant_id = $request->account_id;
$nopage = $request->nopage;
$keyword = $request->keyword;
$type_id = $request->type_id;
$spread_merchant_name = $request->spread_merchant_name;
$facilitate_name = $request->facilitate_name;
$members = \App\Models\Server\TouristOrder::with('viewer:avatar as pic,mobile,openid,sex,nickname',
'merUser', 'alliance', 'fromUser:user_id as id,avatar,mobile,openid,sex,nickname','spreadAnchor','fromUsers')
->where('type','member')->where('merchant_id',$merchant_id)
->when($type_id,function ($query) use ($type_id){
$query->where('type_id',$type_id);
});
if(isset($request->pay_status)){
$members = $members->where('pay_status',$request->pay_status);
}
if($keyword){
$members = $members->where(function ($query) use($keyword){
$query->where('name','like',"%$keyword%")
->orWhere('mobile','like',"%$keyword%");
});
}
if($spread_merchant_name){
$members = $members->whereHas('spreadAnchor',function ($query) use($spread_merchant_name){
$query->where('name','like',"%$spread_merchant_name%");
});
}
if($facilitate_name){
$members = $members->whereHas('fromUser',function ($query) use($facilitate_name){
$query->where('nickname','like',"%$facilitate_name%");
});
}
if($nopage){
$members = $members->orderBy('created_at','desc')->get();
}else{
$members = $members->orderBy('created_at','desc')->paginate();
}
foreach ($members as $item) {
//推广商家创始人数据
$extend = json_decode($item->extend);
$spread_merchant_founder_user_id = $extend->spread_merchant_founder_user_id ?? 0;
$item->spread_merchant_founder = $spread_merchant_founder_user_id ?
MerchantUser::select('id','nickname','user_id','pic')->find($spread_merchant_founder_user_id) : null;
}
return $this->success('ok',$members);
} catch (\Exception $e) {
$this->getError($e);
return $this->failure('操作失败');
}
}
}