فهرست منبع

Merge branch 'develop' of http://112.172.147.34:4936/style24/style24.admin.git into develop

eskim 4 سال پیش
والد
کامیت
cb17a1a9e1

+ 12 - 0
src/main/java/com/style24/admin/biz/service/TsaCustomerService.java

@@ -485,6 +485,18 @@ public class TsaCustomerService {
 		return coreCustomerService.getCustomerInfo(customer);
 	}
 
+	/**
+	 * 탈퇴처리
+	 *
+	 * @param custNo - 고객번호
+	 * @return GagaMap - 결과정보
+	 * @author jsshin
+	 * @since 2021. 03. 08
+	 */
+	@Transactional("shopTxnManager")
+	public boolean deleteSecedeCustomer(Integer custNo) {
+		return coreCustomerService.deleteSecedeCustomer(custNo);
+	}
 
 
 

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

@@ -1049,5 +1049,36 @@ public class TsaCustomerController extends TsaBaseController {
 		return result;
 	}
 
+	/**
+	 * 탈퇴이력 삭제
+	 *
+	 * @param  customerCollection - 탈퇴이력 삭제
+	 * @return GagaMap - 결과
+	 * @author jsshin
+	 * @since 2020. 01. 14
+	 */
+	@PostMapping("/secede/delete")
+	@ResponseBody
+	public GagaMap deleteSecedCustomer(@RequestBody Collection<Customer> customerCollection) {
+		GagaMap result = new GagaMap();
+		int totalCnt = customerCollection.size();
+		int succCnt = 0;
+		int failCnt = 0;
+		for (Customer customer : customerCollection) {
+			try {
+				customerService.deleteSecedeCustomer(customer.getCustNo());
+				succCnt ++;
+			} catch (Exception e) {
+				log.error(e.getMessage());
+				failCnt ++;
+			}
+		}
+		result.setInt("totalCnt", totalCnt);
+		result.setInt("succCnt", succCnt);
+		result.setInt("failCnt", failCnt);
+
+		return result;
+	}
+
 
 }

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

@@ -685,8 +685,8 @@
 		    <if test="searchGb == 'email'">
 		AND    LOWER(EMAIL) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
 		    </if>
-		    <if test="searchGb == 'custNo'">
-		AND    LOWER(CUST_NO) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		    <if test="searchGb == 'custId'">
+		AND    CUST_ID LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
 		    </if>
 		</if>
 		<if test="siteCd != null and siteCd != ''">
@@ -767,8 +767,8 @@
 		    <if test="searchGb == 'email'">
 		AND    LOWER(EMAIL) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
 		    </if>
-		    <if test="searchGb == 'custNo'">
-		AND    LOWER(CUST_NO) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		    <if test="searchGb == 'custId'">
+		AND    LOWER(CUST_ID) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
 		    </if>
 		</if>
 		<if test="siteCd != null and siteCd != ''">
@@ -808,8 +808,8 @@
 		    <if test="searchGb == 'email'">
 		AND    LOWER(EMAIL) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
 		    </if>
-		    <if test="searchGb == 'custNo'">
-		AND    LOWER(CUST_NO) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		    <if test="searchGb == 'custId'">
+		AND    LOWER(CUST_ID) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
 		    </if>
 		</if>
 		<if test="siteCd != null and siteCd != ''">

+ 3 - 1
src/main/webapp/WEB-INF/views/customer/CustomerDormantListForm.html

@@ -45,6 +45,7 @@
 						<td class="dashR">
 							<select name="searchGb">
 								<option value="">선택</option>
+								<option value="custNo">회원번호</option>
 								<option value="custNm">회원명 </option>
 								<option value="email">이메일</option>
 								<option value="custId">아이디</option>
@@ -122,6 +123,7 @@
 			valueGetter: function (params) { return gagaAgGrid.lookupValue(siteList, params.data.siteCd); }
 		},
 		{headerName: "회원ID", field:'maskingCustId', width:120, cellClass: 'text-left'},
