love_php/app/Services/PaasService.php
2026-04-02 09:20:51 +08:00

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;
}
}