변경 파일 목록
총 2개
변경 파일 코드
추가삭제
변경 전OrderAdminNew.php
| } | |
| // 환불완료/취소/실패인 경우 무조건 상태변경 금지 | |
| if ($val['orderStatus'] == 'r3' || $val['orderStatus'] == 'c' || $val['orderStatus'] == 'f') { | |
| if($channel != 'naverpay') { | |
| $changeStatusCheck = false; | |
| if ($changeStatus === 'r3') { | |
변경 후OrderAdminNew.php
| } | |
| // 환불완료/취소/실패인 경우 무조건 상태변경 금지 | |
| // 스냅샷($val)뿐 아니라 FOR UPDATE 잠금조회로 최신 상태까지 확인해 배치 중 커밋된 환불완료(r3) 덮어쓰기 방지 | |
| if ($channel != 'naverpay') { | |
| $lockBind = []; | |
| $this->db->bind_param_push($lockBind, 'i', $val['sno']); | |
| $this->db->bind_param_push($lockBind, 's', $orderNo); | |
| $lockedOrderGoods = $this->db->query_fetch('SELECT orderStatus FROM ' . DB_ORDER_GOODS . ' WHERE sno = ? AND orderNo = ? FOR UPDATE', $lockBind, false); | |
| $currentOrderStatus = $lockedOrderGoods['orderStatus'] ?? $val['orderStatus']; | |
| if (in_array($val['orderStatus'], ['r3', 'c', 'f'], true) | |
| || in_array($currentOrderStatus, ['r3', 'c', 'f'], true)) { | |
| $changeStatusCheck = false; | |
| if ($changeStatus === 'r3') { | |
변경 전OrderAdmin.php
| $changeStatusCheck = false; | |
| } | |
| } else { | |
| // 실제 주문상품의 주문상태 | |
| $orderGoodsStatus = $this->getOrderGoods($orderNo,$val['sno'])[0]['orderStatus']; | |
| if ($changeStatus === 'r3') { | |
| $this->setCommonLog( | |
변경 후OrderAdmin.php
| $changeStatusCheck = false; | |
| } | |
| } else { | |
| // 실제 주문상품의 주문상태 배치 트랜잭션 스냅샷(REPEATABLE READ)에 가려진 환불완료(r3)를 놓치지 않도록 | |
| // FOR UPDATE 잠금조회로 최신 커밋 상태 재조회 (덮어쓰기 방지) | |
| $lockBind = []; | |
| $this->db->bind_param_push($lockBind, 'i', $val['sno']); | |
| $this->db->bind_param_push($lockBind, 's', $orderNo); | |
| $lockedOrderGoods = $this->db->query_fetch('SELECT orderStatus FROM ' . DB_ORDER_GOODS . ' WHERE sno = ? AND orderNo = ? FOR UPDATE', $lockBind, false); | |
| $orderGoodsStatus = $lockedOrderGoods['orderStatus'] ?? $val['orderStatus']; | |
| if ($changeStatus === 'r3') { | |
| $this->setCommonLog( | |