love_php/app/Jobs/CheckMEarningAccount.php

131 lines
4.7 KiB
PHP
Raw Normal View History

2026-04-02 09:20:51 +08:00
<?php
namespace App\Jobs;
use App\Models\Server\MEarning;
use App\Models\Server\MEarningwithdraws;
use App\Models\Server\MerchantTransferLog;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Log;
class CheckMEarningAccount implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $tries = 1;
protected $account;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($account)
{
$this->account = $account;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$account = $this->account;
if (empty($account)) return;
//总收益是否匹配余额+提现金额+冻结金额
$res = $this->checkTatalValue($account);
if (empty($res)) {
$msg = "收益账号id:{$account->id},出现异常:总收益金额不匹配余额与提现金额总和";
$account->update(['is_banned'=>1, "reason"=>$msg]);
throw new \Exception($msg);
}
//总提现金额是否匹配提现记录表
$res = $this->checkWithdrawValue($account);
if (empty($res)) {
$msg = "收益账号id:{$account->id},出现异常:总提现记录不匹配已提现金额与冻结提现金额总和";
$account->update(['is_banned'=>1, 'reason'=>$msg]);
throw new \Exception($msg);
}
//商户还是用户
if ($this->account->m_user_id) {
//用户
//总收益金额是否匹配收益表
$res = $this->checkUserEarningValue($account);
if (empty($res)) {
$msg = "收益账号id:{$account->id},出现异常:总收益金额不匹配收益记录表";
$account->update(['is_banned'=>1, 'reason'=>$msg]);
throw new \Exception($msg);
}
}else {
//商户
$res = $this->checkMerchantEarningValue($account);
if (empty($res)) {
$msg = "收益账号id:{$account->id},出现异常:总收益金额不匹配收益记录表";
$account->update(['is_banned'=>1, "reason"=>$msg]);
throw new \Exception($msg);
}
}
$account->update(['is_banned'=>0, 'reason'=>null]);
return;
}
public function checkMerchantEarningValue($account)
{
//总收益金额 = 总收益记录金额 - 转账金额
//总收益金额
$earning_value = MEarning::where(['m_id'=>$account->m_id, 'm_user_id'=>$account->m_user_id])->sum("value");
//转账金额
$transfer_value = MerchantTransferLog::where(['m_id'=>$account->m_id])->sum('amount');
Log::info("总金额:{ $account->total_value }");
Log::info("收益金额-转账金额: $earning_value - $transfer_value = ".($earning_value - $transfer_value));
return $account->total_value == number_format($earning_value - $transfer_value, 2, '.', '');
}
/**
* 检测提现金额是否正确
* @param $account
* @return bool
*/
public function checkWithdrawValue($account)
{
$value = MEarningwithdraws::where(['m_id'=>$account->m_id, 'm_user_id'=>$account->m_user_id])->where('status', '<>', 'canceled')->sum('value');
Log::info("总提现:{ $value }");
Log::info("总提现相加:{ $account->withdrawl + $account->frozen_withdraw }");
return $value == number_format($account->withdrawl + $account->frozen_withdraw, 2, '.', '');
}
/**
* 检测用户总收益金额是否正确
* @param $account
* @return bool
*/
public function checkUserEarningValue($account)
{
$value = MEarning::where(['m_id'=>$account->m_id, 'm_user_id'=>$account->m_user_id])->sum("value");
Log::info("总收益金额:{ $account->total_value }");
Log::info("收益记录金额:{ $value }");
return $account->total_value == $value;
}
/**
* 检测总金额是否正确
* @param $account
* @return bool
*/
public function checkTatalValue($account)
{
$sum = number_format($account->balance + $account->withdrawl + $account->frozen_withdraw + $account->frozen_earning, 2, '.', '');
Log::info("总金额:{ $account->total_value }");
Log::info("总金额相加:{ $account->balance + $account->withdrawl + $account->frozen_withdraw + $account->frozen_earning} = $sum");
return $account->total_value == $sum;
}
}