Ver Fonte

쿠폰발급 개발 완료

jsshin há 5 anos atrás
pai
commit
9a943d0e5a

+ 1 - 1
src/main/java/com/style24/admin/biz/web/TsaCustomerController.java

@@ -372,7 +372,7 @@ public class TsaCustomerController extends TsaBaseController {
 		//mav.addObject("dcWayList", rendererService.getCommonCodeList("G240"));
 
 		// 쿠폰발행사유
-		mav.addObject("pubReasonList", rendererService.getCommonCodeList("G597"));
+		mav.addObject("pubReasonList", rendererService.getCommonCodeList("G068"));
 
 		// 포인트반영상태
 		mav.addObject("pntOccurGbList", rendererService.getCommonCodeList("G069"));

+ 3 - 0
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -999,6 +999,9 @@ public class TsaMarketingController extends TsaBaseController {
 	@PostMapping("/coupon/issue/save")
 	@ResponseBody
 	public GagaResponse saveCouponIssue(@RequestBody CustCoupon custCoupon) {
+		Integer userNo = TsaSession.getInfo().getUserNo();
+		custCoupon.setRegNo(userNo);
+		custCoupon.setUpdNo(userNo);
 		couponService.saveCouponIssue(custCoupon);
 		return super.ok(message.getMessage("SUCC_0006"));
 	}

+ 2 - 0
src/main/java/com/style24/persistence/domain/CustCoupon.java

@@ -29,4 +29,6 @@ public class CustCoupon extends TscBaseDomain {
 
     // 그리드 컬럼
     private String  custList;
+    private String  cpnNm;                  // 쿠폰명
+    private Integer ordNo;                  // 주문번호
 }

+ 22 - 22
src/main/java/com/style24/persistence/mybatis/shop/TsaCoupon.xml

@@ -543,29 +543,29 @@
 	<insert id="saveCouponCustPub" parameterType="CustCoupon">
 		/* TsaCoupon.saveCouponCustPub */
 		INSERT INTO TB_CUST_COUPON (
-			CUST_NO
-		  , CPN_ID
-		  , AVAIL_STDT
-		  , AVAIL_EDDT
-		  , PUB_REASON
-		  , PUB_REASON_DTL
-          , END_ALIM_SEND_YN
-          , REG_NO
-          , REG_DT
-          , UPD_NO
-          , UPD_DT
+		       CUST_NO
+		     , CPN_ID
+		     , AVAIL_STDT
+		     , AVAIL_EDDT
+		     , PUB_REASON
+		     , PUB_REASON_DTL
+		     , END_ALIM_SEND_YN
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
 		) VALUES (
-		    #{custNo}
-		  , #{cpnId}
-		  , DATE_FORMAT(#{availStdt} , '%Y-%m-%d')
-		  , DATE_FORMAT(#{availEddt} , '%Y-%m-%d')
-		  , #{pubReason}
-		  , #{pubReasonDtl}
-		  , #{endAlimSendYn}
-		  , #{regNo}
-		  , now()
-		  , #{updNo}
-		  , now()
+		       #{custNo}
+		     , #{cpnId}
+		     , DATE_FORMAT(#{availStdt} , '%Y%m%d%H%i%S')
+		     , DATE_FORMAT(#{availEddt} , '%Y%m%d%H%i%S')
+		     , #{pubReason}
+		     , #{pubReasonDtl}
+		     , #{endAlimSendYn}
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
 		)
 	</insert>
 

+ 4 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml

@@ -307,7 +307,7 @@
 	</update>
 
 	<!--회원 쿠폰내역  -->
-	<select id="getCustomerCouponList" parameterType="Integer" resultType="Coupon">
+	<select id="getCustomerCouponList" parameterType="Integer" resultType="CustCoupon">
 		/* TsaCustomer.getCustomerCounponList */
 		WITH TAB1 AS (
 		              SELECT O.ORD_NO             AS ORD_NO
@@ -349,11 +349,12 @@
 		     , DATE_FORMAT(CC.AVAIL_EDDT, '%Y%m%d%H%i%S')            AS AVAIL_EDDT
 		     , CC.PUB_REASON
 		     , CC.PUB_REASON_DTL
+		     , CC.END_ALIM_SEND_YN
+		     , E.ORD_NO
 		     , DATE_FORMAT(CC.USED_DT, '%Y%m%d%H%i%S')               AS USED_DT
 		     , FN_GET_USER_NM(CC.REG_NO)                             AS REG_NM
 		     , FN_GET_USER_NM(CC.UPD_NO)                             AS USER_NM
 		     , DATE_FORMAT(CC.REG_DT, '%Y%m%d%H%i%S')                AS REG_DT
-		     , E.ORD_NO
 		FROM   TB_COUPON C
 		INNER JOIN
 		       TB_CUST_COUPON CC
@@ -460,7 +461,7 @@
 		        TB_CUST_POINT_HST CPH
 		ON      C.CUST_NO = CPH.CUST_NO
 		WHERE   C.CUST_NO = #{custNo}
-		ORDER BY CPH.REG_DT
+		ORDER BY CPH.REG_DT DESC
 	</select>
 
 	<!-- 회원 상품권이력 -->

+ 2 - 3
src/main/webapp/WEB-INF/views/customer/CellphoneChangePopupForm.html

@@ -18,7 +18,7 @@
 	<div class="panelStyle">
 		<!-- TITLE -->
 		<div class="panelTitle">
-			<strong >휴대전화번호변경팝업</strong>
+			<strong >휴대전화 번호 변경팝업</strong>
 			<button type="button" class="close" onclick="uifnPopupClose('popupCellphoneForm')"><em class="fa fa-times"></em></button>
 		</div>
 		<!-- //TITLE -->
@@ -59,7 +59,7 @@
 			<ul class="panelBar">
 				<li class="right">
 					<button type="button" id="btnSendCustCrtfdNo" class="btn btn-success btn-lg" >인증번호발송</button>
-					<button type="button" id="btnCustCertNo" class="btn btn-success btn-lg" style="display: none">인증번호확인</button>
+					<button type="button" id="btnCustCertNo" class="btn btn-success btn-lg" style="display: none">확인(번호변경)</button>
 				</li>
 			</ul>
 		</div>
@@ -71,7 +71,6 @@
 	const elementCellPhnno = [[${elementCellPhnno}]];
 	const elementCustNo = [[${elementCustNo}]];
 
-
 	// 인증번호 전송
 	$('#btnSendCustCrtfdNo').on('click', function () {
 		//휴대폰번호

+ 6 - 5
src/main/webapp/WEB-INF/views/customer/CustomerDetailForm.html

@@ -96,14 +96,14 @@
 										<td class="dashR">
 											<select id="custGb" name="custGb">
 												<option th:if="${custGbList}" th:each="oneData, status : ${custGbList}" th:value="${oneData.cd}"
-														th:text="|${oneData.cdNm}|"></option>
+														th:text="${'[' + oneData.cd + '] '+oneData.cdNm}"></option>
 											</select>
 										</td>
 										<th class="dashR">회원등급<em class="required" title="필수"></em></th>
 										<td class="dashR">
 											<select id="custGrade" name="custGrade">
 												<option th:if="${custGradeList}" th:each="oneData, status : ${custGradeList}" th:value="${oneData.cd}"
-														th:text="|${oneData.cdNm}|"></option>
+														th:text="${'[' + oneData.cd + '] '+oneData.cdNm}"></option>
 											</select>
 										</td>
 									</tr>
@@ -113,7 +113,7 @@
 											<select id="managedRsn" name="managedRsn">
 												<option value="">일반</option>
 												<option th:if="${managedRsnList}" th:each="oneData, status : ${managedRsnList}" th:value="${oneData.cd}"
-														th:text="|${oneData.cdNm}|"></option>
+														th:text="${'[' + oneData.cd + '] '+oneData.cdNm}"></option>
 											</select>
 											<span class="infoTxt cRed h5" id="managedRsnDp" name="managedRsnDp"></span>
 										</td>
@@ -644,7 +644,7 @@
 
 	//쿠폰내역 그리드
 	const columnCouponDefs = [
-		{width: 40, minWidth: 40, cellClass: 'text-center', pinned: 'left', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		// {width: 40, minWidth: 40, cellClass: 'text-center', pinned: 'left', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 		{headerName: "회원쿠폰SQ", field: "custCpnSq", width: 100, cellClass: 'text-center', hide: true},
 		{headerName: "쿠폰ID", field: "cpnId", width: 100, cellClass: 'text-center'},
 		{headerName: "쿠폰명", field: "cpnNm", width: 300, cellClass: 'text-center'},
@@ -674,7 +674,8 @@
 			}
 		},
 		{headerName: "쿠폰발행 상세사유", field: "pubReasonDtl", width: 300, cellClass: 'text-center'},
-		{headerName: "등록자", field: "regNo", width: 100, cellClass: 'text-center'},
+		{headerName: "만료알림발송여부", field: "endAlimSendYn", width: 150, cellClass: 'text-center'},
+		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
 		{
 			headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
 			cellRenderer: function (params) {

+ 32 - 37
src/main/webapp/WEB-INF/views/marketing/CouponIssuePopupForm.html

@@ -14,10 +14,7 @@
  * 1.0  2021.01.28   jsshin     최초 작성
  *******************************************************************************
  -->
-<style>
-
-</style>
-<div class="modalPopup" data-width="600" id="popupCouponIssue">
+<div class="modalPopup" data-width="960" data-height="900" >
 	<div id="panel" class="panelStyle">
 		<!-- TITLE -->
 		<div class="panelTitle">
@@ -25,7 +22,7 @@
 			<button type="button" class="close" onclick="uifnPopupClose('popupCouponIssue');"><em class="fa fa-times"></em></button>
 		</div>
 		<!-- //TITLE -->
-		
+
 		<!-- CONTENT -->
 		<div class="panelContent">
 			<form id="searchCouponForm" name="searchCouponForm" action="#" th:action="@{'/marketing/coupon/retrieve/list'}" th:method="post">
@@ -64,22 +61,15 @@
 						</tr>
 					</tbody>
 				</table>
-				
 				<ul class="panelBar">
 					<li class="center">
 						<button type="button" class="btn btn-base btn-lg" id="btnSearchCouponRetrieve">조회</button>
 					</li>
 				</ul>
 			</form>
-		</div>
-		<!-- //CONTENT -->
-
-		<!-- 리스트 영역 -->
-		<div class="panelContent">
-			<div id="gridCouponList" style="width: 100%; height: 250px" class="ag-theme-balham"></div>
-		</div>
-
-		<div class="panelContent">
+			<!-- 리스트 영역 -->
+			<div id="gridCouponList" style="width: 100%; height: 420px;" class="ag-theme-balham"></div>
+			<!-- //리스트 영역 -->
 			<form id="couponIssueForm" name="couponIssueForm">
 				<input type="hidden" name="cpnId"/>
 				<input type="hidden" name="pdGb"/>
@@ -95,12 +85,12 @@
 						<th class="availTerm">유효기간시작일시<em class="required" title="필수"></em></th>
 						<td class="availTerm">
 							<input type="text" name="availStdt" class="schDate w100" data-valid-name="유효기간시작일시"/>
-							<select name="availStHH" class="w80" data-valid-name="유효기간시작(시)"required="required">
+							<select name="availStHH" data-valid-name="유효기간시작(시)"required="required">
 								<th:block th:each="num, index : ${#numbers.sequence(0, 23)}">
 									<option th:value="${#numbers.formatInteger(num, 2)}" th:text="|${#numbers.formatInteger(num, 2)}시|">시간</option>
 								</th:block>
 							</select>
-							<select name="availStMM" class="w80" data-valid-name="유효기간시작(분)" required="required">
+							<select name="availStMM" data-valid-name="유효기간시작(분)" required="required">
 								<th:block th:each="num, index : ${#numbers.sequence(0, 59)}">
 									<option th:value="${#numbers.formatInteger(num, 2)}" th:text="|${#numbers.formatInteger(num, 2)}분|">분</option>
 								</th:block>
@@ -109,13 +99,13 @@
 
 						<th class="availTerm">유효기간종료일시<em class="required" title="필수"></em></th>
 						<td class="availTerm">
-							<input type="text" name="availEddt" class="schDate w200" data-valid-name="유효기간종료일시"/>
-							<select name="availEdHH" class="w80" data-valid-name="유효기간종료(시)">
+							<input type="text" name="availEddt" class="schDate w100" data-valid-name="유효기간종료일시"/>
+							<select name="availEdHH" data-valid-name="유효기간종료(시)">
 								<th:block th:each="num, index  : ${#numbers.sequence(0, 23)}">
 									<option th:value="${#numbers.formatInteger(num, 2)}" th:text="|${#numbers.formatInteger(num, 2)}시|">시간</option>
 								</th:block>
 							</select>
-							<select name="availEdMM" class="w80" data-valid-name="유효기간종료(분)">
+							<select name="availEdMM" data-valid-name="유효기간종료(분)">
 								<th:block th:each="num: ${#numbers.sequence(0, 59)}">
 									<option th:value="${#numbers.formatInteger(num, 2)}" th:text="|${#numbers.formatInteger(num, 2)}분|">분</option>
 								</th:block>
@@ -128,36 +118,44 @@
 					</tr>
 					<tr>
 						<th>발급사유</th>
-						<td colspan="3">
+						<td>
 							<select name="pubReason" data-valid-name="발급사유" required>
 								<option th:if="${cpnPubReasonList}" th:each="oneData, status : ${cpnPubReasonList}" th:value="${oneData.cd}"
 										th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
+						<th>만료알림발송여부<em class="required" title="필수"></em></th>
+						<td>
+							<select name="endAlimSendYn" id="endAlimSendYn" data-valid-name="만료알림발송여부" required="required">
+								<option value="Y">Y</option>
+								<option value="N" selected="selected">N</option>
+							</select>
+						</td>
 					</tr>
 					<tr>
 						<th>상세사유</th>
 						<td colspan="3">
-							<textarea name="pubReasonDtl" class="textareaR4" style="resize: none;"  data-valid-name="상세사유" required="required"></textarea>
+							<textarea name="pubReasonDtl" class="textareaR3" style="resize: none;"  data-valid-name="상세사유" required="required"></textarea>
 						</td>
 					</tr>
 				</table>
 			</form>
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-info btn-lg" id="btnIssueCoupon">발급</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
 		</div>
-
-		
-		<!-- 버튼 배치 영역 -->
-		<ul class="panelBar">
-			<li class="right">
-				<button type="button" class="btn btn-info btn-lg" id="btnIssueCoupon">발급</button>
-			</li>
-		</ul>
-		<!-- //버튼 배치 영역 -->
 	</div>
 </div>
 
 <script th:inline="javascript">
 /*<![CDATA[*/
+	const START_END_TIME = '00';
+	const END_TIME = '59';
+
 	let elementCustNo = [[${elementCustNo}]];
 
 	let siteList = gagajf.convertToArray([[${siteList}]]);
@@ -228,7 +226,7 @@
 	
 	gridOptionsCouponList.rowSelection = 'single';
 	gridOptionsCouponList.rowMultiSelectWithClick = true; // 클릭으로 선택 가능
-	gridOptionsCouponList.suppressRowClickSelection = true;
+	//gridOptionsCouponList.suppressRowClickSelection = true;
 
 	// 셀 클릭 이벤트
 	gridOptionsCouponList.onCellClicked = function (event) {
@@ -264,8 +262,8 @@
 				mcxDialog.alert("유효 시작일시 / 유효 종료일시를 입력해주세요");
 				return;
 			}
-			custCoupon.availStdt = custCoupon.availStdt.replaceAll('-', '')+String(availStHH)+String(availStMM);
-			custCoupon.availEddt = custCoupon.availEddt.replaceAll('-', '')+String(availEdHH)+String(availEdMM);
+			custCoupon.availStdt = custCoupon.availStdt+' '+availStHH +':'+ availStMM + ':' +START_END_TIME;
+			custCoupon.availEddt = custCoupon.availEddt+' '+availEdHH +':'+ availEdMM + ':' +END_TIME;
 		}
 
 		if (custCoupon.pdGb === 'D') {
@@ -330,9 +328,6 @@
 
 		fnInitDataSet();
 
-		//$('#panel').css({ width: 1200, height: 500 });
-
-		//$('#panel').attr('style', 'width: 1200 !important, height: 500 !important');
 
 	});
 /*]]>*/

+ 4 - 3
src/main/webapp/WEB-INF/views/marketing/PointGrantPopupForm.html

@@ -39,7 +39,7 @@
 							<th>사이트</th>
 							<td>
 								<select name="siteCd" data-valid-name="사이트" required="required">
-									<option th:if="${siteCdList}" th:each="oneData, status : ${siteCdList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
+									<option th:if="${siteCdList}" th:each="oneData, status : ${siteCdList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] '+ oneData.cdNm}"></option>
 								</select>
 							</td>
 						</tr>
@@ -48,7 +48,7 @@
 							<td>
 								<select name="occurGb" data-valid-name="포인트변경사유" required="required">
 									<option value="">선택하세요</option>
-									<option th:if="${occurGbList}" th:each="oneData, status : ${occurGbList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
+									<option th:if="${occurGbList}" th:each="oneData, status : ${occurGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] '+ oneData.cdNm}"></option>
 								</select>
 							</td>
 						</tr>
@@ -95,6 +95,7 @@
 </div>
 <script th:inline="javascript">
 	/*<![CDATA[*/
+	const END_TIME = '23:59:59';
 	const elementCustNo = [[${elementCustNo}]];
 	const pntAssignAmt = [[${pntAssignAmt}]];
 
@@ -133,7 +134,7 @@
 		// (+ + 1) -> 1, (- + 1) -> -1
 		let pntAmt = grantPoint.pntAmt * (grantPoint.signGb + 1)
 		grantPoint.pntAmt = pntAmt;
-		grantPoint.expBeDt = grantPoint.expBeDt.replaceAll('-', '')+String('235959');
+		grantPoint.expBeDt = grantPoint.expBeDt+' '+END_TIME;
 
 		mcxDialog.confirm("포인트를 부여하시겠습니까?", {
 			cancelBtnText: "취소",