转账延时队列

  public function transfer(Request $request)
    {
        $param = $request->all();
        //验证
        $validate = Validator::make($param,[
            'transfer' => 'required',
            'transfer_free' => 'required'
        ]);

        if($validate->fails()){
            $error = $validate->errors();
            return ['code'=>400,'msg'=>$error->first(),'data'=>''];
        }
        //查询余额
        $id = 2;
        $transferUserInfo = User::find($id);
        //判断金额是否满足
        if($transferUserInfo->free<$param['transfer_free']){
            return ['code'=>403,'msg'=>'余额不足','data'=>''];
        }
        //判断账号是否存在
        $coverTransferUserInfo = User::where('username',$param['transfer'])->orWhere('phone',$param['transfer'])->first();
        if(!$coverTransferUserInfo){
            return ['code'=>402,'msg'=>'被转账人不存在','data'=>''];
        }
        //判断被转帐人的状态
        if($coverTransferUserInfo->status==0){
            return ['code'=>402,'msg'=>'转账账号异常','data'=>''];
        }

        //钻张信息
        $data = [
            'uid' => 2,
            'tid' => $coverTransferUserInfo->id,
            'transfer_no' => time().$coverTransferUserInfo->id,
            'transfer_free' => $param['transfer_free'],
            'transfer_type' => '余额支付'
        ];
        //修改用户金额
        $transferUserInfo->free -= $param['transfer_free'];
        $transferUserInfo->bind_free += $param['transfer_free'];
        $transferUserInfo->save();
        //添加
        $addRes = Transfer::insertGetId($data);
        //消息队列
        $this->dispatch((new TransferAccount($addRes))->delay(now()->addMinutes(10)));
        return ['code'=>'200','msg'=>'添加成功','data'=>''];
    }
<?php

namespace App\Jobs;

use App\Models\Models\Transfer;
use App\Models\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

class TransferAccount implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $tra0nsferId;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($transferId)
    {
        //
        $this->transferId = $transferId;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //
        $bool = $this->checkData();
        if($bool){
            $this->exeTransfer();
        }
    }

    //对数据进行检测
    public function checkData()
    {
        $flag = true;

        //查询是否存在该条转账记录
        $transferRes = Transfer::find($this->transferId);
        if(!$transferRes) return $flag=false;

        $transferUserInfo = User::find($transferRes->uid);
        $coverTransferUserInfo = User::find($transferRes->tid);
        if(!$transferUserInfo || !$coverTransferUserInfo) return false;
        if($transferRes->status!=0) return false;
        if($transferRes->transfer_free>$transferUserInfo->free) return false;
        return $flag;
    }

    /**
     * 执行转账
     */
    public function exeTransfer()
    {
        //查询是否存在该条转账记录
        $transferRes = Transfer::find($this->transferId);
        DB::beginTransaction();

        try {
            //修改订单状态
            Transfer::where('id',$this->transferId)
                ->update(['status'=>1]);
            //修改转账人金额
            $transfer = User::find($transferRes->uid);
            $transfer->bind_free = $transfer->bind_free - $transferRes->transfter_free;
            $transfer->save();
            //修改被转帐人金额
            $coverTransfer = User::find($transferRes->tid);
            $coverTransfer->free = $coverTransfer->free + $transferRes->transfter_free;
            $coverTransfer->save();
            DB::commit();
        }catch (\Exception $e){
            DB::rollBack();
            //记录日志
            return Log::info($e->getMessage());
        }
    }
}
transfer(e){
  let token = wx.getStorageSync('token');
  //发送请求
  wx.request({
    url: 'http://api.bawei.com/api/transfer',
    data:{
      transfer:e.detail.value.transfer,
      transfer_free:e.detail.value.transfer_free
    },
    header:{
      token
    },
    method:'POST',
    success:ret=>{
      if(ret.data.code==200){
          wx.navigateTo({
            url: '/pages/detail/detail',
          })
      }else{
        wx.showToast({
          title:ret.data.msg,
          icon:'error'
        })
      }
    }
  })
},

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值