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) 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']]
);
} }

65
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,19 +48,26 @@ class Zone
# 获取刮刮乐信息 # 获取刮刮乐信息
$data = self::getWinningPrize($zoneParamArr); $data = self::getWinningPrize($zoneParamArr);
# 扣除余额 # 开启事务
$zoneGoodsModel = ZoneGoods::field('price')->find($zone_goods_id); $connection = Db::connect();
$price = $zoneGoodsModel['price']; try {
$balance = User::decrBalance($user_id,$price); $connection->startTrans();
# 扣除余额
# 消费记录 $zoneGoodsModel = ZoneGoods::field('price')->find($zone_goods_id);
$c_r_id = ConsumptionRecords::createRecords($user_id,$zone_goods_id,$price,$price,$balance,$data); $price = $zoneGoodsModel['price'];
$balance = User::decrBalance($user_id,$price);
# 返回刮刮乐图标、金额、订单id
return [ # 消费记录
'data' => $data, $c_r_id = ConsumptionRecords::createRecords($user_id,$zone_goods_id,$price,$price,$balance,$data);
'c_r_id' => $c_r_id
]; $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\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