jingcai-php/app/Console/Commands/Order/CancelRefund.php

89 lines
2.5 KiB
PHP
Executable File

<?php
namespace App\Console\Commands\Order;
use App\Enums\LottState;
use App\Enums\PayState;
use App\Exceptions\JingCaiException;
use App\Model\Order;
use App\Model\Seller\Seller;
use App\Service\CustomerWalletService;
use App\Utils\Helps;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class CancelRefund extends Command
{
/**
* 这个就是命令名称
*/
protected $signature = 'order:cancel_refund';
/**
* 命令的说明描述
* @var string
*/
protected $description = '';
/**
* 创建命令的构造方法。
* @param string $words 传入的字符参数
* @return void
*/
public function __construct()
{
parent::__construct();
}
public function handle()
{
Log::info('CancelRefund取消订单并退款');
$closeDate = date('Y-m-d H:i:s', time() - 10 * 60);
Order::where('pay_state', PayState::SUCCESS)
->whereIn('lottery_state', [LottState::PENDING,LottState::DRAFT])
->where('odds_close_time', '<', $closeDate)
->where(function($query) {
$query->where('pid', 0)
->orWhereRaw('id=pid') // 合买
->orWhereRaw('id!=pid and type=4'); // 跟单
})
->chunkById(200, function($orders) {
foreach ($orders as $order) {
$this->cancelAndRefund($order);
}
});
}
public function cancelAndRefund(Order $order) {
DB::beginTransaction();
try {
$order->lottery_state = LottState::CANCEL;
$order->save();
$seller = new Seller();
$seller->id = 0;
CustomerWalletService::refundForRevokeOrder($order, $seller);
DB::commit();
} catch (JingCaiException $exception) {
DB::rollBack();
Log::error('cancelAndRefund-JingCaiException', [
'order_id' => $order->id,
'error' => $exception->getMessage(),
'track' => Helps::filterStackTrace($exception->getTrace(),1)
]);
} catch (\Exception $exception) {
DB::rollBack();
Log::error('cancelAndRefund-Exception', [
'order_id' => $order->id,
'error' => $exception->getMessage(),
'track' => Helps::filterStackTrace($exception->getTrace(),2)
]);
}
}
}