432 lines
13 KiB
PHP
432 lines
13 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
use App\Contracts\PaasContract;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\Paas;
|
|
use App\Models\Platform;
|
|
use App\Models\PaasWorker;
|
|
use App\Models\Wechat;
|
|
use App\Models\User;
|
|
use App\Models\PaasAccount;
|
|
use App\Models\PaasWithdraw;
|
|
use App\Models\Admin;
|
|
use App\Models\PaasOrder;
|
|
use App\Models\PaasAccountHistory;
|
|
use App\Services\UserService;
|
|
class PaasService implements PaasContract
|
|
{
|
|
|
|
public function selectPaas($array=[])
|
|
{
|
|
$paas = Paas::where($array);
|
|
return $paas;
|
|
}
|
|
public function selectPlatform($array=[])
|
|
{
|
|
$platform = Platform::where($array);
|
|
return $platform;
|
|
}
|
|
public function selectWorker($array=[])
|
|
{
|
|
$worker = PaasWorker::where($array);
|
|
return $worker;
|
|
}
|
|
/**
|
|
* 平台列表
|
|
* @return [type] [description]
|
|
*/
|
|
public function paasList($request)
|
|
{
|
|
$paas_list = $this->selectPaas()->with('platform');
|
|
$keyword = $request->input('keyword');
|
|
if ($keyword) {
|
|
$keyword = trim($keyword);
|
|
$paas_list = $paas_list->where(function($sql) use($keyword){
|
|
$sql->where('name', 'like', '%'.$keyword.'%')
|
|
->orWhere('title', 'like', '%'.$keyword.'%');
|
|
});
|
|
}
|
|
if(is_numeric($request->type)){
|
|
$paas_list = $paas_list->where('type', $request->type);
|
|
}
|
|
$nopage = $request->input('nopage', 1);
|
|
if ($nopage) {
|
|
$paas_list = $paas_list->orderBy('id', 'desc')->paginate();
|
|
}else{
|
|
$paas_list = $paas_list->orderBy('id', 'desc')->get();
|
|
}
|
|
|
|
return $paas_list;
|
|
}
|
|
|
|
/**
|
|
* 平台详情
|
|
* @param [type] $paas_id [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function paas($paas_id)
|
|
{ $array = ['id'=>$paas_id];
|
|
$paas = $this->selectPaas($array)->firstOrFail();
|
|
return $paas;
|
|
}
|
|
|
|
/**
|
|
* 添加平台
|
|
* @param [type] $array [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function createPaas($array)
|
|
{
|
|
$paas = Paas::create($array);
|
|
return $paas;
|
|
}
|
|
|
|
/**
|
|
* 修改平台
|
|
* @param [type] $array [description]
|
|
* @param [type] $paas_id [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function updatePaas($array, $paas_id)
|
|
{
|
|
$this->selectPaas(['id'=>$paas_id])->update($array);
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* 删除平台
|
|
* @param [type] $paas_id [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function deletePaas($paas_id)
|
|
{
|
|
$this->selectPaas(['id'=>$paas_id])->delete();
|
|
return ;
|
|
}
|
|
|
|
/**
|
|
* 添加渠道
|
|
* @param Request $request [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function createPlatform($array)
|
|
{
|
|
$platform = Platform::create($array);
|
|
return $platform;
|
|
}
|
|
|
|
/**
|
|
* 渠道详情
|
|
* @param [type] $platform_id [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function platform($platform_id)
|
|
{
|
|
$platform = $this->selectPlatform(['id'=>$platform_id])->first();
|
|
return $platform;
|
|
}
|
|
|
|
/**
|
|
* 修改渠道
|
|
* @param [type] $array [description]
|
|
* @param [type] $platform_id [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function updatePlatform($array, $platform_id)
|
|
{
|
|
$this->selectPlatform(['id'=>$platform_id])->update($array);
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* 删除渠道
|
|
* @param [type] $platform_id [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function deletePlatform($platform_id)
|
|
{
|
|
$this->selectPlatform(['id'=>$platform_id])->delete();
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* 渠道列表
|
|
* @param [type] $nopage [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function paasPlatforms($paas_id, $nopage=1, $limit=0)
|
|
{
|
|
$platforms = $this->selectPlatform(['paas_id'=>$paas_id])->orderBy('id', 'desc');
|
|
$keyword = request()->input('keyword');
|
|
if($keyword){
|
|
$platforms = $platforms->where('name', 'like', '%'.$keyword.'%');
|
|
}
|
|
if ($nopage) {
|
|
$platforms = $platforms->paginate();
|
|
}else{
|
|
if ($limit) {
|
|
$platforms = $platforms->limit($limit)->get();
|
|
}
|
|
|
|
}
|
|
return $platforms;
|
|
}
|
|
|
|
/**
|
|
* 同工列表
|
|
* @param [type] $paas_id [description]
|
|
* @param integer $nopage [description]
|
|
* @param integer $limit [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function paasWorkers($request, $paas_id, $nopage=0, $limit=0)
|
|
{
|
|
$workers = $this->selectWorker(['paas_id'=>$paas_id])->with('user')->orderBy('id', 'desc');
|
|
$keyword = $request->input('keyword');
|
|
if ($keyword) {
|
|
$keyword = trim($keyword);
|
|
$workers = $workers->whereHas('user', function($sql) use($keyword){
|
|
$sql->where('name', 'like', '%'.$keyword.'%')
|
|
->orWhere('mobile', 'like', '%'.$keyword.'%');
|
|
});
|
|
}
|
|
if ($nopage) {
|
|
if ($limit) {
|
|
$workers = $workers->limit($limit)->get();
|
|
}
|
|
}else{
|
|
$workers = $workers->paginate();
|
|
|
|
}
|
|
|
|
return $workers;
|
|
}
|
|
|
|
/**
|
|
* 添加同工
|
|
* @param Request $request [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function createPaasWorker($array)
|
|
{
|
|
$worker = PaasWorker::create($array);
|
|
return $worker;
|
|
}
|
|
|
|
/**
|
|
* 同工详情
|
|
* @param Request $request [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function paasWorker($worker_id)
|
|
{
|
|
$worker = $this->selectWorker(['id'=>$worker_id])->with('user')->first();
|
|
return $worker;
|
|
}
|
|
|
|
/**
|
|
* 删除同工
|
|
* @param [type] $worker_id [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function deletePaasWorker($worker_id)
|
|
{
|
|
$this->selectWorker(['id'=>$worker_id])->delete();
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* 平台客户
|
|
* @param [type] $request [description]
|
|
* @param [type] $paas_id [description]
|
|
* @param integer $nopage [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function paasClients($request, $paas_id, $nopage=0)
|
|
{
|
|
// $platforms = Platform::where('paas_id', $paas_id)->distinct('app_id')->pluck('app_id')->toArray();
|
|
// $worker_user_ids = PaasWorker::where('paas_id', $paas_id)->distinct('user_id')->pluck("user_id")->toArray();
|
|
// $paas_openids = Wechat::whereIn('user_id', $worker_user_ids)->pluck('openid');
|
|
$paas_obj = Paas::findOrFail($paas_id);
|
|
$user_service = new UserService();
|
|
$paas_user_ids = $user_service->paasUserIds($paas_obj->name, 'MAIN');
|
|
// $users = User::where(function($sql) use($platforms, $worker_user_ids, $paas_openids){
|
|
// $sql->whereIn('from_user_id', $worker_user_ids)
|
|
// ->orWhereIn('from_platform', $platforms)
|
|
// ->orWhereIn('from_openid', $paas_openids);
|
|
// })->whereIn('id', $paas_user_ids)->orderBy('id', 'desc');
|
|
$users = User::whereIn('id', $paas_user_ids)->orderBy('id', 'desc');
|
|
$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.'%');
|
|
});
|
|
}
|
|
if ($nopage) {
|
|
$users = $users->get();
|
|
}else{
|
|
$users = $users->paginate();
|
|
}
|
|
return $users;
|
|
}
|
|
|
|
/**
|
|
* 绑定账号
|
|
* @param [type] $request [description]
|
|
* @param [type] $user_id [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function paasBindAccount($request, $user_id)
|
|
{
|
|
$paas_obj = $request->session()->get('paas_obj');
|
|
$account = PaasAccount::where('paas_id', $paas_obj->id)->first();
|
|
$account->user_id = $user_id;
|
|
$account->save();
|
|
return $account;
|
|
}
|
|
|
|
/**
|
|
* 提现账号详情
|
|
* @param [type] $request [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function paasAccount($request)
|
|
{
|
|
$paas_obj = $request->session()->get('paas_obj');
|
|
$account = PaasAccount::firstOrCreate(['paas_id'=>$paas_obj->id]);
|
|
$user = User::find($account->user_id);
|
|
$account->user = $user;
|
|
return $account;
|
|
}
|
|
|
|
/**
|
|
* 提现记录
|
|
* @param [type] $request [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function paasWithdraws($request)
|
|
{
|
|
$paas_obj = $request->session()->get('paas_obj');
|
|
$type = $request->input('type');
|
|
$withdraws = PaasWithdraw::with('user')->where('paas_id', $paas_obj->id)->where('type', $type)->orderBy('id', 'desc')->paginate();
|
|
return $withdraws;
|
|
}
|
|
|
|
/**
|
|
* 提现
|
|
* @param [type] $request [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function withdraw($request, $openid)
|
|
{
|
|
$account = $this->paasAccount($request);
|
|
$paas_obj = $request->session()->get('paas_obj');
|
|
$type = $request->input('type');
|
|
if ($type == 'ACTIVITY') {
|
|
$withdraw_amount = $account->activity_balance;
|
|
//手续费
|
|
$fee = number_format($account->activity_ratio * $withdraw_amount, 2);
|
|
//提现金额(手续费后)
|
|
$arrival_amount = number_format($withdraw_amount - $fee,2);
|
|
$account->decrement('activity_balance', $withdraw_amount);
|
|
$account->increment('activity_withdraw', $withdraw_amount);
|
|
$desc = '平台活动提现';
|
|
}elseif ($type == 'RANK'){
|
|
$withdraw_amount = $account->vip_balance;
|
|
//手续费
|
|
$fee = number_format($account->vip_ratio * $withdraw_amount, 2);
|
|
$arrival_amount = number_format($withdraw_amount - $fee,2);
|
|
$account->decrement('vip_balance', $withdraw_amount);
|
|
$account->increment('vip_withdraw', $withdraw_amount);
|
|
$desc = '平台会员提现';
|
|
}
|
|
$trade_no = \CommonUtilsService::getTradeNO();
|
|
//生成转账
|
|
PaasWithdraw::create([
|
|
'paas_id'=>$paas_obj->id,
|
|
'user_id'=>auth()->id(),
|
|
'type'=>$type,
|
|
'withdraw_amount'=>$withdraw_amount,
|
|
'arrival_amount'=>$arrival_amount,
|
|
'trade_no'=>$trade_no,
|
|
'fee'=>$fee,
|
|
'is_hooked'=>0,
|
|
]);
|
|
$result = \WechatService::userTransfer($trade_no, $openid, $arrival_amount * 100, $desc);
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* 平台管理员列表
|
|
* @param [type] $request [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function paasAdmins($request, $nopage=0)
|
|
{
|
|
$paas_obj = $request->session()->get('paas_obj');
|
|
$admins = Admin::with('user')->where('type', $paas_obj->name);
|
|
$keyword = $request->input('keyword');
|
|
if ($keyword) {
|
|
$keyword = trim($keyword);
|
|
$admins = $admins->whereHas('user', function($sql) use($keyword){
|
|
$sql->where('name', 'like', '%'.$keyword.'%')
|
|
->orWhere('mobile', 'like', '%'.$keyword.'%');
|
|
});
|
|
}
|
|
if ($nopage) {
|
|
$admins = $admins->get();
|
|
}else{
|
|
$admins = $admins->paginate();
|
|
}
|
|
return $admins;
|
|
}
|
|
|
|
/**
|
|
* 添加平台账号收益记录
|
|
* @param [type] $paas [description]
|
|
* @param [type] $type [description]
|
|
* @param [type] $type_id [description]
|
|
*/
|
|
public function addAccountHistory($paas, $type, $order_id, $amount)
|
|
{
|
|
$paas_obj = Paas::where('name', $paas)->first();
|
|
if (empty($paas_obj)) {
|
|
return;
|
|
}
|
|
$account = PaasAccount::firstOrCreate(['paas_id'=>$paas_obj->id]);
|
|
|
|
PaasAccountHistory::create([
|
|
'paas_id'=>$paas_obj->id,
|
|
'account_id'=>$account->id,
|
|
'type'=>$type,
|
|
'order_id'=>$order_id,
|
|
'amount'=>$amount,
|
|
]);
|
|
if ($type == 'ACTIVITY') {
|
|
$account->increment('activity_balance', $amount);
|
|
}elseif ($type == 'RANK') {
|
|
$account->increment('vip_balance', $amount);
|
|
}
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* 添加平台与订单联系
|
|
*/
|
|
public function addPaasOrder($paas, $order_id)
|
|
{
|
|
$paas_obj = Paas::where('name', $paas)->first();
|
|
if (empty($paas_obj)) {
|
|
return;
|
|
}
|
|
PaasOrder::create([
|
|
'paas_id'=>$paas_obj->id,
|
|
'order_id'=>$order_id,
|
|
]);
|
|
return;
|
|
}
|
|
}
|