库存,优惠券处理机制
创建订单的时候,扣库存,扣优惠券。
订单取消的时候,回滚库存,回滚优惠券。
这种方式,能够避免多使用,多卖出。(支付完成时,扣库存,容易多卖)
/**
* 回滚优惠券
*/
public function rollbackCoupon($user_coupon_id) {
// 判断是否过期
$user_coupon = M('user_coupon');
$user_coupon_info = $user_coupon->where(['id'=>$user_coupon_id,'status'=>2])->find();
if (!$user_coupon_info) {
// 不存在
return true;
}
if ($user_coupon_info['valid_time'] < time()) {
// 已过期
return true;
}
// 设为未使用
return $user_coupon->where(['id'=>$user_coupon_id])->save(['status'=>1]);
}
/**
* 回滚订单商品库存
*/
public function rollbackStock($order_id) {
$product_order_item = M('product_order_item');
$product_order_item_list = $product_order_item->where(['order_id'=>$order_id])->select();
M()->startTrans();
$product = M('product');
$product_spec = M('product_spec');
foreach($product_order_item_list as $k => $v) {
if ($v['product_spec_id']) { // 有规格
$flag = $product_spec->where(['id'=>$v['product_spec_id']])->setInc('stock',$v['num']);
if ($flag === false) {
M()->rollback();
return false;
}
} else { // 无规格
$flag = $product->where(['id'=>$v['product_id']])->setInc('stock',$v['num']);
if ($flag === false) {
M()->rollback();
return false;
}
}
}
M()->commit();
return true;
}