89 lines
2.5 KiB
PHP
Executable File
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)
|
|
]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|