Browse Source

优化增加事务

master
wanghongjun 2 years ago
parent
commit
d85f297c0e
  1. 8
      app/controller/Zone.php
  2. 65
      app/logic/Zone.php
  3. 8
      app/model/ConsumptionRecords.php

8
app/controller/Zone.php

@ -42,14 +42,15 @@ class Zone extends BaseController
*/
public function beginLottery($zoneGoodsId)
{
# 判断余额够不够
$userData = Session::get('login_user_data');
# 判断余额够不够
$judgeRes = ZoneLogic::judgeBalance($userData['id'],$zoneGoodsId);
if (!$judgeRes) return $this->renderError('余额不足');
# 获取刮奖图片
$data = ZoneLogic::createOrder($userData['id'],$zoneGoodsId);
if (!$data['status']) $this->renderError($data['msg']);
return $this->renderSuccess('开始刮奖',['list' => $data['data'], 'c_r_id' => $data['c_r_id']]);
}
@ -70,7 +71,10 @@ class Zone extends BaseController
if (!$res['status']) return $this->renderError($res['msg']);
return $this->renderSuccess($res['msg']);
return $this->renderSuccess(
$res['awards_amount'] > 0 ? '未中奖' : '恭喜你中奖了',
['awards_amount' => $res['awards_amount']]
);
}

65
app/logic/Zone.php

@ -6,6 +6,7 @@ use app\model\ConsumptionRecords;
use app\model\User;
use app\model\ZoneGoods;
use app\model\ZoneGoodsParam;
use think\facade\Db;
/**
* 专区逻辑层
@ -47,19 +48,26 @@ class Zone
# 获取刮刮乐信息
$data = self::getWinningPrize($zoneParamArr);
# 扣除余额
$zoneGoodsModel = ZoneGoods::field('price')->find($zone_goods_id);
$price = $zoneGoodsModel['price'];
$balance = User::decrBalance($user_id,$price);
# 消费记录
$c_r_id = ConsumptionRecords::createRecords($user_id,$zone_goods_id,$price,$price,$balance,$data);
# 返回刮刮乐图标、金额、订单id
return [
'data' => $data,
'c_r_id' => $c_r_id
];
# 开启事务
$connection = Db::connect();
try {
$connection->startTrans();
# 扣除余额
$zoneGoodsModel = ZoneGoods::field('price')->find($zone_goods_id);
$price = $zoneGoodsModel['price'];
$balance = User::decrBalance($user_id,$price);
# 消费记录
$c_r_id = ConsumptionRecords::createRecords($user_id,$zone_goods_id,$price,$price,$balance,$data);
$connection->commit();
# 返回刮刮乐图标、金额、订单id
return ['status' => 1, 'data' => $data, 'c_r_id' => $c_r_id];
} catch (\Exception $e) {
$connection->rollback();
return ['status' => 0, 'msg' => '操作失败'];
}
}
/**
@ -92,20 +100,31 @@ class Zone
}
}
# 判断是否中奖
if ($awards_amount > 0) {
# 开启事务
$connection = Db::connect();
try {
$connection->startTrans();
# 修改用户余额
$balance = User::IncrBalance($user_id,$awards_amount);
# 判断是否中奖
if ($awards_amount > 0) {
# 中奖做记录
AwardsRecords::createRecords($user_id,$c_r_id,$awards_amount,$balance);
}
# 修改用户余额
$balance = User::IncrBalance($user_id,$awards_amount);
# 完成订单
ConsumptionRecords::endOrder($c_r_id);
# 中奖做记录
AwardsRecords::createRecords($user_id,$c_r_id,$awards_amount,$balance);
}
# 完成订单
ConsumptionRecords::endOrder($c_r_id,$awards_amount);
return ['status' => 1, 'msg' => '完成'];
$connection->commit();
return ['status' => 1, 'msg' => '完成', 'awards_amount' => $awards_amount];
} catch (\Exception $e) {
$connection->rollback();
return ['status' => 0, 'msg' => '操作异常'];
}
}
/**

8
app/model/ConsumptionRecords.php

@ -32,17 +32,21 @@ class ConsumptionRecords extends Model
/**
* 完成订单
* @param $zone_goods_id
* @param $c_r_id
* @param $awards_amount // 中奖金额
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public static function endOrder($c_r_id)
public static function endOrder($c_r_id,$awards_amount)
{
$zoneOrder = ConsumptionRecords::find($c_r_id);
$zoneOrder->status = 1;
$zoneOrder->complete_time = date("Y-m-d H:i:s",time());
if ($awards_amount > 0) {
$zoneOrder->awards_status = 1;
}
$zoneOrder->save();
}

Loading…
Cancel
Save