fix : 설정 > 마일리지 설정 - 마일리지 사용조건 추가

This commit is contained in:
이대환
2026-04-29 13:52:21 +09:00
parent d4d47751c0
commit 891b0a7f4f
4 changed files with 433 additions and 265 deletions

View File

@@ -28,6 +28,24 @@ import lombok.EqualsAndHashCode;
public class BOSetupOrdrVO extends AbstractVO { public class BOSetupOrdrVO extends AbstractVO {
/** 쇼핑몰 코드 */ /** 쇼핑몰 코드 */
private String sopmalCd; private String sopmalCd;
// 여러 곳 배송
/** 여러곳배송여부 */
private String multiDlvyAt;
/** 정기배송여부 */
private String fdrmDlvyAt;
// 선물하기
/** 선물하기여부 */
private String giftDlvyAt;
/** 선물하기자동취소기간 */
private String giftDlvyAtmcCanclPd;
// GC 머니
/** 충전형마일리지 사용여부 */
private String cashAt;
// 마일리지 지급
/** 마일리지 지급 사용여부 */ /** 마일리지 지급 사용여부 */
private String mlgPymntAt; private String mlgPymntAt;
/** 마일리지 지급 구분코드 */ /** 마일리지 지급 구분코드 */
@@ -42,14 +60,16 @@ public class BOSetupOrdrVO extends AbstractVO {
private String mlgValidPd; private String mlgValidPd;
/** 마일리지 유효기간 사용여부 */ /** 마일리지 유효기간 사용여부 */
private String mlgValidPdAt; private String mlgValidPdAt;
/**여러곳배송여부*/
private String multiDlvyAt; // 마일리지 사용 조건
/**정기배송여부*/ /** 마일리지 보유 사용 금액 */
private String fdrmDlvyAt; private String mlgHoldUseAmt;
/**선물하기여부*/ /** 마일리지 결제금액 사용 금액 */
private String giftDlvyAt; private String mlgSetleAmtUseAmt;
/**선물하기자동취소기간*/ /** 마일리지 최소 사용 금액 */
private String giftDlvyAtmcCanclPd; private String mlgMummUseAmt;
/*충전형마일리지 사용여부*/ /** 마일리지 최대 사용 구분(MLG_MXMM_USE_DV) */
private String cashAt; private String mlgMxmmUseDv;
/** 마일리지 최대 사용 금액 */
private String mlgMxmmUseAmt;
} }

View File

@@ -1,6 +1,8 @@
package com.wb.domainserver.domain.mngr.setup.ordr.controller; package com.wb.domainserver.domain.mngr.setup.ordr.controller;
import com.wb.domainserver.common.msg.GconeMessageSource; import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.gcone.setup.ordrmngr.service.BOOrdrMngrService; import com.wb.domainserver.domain.gcone.setup.ordrmngr.service.BOOrdrMngrService;
import com.wb.domainserver.domain.gcone.setup.ordrmngr.vo.BOSetupOrdrVO; import com.wb.domainserver.domain.gcone.setup.ordrmngr.vo.BOSetupOrdrVO;
import com.wb.domainserver.exception.WnbtRestException; import com.wb.domainserver.exception.WnbtRestException;
@@ -13,6 +15,7 @@ import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy; import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.SendToResrc; import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.communicate.ValidateResultConverter; import com.wb.domainserver.util.communicate.ValidateResultConverter;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil; import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -63,6 +66,8 @@ public class SetupOrdrController {
@Autowired @Autowired
private BOOrdrMngrService service; private BOOrdrMngrService service;
@Autowired
private BOMaSopmalService bOMaSopmalService;
/** /**
@@ -73,15 +78,14 @@ public class SetupOrdrController {
@Policy(AuthPolicy.RESTRICTED) @Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectOrdrSetupList") @RequestMapping(value="/selectOrdrSetupList")
public String selectOrdrSetupList(ModelMap model, BOSetupOrdrVO boOrdrVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) { public String selectOrdrSetupList(ModelMap model, BOSetupOrdrVO boOrdrVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
DataMap content = new DataMap();
boOrdrVO.setSopmalCd(authSopmalCd); boOrdrVO.setSopmalCd(authSopmalCd);
content.put("ordrSetupList", service.selectBOOrdrSetupList(boOrdrVO));
AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); BOMaSopmalVO boMaSopmalVO = new BOMaSopmalVO();
if("01".equals(user.getSysDvCd())){ boMaSopmalVO.setSopmalCd(authSopmalCd);
boOrdrVO.setSopmalCd(user.getSopmalCd()); content.put("sopmalDetailList", bOMaSopmalService.selectBOSopmalUpdtForm(boMaSopmalVO));
}
Map<String, Object> content = service.selectBOOrdrSetupList(boOrdrVO);
model.addAttribute("resultMap", content); model.addAttribute("resultMap", content);
// responseHandler.handleResponse( // responseHandler.handleResponse(
@@ -154,6 +158,19 @@ public class SetupOrdrController {
vo.setMlgMxmmPymntAmt(null); vo.setMlgMxmmPymntAmt(null);
} }
//마일리지 사용 조건 파라미터 정제
if(!StringUtil.isEmpty(vo.getMlgHoldUseAmt()))
vo.setMlgHoldUseAmt(StringUtil.removeCommaChar(vo.getMlgHoldUseAmt()));
if(!StringUtil.isEmpty(vo.getMlgSetleAmtUseAmt()))
vo.setMlgSetleAmtUseAmt(StringUtil.removeCommaChar(vo.getMlgSetleAmtUseAmt()));
if(!StringUtil.isEmpty(vo.getMlgMummUseAmt()))
vo.setMlgMummUseAmt(StringUtil.removeCommaChar(vo.getMlgMummUseAmt()));
if(!StringUtil.isEmpty(vo.getMlgMxmmUseAmt()))
vo.setMlgMxmmUseAmt(StringUtil.removeCommaChar(vo.getMlgMxmmUseAmt()));
//등록자 수정자 set //등록자 수정자 set
AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if("01".equals(user.getSysDvCd())){ if("01".equals(user.getSysDvCd())){

View File

@@ -42,7 +42,12 @@
<!--주문 설정 수정--> <!--주문 설정 수정-->
<update id="updateBOOrdrSetup"> <update id="updateBOOrdrSetup">
UPDATE GC_SHOP UPDATE GC_SHOP
SET MLG_PYMNT_AT = #{mlgPymntAt}, SET CASH_AT = IFNULL(#{cashAt},'N'),
MULTI_DLVY_AT = IFNULL(#{multiDlvyAt},'N'),
FDRM_DLVY_AT = IFNULL(#{fdrmDlvyAt},'N'),
GIFT_DLVY_AT = IFNULL(#{giftDlvyAt},'N'),
GIFT_DLVY_ATMC_CANCL_PD = #{giftDlvyAtmcCanclPd},
MLG_PYMNT_AT = #{mlgPymntAt},
MLG_PYMNT_DV_CD = #{mlgPymntDvCd}, MLG_PYMNT_DV_CD = #{mlgPymntDvCd},
MLG_PYMNT_RT = REPLACE(#{mlgPymntRt},',',''), MLG_PYMNT_RT = REPLACE(#{mlgPymntRt},',',''),
MLG_MXMM_PYMNT_AMT = REPLACE(#{mlgMxmmPymntAmt},',',''), MLG_MXMM_PYMNT_AMT = REPLACE(#{mlgMxmmPymntAmt},',',''),
@@ -63,11 +68,13 @@
MLG_VALID_PD_AT = 'Y', MLG_VALID_PD_AT = 'Y',
</otherwise> </otherwise>
</choose> </choose>
CASH_AT = IFNULL(#{cashAt},'N'), MLG_HOLD_USE_AMT = #{mlgHoldUseAmt},
MULTI_DLVY_AT = IFNULL(#{multiDlvyAt},'N'), MLG_SETLE_AMT_USE_AMT = #{mlgSetleAmtUseAmt},
FDRM_DLVY_AT = IFNULL(#{fdrmDlvyAt},'N'), MLG_MUMM_USE_AMT = #{mlgMummUseAmt},
GIFT_DLVY_AT = IFNULL(#{giftDlvyAt},'N'), MLG_MXMM_USE_DV = #{mlgMxmmUseDv},
GIFT_DLVY_ATMC_CANCL_PD = #{giftDlvyAtmcCanclPd} MLG_MXMM_USE_AMT = #{mlgMxmmUseAmt},
UPDUSR = #{updusr},
UPDT_DT = SYSDATE()
WHERE SOPMAL_CD = #{sopmalCd} WHERE SOPMAL_CD = #{sopmalCd}
</update> </update>

View File

@@ -3,6 +3,7 @@
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %> <%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%-- <%--
Class Name : OrdrListR.jsp Class Name : OrdrListR.jsp
Description : 주문설정 jsp Description : 주문설정 jsp
@@ -102,6 +103,34 @@
$("#mlgPymntRt").val("0"); $("#mlgPymntRt").val("0");
}); });
}); });
/* ********************************************************
* 마일리지 사용 조건 disabled 처리
******************************************************** */
const fn_set_mlgDisabled = function(_target) {
if (_target === 'other') {
$('#maxPct').prop('disabled', true);
$('#maxPct').val('0');
$('#maxMlg').prop('disabled', true);
$('#maxMlg').val('0');
} else if (_target === 'maxPct') {
$('#maxPct').prop('disabled', false);
$('#maxMlg').prop('disabled', true);
$('#maxMlg').val('0');
} else if (_target === 'maxMlg') {
$('#maxPct').prop('disabled', true);
$('#maxPct').val('0');
$('#maxMlg').prop('disabled', false);
}
}
/************************************************************** /**************************************************************
hidden form 생성 함수 hidden form 생성 함수
****************************************************************/ ****************************************************************/
@@ -122,13 +151,12 @@
</script> </script>
</head> </head>
<body> <body>
<c:set var = "ordrSetupInfo" value="${resultMap.ordrSetupInfo}"/> <c:set var = "ordrSetupInfo" value="${resultMap.ordrSetupList.ordrSetupInfo}"/>
<%-- 상단메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%> <%-- 상단메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%>
<%@include file="/WEB-INF/views/comm/mngr/Header.jsp" %> <%@include file="/WEB-INF/views/comm/mngr/Header.jsp" %>
<main class="main"> <main class="main">
<%-- 좌측메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%> <%-- 좌측메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%>
<%@include file="/WEB-INF/views/comm/mngr/Left.jsp" %> <%@include file="/WEB-INF/views/comm/mngr/Left.jsp" %>
<form id = "updtForm">
<div class="content"> <div class="content">
<div class="content__inner"> <div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button> <button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
@@ -139,6 +167,7 @@
<spring:message code="button.save"/></button> <spring:message code="button.save"/></button>
</div> </div>
</div> </div>
<form id = "updtForm">
<section class="content-section content-fold"> <section class="content-section content-fold">
<div class="content-fold__header"> <div class="content-fold__header">
</div> </div>
@@ -322,7 +351,7 @@
</span> </span>
<div class="select-box mr-10 "> <div class="select-box mr-10 ">
<select id="accmlUnitDv" name="mlgPymntDvCd" class="short" title="마일리지 단위 선택"> <select id="accmlUnitDv" name="mlgPymntDvCd" class="short" title="마일리지 단위 선택">
<c:forEach var="accmlUnitDv" items="${resultMap.accmlUnitDv}"> <c:forEach var="accmlUnitDv" items="${resultMap.ordrSetupList.accmlUnitDv}">
<option value="<c:out value='${accmlUnitDv.cd}'/>" <option value="<c:out value='${accmlUnitDv.cd}'/>"
<c:if test = "${ordrSetupInfo.mlgPymntDvCd eq accmlUnitDv.cd}">selected</c:if>> <c:if test = "${ordrSetupInfo.mlgPymntDvCd eq accmlUnitDv.cd}">selected</c:if>>
<c:out value="${accmlUnitDv.cdNm}"/> <c:out value="${accmlUnitDv.cdNm}"/>
@@ -397,10 +426,105 @@
</div> </div>
</div> </div>
</section> </section>
<section class="content-section content-fold">
<h3 class="content-section__inner-title">마일리지 사용 조건</h3>
<div class="table-wrapper">
<table class="table ">
<caption>마일리지 사용 조건</caption>
<colgroup>
<col style="width: 14%;">
<col>
</colgroup>
<tbody>
<tr>
<th>보유 마일리지 조건</th>
<td>
<div class="td-inner">
<div class="input-container">
<span class="mr-10">보유 마일리지가</span>
<input type="text" class="input-text sm right number" name="mlgHoldUseAmt" title="보유 마일리지가" maxlength="7" value="${resultMap.sopmalDetailList[0].mlgHoldUseAmt }">
<span class="input-unit-text mr-8">원</span>
<span>이상이면 마일리지 사용 가능</span>
</div>
</div>
</td>
</tr>
<tr>
<th>상품 금액 조건</th>
<td>
<div class="td-inner vertical">
<div class="input-container">
<span class="gray-7 mr-10">{상품 실 결제금액} + {좌동} + {좌동} ···</span>
<input type="text" class="input-text sm right number" name="mlgSetleAmtUseAmt" title="사용가능 마일리지" maxlength="7" value="${resultMap.sopmalDetailList[0].mlgSetleAmtUseAmt }">
<span class="input-unit-text mr-8">원</span>
<span>이상이면 마일리지 사용 가능</span>
</div>
<p class="blue-7 fyi">상품 실 결제 금액 = {상품 할인가(판매가) x 수량} - 할인(쿠폰, 등급, 좋아요, 모바일, 프로모션 코드)</p>
</div>
</td>
</tr>
<tr>
<th>마일리지 사용한도 조건</th>
<td>
<div class="td-inner">
<div class="input-container">
<span class="mr-10">마일리지는 최소</span>
<input type="text" class="input-text sm right number" name="mlgMummUseAmt" title="마일리지는 최소" maxlength="7" value="${resultMap.sopmalDetailList[0].mlgMummUseAmt }">
<span class="input-unit-text">원 이상</span>
</div>
<span class="tilde">~</span>
<div class="input-container">
<span class="mr-10">최대</span>
<div class="custom-radio-container vertical storeCondition">
<div class=" custom-radio">
<input type="radio" id="mlgMxmmUse-a" name="mlgMxmmUseDv" value="01" onclick="fn_set_mlgDisabled('other');" ${f:setChecked(resultMap.sopmalDetailList[0].mlgMxmmUseDv, '01') }>
<label for="mlgMxmmUse-a">1회 사용한도 제한 없이 사용 가능
</label>
</div>
<c:set var="mlgMxmmUseAmt_2" value="0" />
<c:set var="mlgMxmmUseAmt_Disabled_2" value="disabled" />
<c:set var="mlgMxmmUseAmt_3" value="0" />
<c:set var="mlgMxmmUseAmt_Disabled_3" value="disabled" />
<c:if test="${resultMap.sopmalDetailList[0].mlgMxmmUseDv eq '02'}" >
<c:set var="mlgMxmmUseAmt_2" value="${resultMap.sopmalDetailList[0].mlgMxmmUseAmt }" />
<c:set var="mlgMxmmUseAmt_Disabled_2" value="" />
</c:if>
<c:if test="${resultMap.sopmalDetailList[0].mlgMxmmUseDv eq '03'}" >
<c:set var="mlgMxmmUseAmt_3" value="${resultMap.sopmalDetailList[0].mlgMxmmUseAmt }" />
<c:set var="mlgMxmmUseAmt_Disabled_3" value="" />
</c:if>
<div class="custom-radio inner-input">
<input type="radio" id="mlgMxmmUse-b" name="mlgMxmmUseDv" value="02" onclick="fn_set_mlgDisabled('maxPct');" ${f:setChecked(resultMap.sopmalDetailList[0].mlgMxmmUseDv, '02') }>
<label for="mlgMxmmUse-b">
<span class="gray-7">{상품 실 결제금액} + {좌동} + {좌동} ···</span> 의
</label>
<div>
<input type="text" class="input-text xxsm ml-5 number right" name="mlgMxmmUseAmt" id="maxPct" title="마일리지 최대사용 %" maxlength="3" value="${mlgMxmmUseAmt_2 }" ${mlgMxmmUseAmt_Disabled_2 }>
<span class="input-unit-text mr-8">%</span>금액까지 사용 가능
</div>
</div>
<div class="custom-radio inner-input">
<input type="radio" id="mlgMxmmUse-c" name="mlgMxmmUseDv" value="03" onclick="fn_set_mlgDisabled('maxMlg');" ${f:setChecked(resultMap.sopmalDetailList[0].mlgMxmmUseDv, '03') } >
<label for="mlgMxmmUse-c">
</label>
<div>
<input class="input-text sm ml-5 number right" name="mlgMxmmUseAmt" id="maxMlg" title="마일리지 최대사용 금액" maxlength="7" value="${mlgMxmmUseAmt_3 }" ${mlgMxmmUseAmt_Disabled_3 }>
<span class="input-unit-text mr-8">원</span>까지 사용 가능
</div>
</div>
</div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button> <button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div> </div>
</div> </div>
</form>
</main> </main>
</body> </body>