itn 2023-07-12
마이페이지 등급제 추가
@dd3a7c626ffa8b45d3970a88edf2e7b9b9eac581
src/main/java/itn/let/sym/grd/service/MberGrdVO.java
--- src/main/java/itn/let/sym/grd/service/MberGrdVO.java
+++ src/main/java/itn/let/sym/grd/service/MberGrdVO.java
@@ -7,8 +7,9 @@
 public class MberGrdVO extends UserDefaultVO {
 	private static final long serialVersionUID = 1L;
 	
-	private int grdSetNo;				// 등급설정번호
-	private String grdSetNm;				// 등급설정명
+	private int grdSetNo;					// 등급설정번호
+	private String grdSetNm;				// 등급명
+	private String grdSetIcon;				// 등급아이콘
 	private long stdAmt;					// 기준결제액
 	private String stdAmtComma;				// 기준결제액(콤마)
 	private long totAmt;					// 누적결제액
@@ -58,6 +59,12 @@
 	public void setGrdSetNm(String grdSetNm) {
 		this.grdSetNm = grdSetNm;
 	}
+	public String getGrdSetIcon() {
+		return grdSetIcon;
+	}
+	public void setGrdSetIcon(String grdSetIcon) {
+		this.grdSetIcon = grdSetIcon;
+	}
 	public long getStdAmt() {
 		return stdAmt;
 	}
src/main/java/itn/let/sym/grd/web/MberGrdController.java
--- src/main/java/itn/let/sym/grd/web/MberGrdController.java
+++ src/main/java/itn/let/sym/grd/web/MberGrdController.java
@@ -3,6 +3,7 @@
 import java.util.List;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
@@ -13,6 +14,7 @@
 import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
 import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
 import itn.com.cmm.LoginVO;
+import itn.com.utl.fcc.service.EgovStringUtil;
 import itn.let.sym.grd.service.MberGrdService;
 import itn.let.sym.grd.service.MberGrdVO;
 
@@ -21,214 +23,92 @@
 
 	@Resource(name = "mberGrdService")
 	MberGrdService mberGrdService;
+
+    /**
+     * ########################################
+     * 등급제 사용자 화면
+     * ########################################
+     */	
 	
     /**
-     * 등급제 관리 화면
-     * 
-     * @param mberGrdVO
+     * 마이페이지 등급제 누적결제액 세부내역
+     * @param mjonMsgVO
      * @param model
-     * @return
+     * @return	"/web/member/grd/MberGrdHistListAjax.do"
      * @throws Exception
      */
-    @RequestMapping("/sym/grd/selectMberGrdSetting.do")
-    public String selectJoinSetting(MberGrdVO mberGrdVO, ModelMap model) throws Exception {
+    @RequestMapping(value= {"/web/member/grd/mberGrdHistListAjax.do"})
+    public String mberGrdHistListAjax(@ModelAttribute("searchVO") MberGrdVO mberGrdVO,
+    		HttpServletRequest request,
+    		ModelMap model) throws Exception{
     	
-    	List<MberGrdVO> mberGrdSettingList = mberGrdService.selectMberGrdSettingList(mberGrdVO);
-    	
-    	mberGrdVO = mberGrdService.selectMberSettingDetail(mberGrdVO);
-
-    	model.addAttribute("grdNoti", mberGrdVO.getGrdNoti());
-    	model.addAttribute("grdDate", mberGrdVO.getGrdDate());
-    	model.addAttribute("mberGrdSettingList", mberGrdSettingList);
-    	
-    	return "/sym/grd/mberGrdSetting";
-    }
-    
-	// 등급제 일괄 저장
-	@RequestMapping(value = "/sym/grd/mberGrdSettingMassUpdateAjax.do")
-	public ModelAndView mberGrdSettingMassUpdateAjax(
-			@ModelAttribute("mberGrdVO") MberGrdVO mberGrdVO) throws Exception {
-
-		ModelAndView modelAndView = new ModelAndView();
-		modelAndView.setViewName("jsonView");
-
-		boolean isSuccess = true;
-		String msg = "";
-		int updateMberCnt = 0;
-		
-    	// 로그인VO에서  사용자 정보 가져오기
     	LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
-    	String frstRegisterId = loginVO == null ? "" : loginVO.getId();
-    	mberGrdVO.setEditId(frstRegisterId);		// 최초등록자ID
-
-        try{
-        	// Step1. 등급제 시행여부 변경
-        	int updateCnt1 = mberGrdService.updateMberSetting(mberGrdVO);
-        	if (updateCnt1 == 0) {
-    			isSuccess = false;
-    			msg = "등급제 시행여부 변경에 실패했습니다.";        		
-        	}
-        	else {
-	        	// Step2. 등급제 단가 업데이트
-	        	int updateCnt2 = mberGrdService.updateGrdSettingList(mberGrdVO);
-	        	if (updateCnt2 == 0) {
-	    			isSuccess = false;
-	    			msg = "등급제 단가 변경에 실패했습니다.";        		
-	        	}
-	        	else {
-	        		// Step3. 회원 등급 일괄변경
-	        		updateMberCnt = mberGrdService.updateMberGrdAll(mberGrdVO);
-	        	}
-        	}
-		}
-		catch(Exception e) {
-			isSuccess = false;
-			msg = e.getMessage();
-		}		
-
-		modelAndView.addObject("isSuccess", isSuccess);
-		modelAndView.addObject("msg", msg);
-		modelAndView.addObject("updateMberCnt", updateMberCnt);
-		
-		return modelAndView;
-	}
-	
-	// 회원별 등급 초기화
-	@RequestMapping(value = "/sym/grd/mberGrdEndMassUpdateAjax.do")
-	public ModelAndView mberGrdEndMassUpdateAjax(
-			@ModelAttribute("mberGrdVO") MberGrdVO mberGrdVO) throws Exception {
-
-		ModelAndView modelAndView = new ModelAndView();
-		modelAndView.setViewName("jsonView");
-
-		boolean isSuccess = true;
-		String msg = "";
-		int updateMberCnt = 0;
-		
-    	// 로그인VO에서  사용자 정보 가져오기
-    	LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
-    	String frstRegisterId = loginVO == null ? "" : loginVO.getId();
-    	mberGrdVO.setEditId(frstRegisterId);		// 최초등록자ID
-
-        try{
-        	
-       		// 회원별 등급 초기화
-       		updateMberCnt = mberGrdService.updateMberGrdEndAll(mberGrdVO);
-       		
-		}
-		catch(Exception e) {
-			isSuccess = false;
-			msg = e.getMessage();
-		}		
-
-		modelAndView.addObject("isSuccess", isSuccess);
-		modelAndView.addObject("msg", msg);
-		modelAndView.addObject("updateMberCnt", updateMberCnt);
-		
-		return modelAndView;
-	}		
-    
-	// 회원별 등급 적용 테스트
-	@RequestMapping(value = "/sym/grd/mberGrdSaveAjax.do")
-	public ModelAndView mberGrdSaveAjax(
-			@ModelAttribute("mberGrdVO") MberGrdVO mberGrdVO) throws Exception {
-
-		ModelAndView modelAndView = new ModelAndView();
-		modelAndView.setViewName("jsonView");
-
-		boolean isSuccess = true;
-		String msg = "";
-		
-    	// 로그인VO에서  사용자 정보 가져오기
-    	LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
-    	String frstRegisterId = loginVO == null ? "" : loginVO.getId();
-    	mberGrdVO.setEditId(frstRegisterId);		// 최초등록자ID
-
-        try{
-        	
-       		// 회원별 등급 적용
-        	mberGrdVO.setAmt("0");			// 결제금액
-        	mberGrdVO.setMberId("nopay");	// 결제자
-       		mberGrdService.mberGrdSaveByUser(mberGrdVO);
-       		
-		}
-		catch(Exception e) {
-			isSuccess = false;
-			msg = e.getMessage();
-		}		
-
-		modelAndView.addObject("isSuccess", isSuccess);
-		modelAndView.addObject("msg", msg);
-		
-		return modelAndView;
-	}			
-	
-    /**
-     * 회원별 등급제 목록 화면
-     * 
-     * @param mberGrdVO
-     * @param model
-     * @return
-     * @throws Exception
-     */	
-    @RequestMapping("/sym/grd/selectMberGrdList.do")
-    public String selectMetaTagList(@ModelAttribute("searchVO") MberGrdVO mberGrdVO, ModelMap model) throws Exception{
+    	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+    	mberGrdVO.setMberId(userId);
     	
-		/** paging */
-		PaginationInfo paginationInfo = new PaginationInfo();
-		paginationInfo.setCurrentPageNo(mberGrdVO.getPageIndex());
-		paginationInfo.setRecordCountPerPage(mberGrdVO.getPageUnit());
-		paginationInfo.setPageSize(mberGrdVO.getPageSize());
+    	if(mberGrdVO.getPageUnit() != 10) {
+    		mberGrdVO.setPageUnit(mberGrdVO.getPageUnit());
+    	}
+    	
+    	/** pageing */
+    	mberGrdVO.setPageUnit(3);
+    	PaginationInfo paginationInfo = new PaginationInfo();
+    	paginationInfo.setCurrentPageNo(mberGrdVO.getPageIndex());
+    	paginationInfo.setRecordCountPerPage(mberGrdVO.getPageUnit());
+    	paginationInfo.setPageSize(mberGrdVO.getPageSize());
+    	
+    	mberGrdVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+    	mberGrdVO.setLastIndex(paginationInfo.getLastRecordIndex());
+    	mberGrdVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); 
+    	
+    	if("".equals(mberGrdVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
 
-		mberGrdVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
-		mberGrdVO.setLastIndex(paginationInfo.getLastRecordIndex());
-		mberGrdVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+    	}
     	
-		if("".equals(mberGrdVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
-			mberGrdVO.setSearchSortCnd("regDate");
-			mberGrdVO.setSearchSortOrd("desc");
-		}
-		
-		List<MberGrdVO> resultList = mberGrdService.selectMberGrdList(mberGrdVO);
-		model.addAttribute("resultList", resultList);
-		paginationInfo.setTotalRecordCount( resultList.size()> 0 ? resultList.get(0).getTotCnt() : 0);
-		model.addAttribute("paginationInfo", paginationInfo);
+    	List<MberGrdVO> mberGrdHistList =  mberGrdService.selectMberGrdHistByGrdDateList(mberGrdVO);
     	
-		return "/sym/grd/mberGrdList";
+    	paginationInfo.setTotalRecordCount(mberGrdHistList.size()> 0 ? mberGrdHistList.get(0).getTotCnt() : 0);
+    	model.addAttribute("paginationInfo", paginationInfo);
+    	model.addAttribute("mberGrdHistList", mberGrdHistList);
+    	
+    	model.addAttribute("grdSetNm", mberGrdVO.getGrdSetNm());
+    	model.addAttribute("totAmt", mberGrdVO.getTotAmt());
+    	
+    	return "/web/grd/MberGrdHistListAjax";
     }	
-		
+	
 	// 등급제 적용여부 체크
-	@RequestMapping(value = "/sym/grd/mberGrdChkAjax.do")
+	@RequestMapping(value = "/web/member/grd/mberGrdChkAjax.do")
 	public ModelAndView mberGrdChkAjax(
 			@ModelAttribute("mberGrdVO") MberGrdVO mberGrdVO) throws Exception {
 
 		ModelAndView modelAndView = new ModelAndView();
 		modelAndView.setViewName("jsonView");
 
-		boolean isSuccess = true;
+    	// 로그인VO에서  사용자 정보 가져오기
+    	LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+    	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+    	mberGrdVO.setMberId(userId);
+    	
+		boolean isSuccess = false;
 		String msg = "";
    		MberGrdVO rtnMberGrdVO = new MberGrdVO();
    		
-    	// 로그인VO에서  사용자 정보 가져오기
-    	LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
-    	String frstRegisterId = loginVO == null ? "" : loginVO.getId();
-    	mberGrdVO.setEditId(frstRegisterId);		// 최초등록자ID
-
         try{
-       		// @@@@@ 등급제 적용여부 체크
-       		//MberGrdVO rtnMberGrdVO = new MberGrdVO();
-       		rtnMberGrdVO = mberGrdService.selectMberGrdInfo(mberGrdVO.getMberId());
-       		if (null != rtnMberGrdVO) {
-       			// 등급제 적용
-
-       		}
-       		else {
-    			isSuccess = false;
-    			msg = "종료";       			
-       		}
+        	// 회원별 이벤트 진행여부
+        	int mberEventPrgCnt = mberGrdService.selectMberEventPrgCnt(mberGrdVO.getMberId());
+        	if (mberEventPrgCnt == 0) {
+           		rtnMberGrdVO = mberGrdService.selectMberGrdInfo(mberGrdVO.getMberId());
+           		if (null != rtnMberGrdVO) {
+           			isSuccess = true;
+           		}
+           		else {
+        			msg = "종료";       			
+           		}
+        	}
+        	
 		}
 		catch(Exception e) {
-			isSuccess = false;
 			msg = e.getMessage();
 		}		
 
@@ -237,6 +117,6 @@
 		modelAndView.addObject("msg", msg);
 		
 		return modelAndView;
-	}			    
-    
+	}		
+	
 }
 
src/main/java/itn/let/sym/grd/web/MberGrdMngController.java (added)
+++ src/main/java/itn/let/sym/grd/web/MberGrdMngController.java
@@ -0,0 +1,240 @@
+package itn.let.sym.grd.web;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
+
+import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
+import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+import itn.com.cmm.LoginVO;
+import itn.let.sym.grd.service.MberGrdService;
+import itn.let.sym.grd.service.MberGrdVO;
+
+@Controller
+public class MberGrdMngController {
+
+	@Resource(name = "mberGrdService")
+	MberGrdService mberGrdService;
+	
+    /**
+     * 등급제 관리자 화면
+     * 
+     * @param mberGrdVO
+     * @param model
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping("/sym/grd/selectMberGrdSetting.do")
+    public String selectJoinSetting(MberGrdVO mberGrdVO, ModelMap model) throws Exception {
+    	
+    	List<MberGrdVO> mberGrdSettingList = mberGrdService.selectMberGrdSettingList(mberGrdVO);
+    	
+    	mberGrdVO = mberGrdService.selectMberSettingDetail(mberGrdVO);
+
+    	model.addAttribute("grdNoti", mberGrdVO.getGrdNoti());
+    	model.addAttribute("grdDate", mberGrdVO.getGrdDate());
+    	model.addAttribute("mberGrdSettingList", mberGrdSettingList);
+    	
+    	return "/sym/grd/mberGrdSetting";
+    }
+    
+	// 등급제 일괄 저장
+	@RequestMapping(value = "/sym/grd/mberGrdSettingMassUpdateAjax.do")
+	public ModelAndView mberGrdSettingMassUpdateAjax(
+			@ModelAttribute("mberGrdVO") MberGrdVO mberGrdVO) throws Exception {
+
+		ModelAndView modelAndView = new ModelAndView();
+		modelAndView.setViewName("jsonView");
+
+		boolean isSuccess = true;
+		String msg = "";
+		int updateMberCnt = 0;
+		
+    	// 로그인VO에서  사용자 정보 가져오기
+    	LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+    	String frstRegisterId = loginVO == null ? "" : loginVO.getId();
+    	mberGrdVO.setEditId(frstRegisterId);		// 최초등록자ID
+
+        try{
+        	// Step1. 등급제 시행여부 변경
+        	int updateCnt1 = mberGrdService.updateMberSetting(mberGrdVO);
+        	if (updateCnt1 == 0) {
+    			isSuccess = false;
+    			msg = "등급제 시행여부 변경에 실패했습니다.";        		
+        	}
+        	else {
+	        	// Step2. 등급제 단가 업데이트
+	        	int updateCnt2 = mberGrdService.updateGrdSettingList(mberGrdVO);
+	        	if (updateCnt2 == 0) {
+	    			isSuccess = false;
+	    			msg = "등급제 단가 변경에 실패했습니다.";        		
+	        	}
+	        	else {
+	        		// Step3. 회원 등급 일괄변경
+	        		updateMberCnt = mberGrdService.updateMberGrdAll(mberGrdVO);
+	        	}
+        	}
+		}
+		catch(Exception e) {
+			isSuccess = false;
+			msg = e.getMessage();
+		}		
+
+		modelAndView.addObject("isSuccess", isSuccess);
+		modelAndView.addObject("msg", msg);
+		modelAndView.addObject("updateMberCnt", updateMberCnt);
+		
+		return modelAndView;
+	}
+	
+	// 회원별 등급 초기화
+	@RequestMapping(value = "/sym/grd/mberGrdEndMassUpdateAjax.do")
+	public ModelAndView mberGrdEndMassUpdateAjax(
+			@ModelAttribute("mberGrdVO") MberGrdVO mberGrdVO) throws Exception {
+
+		ModelAndView modelAndView = new ModelAndView();
+		modelAndView.setViewName("jsonView");
+
+		boolean isSuccess = true;
+		String msg = "";
+		int updateMberCnt = 0;
+		
+    	// 로그인VO에서  사용자 정보 가져오기
+    	LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+    	String frstRegisterId = loginVO == null ? "" : loginVO.getId();
+    	mberGrdVO.setEditId(frstRegisterId);		// 최초등록자ID
+
+        try{
+        	
+       		// 회원별 등급 초기화
+       		updateMberCnt = mberGrdService.updateMberGrdEndAll(mberGrdVO);
+       		
+		}
+		catch(Exception e) {
+			isSuccess = false;
+			msg = e.getMessage();
+		}		
+
+		modelAndView.addObject("isSuccess", isSuccess);
+		modelAndView.addObject("msg", msg);
+		modelAndView.addObject("updateMberCnt", updateMberCnt);
+		
+		return modelAndView;
+	}		
+    
+	// 회원별 등급 적용 테스트
+	@RequestMapping(value = "/sym/grd/mberGrdSaveAjax.do")
+	public ModelAndView mberGrdSaveAjax(
+			@ModelAttribute("mberGrdVO") MberGrdVO mberGrdVO) throws Exception {
+
+		ModelAndView modelAndView = new ModelAndView();
+		modelAndView.setViewName("jsonView");
+
+		boolean isSuccess = true;
+		String msg = "";
+		
+    	// 로그인VO에서  사용자 정보 가져오기
+    	LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+    	String frstRegisterId = loginVO == null ? "" : loginVO.getId();
+    	mberGrdVO.setEditId(frstRegisterId);		// 최초등록자ID
+
+        try{
+        	
+       		// 회원별 등급 적용
+        	mberGrdVO.setAmt("0");			// 결제금액
+        	mberGrdVO.setMberId("nopay");	// 결제자
+       		mberGrdService.mberGrdSaveByUser(mberGrdVO);
+       		
+		}
+		catch(Exception e) {
+			isSuccess = false;
+			msg = e.getMessage();
+		}		
+
+		modelAndView.addObject("isSuccess", isSuccess);
+		modelAndView.addObject("msg", msg);
+		
+		return modelAndView;
+	}			
+	
+    /**
+     * 회원별 등급제 목록 화면
+     * 
+     * @param mberGrdVO
+     * @param model
+     * @return
+     * @throws Exception
+     */	
+    @RequestMapping("/sym/grd/selectMberGrdList.do")
+    public String selectMetaTagList(@ModelAttribute("searchVO") MberGrdVO mberGrdVO, ModelMap model) throws Exception{
+    	
+		/** paging */
+		PaginationInfo paginationInfo = new PaginationInfo();
+		paginationInfo.setCurrentPageNo(mberGrdVO.getPageIndex());
+		paginationInfo.setRecordCountPerPage(mberGrdVO.getPageUnit());
+		paginationInfo.setPageSize(mberGrdVO.getPageSize());
+
+		mberGrdVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+		mberGrdVO.setLastIndex(paginationInfo.getLastRecordIndex());
+		mberGrdVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+    	
+		if("".equals(mberGrdVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
+			mberGrdVO.setSearchSortCnd("regDate");
+			mberGrdVO.setSearchSortOrd("desc");
+		}
+		
+		List<MberGrdVO> resultList = mberGrdService.selectMberGrdList(mberGrdVO);
+		model.addAttribute("resultList", resultList);
+		paginationInfo.setTotalRecordCount( resultList.size()> 0 ? resultList.get(0).getTotCnt() : 0);
+		model.addAttribute("paginationInfo", paginationInfo);
+    	
+		return "/sym/grd/mberGrdList";
+    }	
+		
+	// 등급제 적용여부 체크
+	@RequestMapping(value = "/sym/grd/mberGrdChkAjax.do")
+	public ModelAndView mberGrdChkAjax(
+			@ModelAttribute("mberGrdVO") MberGrdVO mberGrdVO) throws Exception {
+
+		ModelAndView modelAndView = new ModelAndView();
+		modelAndView.setViewName("jsonView");
+
+		boolean isSuccess = true;
+		String msg = "";
+   		MberGrdVO rtnMberGrdVO = new MberGrdVO();
+   		
+    	// 로그인VO에서  사용자 정보 가져오기
+    	LoginVO	loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
+    	String frstRegisterId = loginVO == null ? "" : loginVO.getId();
+    	mberGrdVO.setEditId(frstRegisterId);		// 최초등록자ID
+
+        try{
+       		rtnMberGrdVO = mberGrdService.selectMberGrdInfo(mberGrdVO.getMberId());
+       		if (null != rtnMberGrdVO) {
+       			// 등급제 적용
+
+       		}
+       		else {
+    			isSuccess = false;
+    			msg = "종료";       			
+       		}
+		}
+		catch(Exception e) {
+			isSuccess = false;
+			msg = e.getMessage();
+		}		
+
+        modelAndView.addObject("rtnMberGrdVO", rtnMberGrdVO);
+		modelAndView.addObject("isSuccess", isSuccess);
+		modelAndView.addObject("msg", msg);
+		
+		return modelAndView;
+	}			    
+ 
+}
src/main/resources/egovframework/sqlmap/let/sym/grd/MberGrd_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/sym/grd/MberGrd_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/sym/grd/MberGrd_SQL_Mysql.xml
@@ -186,6 +186,22 @@
 			, blineCode
 			, M.grdSetNo
 			, M.grdSetNm
+			, CASE
+				WHEN M.grdSetNo = 1 THEN 'vvip'
+				WHEN M.grdSetNo = 2 THEN 'vip'
+				WHEN M.grdSetNo = 3 THEN 'gold'
+				WHEN M.grdSetNo = 4 THEN 'sliver'
+				WHEN M.grdSetNo = 5 THEN 'black'
+				WHEN M.grdSetNo = 6 THEN 'red'
+				WHEN M.grdSetNo = 7 THEN 'purple'
+				WHEN M.grdSetNo = 8 THEN 'blue'
+				WHEN M.grdSetNo = 9 THEN 'orange'
+				WHEN M.grdSetNo = 10 THEN 'green'
+				WHEN M.grdSetNo = 11 THEN 'yellow'
+				WHEN M.grdSetNo = 112 THEN 'white'
+			END grdSetIcon		
+			, M.grdDate		
+			, M.totAmt
 			, M.shortPrice
 			, M.longPrice
 			, M.picturePrice
@@ -197,6 +213,8 @@
 				, IFNULL(A.BLINE_CODE, 'N') 	AS blineCode
 				, G.GRD_SET_NO					AS grdSetNo
 				, S.GRD_SET_NM					AS grdSetNm
+				, DATE_FORMAT(G.GRD_DATE, '%Y-%m-%d')		AS grdDate
+				, G.TOT_AMT						AS totAmt
 				, G.SHORT_PRICE					AS shortPrice
 				, G.LONG_PRICE					AS longPrice
 				, G.PICTURE_PRICE				AS picturePrice
@@ -494,6 +512,7 @@
 			COUNT(MBER_ID) OVER() 	AS totCnt
 			, A.MBER_ID				AS mberId
 			, A.GRD_SET_NO			AS grdSetNo
+			, B.GRD_SET_NM			AS grdSetNm
 			, A.SHORT_PRICE			AS shortPrice
 			, A.LONG_PRICE			AS longPrice
 			, A.PICTURE_PRICE		AS picturePrice
@@ -503,19 +522,16 @@
 			, A.TOT_AMT				AS totAmt
 			, A.GRD_DATE			AS grdDate
 			, A.REG_ID				AS regId
-			, A.REG_DATE			AS regDate
+			, DATE_FORMAT(A.REG_DATE, '%Y-%m-%d %H:%i')			AS regDate
 			, A.EDIT_ID				AS editId
 			, A.EDIT_DATE			AS editDate	
 		FROM MJ_MBER_GRD_HIST A
+		INNER JOIN MJ_MBER_GRD_SETTING B
+			ON A.GRD_SET_NO = B.GRD_SET_NO		
 		WHERE 1=1 
 		AND A.MBER_ID = #mberId#
 		AND A.GRD_DATE >= (SELECT S.GRD_DATE FROM MJ_MBER_GRD_INFO S WHERE S.MBER_ID = #mberId#)
-		<isNotEmpty property="searchSortCnd">
-			,$searchSortCnd$
-		</isNotEmpty>
-		<isNotEmpty property="searchSortOrd">
-		 	$searchSortOrd$
-		</isNotEmpty>
+		ORDER BY A.REG_DATE DESC
 		LIMIT  #recordCountPerPage# OFFSET #firstIndex#	
 	</select>
 			
src/main/webapp/WEB-INF/jsp/sym/grd/mberGrdList.jsp
--- src/main/webapp/WEB-INF/jsp/sym/grd/mberGrdList.jsp
+++ src/main/webapp/WEB-INF/jsp/sym/grd/mberGrdList.jsp
@@ -52,7 +52,7 @@
 }
 
 // 등급제 적용 테스트
-function setMberGrdChk(mberId) {
+function getMberGrdChk(mberId) {
 	$.ajax({
         type: "POST",
         url: "/sym/grd/mberGrdChkAjax.do",
 
src/main/webapp/WEB-INF/jsp/web/grd/MberGrdHistListAjax.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/grd/MberGrdHistListAjax.jsp
@@ -0,0 +1,112 @@
+<%--
+  Class Name : SendNumberList.jsp
+  Description : 발신번호 리스트 조회 페이지
+  Modification Information
+
+      수정일         수정자                   수정내용
+    -------    --------    ---------------------------
+    2021.03.31    신명섭          최초 생성
+
+    Copyright (C) 2009 by ITN  All right reserved.
+--%>
+<%@ page contentType="text/html; charset=utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
+
+<script src="/publish/js/content.js"></script>
+<script>
+$(document).ready(function(){
+	/* 목록 정렬 항목 아이콘 표시 */ 
+	var searchSortCnd = $("[name='searchSortCnd']").val();
+	var searchSortOrd = $("[name='searchSortOrd']").val();
+	if (searchSortCnd != "" && searchSortOrd != "" && searchSortCnd  != undefined && searchSortOrd  != undefined) {
+		var $sort_div = $("#sort_"+ searchSortCnd);
+		var sortClass = 'sortBtn' ;
+		if (searchSortOrd == "desc") sortClass = "sortBtnDesc";
+		$sort_div.replaceClass('sortBtn' , sortClass) ;
+		$sort_div.attr("sortOrd", searchSortOrd);
+	};
+	
+	// 정렬 항목 이벤트
+	$(".sort").click(function(e) {
+		listSortOrd(this);
+	});
+	
+	//목록 정렬 항목 클릭
+	function listSortOrd(obj){
+		var sortOrd = $(obj).attr("sortOrd");
+		var sortCnd = $(obj).attr("id");
+		 
+		$("[name='searchSortCnd']").val(sortCnd.substring(5)); // 구분자 제거
+		if (sortOrd == "desc") $("[name='searchSortOrd']").val("asc");
+		else $("[name='searchSortOrd']").val("desc");
+		payUserListAjax('1');  //각 JSP마다 다를때 메소드 정의해 줘야됨
+	};
+});
+
+</script>
+
+			<fmt:formatNumber type="number" maxFractionDigits="3" value="${totAmt}" var="totAmtTitle" />
+			<div class="candidate_table">
+				<p class="level_tx" id="grdPopArea">등급 : <c:out value="${grdSetNm}"/>(<c:out value="${totAmtTitle}"/>원) </p>
+				<div class="tb_wrap">
+					<table class="tType4">
+						<colgroup>
+							<col style="width: 50px;">
+							<col style="width: 40%;">
+							<col style="width: 20%;">
+							<col style="width: 20%;">
+							<col style="width: 20%;">
+						</colgroup>
+						<thead>
+							<tr class="level_title">
+								<th>구분</th>
+								<th>결제일시</th>
+								<th>결제금액</th>
+								<th>누적금액</th>
+								<th>등급</th>
+							</tr>
+						</thead>
+						<tbody>
+						<c:choose>
+							<c:when test="${not empty mberGrdHistList}">
+								<c:forEach var="result" items="${mberGrdHistList}" varStatus="status">						
+							<tr class="level_text">
+								<td>1</td>
+								<td><c:out value="${result.regDate}"/></td>
+								<td>
+									<fmt:formatNumber type="number" maxFractionDigits="3" value="${result.amt}" var="amt" />
+									<c:out value="${amt}"/>								
+								</td>
+								<td>
+									<fmt:formatNumber type="number" maxFractionDigits="3" value="${result.totAmt}" var="totAmt" />
+									<c:out value="${totAmt}"/>								
+								</td>
+								<td><c:out value="${result.grdSetNm}"/></td>
+							</tr>
+								</c:forEach>
+							</c:when>
+							<c:otherwise>
+								<tr>
+									<td colspan="5">
+										검색 결과가 없습니다.
+									</td>
+								</tr>
+							</c:otherwise>
+						</c:choose>							
+						</tbody>
+					</table>
+				</div>
+			</div>
+
+			<!-- pagination -->
+			<c:if test="${!empty mberGrdHistList}">
+				<ul class="pagination">
+					<ui:pagination paginationInfo = "${paginationInfo}"  type="imageWeb" jsFunction="mberGrdHistListAjax" />
+				</ul>
+			</c:if>
+			<!-- pagination -->
src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp
--- src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp
@@ -17,6 +17,9 @@
 $(document).ready(function(){
 	payUserListAjax(1);
 	
+	// 등급제 대상 여부
+	//getMberGrdChk();	
+	
 	var date = new Date() ;
 	//이전달 첫날/마지막날 조회
 	if(date.getMonth()+1 == 1){
@@ -93,8 +96,78 @@
 		$('#faxClick').trigger('click');
 	});
 }
+
+// 등급제 누적결제액 세부내역
+function mberGrdHistListAjax(pageNo){
+	document.levelForm.pageIndex.value = pageNo;
+		
+	var sendData= $(document.levelForm).serializeArray();
+	$("#mberGrdHistListLoad").load("/web/member/grd/mberGrdHistListAjax.do", sendData ,function(response, status, xhr){
+
+	});
+}
+
+// 등급제 대상 여부
+function getMberGrdChk() {
+	$.ajax({
+        type: "POST",
+        url: "/web/member/grd/mberGrdChkAjax.do",
+        data: {},
+        dataType:'json',
+        async: false,
+        success: function (data) {
+			if (data.isSuccess) {
+				// 등급제 누적결제액 세부내역
+				$("#levelSubTitle").html("(" + data.rtnMberGrdVO.grdDate + " ~ 현재)");				
+				document.levelForm.grdSetNm.value = data.rtnMberGrdVO.grdSetNm;
+				document.levelForm.totAmt.value = data.rtnMberGrdVO.totAmt;
+				mberGrdHistListAjax(1, data.rtnMberGrdVO.grdSetNm, data.rtnMberGrdVO.totAmt);	
+
+				// 등급제 아이콘 버튼 노출여부
+				var sHtml = "";
+				sHtml += "<img src='/publish/images/level/level_icon/level_small/" + data.rtnMberGrdVO.grdSetIcon + "_small_icon.png' alt='등급별 스몰 아이콘'>";
+				sHtml += "<p>" + data.rtnMberGrdVO.grdSetNm + "</p>";
+				$("#levelIconBtn").html(sHtml);
+				$("#levelIconBtn").show();
+			} 
+			else {
+				//alert("Msg : " + data.msg);
+			}
+		},
+        error: function (e) { 
+        	//alert("ERROR : " + JSON.stringify(e)); 
+        }
+    });				
+}	
+
 </script>
 
+<form id="levelForm" name="levelForm" method="post">
+	<input type="hidden" id="pageType" name="pageType"  value=""/>
+	<input type="hidden" id="pageIndex" name="pageIndex" value=""/>
+	<input type="hidden" id="grdSetNm" name="grdSetNm" value=""/>
+	<input type="hidden" id="totAmt" name="totAmt" value=""/>
+</form>
+
+<!-- 등급 및 누적결제액 확인 팝업 data-tooltip:level_check_popup01 시작 -->
+<div class="tooltip-wrap level_popup">
+	<div class="popup-com candidate_layer level_check_popup01" tabindex="0" data-tooltip-con="level_check_popup01" data-focus="level_check_popup01" data-focus-prev="level_check_popup01-close" style="width: 680px;">
+		<div class="popup_heading">
+			<p>누적결제액 세부내역<span id="levelSubTitle"></span></p>
+			<button type="button" class="tooltip-close" data-focus="level_check_popup01-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+		</div>
+		<div class="layer_in" id="mberGrdHistListLoad" style="padding-bottom: 0px;">
+		
+		</div>
+		
+		<div class="popup_btn_wrap2" style="margin-bottom: 30px;">
+			<button type="button" class="tooltip-close" data-focus="level_check_popup01-close">닫기</button>                      
+		</div>
+		
+	</div>
+</div>
+<!-- 등급 및 누적결제액 확인 팝업 data-tooltip:level_check_popup01 끝 -->
+		
 <!-- 문자 팝업 -->
 <div class="tooltip-wrap">
 	<div class="popup-com adr_layer rev_popup01" tabindex="0" data-tooltip-con="rev_popup01" 
@@ -180,6 +253,8 @@
 			</div>
 			<div class="my_dashboard">
 				<div class="my_dashboard_cont1">
+					<button type="button" class="level_icon" data-tooltip="level_check_popup01" id="levelIconBtn" style="display: none;">
+					</button>
 					<div>
 						<p>
 							<span><c:out value="${mberManageVO.mberNm}"/></span> 회원님 반갑습니다
Add a comment
List