You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.4 KiB
101 lines
3.4 KiB
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Models\ContractEntrust;
|
|
use App\Models\Recharge;
|
|
use App\Models\SustainableAccount;
|
|
use App\Models\User;
|
|
use App\Models\UserWallet;
|
|
use App\Models\UserWalletLog;
|
|
use Illuminate\Console\Command;
|
|
|
|
class CheckAnomaly extends Command
|
|
{
|
|
/**
|
|
* The name and signature of the console command.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $signature = 'CheckAnomaly';
|
|
|
|
/**
|
|
* The console command description.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $description = 'Command description';
|
|
|
|
/**
|
|
* Create a new command instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
/**
|
|
* Execute the console command.
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public function handle()
|
|
{
|
|
$items = SustainableAccount::query()->cursor();
|
|
foreach ($items as $item) {
|
|
// dump($item['user_id']);
|
|
// 合约转入
|
|
$contract_in = UserWalletLog::query()
|
|
->where('user_id', $item['user_id'])
|
|
->where('rich_type', 'usable_balance')
|
|
->where('account_type', UserWallet::sustainable_account)
|
|
->where('log_type', 'fund_transfer')
|
|
->where('amount', '>', 0)
|
|
->sum('amount');
|
|
// 合约转出
|
|
$contract_out = UserWalletLog::query()
|
|
->where('user_id', $item['user_id'])
|
|
->where('rich_type', 'usable_balance')
|
|
->where('account_type', UserWallet::sustainable_account)
|
|
->where('log_type', 'fund_transfer')
|
|
->where('amount', '<', 0)
|
|
->sum('amount');
|
|
// 手续费
|
|
$fee = UserWalletLog::query()
|
|
->where('user_id', $item['user_id'])
|
|
->where('rich_type', 'usable_balance')
|
|
->where('account_type', UserWallet::sustainable_account)
|
|
->whereIn('log_type', ['open_position_fee', 'close_position_fee', 'system_close_position_fee', 'cancel_open_position_fee'])
|
|
->sum('amount');
|
|
// 资金费
|
|
$cost = UserWalletLog::query()
|
|
->where('user_id', $item['user_id'])
|
|
->where('rich_type', 'usable_balance')
|
|
->where('account_type', UserWallet::sustainable_account)
|
|
->where('log_type', 'position_capital_cost')
|
|
->sum('amount');
|
|
// 盈亏
|
|
$profit = ContractEntrust::query()
|
|
->where('user_id', $item['user_id'])
|
|
->where('status', ContractEntrust::status_completed)
|
|
->sum('profit');
|
|
// 合约扣款
|
|
$charge = Recharge::query()
|
|
->where('user_id', $item['user_id'])
|
|
->where('type', 2)
|
|
->where('account_type', UserWallet::sustainable_account)
|
|
->sum('amount');
|
|
|
|
// 理论余额
|
|
$theory_balance = PriceCalculate(($contract_in + $contract_out - abs($fee) - abs($cost) + $profit - $item['used_balance'] - $item['freeze_balance']), '+', $charge, 8);
|
|
// 异常资金
|
|
$anomaly_balance = PriceCalculate($theory_balance, '-', $item['usable_balance'], 8);
|
|
if ($anomaly_balance != 0) {
|
|
$user = User::query()->find($item['user_id']);
|
|
$user->update(['contract_anomaly' => 1]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|