diff --git a/src/main/java/com/wb/domainserver/domain/gcone/ordr/ordr/service/BOOrdrService.java b/src/main/java/com/wb/domainserver/domain/gcone/ordr/ordr/service/BOOrdrService.java index d3a3a137..0613f5c9 100644 --- a/src/main/java/com/wb/domainserver/domain/gcone/ordr/ordr/service/BOOrdrService.java +++ b/src/main/java/com/wb/domainserver/domain/gcone/ordr/ordr/service/BOOrdrService.java @@ -2291,15 +2291,18 @@ public class BOOrdrService{ }}); } + //상품 환불금액 합산 refundVO.setRefundAmt(BigDecimal.valueOf(refundItemList.stream().mapToInt(vo -> vo.getGoodsRefundAmt().intValue()).sum())); refundVO.setRefundAccmlmnyAmt(BigDecimal.valueOf(refundItemList.stream().mapToInt(vo -> vo.getSnggdsAccmlMlgAmt().intValue()).sum())); BigDecimal useMlg = null; + // 구매총수량과 환불요청수량이 같은경우는 전체결제취소 또는 전체 환불신청 if (ordrQy == canclQy) { // TODO : 구매확정 수량으로 계산해야함. ***** - // BigDecimal의 더하기 연산은 add() 메서드를 사용 + // 마일리지 합산 + 자투리 합산 useMlg = BigDecimal.valueOf(refundItemList.stream().mapToInt(vo -> vo.getSnggdsRefundMlgAmt().intValue()).sum()) .add(BigDecimal.valueOf(refundItemList.stream().mapToInt(vo -> vo.getSnggdsRefundMlgRmndrAmt().intValue()).sum())); } else { + // 마일리지 합산 useMlg = BigDecimal.valueOf(refundItemList.stream().mapToInt(vo -> vo.getSnggdsRefundMlgAmt().intValue()).sum()); } @@ -2426,13 +2429,15 @@ public class BOOrdrService{ BigDecimal addPaidDlvyAmt = new BigDecimal(0); // 유료배송 도서산간 추가 배송비 합 BigDecimal returnPaidDlvyAmt = new BigDecimal(0); // 유료배송 반품 배송비 - + int loopCnt = 0; + if (!CollectionUtils.isEmpty(dlvylcItemList)) { log.debug("환불 상품 목록 확인 : {}", dlvylcItemList); // 1. 주문 금액에서 환불 금액빼는 상품별 금액 합산 변수 선언 // 2. 반품 배송비 변수 선언 // 3. 왕복 배송비 변수 선언 + /* 반품/환불 신청 인경우*/ if (param.get("returnMthCd") != null) { for (DataMap shippingGrouping : dlvylcItemList) { log.debug("환불 상품 확인 : {}", shippingGrouping); @@ -2453,6 +2458,13 @@ public class BOOrdrService{ BigDecimal subSlepric = (BigDecimal) shippingGrouping.get("subSlepric"); + BigDecimal realDlvyAmt = (BigDecimal) shippingGrouping.get("realDlvyAmt"); // 상품별 결제 배송비 + /*환불배송비 누적*/ + if(loopCnt == 0 ){ + rlRefundDlvyAmt = rlRefundDlvyAmt.add(realDlvyAmt); + loopCnt++; + } + if (!StringUtils.isEmpty(shippingGrouping.get("refundQy"))) { Integer refundQy = Integer.parseInt(String.valueOf(shippingGrouping.get("refundQy"))); // 환불 수량 @@ -2634,10 +2646,9 @@ public class BOOrdrService{ // 최종 반품 배송비 refundVO.setReturnDlvyAmt(rlReturnDlvyAmt); - // 최종 환불 배송비 : 전체 환불일 경우에만 산정됨. log.debug(" selectBOLastRefundDlvyAmtInqire 업데이트 치기 전 refundVO:: {}", refundVO); - rlRefundDlvyAmt = mapper.selectBOLastRefundDlvyAmtInqire(refundVO); +// rlRefundDlvyAmt = mapper.selectBOLastRefundDlvyAmtInqire(refundVO); log.debug(" 환불금액이랑 반품 금액 업데이트 치기 전 rlRefundDlvyAmt:: {}", rlRefundDlvyAmt); refundVO.setRefundDlvyAmt(rlRefundDlvyAmt); log.debug(" 환불금액이랑 반품 금액 업데이트 치기 전 refundVO:: {}", refundVO); diff --git a/src/main/java/com/wb/domainserver/security/config/ResourceServerConfig.java b/src/main/java/com/wb/domainserver/security/config/ResourceServerConfig.java index 01595397..6a4e8e4e 100644 --- a/src/main/java/com/wb/domainserver/security/config/ResourceServerConfig.java +++ b/src/main/java/com/wb/domainserver/security/config/ResourceServerConfig.java @@ -57,7 +57,7 @@ import java.util.stream.Collectors; import static org.springframework.beans.factory.config.BeanDefinition.ROLE_INFRASTRUCTURE; -@EnableWebSecurity(debug = true) +@EnableWebSecurity @Configuration //@EnableMethodSecurity public class ResourceServerConfig { diff --git a/src/main/resources/mybatis/xml/mapper/gcone/ordr/ordr/BOOrdrMapper.xml b/src/main/resources/mybatis/xml/mapper/gcone/ordr/ordr/BOOrdrMapper.xml index cdadfdac..bbf0e351 100644 --- a/src/main/resources/mybatis/xml/mapper/gcone/ordr/ordr/BOOrdrMapper.xml +++ b/src/main/resources/mybatis/xml/mapper/gcone/ordr/ordr/BOOrdrMapper.xml @@ -1003,7 +1003,7 @@ , IFNULL(FOI.MLG_AMT, 0) AS MLG_AMT , IFNULL(FOS.DLVY_AMT, 0) AS DLVY_AMT , IFNULL(FO.RL_SETLE_AMT, 0) AS SETLE_AMT - , ROUND(FO.WON_RL_SETLE_AMT) AS WON_RL_SETLE_AMT + , ROUND(IFNULL(FO.WON_RL_SETLE_AMT, 0)) AS WON_RL_SETLE_AMT FROM ( SELECT FOI.SOPMAL_CD , FOI.ORDR_INNB @@ -1733,10 +1733,10 @@ , #{refundAcntDpstrNm} , REPLACE(#{refundAcntnb}, '-', '') , #{refundAmt} - , ROUND((SELECT GO2.BUY_RATE FROM GC_ORDER GO2 WHERE GO2.SOPMAL_CD = #{sopmalCd} AND GO2.ORDR_INNB = #{ordrInnb}) * ${refundAmt},0) + , ROUND((SELECT GO2.BUY_RATE FROM GC_ORDER GO2 WHERE GO2.SOPMAL_CD = #{sopmalCd} AND GO2.ORDR_INNB = #{ordrInnb}) * #{refundAmt},0) , #{refundAccmlmnyAmt} , #{refundDlvyAmt} - , #{wonRefundDlvyAmt} + , ROUND((SELECT GO2.BUY_RATE FROM GC_ORDER GO2 WHERE GO2.SOPMAL_CD = #{sopmalCd} AND GO2.ORDR_INNB = #{ordrInnb}) * #{refundDlvyAmt},0) , #{mlgAccmlmnyAmt} , #{mlgAccmlmnyValidDt} , #{enuriRevisnAmt} @@ -1762,7 +1762,7 @@ , HEX(AES_ENCRYPT(REPLACE(#{returnCstmrTelnb}, '-', ''), '1df5be2f7e90ae36')) , HEX(AES_ENCRYPT(REPLACE(#{returnCstmrMbtlnb}, '-', ''), '1df5be2f7e90ae36')) , #{returnDlvyAmt} - , #{wonReturnDlvyAmt} + , ROUND((SELECT GO2.BUY_RATE FROM GC_ORDER GO2 WHERE GO2.SOPMAL_CD = #{sopmalCd} AND GO2.ORDR_INNB = #{ordrInnb}) * #{returnDlvyAmt},0) , #{returnDlvyTrgetCd} , #{returnDlvyRspnsblCd} , #{returnDlvyPymntTyCd} @@ -4818,19 +4818,51 @@ THEN (IFNULL(OIOP2.ENURI_DSCNT_UNIT, 0) * RI.REFUND_QY) + IFNULL(OIOP2.ENURI_DSCNT_REST, 0) ELSE (IFNULL(OIOP2.ENURI_DSCNT_UNIT, 0) * RI.REFUND_QY) END ) AS SUB_SLEPRIC , FSG.DLVY_GROUP_DV_CD - , ROUND(IFNULL(FSG.DFT_DLVY_AMT, 0), '0') AS DFT_DLVY_AMT - , FSG.AMT_CND_USE_AT - , ROUND(IFNULL(FSG.AMT_CND_ADIT_AMT, 0), '0') AS AMT_CND_ADIT_AMT - , FSG.CNT_CND_USE_AT - , ROUND(IFNULL(FSG.CNT_CND_ADIT_AMT, 0), '0') AS CNT_CND_ADIT_AMT - , FSG.BUNDLE_DLVY_USE_AT - , ROUND(IFNULL(FSG.BUNDLE_DLVY_CND_AMT, 0), '0') AS BUNDLE_DLVY_CND_AMT - , FSG.DLVY_AREA_ADIT_AT - , ROUND(IFNULL(FSG.AREA_ADIT_DLVY_AMT, 0), '0') AS AREA_ADIT_DLVY_AMT + , (CASE + WHEN SH.DLVYLC_AREA_CD = 'JP' THEN ROUND(IFNULL(FSG.DFT_DLVY_AMT2, 0), '0') + ELSE ROUND(IFNULL(FSG.DFT_DLVY_AMT, 0), '0') + END) AS DFT_DLVY_AMT + , (CASE + WHEN SH.DLVYLC_AREA_CD = 'JP' THEN FSG.AMT_CND_USE_AT2 + ELSE FSG.AMT_CND_USE_AT + END) AS AMT_CND_USE_AT + , (CASE + WHEN SH.DLVYLC_AREA_CD = 'JP' THEN ROUND(IFNULL(FSG.AMT_CND_ADIT_AMT2, 0), '0') + ELSE ROUND(IFNULL(FSG.AMT_CND_ADIT_AMT, 0), '0') + END) AS AMT_CND_ADIT_AMT + , (CASE + WHEN SH.DLVYLC_AREA_CD = 'JP' THEN FSG.CNT_CND_USE_AT2 + ELSE FSG.CNT_CND_USE_AT + END) AS CNT_CND_USE_AT + , (CASE + WHEN SH.DLVYLC_AREA_CD = 'JP' THEN ROUND(IFNULL(FSG.CNT_CND_ADIT_AMT2, 0), '0') + ELSE ROUND(IFNULL(FSG.CNT_CND_ADIT_AMT, 0), '0') + END) AS CNT_CND_ADIT_AMT + , (CASE + WHEN SH.DLVYLC_AREA_CD = 'JP' THEN FSG.BUNDLE_DLVY_USE_AT2 + ELSE FSG.BUNDLE_DLVY_USE_AT + END) AS BUNDLE_DLVY_USE_AT + , (CASE + WHEN SH.DLVYLC_AREA_CD = 'JP' THEN ROUND(IFNULL(FSG.BUNDLE_DLVY_CND_AMT2, 0), '0') + ELSE ROUND(IFNULL(FSG.BUNDLE_DLVY_CND_AMT, 0), '0') + END) AS BUNDLE_DLVY_CND_AMT + , (CASE + WHEN SH.DLVYLC_AREA_CD = 'JP' THEN FSG.DLVY_AREA_ADIT_AT2 + ELSE FSG.DLVY_AREA_ADIT_AT + END) AS DLVY_AREA_ADIT_AT + , (CASE + WHEN SH.DLVYLC_AREA_CD = 'JP' THEN ROUND(IFNULL(FSG.AREA_ADIT_DLVY_AMT2, 0), '0') + ELSE ROUND(IFNULL(FSG.AREA_ADIT_DLVY_AMT, 0), '0') + END) AS AREA_ADIT_DLVY_AMT + , (CASE + WHEN OIOP2.ORDR_QY = (OIOP2.STEP85 + RI.REFUND_QY) THEN ROUND(IFNULL(SH.RL_DLVY_AMT, 0), '0') + ELSE 0 + END) AS REAL_DLVY_AMT , ROUND(IFNULL(SH.RL_DLVY_AMT + SH.DLVY_COUPON_DSCNT_AMT, 0), '0') AS RL_DLVY_AMT , OIOP2.RETURN_DLVY_APPLC_AT , ROUND(IFNULL(OIOP2.RETURN_DLVY_AMT, 0), '0') AS RETURN_DLVY_AMT , ROUND(IFNULL(OIOP2.EXCHNG_DLVY_AMT, 0), '0') AS EXCHNG_DLVY_AMT + , SH.DLVYLC_AREA_CD FROM GC_ORDER_ITEM_OPTION OIOP2 INNER JOIN GC_ORDER_ITEM OI ON OIOP2.SOPMAL_CD = OI.SOPMAL_CD diff --git a/src/main/resources/mybatis/xml/mapper/gcone/ordr/rtngudrefnd/BORtngudrefndMapper.xml b/src/main/resources/mybatis/xml/mapper/gcone/ordr/rtngudrefnd/BORtngudrefndMapper.xml index 643eda87..b12f1a1d 100644 --- a/src/main/resources/mybatis/xml/mapper/gcone/ordr/rtngudrefnd/BORtngudrefndMapper.xml +++ b/src/main/resources/mybatis/xml/mapper/gcone/ordr/rtngudrefnd/BORtngudrefndMapper.xml @@ -1750,6 +1750,9 @@ ,SUM(PRI.CASH_DSCNT_UNIT * PRI.REFUND_QY + PRI.CASH_DSCNT_REST) AS P_USE_CANCEL_CASH ,ROUND(RL_USE_CASH) AS RL_USE_CASH ,RL_ORDR_ITEM.RL_ORDR_QY + ,SUM(PRE.REFUND_DLVY_AMT) AS P_REFUND_DLVY_AMT + ,SUM(PRE.WON_REFUND_DLVY_AMT) AS P_WON_REFUND_DLVY_AMT + ,SUM(PRE.WON_REFUND_AMT) AS P_WON_REFUND_AMT FROM GC_ORDER_REFUND_ITEM PRI INNER JOIN GC_ORDER_REFUND PRE ON PRI.SOPMAL_CD = PRE.SOPMAL_CD AND PRI.ORDER_REFUND_INNB = PRE.ORDER_REFUND_INNB diff --git a/src/main/webapp/WEB-INF/views/mngr/goods/goodsmngr/GoodsListRForm.jsp b/src/main/webapp/WEB-INF/views/mngr/goods/goodsmngr/GoodsListRForm.jsp index 39d251b8..68892fe7 100644 --- a/src/main/webapp/WEB-INF/views/mngr/goods/goodsmngr/GoodsListRForm.jsp +++ b/src/main/webapp/WEB-INF/views/mngr/goods/goodsmngr/GoodsListRForm.jsp @@ -671,7 +671,7 @@ - + diff --git a/src/main/webapp/WEB-INF/views/mngr/ordr/refnd/RtngudRefndDtlInqireR.jsp b/src/main/webapp/WEB-INF/views/mngr/ordr/refnd/RtngudRefndDtlInqireR.jsp index 3f3a6d55..abdbf463 100644 --- a/src/main/webapp/WEB-INF/views/mngr/ordr/refnd/RtngudRefndDtlInqireR.jsp +++ b/src/main/webapp/WEB-INF/views/mngr/ordr/refnd/RtngudRefndDtlInqireR.jsp @@ -75,8 +75,8 @@ let pRefundQy = parseAmount(''); let rlOrdrQy = parseAmount(''); - let pRefundAmt = parseAmount(''); - + let pRefundAmt = parseAmount(''); /*환불상품금액*/ + let pRefundDlvyAmt = parseAmount(''); /*환불배송비*/ // 마일리지 let pUseCancelMlg = parseAmount(''); let rlUseMlg = parseAmount(''); @@ -98,13 +98,18 @@ totalRefundQy += refundQy; }); - + //전체 환불인경우 if (totalRefundQy + pRefundQy >= rlOrdrQy) { + let nowRefundDlvyAmt = 0; + $('input[name="shippingDlvyAmt"]').each(function (idx){ + nowRefundDlvyAmt += parseAmount($(this).val()); + } ); - let pRemainAmt = (rlSetleAmt - pRefundAmt) - nowRefundAmt; - + // (주문전체 결제금액 - 이전환불 환불금액 - 이전환불배송비) - 총환불금액(배송비 제외) - 전체배송비 + let pRemainAmt = (rlSetleAmt - pRefundAmt - pRefundDlvyAmt) - nowRefundAmt - nowRefundDlvyAmt; + // 절대값 let pRemainAmtRemain = Math.abs(pRemainAmt); @@ -374,7 +379,11 @@ function rlRefundAmtProcessing() { - let buyRate = parseAmount('${resultMap.result.totRefundDscntAmt.buyRate}'); + let wonRlSetleAmt = parseAmount('${data.ordrGoodsDtl.total.wonRlSetleAmt}'); /*실주문결제금액(원)*/ + let pWonRefundAmt = parseAmount(''); /*이전환불상품금액*/ + let pWonRefundDlvyAmt = parseAmount(''); /*이전환불배송비*/ + let wonLimitRefundAmt = wonRlSetleAmt - (pWonRefundAmt + pWonRefundDlvyAmt); /*환불최대금액*/ + let buyRate = parseFloat('${resultMap.result.totRefundDscntAmt.buyRate}',2); let refundTyCd = ''; let returnMthCd = $('input[name="returnMthCd"]:checked').val(); // 반품 방법 코드 let refundDlvyAmt = ''; // 환불 배송비 금액 @@ -509,14 +518,23 @@ /*환불금액 한화환불금액 계산*/ let wonRlRefundAmt = Math.round(realRefundAmt * buyRate); + console.log("wonRlRefundAmt : ",wonRlRefundAmt, " realRefundAmt : ",realRefundAmt, " buyRate : ",buyRate) + wonRlRefundAmt = wonRlRefundAmt > 0 ? wonRlRefundAmt : 0; + /*환불금액이 최대금액을 넘어설경우 원화 최대치로 치환 */ + wonRlRefundAmt = wonRlRefundAmt > wonLimitRefundAmt ? wonLimitRefundAmt : wonRlRefundAmt; + $('.wonRlRefundAmt').text(formatWithComma(wonRlRefundAmt)); } function rlRefundAmtProcessingInput() { + let wonRlSetleAmt = parseAmount('${data.ordrGoodsDtl.total.wonRlSetleAmt}'); /*실주문결제금액(원)*/ + let pWonRefundAmt = parseAmount(''); /*이전환불상품금액*/ + let pWonRefundDlvyAmt = parseAmount(''); /*이전환불배송비*/ + let wonLimitRefundAmt = wonRlSetleAmt - (pWonRefundAmt + pWonRefundDlvyAmt); /*환불최대금액*/ - let buyRate = parseAmount('${resultMap.result.totRefundDscntAmt.buyRate}'); + let buyRate = parseFloat('${resultMap.result.totRefundDscntAmt.buyRate}',2); let refundTyCd = ''; let returnMthCd = $('input[name="returnMthCd"]:checked').val(); // 반품 방법 코드 let refundDlvyAmt = ''; // 환불 배송비 금액 @@ -643,9 +661,11 @@ /*환불금액 한화환불금액 계산*/ let wonRlRefundAmt = Math.round(realRefundAmt * buyRate); wonRlRefundAmt = wonRlRefundAmt > 0 ? wonRlRefundAmt : 0; + + /*환불금액이 최대금액을 넘어설경우 원화 최대치로 치환 */ + wonRlRefundAmt = wonRlRefundAmt > wonLimitRefundAmt ? wonLimitRefundAmt : wonRlRefundAmt; + $('.wonRlRefundAmt').text(formatWithComma(wonRlRefundAmt)); - - } $('#returnDlvyPymntTyCd').on('change', function() { @@ -693,9 +713,6 @@ $('select[name="refundMthCd"]').on('change', function() { fn_refund_mth_ctrl(); }); - - - }); @@ -1087,16 +1104,20 @@ fn_create_input('hidden', "orderReItemVOList["+idx+"].invntryIncrsQy", $('[name=invntryIncrsQy]').eq(idx).val(), hiddenForm); } }); + /*총 환불금액은 계산된 금액으로 대체 (상품금액 + 배송비)*/ + totRefundAmt = parseAmount($('.realRefundAmt').text()); let registRlSetleAmt = parseAmount('${data.ordrGoodsDtl.total.setleAmt}'); - let pRefundAmt = parseAmount(''); + let pRefundAmt = parseAmount(''); /*이전상품환불금액*/ let nowRefundAmt = parseAmount(''); - console.log("환불 계산 정보 pRefundAmt : ", pRefundAmt); - console.log("환불 계산 정보 nowRefundAmt : ", nowRefundAmt); + let pRefundDlvyAmt = parseAmount(''); /*이전환불배송금액*/ + console.debug("환불 계산 정보 pRefundAmt : ", pRefundAmt); + console.debug("환불 계산 정보 nowRefundAmt : ", nowRefundAmt); - let registRefundAmt = pRefundAmt + totRefundAmt; - console.log("던질 마일리지가 총 합산을 넘으면 안됌.", registRefundAmt); - console.log("던질 마일리지가 총 합산을 넘으면 안됌.", totRefundAmt); + /*총 환불금액 계산 : 이전상품환불금액 + 현재환불금액(상품환불금액 + 환불배송비) + 이전환불배송금액 */ + let registRefundAmt = pRefundAmt + totRefundAmt + pRefundDlvyAmt; + console.debug("던질 마일리지가 총 합산을 넘으면 안됌.", registRefundAmt); + console.debug("던질 마일리지가 총 합산을 넘으면 안됌.", totRefundAmt); if (registRefundAmt > registRlSetleAmt) { alert("최종 환불금액이 전체 결제금액을 넘을 수 없습니다."); @@ -2647,7 +2668,7 @@ ${reDlvyCnt += ' 번째 배송지'}
${refundList.dlvyMthNm}
- + 무료 @@ -2665,7 +2686,7 @@ 1 ? 'rowspan="' += fn:length(resultMap.result.itemsList) += '"' : ''}> ${refundList.dlvyMthNm}
- + 무료