123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- <?php
- namespace App\Jobs;
- use App\Models\DepositOrder;
- use App\Models\RefundLog;
- use App\Models\User;
- use App\Repositories\OrderRepository;
- use App\Repositories\PunishmentOrderRepository;
- use App\Repositories\RentOrderRepository;
- use App\Repositories\UserRepository;
- use Carbon\Carbon;
- use Illuminate\Database\Eloquent\Model;
- class DepositRefundJob extends Job
- {
- protected $model = '';
- /**
- * Create a new job instance.
- *
- * @return void
- */
- public function __construct(Model $model, Carbon $delay)
- {
- $this->model = $model;
- // 设置延迟的时间,delay() 方法的参数代表多少秒之后执行
- $this->delay($delay);
- }
- /**
- * @return bool
- * Author: Mead
- */
- public function handle(OrderRepository $orderRepository, RentOrderRepository $rentOrderRepository, PunishmentOrderRepository $punishmentOrderRepository, UserRepository $userRepository)
- {
- //判断用户当前退款是否在等待中
- if ((int)$this->model->pay_status !== RefundLog::PAY_STATUS_WAIT) {
- return true;
- }
- $user_id = $this->model->user_id;
- if (!$userRepository->byIdCheckStatusOk($user_id)) {
- RefundLog::where('id', $this->model->id)->update([
- 'pay_status' => RefundLog::PAY_STATUS_ERROR,
- 'result' => '用户状态异常'
- ]);
- return true;
- }
- if ($orderRepository->byUserIdCheckIsExistNoPayOrder($user_id)) {
- RefundLog::where('id', $this->model->id)->update([
- 'pay_status' => RefundLog::PAY_STATUS_ERROR,
- 'result' => '有未完成的用车订单'
- ]);
- return true;
- }
- if ($rentOrderRepository->byUserIdCheckIsExistRideOrder($user_id)) {
- RefundLog::where('id', $this->model->id)->update([
- 'pay_status' => RefundLog::PAY_STATUS_ERROR,
- 'result' => '有未完成的租车订单'
- ]);
- return true;
- }
- if ($rentOrderRepository->byUserIdCheckIsExistNoPayOrder($user_id)) {
- RefundLog::where('id', $this->model->id)->update([
- 'pay_status' => RefundLog::PAY_STATUS_ERROR,
- 'result' => '有未支付的租车订单'
- ]);
- return true;
- }
- $punish = $punishmentOrderRepository->checkNoPayModel($user_id);
- if (!$punish) {
- RefundLog::where('id', $this->model->id)->update([
- 'pay_status' => RefundLog::PAY_STATUS_ERROR,
- 'result' => '有未支付的罚单'
- ]);
- return true;
- }
- $order = DepositOrder::where('id', $this->model->deposit_id)->first();
- $payment = app('wechat.payment'); // 微信支付
- $result = $payment->refund->byOutTradeNumber($order->no, $this->model->no, wechat_fee($order->pay_money), wechat_fee($this->model->pay_money), [
- // 可在此处传入其他参数,详细参数见微信支付文档
- 'refund_desc' => '用户申请退回押金',
- 'notify_url' => config('app.url') . '/api/payments/wechat-refund-notify',
- ]);
- $user = User::where('id', $user_id)->first();
- if ($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS') {
- // 判断是否有免押金卡
- $deposit_expire_time = Carbon::parse($user->deposit_expire_time);
- if (Carbon::now()->gte($deposit_expire_time)) {
- // 免押金卡已经过期
- User::where('id', $user->id)->update([
- 'deposit_money' => 0,
- 'is_deposit' => User::DEPOSIT_NO,
- 'deposit_type' => User::DEPOSIT_TYPE_NO
- ]);
- } else {
- // 免押金卡未过期
- User::where('id', $user->id)->update([
- 'deposit_money' => 0,
- 'is_deposit' => User::DEPOSIT_OK,
- 'deposit_type' => User::DEPOSIT_CARD
- ]);
- }
- }
- return true;
- }
- }
|