123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- <?php
- namespace App\Jobs;
- use App\Models\DepositOrder;
- use App\Models\RechargeOrder;
- 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 = '';
- public $tries = 5;
- /**
- * 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;
- $payment_type = $this->model->pay_type;
- 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();
- switch ($payment_type){
- case RechargeOrder::PAY_TYPE_WECHAT:
- $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',
- ]);
- break;
- case RechargeOrder::PAY_TYPE_ALIPAYMINI:
- $no = $order->no ;
- $money = $order->pay_money;
- $data = alipay_mini_config(self::$MERCHANT)->payment()->common()->refund($no,$money);
- if ($data->fundChange=='Y') {
- $result['return_code'] ='SUCCESS';
- $result['result_code'] = 'SUCCESS';
- //支付宝没有退款异步回调 这里写下
- $order->is_refund = DepositOrder::REFUND_OK;
- $order->save();
- $order->refund_order_callback(); //押金退款订单回调
- }else{
- $result['return_code'] ='ERROE';
- $result['result_code'] = 'ERROE';
- // $result['err_code_des'] = "调用失败,原因:可能已经退款 请确认";
- }
- break;
- default:
- RefundLog::where('id', $this->model->id)->update([
- 'pay_status' => RefundLog::PAY_STATUS_ALIPAYMINI_PAY,
- 'result' => '退款方式错误'
- ]);
- return true;
- }
- $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;
- }
- }
|