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

391 lines
17 KiB
PHP
Raw Normal View History

2026-04-02 09:20:51 +08:00
<?php
namespace App\Http\Controllers\Server\Admin;
use App\Models\Live\Anchor;
use App\Models\MerchantAccount;
use App\Models\Server\AllianceMerchant;
use App\Models\Server\MarketService;
use App\Models\Server\MerchantMembers;
use App\Models\Server\MerchantService;
use App\Models\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
class AllianceController extends Controller
{
/**
* 检查商户状态是不是联盟
* @param $merchant_id
*/
private function checkAlliance($merchant_id){
$anchor = Anchor::where('m_id',$merchant_id)->where('service_nature','alliance')
->first();
if($anchor){
return true;
}else{
return false;
}
}
/**
*获取联盟商家列表
* @param Request $request
*/
public function getAllianceMerchantList(Request $request){
try {
$keyword = $request->keyword;
$merchant_id = $request->account_id;
$audit_type = $request->audit_type;
$is_alliance = $this->checkAlliance($merchant_id);
if (!$is_alliance) {
return $this->failure('该商家目前不是联盟状态或你没有权限');
}
$alliance_merchant = AllianceMerchant::where('alliance_id', $merchant_id)
->leftJoin('live_anchors', function ($join) use ($merchant_id){
$join->on('alliance_merchants.mch_id', '=', 'live_anchors.m_id');
})
->when(isset($audit_type), function ($query) use ($audit_type) {
$query->where('audit_type', $audit_type);
})
->select('live_anchors.*','alliance_merchants.audit_type','alliance_merchants.updated_at')
->when($keyword,function ($query) use($keyword){
$query->where('live_anchors.name','like',"%$keyword%");
})
->orderBy('alliance_merchants.updated_at','desc')
->paginate();
return $this->success('ok', $alliance_merchant);
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 获取联盟商家详情
* @param Request $request
* @return \Illuminate\Http\JsonResponse|string
*/
public function getAllianceMerchantInfo(Request $request){
try {
$alliance_merchant_id = $request->alliance_merchant_id;
$serve_tab = $request->serve_tab;
$account = MerchantAccount::select('id', 'qr_code', 'share_icon', 'share_subtitle', 'share_title', 'openid', 'choose_tarbar', 'template_position', 'member_info', 'mobile', 'email')
->where('id', $alliance_merchant_id)
->first();
$type = $request->type;
if ($type == 'simple') {
$anchor = Anchor::where('m_id', $alliance_merchant_id)->select('id', 'm_id', 'pic', 'name', 'mobile')->first();
} else {
$anchor = Anchor::where('m_id', $alliance_merchant_id)->select('id', 'm_id', 'service_nature', 'pic', 'name', 'designation', 'introduction')->first();
}
if ($anchor->service_nature == 'team' && $account->member_info) {
$account->member_info = json_decode($account->member_info, true);
}
$jump_url = urlencode(env('APP_URL') . '/pu/#/');
$share_url = env('APP_URL') . '/api/official/live/wechat/FamilyAuth?merchant_id=' . $alliance_merchant_id . '&anchor_openid=' . $anchor->openid .'&serve_tab='.$serve_tab. '&url=' . $jump_url;
$qr_codes = Redis::get('HomePage_S' . $alliance_merchant_id);
if (!$qr_codes) {
$qr_codes = $this->getPreviewQrcode($share_url);
Redis::setex('HomePage_S' . $alliance_merchant_id, 60 * 60 * 24 * 30, $qr_codes);
$qr_codes = Redis::get('HomePage_S' . $alliance_merchant_id);
}
if ($account->choose_tarbar) {
$account->choose_tarbar = json_decode($account->choose_tarbar, true);
} else {
$account->choose_tarbar = null;
}
if ($account->template_position) {
$account->template_position = json_decode($account->template_position, true);
} else {
$account->template_position = null;
}
$location_latitude = $account->info ? $account->info->location_latitude : null;
$location_longitude = $account->info ? $account->info->location_longitude : null;
$address = $account->info ? $account->info->address : null;
//$account['sign_code'] = $this->getSignInQrCode($alliance_merchant_id,null,null);
//$account->admin_name = null;
return $this->success('ok', compact('anchor', 'account', 'qr_codes', 'share_url', 'location_longitude', 'location_latitude', 'address'));
} catch (\Exception $e) {
DB::rollBack();
$this->getError($e);
return $this->failure('获取个人资料失败');
}
}
/**
* 删除联盟成员,同时删除成员的服务
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function deleteAllianceMerchant(Request $request){
try {
$merchant_id = $request->account_id;
$alliance_merchant_id = $request->alliance_merchant_id;
$admin_id = $request->merchant_admin_id;
if(!$alliance_merchant_id){
return $this->failure('参数不全');
}
$is_alliance = $this->checkAlliance($merchant_id);
if (!$is_alliance) {
return $this->failure('该商家目前不是联盟状态或你没有权限');
}
DB::beginTransaction();
$allianceMerchant = AllianceMerchant::where('alliance_id', $merchant_id)->where('mch_id', $alliance_merchant_id)
->first();
if (!$allianceMerchant) {
return $this->failure('联盟商家不存在');
}
if($allianceMerchant->alliance_id == $alliance_merchant_id){
return $this->failure('您是联盟创建者,不能删除自己');
}
$allianceMerchant->delete();
MarketService::where('merchant_id', $merchant_id)
->where('market_type',2)
->delete();
MerchantService::where('merchant_id', $merchant_id)
->where('service_type',2)
->delete();
DB::commit();
$alliance_anchor = Anchor::where('m_id',$merchant_id)->first();
$alliance_member = Anchor::where('m_id',$alliance_merchant_id)->first();
if($alliance_anchor && $alliance_anchor->mobile && $alliance_member && $alliance_member->mobile){
$this->sentMessage($alliance_member->mobile, '联盟'.$alliance_anchor->name.'已将你除名');
}
return $this->success('ok');
}catch (\Exception $e){
DB::rollBack();
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 联盟商家审核
* @param Request $request
* @return \Illuminate\Http\JsonResponse|string
*/
public function auditAllianceMerchant(Request $request){
try {
$merchant_id = $request->account_id;
$admin_id = $request->merchant_admin_id;
$alliance_merchant_id = $request->alliance_merchant_id;
$err_msg = $request->err_msg;
$audit_type = $request->audit_type;
if(!$alliance_merchant_id || !$audit_type){
return $this->failure('参数不全');
}
$is_alliance = $this->checkAlliance($merchant_id);
if (!$is_alliance) {
return $this->failure('该商家目前不是联盟状态');
}
$alliance_merchant = AllianceMerchant::where('alliance_id', $merchant_id)->where('mch_id', $alliance_merchant_id)
->first();
if (!$alliance_merchant) {
return $this->failure('商家不存在');
}
if ($audit_type == 3 && empty($err_msg)) {
return $this->failure('审核不能过时须要提供理由');
}
if($audit_type == 2){ //以前审核不通过,现在审核通过,清除不通过原因
$alliance_merchant->err_msg = null;
}
if($alliance_merchant->audit_info){
$audit_info = json_decode($alliance_merchant->audit_info);
}
$audit_info[] = [
'audited_at' => date('Y-m-d H:i:s'),
'audit_admin_id' => $admin_id ?? 0,
'audit_type' => $audit_type,
'err_msg' => $err_msg,
];
$alliance_merchant->audit_type = $audit_type;
$alliance_merchant->err_msg = $err_msg;
$alliance_merchant->audit_info = json_encode($audit_info);
$alliance_merchant->save();
$alliance_anchor = Anchor::where('m_id',$merchant_id)->first();
$alliance_member = Anchor::where('m_id',$alliance_merchant_id)->first();
if($alliance_anchor && $alliance_anchor->mobile && $alliance_member && $alliance_member->mobile){
if($audit_type ==2){
$status = '已通过.';
}elseif($audit_type ==3){
$status = '被拒绝.';
}else{
$status = '正在审核';
}
$this->sentMessage($alliance_member->mobile, '您申请加入的'.$alliance_anchor->name.'联盟'.$status);
}
return $this->success('ok');
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 申请加入联盟
* @param Request $request
* @return \Illuminate\Http\JsonResponse|string
*/
public function joinAlliance(Request $request){
try {
$merchant_id = $request->account_id;
$admin_id = $request->merchant_admin_id;
$alliance_id = $request->alliance_id;
if(!$alliance_id){
return $this->failure('参数不全');
}
$is_alliance = $this->checkAlliance($alliance_id);
if (!$is_alliance) {
return $this->failure('该商家目前不是联盟状态');
}
if($alliance_id == $merchant_id){
return $this->failure('你不能加入自己创建的联盟');
}
$alliance_merchant = AllianceMerchant::where('alliance_id', $alliance_id)->where('mch_id', $merchant_id)
->first();
if($alliance_merchant) {
if ($alliance_merchant->audit_type == 1 || $alliance_merchant->audit_type == 2) {
return $this->failure('您已经加盟或已经提交了申请');
} elseif ($alliance_merchant->audit_type == 3) {
$alliance_merchant->audit_type = 1;
$alliance_merchant->save();
return $this->success('ok');
}
}
$alliance_merchant = new AllianceMerchant();
$alliance_merchant->alliance_id = $alliance_id;
$alliance_merchant->mch_id = $merchant_id;
$alliance_merchant->audit_type = 1;
$alliance_merchant->save();
$alliance_anchor = Anchor::where('m_id',$alliance_id)->first();
$alliance_member = Anchor::where('m_id',$merchant_id)->first();
if($alliance_anchor && $alliance_anchor->mobile && $alliance_member && $alliance_member->mobile){
$this->sentMessage($alliance_anchor->mobile, '用户: '.$alliance_member->name.
', 手机号: '.$alliance_member->mobile.' 申请加入您的联盟,请及时审核');
}
return $this->success('ok');
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 退出联盟
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function quitAlliance(Request $request){
try {
$merchant_id = $request->account_id;
$admin_id = $request->merchant_admin_id;
$alliance_id = $request->alliance_id;
$alliance_merchant = AllianceMerchant::where('alliance_id', $alliance_id)->where('mch_id', $merchant_id)
->first();
if (!$alliance_merchant) {
return $this->failure('您没有加入过此联盟或已经通出了联盟');
}
if($alliance_merchant->alliance_id == $merchant_id){
return $this->failure('您是联盟的创建者,不能退出联盟');
}
DB::beginTransaction();
$alliance_merchant->delete();
MarketService::where('merchant_id', $alliance_id)
->where('market_type',2)
->delete();
MerchantService::where('merchant_id', $alliance_id)
->where('service_type',2)
->delete();
DB::commit();
$alliance_anchor = Anchor::where('m_id',$alliance_id)->first();
$alliance_member = Anchor::where('m_id',$merchant_id)->first();
if($alliance_anchor && $alliance_anchor->mobile && $alliance_member && $alliance_member->mobile){
$this->sentMessage($alliance_anchor->mobile, '商家: '.$alliance_member->name.' 已退出您的联盟');
}
return $this->success('ok');
}catch (\Exception $e){
DB::rollBack();
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 获取所有联盟列表
* @param Request $request
*/
public function getAllianceList(Request $request){
try {
$merchant_id = $request->account_id;
$keyword = $request->keyword;
$alliance_ids = Anchor::where('service_nature', 'alliance')
->when($keyword,function ($query) use($keyword){
$query->where('live_anchors.name','like',"%$keyword%");
})
->orderBy('created_at','desc')
->paginate();
foreach ($alliance_ids as $alliance){
$alliance_merchant = AllianceMerchant::where('alliance_id',$alliance->m_id)
->where('mch_id',$merchant_id)
->first();
if($alliance_merchant){
if($alliance_merchant->audit_type == 3){
$alliance->is_join = 0;
}else{
$alliance->is_join = 1;
}
}else{
$alliance->is_join = 0;
}
}
return $this->success('ok', $alliance_ids);
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
/**
* 获取我加入的联盟列表
* @param Request $request
* @return \Illuminate\Http\JsonResponse|string
*/
public function getMyAllianceList(Request $request){
try {
$merchant_id = $request->account_id;
$no_page = $request->no_page;
$keyword = $request->keyword;
$audit_type = $request->audit_type;
$alliance_list = AllianceMerchant::where('alliance_merchants.mch_id', $merchant_id)
->leftJoin('live_anchors', 'alliance_merchants.alliance_id', 'live_anchors.m_id')
->where('alliance_merchants.alliance_id','!=',$merchant_id)
->when($audit_type,function ($query) use($audit_type){
$query->where('alliance_merchants.audit_type',$audit_type);
})
->when($keyword,function ($query) use($keyword){
$query->where('live_anchors.name','like',"%$keyword%");
})
->select('live_anchors.m_id','live_anchors.name','live_anchors.pic','live_anchors.designation',
'alliance_merchants.created_at');
if($no_page){
$alliance_list = $alliance_list->orderBy('alliance_merchants.created_at','desc')
->get();
}else {
$alliance_list = $alliance_list->orderBy('alliance_merchants.created_at','desc')
->paginate();
}
return $this->success('ok', $alliance_list);
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
}