재고 검사시 '쇼핑'상태인 카트를 고려하지 않는다면 어떤 일이 일어나는가?

재고 검사시 '쇼핑'상태인 카트를 고려하지 않는다면 어떤 일이 일어나는가?

QA

재고 검사시 '쇼핑'상태인 카트를 고려하지 않는다면 어떤 일이 일어나는가?

답변 1

본문

안녕하세요.

 

물품을 구매할 때 g5_shop_cart에 있는 '쇼핑'상태의 카트 역시 카운팅하여 현재 재고 숫자를 파악합니다.

 

즉 결제를 하기 전 상태의 카트 역시 카운팅하여 재고에서 빼서 통보합니다.

 

'주문'상태로 넘어간 것부터 재고를 고려하고 싶기 때문에, 단지 '쇼핑'상태의 카트는 재고 카운팅을 하지않고 싶습니다. 이렇게 하는 경우 추후 어떤 문제가 발생하는지 궁금합니다.

 

=>예상 상황
-카트에 담아 두었고 추후에 구매하려 했는데, 시간상 뒤에 구매한 다른 고객이 결제를 먼저 해버린 경우 카트에 담아 두었던 고객에게 재고가 없다는 메세지가 뜰 수 있음 혹은 뜨지 않고 결제가 되버림

-구매하려하는데 시간상 더 뒤에 구매하려는 고객이 결제는 더 빨리 하는 경우 먼저 구매하려는 고객에게 재고가 없다는 메세지가 뜰 수 있음 혹은 뜨지 않고 결제가 되버림

*에러 알림이 떠도 상관 없지만 결제가 되면 문제가 생깁니다. 혹시 어떤 문제가 발생할지 아시는 분이 계신가요?

 

'쇼핑' 상태의 재고를 파악하지 않도록 하기 위해 제거하려는 코드는 아래와 같습니다.

 

/shop/cartupdate.php (영카트 5.2.4.1버전)

 

대략 163line

 

            // 기존에 장바구니에 담긴 상품이 있는 경우에 최대 구매수량 체크
            if($it['it_buy_max_qty'] > 0) {
                $sql4 = " select sum(ct_qty) as ct_sum
                            from {$g5['g5_shop_cart_table']}
                            where od_id = '$tmp_cart_id'
                              and it_id = '$it_id'
                              and io_type = '0'
                              and ct_status = '쇼핑' ";
                $row4 = sql_fetch($sql4);

                if(($sum_qty + $row4['ct_sum']) > $it['it_buy_max_qty'])
                    alert($it['it_name'].'의 선택옵션 개수 총합 '.number_format($it['it_buy_max_qty']).'개 이하로 주문해 주십시오.', './cart.php');

 

대략 194line

        //--------------------------------------------------------
        //  재고 검사, 바로구매일 때만 체크
        //--------------------------------------------------------

        // 이미 주문폼에 있는 같은 상품의 수량합계를 구한다.
        if($sw_direct) {
            for($k=0; $k<$opt_count; $k++) {
                $io_id = preg_replace(G5_OPTION_ID_FILTER, '', $_POST['io_id'][$it_id][$k]);
                $io_type = preg_replace('#[^01]#', '', $_POST['io_type'][$it_id][$k]);
                $io_value = $_POST['io_value'][$it_id][$k];

                $sql = " select SUM(ct_qty) as cnt from {$g5['g5_shop_cart_table']}
                          where od_id <> '$tmp_cart_id'
                            and it_id = '$it_id'
                            and io_id = '$io_id'
                            and io_type = '$io_type'
                            and ct_stock_use = 0
                            and ct_status = '쇼핑'
                            and ct_select = '1' ";
                $row = sql_fetch($sql);
                $sum_qty = $row['cnt'];

                // 재고 구함
                $ct_qty = $_POST['ct_qty'][$it_id][$k];
                if(!$io_id)
                    $it_stock_qty = get_it_stock_qty($it_id);
                else
                    $it_stock_qty = get_option_stock_qty($it_id, $io_id, $io_type);

                if ($ct_qty + $sum_qty > $it_stock_qty)
                {
                    alert($io_value." 의 재고수량이 부족합니다.\\n\\n현재 재고수량 : " . number_format($it_stock_qty - $sum_qty) . " 개");
                }

 

위 코드를 제거하는 경우 단지 '쇼핑'중인 카트는 고려하지 않기 때문에 해당 상품이 '주문'단계로 넘어간 카트부터 카운팅 하게 되는지 궁금하고 다른 문제가 없을지 궁금합니다.

이 질문에 댓글 쓰기 :

답변 1

그 부분은 자신이 동일한 상품을 장바구니에 넣어둔 경우의 수량입니다.

동일 상품이 있는 경우에는 수량을 더해주는 거라서..

기존에 담긴 수량과 추가하는 수량을 더해서.. 재고를 비교하는 겁니다.

 

다른 고객의 장바구니 수량을 구하는 것이 아닙니다.

주문해야만 재고에서 빠지는 겁니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 58
© SIRSOFT
현재 페이지 제일 처음으로