Browse Source

优化增加事务

master
wanghongjun 2 years ago
parent
commit
d85f297c0e
  1. 8
      app/controller/Zone.php
  2. 31
      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) public function beginLottery($zoneGoodsId)
{ {
# 判断余额够不够
$userData = Session::get('login_user_data'); $userData = Session::get('login_user_data');
# 判断余额够不够
$judgeRes = ZoneLogic::judgeBalance($userData['id'],$zoneGoodsId); $judgeRes = ZoneLogic::judgeBalance($userData['id'],$zoneGoodsId);
if (!$judgeRes) return $this->renderError('余额不足'); if (!$judgeRes) return $this->renderError('余额不足');
# 获取刮奖图片 # 获取刮奖图片
$data = ZoneLogic::createOrder($userData['id'],$zoneGoodsId); $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']]); 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']); 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']]
);
} }

31
app/logic/Zone.php

@ -6,6 +6,7 @@ use app\model\ConsumptionRecords;
use app\model\User; use app\model\User;
use app\model\ZoneGoods; use app\model\ZoneGoods;
use app\model\ZoneGoodsParam; use app\model\ZoneGoodsParam;
use think\facade\Db;
/** /**
* 专区逻辑层 * 专区逻辑层
@ -47,6 +48,10 @@ class Zone
# 获取刮刮乐信息 # 获取刮刮乐信息
$data = self::getWinningPrize($zoneParamArr); $data = self::getWinningPrize($zoneParamArr);
# 开启事务
$connection = Db::connect();
try {
$connection->startTrans();
# 扣除余额 # 扣除余额
$zoneGoodsModel = ZoneGoods::field('price')->find($zone_goods_id); $zoneGoodsModel = ZoneGoods::field('price')->find($zone_goods_id);
$price = $zoneGoodsModel['price']; $price = $zoneGoodsModel['price'];
@ -55,11 +60,14 @@ class Zone
# 消费记录 # 消费记录
$c_r_id = ConsumptionRecords::createRecords($user_id,$zone_goods_id,$price,$price,$balance,$data); $c_r_id = ConsumptionRecords::createRecords($user_id,$zone_goods_id,$price,$price,$balance,$data);
$connection->commit();
# 返回刮刮乐图标、金额、订单id # 返回刮刮乐图标、金额、订单id
return [ return ['status' => 1, 'data' => $data, 'c_r_id' => $c_r_id];
'data' => $data, } catch (\Exception $e) {
'c_r_id' => $c_r_id
]; $connection->rollback();
return ['status' => 0, 'msg' => '操作失败'];
}
} }
/** /**
@ -92,6 +100,11 @@ class Zone
} }
} }
# 开启事务
$connection = Db::connect();
try {
$connection->startTrans();
# 判断是否中奖 # 判断是否中奖
if ($awards_amount > 0) { if ($awards_amount > 0) {
@ -103,9 +116,15 @@ class Zone
} }
# 完成订单 # 完成订单
ConsumptionRecords::endOrder($c_r_id); ConsumptionRecords::endOrder($c_r_id,$awards_amount);
$connection->commit();
return ['status' => 1, 'msg' => '完成', 'awards_amount' => $awards_amount];
} catch (\Exception $e) {
return ['status' => 1, 'msg' => '完成']; $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\DataNotFoundException
* @throws \think\db\exception\DbException * @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException * @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 = ConsumptionRecords::find($c_r_id);
$zoneOrder->status = 1; $zoneOrder->status = 1;
$zoneOrder->complete_time = date("Y-m-d H:i:s",time()); $zoneOrder->complete_time = date("Y-m-d H:i:s",time());
if ($awards_amount > 0) {
$zoneOrder->awards_status = 1;
}
$zoneOrder->save(); $zoneOrder->save();
} }

Loading…
Cancel
Save