+		{headerName: "회원NO", field: "custNo", width: 120, cellClass: 'text-center'},
 		{headerName: "회원명", field:'maskingCustNm', width:100, cellClass: 'text-left'},
 		{headerName: "핸드폰", field:'maskingCellPhnno', width:140, cellClass: 'text-center'},
 		{headerName: "이메일", field:'maskingEmail', width:220, cellClass: 'text-left'},
@@ -137,6 +139,7 @@
 
 	// Get GridOptions
 	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+		gridOptions.rowSelection = 'multiple';
 
 	// 셀 클릭 이벤트
 	gridOptions.onCellClicked = function(event) {
@@ -178,7 +181,6 @@
 			sureBtnText: "확인",
 			sureBtnClick: function() {
 				var jsonData = JSON.stringify(removedData);
-				console.log(jsonData);
 				gagajf.ajaxJsonSubmit('/customer/dormant/release', jsonData, function() {
 					fnSearch();
 				});

+ 108 - 83
src/main/webapp/WEB-INF/views/customer/CustomerSecedeListForm.html

@@ -24,96 +24,98 @@
 	<div class="infoBox menu-desc">
 	</div>
 	<!-- //메뉴 설명 -->
+	<form id="custSecedeForm" name="custSecedeForm" action="#" th:action="@{'/customer/secede/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+		<!-- 검색조건 영역 -->
+		<div class="panelStyle">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:20%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:20%;"/>
+						<col/>
+					</colgroup>
+					<tbody>
+					<tr>
+						<th class="dashR">검색구분</th>
+						<td class="dashR">
+							<select name="searchGb">
+								<option value="">선택</option>
+								<option value="custNo">회원번호</option>
+								<option value="custNm">회원명 </option>
+								<option value="email">이메일</option>
+								<option value="custId">아이디</option>
+							</select>
+							<input type="text" class="w200" name="searchTxt" id="searchTxt"/>
+						</td>
+						<th class="dashR">사이트</th>
+						<td class="dashR">
+							<select name="siteCd">
+								<option value="">전체</option>
+								<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th class="dashR">탈퇴사유</th>
+						<td class="dashR">
+							<select name="secedeRsn" class="w200">
+								<option value="">전체</option>
+								<option th:if="${secedeRsnList}" th:each="oneData, status : ${secedeRsnList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+						<th class="dashR">휴대폰번호(숫자만)</th>
+						<td class="dashR">
+							<input type="text" class="w200" name="cellPhnno" id="cellPhnno" maxlength="13"/>
+						</td>
+					</tr>
+					<tr>
+						<th class="dashR">탈퇴일</th>
+						<td class="dashR" colspan="3" id="terms">
+						</td>
+					</tr>
+					</tbody>
+				</table>
 
-	<!-- 검색조건 영역 -->
-	<div class="panelStyle">
-		<form id="custSecedeForm" name="custSecedeForm" action="#" th:action="@{'/customer/secede/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
-			<table class="frmStyle" aria-describedby="검색조건">
-				<colgroup>
-					<col style="width:10%;"/>
-					<col style="width:20%;"/>
-					<col style="width:10%;"/>
-					<col style="width:15%;"/>
-					<col style="width:10%;"/>
-					<col style="width:20%;"/>
-					<col/>
-				</colgroup>
-				<tbody>
-				<tr>
-					<th class="dashR">검색구분</th>
-					<td class="dashR">
-						<select name="searchGb">
-							<option value="">선택</option>
-							<option value="custNm">회원명 </option>
-							<option value="email">이메일</option>
-							<option value="custId">아이디</option>
-						</select>
-						<input type="text" class="w200" name="searchTxt" id="searchTxt"/>
-					</td>
-					<th class="dashR">사이트</th>
-					<td class="dashR">
-						<select name="siteCd">
-							<option value="">전체</option>
-							<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-						</select>
-					</td>
-				</tr>
-				<tr>
-					<th class="dashR">탈퇴사유</th>
-					<td class="dashR">
-						<select name="secedeRsn" class="w200">
-							<option value="">전체</option>
-							<option th:if="${secedeRsnList}" th:each="oneData, status : ${secedeRsnList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-						</select>
-					</td>
-					<th class="dashR">휴대폰번호(숫자만)</th>
-					<td class="dashR">
-						<input type="text" class="w200" name="cellPhnno" id="cellPhnno" maxlength="13"/>
-					</td>
-				</tr>
-				<tr>
-					<th class="dashR">탈퇴일</th>
-					<td class="dashR" colspan="3" id="terms">
-					</td>
-				</tr>
-				</tbody>
-			</table>
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" onclick="$('#custSecedeForm')[0].reset();">초기화</button>
+					</li>
+				</ul>
+		</div>
+		<!-- //검색조건 영역 -->
 
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<ul class="panelBar">
+				<li>
+					<button type="button" class="btn btn-danger btn-lg" id="btnDelete">탈퇴이력삭제</button>
+				</li>
+				<li class="right">
+					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
+					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
+					<select id="pageSize" name="pageSize">
+						<option value="50" selected="selected">50개씩 보기</option>
+						<option value="100">100개씩 보기</option>
+						<option value="500">500개씩 보기</option>
+						<option value="1000">1000개씩 보기</option>
+					</select>
+					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+				</li>
+			</ul>
+			<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
 			<ul class="panelBar">
 				<li class="center">
-					<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
-					<button type="button" class="btn btn-gray btn-lg" onclick="$('#custSecedeForm')[0].reset();">초기화</button>
+					<div class="tablePaging" id="custListPagination"></div>
 				</li>
 			</ul>
-		</form>
-	</div>
-	<!-- //검색조건 영역 -->
-
-	<!-- 리스트 영역 -->
-	<div class="panelStyle">
-		<ul class="panelBar">
-			<li class="right">
-				검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
-				쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
-				<select id="pageSize" name="pageSize">
-					<option value="50" selected="selected">50개씩 보기</option>
-					<option value="100">100개씩 보기</option>
-					<option value="500">500개씩 보기</option>
-					<option value="1000">1000개씩 보기</option>
-				</select>
-				<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
-			</li>
-		</ul>
-		<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
-		<ul class="panelBar">
-			<li class="center">
-				<div class="tablePaging" id="custListPagination"></div>
-			</li>
-		</ul>
-	</div>
-	<!-- //리스트 영역 -->
+		</div>
+		<!-- //리스트 영역 -->
+	</form>
 </div>
-
 <script type="text/javascript" th:src="@{'/ux/plugins/gaga/gaga.paging.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 	/*<![CDATA[*/
@@ -122,11 +124,13 @@
 
 	// specify the columns
 	const columnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 		{
 			headerName: "사이트", field:'siteCd', width:100, cellClass: 'text-center',
 			valueGetter: function (params) { return gagaAgGrid.lookupValue(siteList, params.data.siteCd); }
 		},
 		{headerName: "회원ID", field:'maskingCustId', width:120, cellClass: 'text-left'},
+		{headerName: "회원NO", field: "custNo", width: 120, cellClass: 'text-center'},
 		{headerName: "회원명", field:'maskingCustNm', width:100, cellClass: 'text-left'},
 		{headerName: "핸드폰", field:'maskingCellPhnno', width:140, cellClass: 'text-center'},
 		{headerName: "이메일", field:'maskingEmail', width:220, cellClass: 'text-left'},
@@ -142,6 +146,7 @@
 
 	// Get GridOptions
 	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+		gridOptions.rowSelection = 'multiple';
 
 	// 셀 클릭 이벤트
 	gridOptions.onCellClicked = function(event) {
@@ -206,6 +211,26 @@
 
 	}
 
+	// 탈퇴이력 삭제
+	$('#btnDelete').on('click', function() {
+		var removedData = gagaAgGrid.removeRowData(gridOptions);
+
+		if (removedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+
+		mcxDialog.alertC('탈퇴이력 삭제 하시겠습니까?', {
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				var jsonData = JSON.stringify(removedData);
+				gagajf.ajaxJsonSubmit('/customer/secede/delete', jsonData, function() {
+					fnSearch();
+				});
+			}
+		});
+	});
+
 	// 검색
 	var fnSearch = function() {
 		// 유효성 체크