Inventory, coupon processing mechanism

When creating an order, deduct inventory and deduct coupons.
When the order is canceled, roll back the inventory and roll back the coupon.
In this way, you can avoid using more and selling more. (When payment is completed, inventory is deducted and it is easy to sell more)

/**
 * 回滚优惠券
 */
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;
}

Guess you like

Origin www.cnblogs.com/jiqing9006/p/12725911.html