①②③三件事务要同时完成,不报错,结果都不为空,才会走到commit()提交事务。否则,调到catch进行回滚,并返回失败信息 /** * 修改订单付款状态 */ public function changeOrderStatus($request
/**
* 修改订单付款状态
*/
public function changeOrderStatus($request){
$id = $request['id']; //获取订单id
$where['id'] = $id;
$rechargeinfo = $this->getOne($where); //根据id获取该条订单详细信息
if($rechargeinfo['actual_arrival']!=0){ //如果表中字段不为0,则说明已经到账,无法再次确认
$ajaxData['status'] = 0;
$ajaxData['msg'] = '已确认过,无法重复提交';
return $ajaxData;
}
$data['updated_at'] = date('Y-m-d H:i:s');
//开启事务处理
$this->start();
try{
//①更新付款状态
switch($rechargeinfo['type']){
case 1:
$coin_type = 'eth'; //教育币
break;
case 2:
$coin_type = 'btc'; //比特币
break;
default:
$coin_type = 'none';
}
$settingmodel = new Setting(); //实例化设置表模型,用于通过币种获取比例
$res3 = $settingmodel->getOne(array('name'=>$coin_type));
$bili = $res3['value']; //得到该币种的比例
$amount = $rechargeinfo['amount']; //提交货币数量
$data['actual_arrival'] = $amount; //实际到账数量
$data['state'] = '到账成功!';
$res = $this->up($where, $data); //更新recharge表数据
//②member表edu入库
$membermodel = new Member();
$where2['id'] = 2;
if($coin_type=='eth'){
$edu_amount = $amount; //如果是教育币直接入库
}else{
$edu_amount = $amount*$bili; //如果是比特币就转成教育币
}
$membermodel->up($where2, array('edu_amount'=>$edu_amount)); //导入用户个人账户
//③充值日志
$logmodel = new Log(); //实例化log模型用于调用addlog函数
$logmodel->addLog($rechargeinfo,1); //1 充值 2 提现
$this->commit();
}catch (\Exception $e){
$this->rollBack();
//echo $e->getMessage();die();
$ajaxData['status'] = 0;
$ajaxData['msg'] = '确认到账失败!';
return $ajaxData;
}
$ajaxData['status'] = 1;
$ajaxData['msg'] = '确认到账成功!';
return $ajaxData;
}
public function start()
{
DB::beginTransaction();
}
public function commit()
{
DB::commit();
}
public function rollBack()
{
DB::rollBack();
}
