【修复】并发锁处理

【修复】秒杀余额不足时失败处理
This commit is contained in:
liqianjin 2023-07-14 14:44:27 +08:00
parent b6730cdef8
commit 039839dad7
2 changed files with 10 additions and 3 deletions

View File

@ -276,10 +276,11 @@ class Futures extends BaseModel
*/ */
public function orderCreate($id, $order_id, $member_id) public function orderCreate($id, $order_id, $member_id)
{ {
if(!Cache::store('redis_concurrent')->handler()->setnx('addon_futures_'.$id,'1')){
if(Cache::store('redis_concurrent')->get('addon_futures_' . $id)){
return $this->error('', '你太慢了已被抢购'); return $this->error('', '你太慢了已被抢购');
} }
Cache::store('redis_concurrent')->handler()->expire('addon_futures_'.$id,30);
$date = model('futures')->getInfo([['id', '=', $id]]); $date = model('futures')->getInfo([['id', '=', $id]]);
if (empty($date) || ($date['status'] !== 2 && $date['status'] !== 7)) { if (empty($date) || ($date['status'] !== 2 && $date['status'] !== 7)) {
return $this->error($date, '下单失败-1001'); return $this->error($date, '下单失败-1001');
@ -300,7 +301,7 @@ class Futures extends BaseModel
'total_business_num' => Db::raw('total_business_num +1'), 'total_business_num' => Db::raw('total_business_num +1'),
]); ]);
(new Message())->addMessage($date['site_id'], '订单创建', 1, $member_id, $id); (new Message())->addMessage($date['site_id'], '订单创建', 1, $member_id, $id);
Cache::store('redis_concurrent')->tag('addon_futures_goods')->set('addon_futures_' . $id, '1'); Cache::store('redis_concurrent')->handler()->del('addon_futures_'.$id);
return $this->success(); return $this->success();
} }

View File

@ -65,6 +65,7 @@ class Pay extends BaseModel
if ($is_balance) { if ($is_balance) {
$data[ 'member_id' ] = $member_id; $data[ 'member_id' ] = $member_id;
$use_res = $this->useBalance($data)['data']; $use_res = $this->useBalance($data)['data'];
if (isset($use_res['code']) && $use_res['code'] < 0) return $use_res;
if (isset($use_res['pay_success'])) return $this->success($use_res); if (isset($use_res['pay_success'])) return $this->success($use_res);
$data = $this->getPayInfo($out_trade_no)[ 'data' ]; $data = $this->getPayInfo($out_trade_no)[ 'data' ];
} }
@ -471,6 +472,11 @@ class Pay extends BaseModel
$data['pay_money'] -= $data['balance_money']; $data['pay_money'] -= $data['balance_money'];
} }
$order = model('order')->getInfo([ [ 'out_trade_no', '=', $pay_info['out_trade_no'] ] ],'promotion_type');
if ($data['pay_money'] && $order['promotion_type'] == 'futures'){
return $this->error('', '支付余额不足');
}
model('pay')->startTrans(); model('pay')->startTrans();
try { try {
model('pay')->update($data, [ ['out_trade_no', '=', $pay_info['out_trade_no'] ] ]); model('pay')->update($data, [ ['out_trade_no', '=', $pay_info['out_trade_no'] ] ]);