432 lines
19 KiB
PHP
432 lines
19 KiB
PHP
<?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('操作失败');
|
|
}
|
|
}
|
|
}
|