Merge remote-tracking branch 'origin/master'

This commit is contained in:
이경숙
2026-04-06 14:43:08 +09:00
12 changed files with 120 additions and 25 deletions

View File

@@ -207,7 +207,7 @@ public class BOOrderService {
} }
// else if ("03".equals(itemDlvyGroupDvCd)) { // 유료배송 // else if ("03".equals(itemDlvyGroupDvCd)) { // 유료배송
if ("03".equals(itemDlvyGroupDvCd) || subsvcAt) { // 유료배송 if ("02".equals(itemDlvyGroupDvCd) || "03".equals(itemDlvyGroupDvCd) || subsvcAt) { // 유료배송
// 추가배송비 계산 (MUL) // 추가배송비 계산 (MUL)
if (!StringUtils.isEmpty(itemDlvyAreaAditAt) && "Y".equals(itemDlvyAreaAditAt)) { if (!StringUtils.isEmpty(itemDlvyAreaAditAt) && "Y".equals(itemDlvyAreaAditAt)) {
@@ -216,7 +216,7 @@ public class BOOrderService {
} }
} }
// 유료배송 + 수량 조건 // 무료 or 유료배송 + 수량 조건
if (("Y".equals(itemCntCndUseAt) && itemCntCndAditAmt.compareTo(BigDecimal.ZERO) > 0) || subsvcAt) { if (("Y".equals(itemCntCndUseAt) && itemCntCndAditAmt.compareTo(BigDecimal.ZERO) > 0) || subsvcAt) {
// 수량 조건 있을 경우 // 수량 조건 있을 경우
for (DataMap goodsMap : goodsByDlvyGroupList) { for (DataMap goodsMap : goodsByDlvyGroupList) {
@@ -465,7 +465,7 @@ public class BOOrderService {
dlvylcListMulti.add(dlvyMap); dlvylcListMulti.add(dlvyMap);
} else if ("02".equals(itemDlvyGroupDvCd)) { // 무료 배송일 경우 } else { //if ("02".equals(itemDlvyGroupDvCd)) { // 무료 배송일 경우
// 추가배송비 계산 (MUL) // 추가배송비 계산 (MUL)
if (!StringUtils.isEmpty(itemDlvyAreaAditAt) && "Y".equals(itemDlvyAreaAditAt)) { if (!StringUtils.isEmpty(itemDlvyAreaAditAt) && "Y".equals(itemDlvyAreaAditAt)) {

View File

@@ -3665,7 +3665,7 @@ public class BOOrdrService{
// 보유마일리지가 1000 원 이상일 경우만 마일리지를 사용할 수 있음. // 보유마일리지가 1000 원 이상일 경우만 마일리지를 사용할 수 있음.
if (mlgHoldUseAmt.compareTo(ableMlgAmt) > 0) { if (mlgHoldUseAmt.compareTo(ableMlgAmt) > 0) {
useMlgAmt = new BigDecimal(0); useMlgAmt = new BigDecimal(0);
throw new WnbtRestException("보유마일리지가 " + mlgHoldUseAmt + "원 이상부터 사용할 수 있습니다."); throw new WnbtRestException("보유마일리지가 " + mlgHoldUseAmt + "점 이상부터 사용할 수 있습니다.");
} }
@@ -3673,14 +3673,14 @@ public class BOOrdrService{
if (mlgSetleAmtUseAmt.compareTo(setleAmt) > 0) { if (mlgSetleAmtUseAmt.compareTo(setleAmt) > 0) {
useMlgAmt = new BigDecimal(0); useMlgAmt = new BigDecimal(0);
// throw new WnbtRestException("결제 금액이 적어 마일리지를 사용할 수 없습니다."); // throw new WnbtRestException("결제 금액이 적어 마일리지를 사용할 수 없습니다.");
throw new WnbtRestException("상품금액 합산이 " + mlgSetleAmtUseAmt + "원 이상부터 마일리지 사용이 가능합니다."); throw new WnbtRestException("상품금액 합산이 " + mlgSetleAmtUseAmt + "점 이상부터 마일리지 사용이 가능합니다.");
} }
// 사용할 경우 마일리지는 최소 1000원 부터 사용가능하며 // 사용할 경우 마일리지는 최소 1000원 부터 사용가능하며
if (mlgMummUseAmt.compareTo(useMlgAmt) > 0) { if (mlgMummUseAmt.compareTo(useMlgAmt) > 0) {
useMlgAmt = new BigDecimal(0); useMlgAmt = new BigDecimal(0);
throw new WnbtRestException(String.valueOf(mlgMummUseAmt), "마일리지 최소 사용금액인 " + mlgMummUseAmt + "원 이상부터 마일리지 사용이 가능합니다."); throw new WnbtRestException(String.valueOf(mlgMummUseAmt), "마일리지 최소 사용금액인 " + mlgMummUseAmt + "점 이상부터 마일리지 사용이 가능합니다.");
} else { } else {
if ("01".equals(mlgMxmmUseDv)) { // '01' 일 경우 제한없음 if ("01".equals(mlgMxmmUseDv)) { // '01' 일 경우 제한없음
@@ -3699,7 +3699,7 @@ public class BOOrdrService{
if (useMlgAmt.compareTo(mlgMxmmUseAmt) > 0) { if (useMlgAmt.compareTo(mlgMxmmUseAmt) > 0) {
// useMlgAmt = new BigDecimal(0); // useMlgAmt = new BigDecimal(0);
useMlgAmt = ableMlgAmt.compareTo(mlgMxmmUseAmt) > 0 ? mlgMxmmUseAmt : ableMlgAmt; useMlgAmt = ableMlgAmt.compareTo(mlgMxmmUseAmt) > 0 ? mlgMxmmUseAmt : ableMlgAmt;
throw new WnbtRestException(String.valueOf(mlgMxmmUseAmt), "마일리지 최대 사용금액은 " + mlgMxmmUseAmt + "원 입니다."); throw new WnbtRestException(String.valueOf(mlgMxmmUseAmt), "마일리지 최대 사용금액은 " + mlgMxmmUseAmt + "점 입니다.");
} }
} }
@@ -3715,7 +3715,7 @@ public class BOOrdrService{
} else if (useMlgAmt.compareTo(BigDecimal.ZERO) < 0) { } else if (useMlgAmt.compareTo(BigDecimal.ZERO) < 0) {
useMlgAmt = new BigDecimal(0); useMlgAmt = new BigDecimal(0);
throw new WnbtRestException("마일리지는 1원부터 사용 가능합니다."); throw new WnbtRestException("마일리지는 1점부터 사용 가능합니다.");
} }

View File

@@ -3512,7 +3512,10 @@ gap-0 {
height: 20px; height: 20px;
padding: 0 8px; padding: 0 8px;
border-radius: 40px; border-radius: 40px;
background-color: #b1b6b9; /*background-color: #b1b6b9;*/
color: #5c7cfa;
background-color: #fcfdff;
border: 1px solid #5c7cfa;
font-weight: 500; font-weight: 500;
} }
.product-badge.new { .product-badge.new {

View File

@@ -775,7 +775,10 @@ caption {
height: 18px; height: 18px;
padding: 0 8px; padding: 0 8px;
border-radius: 40px; border-radius: 40px;
background-color: #b1b6b9; /*background-color: #b1b6b9;*/
color: #5c7cfa;
background-color: #fcfdff;
border: 1px solid #5c7cfa;
font-weight: 500; font-weight: 500;
} }
.product-badge.new { .product-badge.new {

View File

@@ -554,7 +554,10 @@ caption {
height: 20px; height: 20px;
padding: 0 8px; padding: 0 8px;
border-radius: 40px; border-radius: 40px;
background-color: #b1b6b9; /*background-color: #b1b6b9;*/
color: #5c7cfa;
background-color: #fcfdff;
border: 1px solid #5c7cfa;
font-weight: 500; font-weight: 500;
} }
.product-badge.new { .product-badge.new {

View File

@@ -3512,7 +3512,10 @@ gap-0 {
height: 20px; height: 20px;
padding: 0 8px; padding: 0 8px;
border-radius: 40px; border-radius: 40px;
background-color: #b1b6b9; /*background-color: #b1b6b9;*/
color: #5c7cfa;
background-color: #fcfdff;
border: 1px solid #5c7cfa;
font-weight: 500; font-weight: 500;
} }
.product-badge.new { .product-badge.new {

View File

@@ -784,7 +784,10 @@ caption {
height: 18px; height: 18px;
padding: 0 8px; padding: 0 8px;
border-radius: 40px; border-radius: 40px;
background-color: #b1b6b9; /*background-color: #b1b6b9;*/
color: #5c7cfa;
background-color: #fcfdff;
border: 1px solid #5c7cfa;
font-weight: 500; font-weight: 500;
} }
.product-badge.new { .product-badge.new {

View File

@@ -554,7 +554,10 @@ caption {
height: 20px; height: 20px;
padding: 0 8px; padding: 0 8px;
border-radius: 40px; border-radius: 40px;
background-color: #b1b6b9; /*background-color: #b1b6b9;*/
color: #5c7cfa;
background-color: #fcfdff;
border: 1px solid #5c7cfa;
font-weight: 500; font-weight: 500;
} }
.product-badge.new { .product-badge.new {

View File

@@ -775,7 +775,10 @@ caption {
height: 18px; height: 18px;
padding: 0 8px; padding: 0 8px;
border-radius: 40px; border-radius: 40px;
background-color: #b1b6b9; /*background-color: #b1b6b9;*/
color: #5c7cfa;
background-color: #fcfdff;
border: 1px solid #5c7cfa;
font-weight: 500; font-weight: 500;
} }
.product-badge.new { .product-badge.new {

View File

@@ -554,7 +554,10 @@ caption {
height: 20px; height: 20px;
padding: 0 8px; padding: 0 8px;
border-radius: 40px; border-radius: 40px;
background-color: #b1b6b9; /*background-color: #b1b6b9;*/
color: #5c7cfa;
background-color: #fcfdff;
border: 1px solid #5c7cfa;
font-weight: 500; font-weight: 500;
} }
.product-badge.new { .product-badge.new {

View File

@@ -322,15 +322,16 @@
} }
// 텍스트 입력 내용중 필수 항목 체크 // 텍스트 입력 내용중 필수 항목 체크
$(':text[required]').each(function () { $(':text[required]').each(function () {
const inputVal = $(this).val().trim();
if($(this).hasClass('number')){ if($(this).hasClass('number')){
if ($(this).val().trim() == '' || $(this).val().trim() == '0') { if (inputVal == '' || inputVal == '0' && !$(this).hasClass('allow-zero')) {
alert($(this).prop('title')+"은(는) 필수입니다"); alert($(this).prop('title')+"은(는) 필수입니다");
$(this).focus(); $(this).focus();
retVal = false; retVal = false;
return false; return false;
} }
}else{ }else{
if ($(this).val().trim() == '') { if (inputVal == '') {
alert($(this).prop('title')+"은(는) 필수입니다"); alert($(this).prop('title')+"은(는) 필수입니다");
$(this).focus(); $(this).focus();
retVal = false; retVal = false;
@@ -372,8 +373,11 @@
$('#expsrEndDt').val(expsrEndDt); $('#expsrEndDt').val(expsrEndDt);
} }
//선택한 재고정책
const choiceInvntryPolicyCd = $('input[name="invntryPolicyCd"]:checked').val()
//재고가 있으면 판매인 경우 개수 품절처리 필수 //재고가 있으면 판매인 경우 개수 품절처리 필수
if($('input[name="invntryPolicyCd"]:checked').val() == '01'){ if(choiceInvntryPolicyCd == '01'){
if($('#avlinvLmttQy').val() == ''){ if($('#avlinvLmttQy').val() == ''){
alert($('#avlinvLmttQy').prop('title')+"은(는) 노출여부가 노출예약인 경우 필수입니다"); alert($('#avlinvLmttQy').prop('title')+"은(는) 노출여부가 노출예약인 경우 필수입니다");
$('#avlinvLmttQy').focus(); $('#avlinvLmttQy').focus();
@@ -574,7 +578,7 @@
<th>구독기간<span class="red-7">*</span></th> <th>구독기간<span class="red-7">*</span></th>
<td> <td>
<div class="td-inner"> <div class="td-inner">
<input class="input-text xsm number text-right" type="text" title="구독기간" id="subPd" name="subPd" maxlength="3" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.subPd}</c:if>" required> 개월 <input class="input-text xsm number text-right allow-zero" type="text" title="구독기간" id="subPd" name="subPd" maxlength="3" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.subPd}</c:if>" required> 개월
</div> </div>
</td> </td>
</tr> </tr>
@@ -596,7 +600,7 @@
<th>배송횟수<span class="red-7">*</span></th> <th>배송횟수<span class="red-7">*</span></th>
<td> <td>
<div class="td-inner"> <div class="td-inner">
<input class="input-text xsm number text-right" type="text" title="배송횟수" id="dlvyCnt" name="dlvyCnt" maxlength="3" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.dlvyCnt}</c:if>" required> 회 <input class="input-text xsm number text-right allow-zero" type="text" title="배송횟수" id="dlvyCnt" name="dlvyCnt" maxlength="3" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.dlvyCnt}</c:if>" required> 회
</div> </div>
</td> </td>
<th>배송주기<span class="red-7">*</span></th> <th>배송주기<span class="red-7">*</span></th>
@@ -631,13 +635,13 @@
<th>구독료<span class="red-7">*</span></th> <th>구독료<span class="red-7">*</span></th>
<td> <td>
<div class="td-inner"> <div class="td-inner">
<input class="input-text sm number text-right" type="text" title="구독료" id="subsvcCt" name="subsvcCt" maxlength="11" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.subsvcCt}</c:if>" required> 円(엔) <input class="input-text sm number text-right allow-zero" type="text" title="구독료" id="subsvcCt" name="subsvcCt" maxlength="11" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.subsvcCt}</c:if>" required> 円(엔)
</div> </div>
</td> </td>
<th>1회 배송비<span class="red-7">*</span></th> <th>1회 배송비<span class="red-7">*</span></th>
<td> <td>
<div class="td-inner"> <div class="td-inner">
<input class="input-text sm number text-right" type="text" title="1회 배송비" id="tmeDlvyAmt" name="tmeDlvyAmt" maxlength="11" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.tmeDlvyAmt}</c:if>" required> 円(엔) <input class="input-text sm number text-right allow-zero" type="text" title="1회 배송비" id="tmeDlvyAmt" name="tmeDlvyAmt" maxlength="11" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.tmeDlvyAmt}</c:if>" required> 円(엔)
</div> </div>
</td> </td>
</tr> </tr>
@@ -651,7 +655,7 @@
<th>실판매가<span class="red-7">*</span></th> <th>실판매가<span class="red-7">*</span></th>
<td> <td>
<div class="td-inner"> <div class="td-inner">
<input class="input-text sm number text-right" type="text" title="실판매가" id="selpric" name="selpric" maxlength="11" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.selpric}</c:if>" readonly> 円(엔) <input class="input-text sm number text-right allow-zero" type="text" title="실판매가" id="selpric" name="selpric" maxlength="11" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.selpric}</c:if>" readonly> 円(엔)
</div> </div>
</td> </td>
</tr> </tr>
@@ -686,7 +690,7 @@
<th>가용재고</th> <th>가용재고</th>
<td> <td>
<div class="td-inner"> <div class="td-inner">
<input class="input-text sm number text-right" type="text" title="가용재고" id="availQt" maxlength="11" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.availQt}</c:if>" readonly> <input class="input-text sm text-right" type="text" title="가용재고" id="availQt" maxlength="11" value="<c:if test='${resultMap.subsvcDtl != null}'>${resultMap.subsvcDtl.availQt}</c:if>" readonly>
</div> </div>
</td> </td>
</tr> </tr>

View File

@@ -14,6 +14,21 @@
--%> --%>
<script type="text/javascript"> <script type="text/javascript">
$( document ).ready(function() { $( document ).ready(function() {
// const amtCndUseAt = document.querySelector('#amtCndUseAt');
// const amtCndAditAmt = document.querySelector('#amtCndAditAmt');
const cntCndUseAt = document.querySelector('#cntCndUseAt');
const cntCndAditAmt = document.querySelector('#cntCndAditAmt');
// fn_check_BoxControl(amtCndUseAt,amtCndAditAmt);
fn_check_BoxControl(cntCndUseAt,cntCndAditAmt);
// const amtCndUseAt2 = document.querySelector('#amtCndUseAt2');
// const amtCndAditAmt2 = document.querySelector('#amtCndAditAmt2');
const cntCndUseAt2 = document.querySelector('#cntCndUseAt2');
const cntCndAditAmt2 = document.querySelector('#cntCndAditAmt2');
// fn_check_BoxControl(amtCndUseAt2,amtCndAditAmt2);
fn_check_BoxControl(cntCndUseAt2,cntCndAditAmt2);
/** 배송권역 셀렉트박스 컨트롤 */ /** 배송권역 셀렉트박스 컨트롤 */
const dlvyAreaAditAt = document.querySelector('#dlvyAreaAditAt'); const dlvyAreaAditAt = document.querySelector('#dlvyAreaAditAt');
const areaAditDlvyAmt = document.querySelector('#areaAditDlvyAmt'); const areaAditDlvyAmt = document.querySelector('#areaAditDlvyAmt');
@@ -56,6 +71,32 @@
<col> <col>
</colgroup> </colgroup>
<tbody> <tbody>
<tr>
<th>개별배송조건(KR)</th>
<td>
<div class="td-inner">
<div class="td-inner vertical">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" id="cntCndUseAt" name="cntCndUseAt"
<c:choose>
<c:when test="${ resultMap.dlvyGroup.cntCndUseAt eq 'Y' }"> value="Y" </c:when>
<c:otherwise> value="N" </c:otherwise>
</c:choose>
<c:if test="${ resultMap.dlvyGroup.cntCndUseAt eq 'Y' }">checked="checked"</c:if>>
<span style="margin-right: 5px;" class="check"></span>
<input type="text" class="input-text sm right number" <c:if test="${ resultMap.dlvyGroup.cntCndUseAt ne 'Y' }">disabled="disabled"</c:if> value="<fmt:formatNumber value='${resultMap.dlvyGroup.cntCndAditAmt}' pattern="#,###" />" title="구매 개수 조건" id="cntCndAditAmt" name="cntCndAditAmt" maxlength="13">
</label>
<span class="control-label">개 단위로 개별배송</span>
</div>
<div class="gray-7">
<p class="fyi">값을 1개 이상 입력 하신 경우 설정이 가능 합니다.</p>
<p class="fyi">설정한 개수의 배수로 배송이 분리됩니다.</p>
</div>
</div>
</div>
</td>
</tr>
<tr> <tr>
<th rowspan="2">배송 권역(KR)</th> <th rowspan="2">배송 권역(KR)</th>
<td> <td>
@@ -131,6 +172,32 @@
<col> <col>
</colgroup> </colgroup>
<tbody> <tbody>
<tr>
<th>개별배송조건(JP)</th>
<td>
<div class="td-inner">
<div class="td-inner vertical">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" id="cntCndUseAt2" name="cntCndUseAt2"
<c:choose>
<c:when test="${ resultMap.dlvyGroup.cntCndUseAt2 eq 'Y' }"> value="Y" </c:when>
<c:otherwise> value="N" </c:otherwise>
</c:choose>
<c:if test="${ resultMap.dlvyGroup.cntCndUseAt2 eq 'Y' }">checked="checked"</c:if>>
<span style="margin-right: 5px;" class="check"></span>
<input type="text" class="input-text sm right number" <c:if test="${ resultMap.dlvyGroup.cntCndUseAt2 ne 'Y' }">disabled="disabled"</c:if> value="<fmt:formatNumber value='${resultMap.dlvyGroup.cntCndAditAmt2}' pattern="#,###" />" title="구매 개수 조건" id="cntCndAditAmt2" name="cntCndAditAmt2" maxlength="13">
</label>
<span class="control-label">개 단위로 개별배송</span>
</div>
<div class="gray-7">
<p class="fyi">값을 1개 이상 입력 하신 경우 설정이 가능 합니다.</p>
<p class="fyi">설정한 개수의 배수로 배송이 분리됩니다.</p>
</div>
</div>
</div>
</td>
</tr>
<tr> <tr>
<th rowspan="2">배송 권역(JP)</th> <th rowspan="2">배송 권역(JP)</th>
<td> <td>