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'
})
}
}
})
},