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

730 lines
26 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Models\ApproveHistory;
use App\Models\PlatformBehavior;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Paas;
use App\Models\Platform;
use App\Models\PaasWorker;
use App\Models\Wechat;
use App\Models\PlatformUser;
use App\Models\User;
use App\Contracts\PaasContract;
use App\Contracts\UserContract;
use Illuminate\Support\Facades\DB;
class PaasController extends Controller
{
protected $paasCon;
protected $userCon;
public function __construct(PaasContract $paasCon, UserContract $userCon)
{
$this->paasCon = $paasCon;
$this->userCon = $userCon;
}
/**
* 平台列表
* @param Request $request [description]
* @return [type] [description]
*/
public function paasList(Request $request)
{
$paas_list = $this->paasCon->paasList($request);
return $this->success('ok', $paas_list);
}
/**
* 平台详情
* @param Request $request [description]
* @return [type] [description]
*/
public function paas(Request $request, $paas_id)
{
//平台
$paas = $this->paasCon->paas($paas_id);
return $this->success('ok', $paas);
}
/**
* 修改平台信息
* @param Request $request [description]
* @param [type] $paas_id [description]
* @return [type] [description]
*/
public function updatePaas(Request $request, $paas_id)
{
$array = [];
$paas = Paas::find($paas_id);
if ($request->has('title') && $request->title != $paas->title) {
$array['title'] = $request->title;
}
if ($request->has('logo') && $request->logo != $paas->logo) {
$array['logo'] = $request->logo;
}
if ($request->has('intro') && $request->intro != $paas->intro) {
$array['intro'] = $request->intro;
}
if ($request->has('name') && $request->name != $paas->name) {
$array['name'] = $request->name;
}
if ($request->has('status') && $request->status != $paas->status) {
$array['status'] = $request->status;
}
$this->paasCon->updatePaas($array, $paas_id);
return $this->success('ok');
}
/**
* 添加平台
* @param Request $request [description]
* @return [type] [description]
*/
public function createPaas(Request $request)
{
$type = $request->input('type', 0);
$logo = $request->input('logo');
$name = $request->input('name');
if (empty($name)) {
return $this->failure('请输入平台唯一标识,英文大写字母表示');
}else{
$name = strtoupper($name);
$result = Paas::where('name', $name)->exists();
if ($result) {
return $this->failure('该标识已存在');
}
}
$title = $request->input('title');
if (empty($title)) {
return $this->failure('请输入平台名称');
}
$intro = $request->input('intro');
$array = [
'type'=>$type,
'logo'=>$logo,
'name'=>$name,
'title'=>$title,
'intro'=>$intro,
];
$paas = $this->paasCon->createPaas($array);
return $this->success('ok', $paas);
}
/**
* 删除平台
* @param Request $request [description]
* @param [type] $paas_id [description]
* @return [type] [description]
*/
public function deletePaas(Request $request, $paas_id)
{
$this->paasCon->deletePaas($paas_id);
return $this->success('ok');
}
/**
* 平台渠道列表
* @param Request $request [description]
* @param [type] $paas_id [description]
* @return [type] [description]
*/
public function paasPlatforms(Request $request, $paas_id)
{
//渠道
$platforms = $this->paasCon->paasPlatforms($paas_id, 1);
return $this->success('ok', $platforms);
}
/**
* 平台渠道(平台管理员)
* @param Request $request [description]
* @return [type] [description]
*/
public function paasAdminPlatforms(Request $request)
{
$admin_type = $request->session()->get('admin_type');
if ($admin_type == 'paas_admin') {
$paas_obj = $request->session()->get('paas_obj');
$platforms = $this->paasCon->paasPlatforms($paas_obj->id, 1);
return $this->success('ok', $platforms);
}else{
return $this->failure('你不是平台管理员!');
}
}
/**
* 添加渠道
* @param Request $request [description]
*/
public function createPlatform(Request $request)
{
try {
$admin_type = $request->session()->get('admin_type');
if ($admin_type == 'paas_admin') {
$paas_obj = $request->session()->get('paas_obj');
$paas_id = $paas_obj->id;
}else{
$paas_id = $request->input('paas_id');
if (empty($paas_id)) {
return $this->failure('请选择平台');
}
}
$app_id = $request->input('app_id');
if (empty($app_id)) {
return $this->failure('请输入唯一标识');
}else{
$result = Platform::where('app_id', $app_id)->exists();
if ($result) {
return $this->failure('该标识已存在');
}
}
$name = $request->input('name');
if (empty($name)) {
return $this->failure('请输入名称');
}
// $logo = $request->input('logo');
switch ($request->type){
case "mini":
//logo显示小程序码
// $path = 'pages/tabBar/welcome?from_platform='.$app_id;
// $logo = $this->getQrcode($path, 512);
$path = 'pages/tabBar/welcome';
$param = "from_platform={$app_id}";
$logo = $this->getWechatMiniQrcode($path, $param);
break;
case 'app':
if($request->paas_id == 44){
$url = env('APP_URL').'/h5/#/realCertificationApp?app_url=certification&from_platform='.$request->app_id;
}else {
$url = env('APP_URL').'/h5/#/downloadApp?APP_ID=' . $request->app_id;
}
$logo = $this->getUrlqrcode($url);
break;
default:
// $path = 'pages/tabBar/welcome?from_platform='.$app_id;
// $logo = $this->getQrcode($path, 512);
$path = 'pages/tabBar/welcome';
$param = "from_platform={$app_id}";
$logo = $this->getWechatMiniQrcode($path, $param);
break;
}
$array = [
'paas_id'=>$paas_id,
'app_id'=>$app_id,
'name'=>$name,
'logo'=>$logo,
];
$platform = $this->paasCon->createPlatform($array);
return $this->success('ok', $platform);
}catch (\Exception $e){
return $this->failure($e->getMessage());
}
}
/**
* 渠道详情
* @param Request $request [description]
* @param [type] $platform_id [description]
* @return [type] [description]
*/
public function platform(Request $request, $platform_id)
{
$platform = $this->paasCon->platform($platform_id);
$admin_type = $request->session()->get('admin_type');
if ($admin_type == 'paas_admin') {
$paas_obj = $request->session()->get('paas_obj');
if ($platform->paas_id != $paas_obj->id) {
return $this->failure('暂时访问不了该渠道!');
}
}
return $this->success('ok', $platform);
}
/**
* 修改渠道
* @param Request $request [description]
* @param [type] $platform_id [description]
* @return [type] [description]
*/
public function updatePlatform(Request $request, $platform_id)
{
$platform = Platform::find($platform_id);
$admin_type = $request->session()->get('admin_type');
if ($admin_type == 'paas_admin') {
$paas_obj = $request->session()->get('paas_obj');
if ($platform->paas_id != $paas_obj->id) {
return $this->failure('暂时修改不了该渠道!');
}
}
$array = [];
if ($request->has('name') && $request->name != $platform->name) {
$array['name'] = $request->name;
}
if ($request->has('logo') && $request->logo != $platform->logo) {
$array['logo'] = $request->logo;
}
$this->paasCon->updatePlatform($array, $platform_id);
return $this->success('ok');
}
/**
* 删除渠道
* @param Request $request [description]
* @param [type] $platform_id [description]
* @return [type] [description]
*/
public function deletePlatform(Request $request, $platform_id)
{
$platform = Platform::find($platform_id);
$admin_type = $request->session()->get('admin_type');
if ($admin_type == 'paas_admin') {
$paas_obj = $request->session()->get('paas_obj');
if ($platform->paas_id != $paas_obj->id) {
return $this->failure('暂时修改不了该渠道!');
}
}
$this->paasCon->deletePlatform($platform_id);
return $this->success('ok');
}
/**
* 同工列表
* @param Request $request [description]
* @param [type] $paas_id [description]
* @return [type] [description]
*/
public function paasWorkers(Request $request, $paas_id)
{
// 同工
$workers = $this->paasCon->paasWorkers($request, $paas_id, 1);
return $this->success('ok', $workers);
}
/**
* 添加同工
* @param Request $request [description]
* @return [type] [description]
*/
public function createPaasWorker(Request $request)
{
$paas_id = $request->input('paas_id');
if (empty($paas_id)) {
return $this->failure('请选择平台');
}
$user_id = $request->input('user_id');
if (empty($user_id)) {
return $this->failure('请选择用户');
}
$result = PaasWorker::where(['user_id'=>$user_id])->exists();
if ($result) {
return $this->failure('添加失败,该用户已成为同工');
}
$array = ['paas_id'=>$paas_id, 'user_id'=>$user_id];
$worker = $this->paasCon->createPaasWorker($array);
return $this->success('ok', $worker);
}
/**
* 同工详情
* @param Request $request [description]
* @return [type] [description]
*/
public function paasWorker(Request $request, $worker_id)
{
$user = $this->paasCon->paasWorker($worker_id);
return $this->success('ok', $user);
}
/**
* 删除同工
* @param [type] $worker_id [description]
* @return [type] [description]
*/
public function deletePaasWorker($worker_id)
{
$this->paasCon->deletePaasWorker($worker_id);
return $this->success('ok');
}
/**
* 我的同工列表
* @param Request $request [description]
* @param [type] $paas_id [description]
* @return [type] [description]
*/
public function workers(Request $request)
{
$admin_type = $request->session()->get('admin_type');
$workers = null;
if ($admin_type == 'paas_admin') {
$paas_obj = $request->session()->get('paas_obj');
$paas_id = $paas_obj->id;
$workers = $this->paasCon->paasWorkers($request, $paas_id, $request->input('nopage', 0));
foreach ($workers as $worker) {
$invite_users = $this->userCon->inviteUsers($worker->user_id, 1);
$worker->invite_user_num = count($invite_users);
}
}
return $this->success('ok', $workers);
}
/**
* 平台客户
* 同工邀请的人+渠道邀请的人
* @param Request $request [description]
* @return [type] [description]
*/
public function paasClients(Request $request)
{
$admin_type = $request->session()->get('admin_type');
$workers = null;
if ($admin_type == 'paas_admin') {
$paas_obj = $request->session()->get('paas_obj');
$users = $this->paasCon->paasClients($request, $paas_obj->id);
}
return $this->success('ok', $users);
}
/**
* 用户绑定提现账号
* @param Request $request [description]
* @return [type] [description]
*/
public function paasBindAccount(Request $request, $user_id)
{
$openid = Wechat::where('user_id', $user_id)->value('openid');
if (empty($openid)) {
return $this->failure('该用户没有微信信息');
}
$this->paasCon->paasBindAccount($request, $user_id);
return $this->success('ok');
}
/**
* 平台账号
* @param Request $request [description]
* @return [type] [description]
*/
public function paasAccount(Request $request)
{
$account = $this->paasCon->paasAccount($request);
return $this->success('ok', $account);
}
/**
* 提现记录
* @param Request $request [description]
* @return [type] [description]
*/
public function paasWithdraws(Request $request)
{
$withdraws = $this->paasCon->paasWithdraws($request);
return $this->success('ok', $withdraws);
}
/**
* 提现
* @param Request $request [description]
* @return [type] [description]
*/
public function withdraw(Request $request)
{
$account = $this->paasCon->paasAccount($request);
if (empty($account->user_id)) {
return $this->failure('该提现账号没有绑定提现人');
}
$openid = Wechat::where('user_id', $account->user_id)->value('openid');
if (empty($openid)) {
return $this->failure('提现账号绑定人没有微信信息');
}
$type = $request->input("type");
if (empty($type)) {
return $this->failure('请选择提现类型');
}
if ($type == 'ACTIVITY') {
if ($account->activity_balance <= 2) {
return $this->failure('余额不足');
}
}elseif ($type = "RANK") {
if ($account->vip_balance <= 2) {
return $this->failure('余额不足');
}
}
$result = $this->paasCon->withdraw($request, $openid);
if (!$result) {
return $this->failure('提现失败');
}
return $this->success('提现成功');
}
/**
* 平台管理员列表
* @param Request $request [description]
* @return [type] [description]
*/
public function paasAdmins(Request $request)
{
$admins = $this->paasCon->paasAdmins($request);
return $this->success('ok', $admins);
}
/**
* 渠道推广员
* @param Request $request [description]
* @param Platform $platform [description]
* @param PlatformUser $Platform_user [description]
*/
public function platformUsers(Request $request, Platform $platform, PlatformUser $platform_user)
{
//平台管理员 检查是否是他的渠道
$admin_type = $request->session()->get('admin_type');
if ($admin_type == 'paas_admin') {
$paas_obj = $request->session()->get('paas_obj');
if ($platform->paas_id != $paas_obj->id) {
return $this->failure('暂无访问权限');
}
}
$users = $platform_user->where('platform_id', $platform->id)->with('user.wechat');
$keyword = $request->input('keyword');
if ($keyword) {
$keyword = trim($keyword);
$users = $users->whereHas('user',function($sql) use($keyword){
$sql->where('name', 'like', '%'.$keyword.'%')
->orWhere('mobile', 'like', '%'.$keyword.'%');
});
}
$users = $users->orderBy('invite_num', 'desc')->orderBy('id', 'desc')->paginate();
$paas_id = $platform->paas_id;
$start_time = $request->input('start_time');
$end_time = $request->input('end_time');
if ($start_time && $end_time) {
foreach ($users as $user) {
$user_id = $user->user_id;
$openid = $user->user->wechat->openid;
$num = User::where(function($sql) use($user_id, $openid){
$sql->where('from_user_id', $user_id);
})->where('created_at', '>=', $start_time)->where('created_at', '<', $end_time)->count()?:0;
$user->invite_num = $num;
}
}
$pass_users = User::with('wechat')->where('from_platform', $platform->app_id)->orderBy('created_at', 'desc')->paginate();
foreach ($pass_users as $pass_user){
$pass_user->from_user = $pass_user->FromUsername();
}
return $this->success('ok', compact('users', 'paas_id', 'pass_users'));
}
/**
* 添加渠道推广员
* @param Request $request [description]
* @param Platform $platform [description]
* @param PlatformUser $Platform_user [description]
*/
public function addPlatformUser(Request $request, Platform $platform, User $user, PlatformUser $platform_user)
{
$platform_user_obj = $platform_user->where('user_id', $user->id)->first();
if ($platform_user_obj) {
return $this->failure('添加失败,该用户已是推广员!');
}
$openid = $user->wechat->openid;
$paas_id = $platform->paas_id;
$app_id = $platform->app_id;
$paas_name = Paas::where('id', $paas_id)->value('name');
//生成二维码
$path = 'pages/tabBar/welcome?from_platform='.$app_id.'&paas='.$paas_name.'&from_openid='.$openid.'&from_user_id='.$user->id;
// dd($path);
$qrcode = $this->getQrcode($path, 512);
$platform_user_obj = $platform_user->create([
'user_id'=>$user->id,
'platform_id'=>$platform->id,
'qrcode'=>$qrcode,
]);
$platform_user_obj->user;
return $this->success('ok', $platform_user_obj);
}
/**
* 开启、禁止推广员
* @param Request $request [description]
* @param PlatformUser $platform_user [description]
* @return [type] [description]
*/
public function disablePlatformUser(Request $request, PlatformUser $platformUser)
{
$platformUser->disable = $platformUser->disable?0:1;
$platformUser->save();
return $this->success('ok', $platformUser);
}
/**
* 平台用户
*/
public function paasUsers(Request $request, Paas $paas, User $user)
{
// $paas_user_ids = $this->userCon->paasUserIds($paas->name, 'MAIN');
$users = $user->where('is_approved', 1);
$keyword = $request->input('keyword');
if (!empty($keyword)) {
$keyword = trim($keyword);
$users = $users->where(function($sql) use($keyword){
$sql->where('name', 'like', '%'.$keyword.'%')
->orWhere('mobile', 'like', '%'.$keyword.'%');
});
}
$nopage = $request->input('nopage');
if ($nopage) {
$users = $users->get();
}else{
$users = $users->paginate();
}
return $this->success('ok', $users);
}
/**
* 开启、禁止渠道
* @param Request $request [description]
* @param Platform $platform [description]
* @return [type] [description]
*/
public function disablePlatform(Request $request, Platform $platform)
{
$platform->disable = $platform->disable?0:1;
$platform->save();
return $this->success('ok', $platform);
}
/**
* 平台邀请人数
* @param Request $request [description]
* @param Paas $paas [description]
* @return [type] [description]
*/
public function paasInviteNum(Request $request, Paas $paas)
{
$start_time = $request->input('start_time');
$end_time = $request->input('end_time');
$paases = $paas->orderBy('id', 'desc');
$keyword = $request->input('keyword');
if ($keyword) {
$keyword = trim($keyword);
$paases = $paases->where('title', 'like', '%'.$keyword.'%');
}
$paases = $paases->with('platform.inviteUsers')->paginate();
foreach ($paases as $pa) {
$platforms = $pa->platform()->paginate();
$result_num = 0;
foreach ($platforms as $platform) {
if ($start_time && $end_time) {
$num = $platform->inviteUsers->where('created_at', '>=', $start_time)->where('created_at', '<', $end_time)->count();
}else{
$num = $platform->inviteUsers->count();
}
$result_num = $result_num + $num;
}
$pa->invite_num = $result_num;
}
return $this->success('ok', $paases);
}
//通过该渠道进来的用户
public function userFromPlat(Request $request, $platform_id){
$platform = Platform::find($platform_id);
$type = Paas::where('id', $platform->paas_id)->value('type'); //type 0:小程序 1:H5 2:APP
$app_id = $platform->app_id;
//是否是APP渠道
if($platform->paas_id == 44) {
$users = ApproveHistory::with('user:id,name,nickname,app_avatar,circle_avatar,photo,mobile,sex,rank_id,is_approved,type')->whereHas('user')->where('status', 1)->where('type', 'body')->where('from_platform', $platform->app_id)->paginate();
foreach ($users as $user) {
$user->name = $user->user->name;
$user->nickname = $user->user->nickname;
$user->app_avatar = $user->user->app_avatar;
$user->circle_avatar = $user->user->circle_avatar;
$user->photo = $user->user->photo;
$user->mobile = $user->user->mobile;
$user->sex = $user->user->sex;
$user->rank_id = $user->user->rank_id;
$user->is_approved = $user->user->is_approved;
$user->type = $user->user->type;
$user->avatar = $user->user->avatar;
$user->is_real_approved = $user->user->is_real_approved;
$user->created_at = $user->user->created_at;
unset($user->user);
}
}else {
if ($type == 2) {
$user_ids = Db::table('user_register_channels')->where('channel', $app_id)->pluck('user_id')->toArray();
$users = User::whereIn('id', $user_ids);
} else {
$users = User::where('from_platform', $app_id);
}
$keyword = $request->input('keyword');
if (!empty($keyword)) {
$keyword = trim($keyword);
$users = $users->where(function ($sql) use ($keyword) {
$sql->where('name', 'like', '%' . $keyword . '%')
->orWhere('mobile', 'like', '%' . $keyword . '%')
->orWhere('id', $keyword);
});
}
$users = $users->orderBy('id', 'desc')->paginate();
}
return $this->success('ok', $users);
}
//通过渠道完成实名认证的用户
public function approveFromPlat(Request $request, $platform_id){
$platfrom = Platform::find($platform_id);
if(empty($platfrom)){
return $this->failure('渠道不存在');
}
$user_id = PlatformBehavior::where('platform_id', $platform_id)->where('model', 'APPROVE')->pluck('user_id');
$users = User::whereIn('id', $user_id);
if($request->type == 'new'){
$users= $users->where('from_platform', $platfrom->app_id);
}elseif ($request->type == 'old'){
$users= $users->where('from_platform', '!=', $platfrom->app_id);
}
$users = $users->paginate();
return $this->success('ok', $users);
}
//通过该渠道进来的认证用户列表
public function approveUserFromPlat(Request $request,$platform_id){
$platfrom = Platform::find($platform_id);
if(empty($platfrom)){
return $this->failure('渠道不存在');
}
$user_ids = ApproveHistory::where('type','body')->where('status','1')->where('from_platform',$platfrom->app_id)->pluck('user_id');
$users = User::whereIn('id',$user_ids);
$is_new = $request->is_new;
if ($is_new == 1) {
$users = $users->where('is_new',0);
}
if ($is_new == 2) {
$users = $users->where('is_new',1);
}
$keyword = $request->input('keyword');
if ($keyword) {
$keyword = trim($keyword);
$users = $users->where(function ($sql) use ($keyword) {
$sql->where('name', 'like', '%' . $keyword . '%')
->orWhere('mobile', 'like', '%' . $keyword . '%')
->orWhere('id', $keyword);
});
}
$users = $users->paginate();
return $this->success('ok', $users);
}
}