rosewiper 2023-11-23
선거문자 후보자 등록 변경 및 세금계산서 동기화 기능 변경 예약 취소 오류시 문자발송 상태 및 환불 처리 되도록 로직 수정
예약 취소 오류시 문자발송 상태 및 환불 처리 되도록 로직 수정
@9ded699d5f4244e044da568b49c9ae5bf550b23b
src/main/java/itn/let/mjo/msgcampain/service/MjonCandidateService.java
--- src/main/java/itn/let/mjo/msgcampain/service/MjonCandidateService.java
+++ src/main/java/itn/let/mjo/msgcampain/service/MjonCandidateService.java
@@ -13,4 +13,7 @@
 	
 	// 선거문자 후보자 삭제 처리
 	public int deleteCandidateDataInfo(MjonCandidateVO mjonCandidateVO) throws Exception;
+	
+	// 선거문자 후보자 등록/수정시 회원정보 테이블 세금계산서 정보 수정해주기
+	public int updateTaxBillMemberInfo(MjonCandidateVO mjonCandidateVO) throws Exception;
 }
src/main/java/itn/let/mjo/msgcampain/service/MjonCandidateVO.java
--- src/main/java/itn/let/mjo/msgcampain/service/MjonCandidateVO.java
+++ src/main/java/itn/let/mjo/msgcampain/service/MjonCandidateVO.java
@@ -21,7 +21,8 @@
 	private String lastUpdusrId;
 	
 	private String dataType;
-	
+	private String emailFullStr;
+	private String regidentNoFullStr;
 	
 	public int getCandidateId() {
 		return candidateId;
@@ -120,10 +121,18 @@
 	public void setDataType(String dataType) {
 		this.dataType = dataType;
 	}
-	
-	
-	
-	
-	
+	public String getEmailFullStr() {
+		return emailFullStr;
+	}
+	public void setEmailFullStr(String emailFullStr) {
+		this.emailFullStr = emailFullStr;
+	}
+	public String getRegidentNoFullStr() {
+		return regidentNoFullStr;
+	}
+	public void setRegidentNoFullStr(String regidentNoFullStr) {
+		this.regidentNoFullStr = regidentNoFullStr;
+	}
+
 	
 }
src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateDAO.java
--- src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateDAO.java
+++ src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateDAO.java
@@ -27,4 +27,10 @@
 		
 		return update("mjonCandidateDAO.deleteCandidateDataInfo", mjonCandidateVO);
 	}	
+	
+	// 선거문자 후보자 등록/수정시 회원정보 테이블 세금계산서 정보 수정해주기
+	public int updateTaxBillMemberInfo(MjonCandidateVO mjonCandidateVO) throws Exception{
+		
+		return update("mjonCandidateDAO.updateTaxBillMemberInfo", mjonCandidateVO);
+	}
 }
src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateServiceImpl.java
--- src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateServiceImpl.java
+++ src/main/java/itn/let/mjo/msgcampain/service/impl/MjonCandidateServiceImpl.java
@@ -33,4 +33,9 @@
 		
 		return mjonCandidateDAO.deleteCandidateDataInfo(mjonCandidateVO);
 	}
+	
+	// 선거문자 후보자 등록/수정시 회원정보 테이블 세금계산서 정보 수정해주기
+	public int updateTaxBillMemberInfo(MjonCandidateVO mjonCandidateVO) throws Exception{
+		return mjonCandidateDAO.updateTaxBillMemberInfo(mjonCandidateVO);
+	}
 }
src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainDataController.java
--- src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainDataController.java
+++ src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainDataController.java
@@ -570,6 +570,7 @@
 		model.addAttribute("resultPhoList", resultPhoList);
 		paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0);
 		model.addAttribute("paginationInfo", paginationInfo);
+		model.addAttribute("mberManageVO", mberManageVO);
 		
 		return "web/msgcampain/MsgDataSMLView";
 	}
@@ -598,65 +599,97 @@
 		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
     	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
     	
-    	if(userId.equals("")) {
+    	try {
     		
-    		modelAndView.addObject("result", "loginFail");
-    		modelAndView.addObject("message", "로그인이 필요합니다.");
-    		return modelAndView;
+    		if(userId.equals("")) {
+        		
+        		modelAndView.addObject("result", "loginFail");
+        		modelAndView.addObject("message", "로그인이 필요합니다.");
+        		return modelAndView;
+        		
+        	}else {
+        		
+        		mjonCandidateVO.setMberId(userId);
+        		
+        	}
     		
-    	}else {
+        	MjonVOParamXssValues XssParam = new MjonVOParamXssValues();
+        	
+        	int XssCnt = XssParam.buildUri(mjonCandidateVO);
+        	
+        	if(XssCnt > 0) {
+        		
+        		modelAndView.addObject("result", "fail");
+        		modelAndView.addObject("message", "후보자 등록 정보에 잘못된 문자열이 있습니다.");
+        		return modelAndView;
+        		
+        	}
+        	
+    		int resultCnt = 0;
+    		String dataType = mjonCandidateVO.getDataType();
     		
-    		mjonCandidateVO.setMberId(userId);
+    		//주민번호 앞, 뒷 자리 암호화 처리하기
+    		String regidentNo1 = egovCryptoUtil.encrypt(mjonCandidateVO.getRegidentNo1());
+    		String regidentNo2 = egovCryptoUtil.encrypt(mjonCandidateVO.getRegidentNo2());
     		
-    	}
-		
-    	MjonVOParamXssValues XssParam = new MjonVOParamXssValues();
-    	
-    	int XssCnt = XssParam.buildUri(mjonCandidateVO);
-    	
-    	if(XssCnt > 0) {
+    		mjonCandidateVO.setRegidentNo1(regidentNo1);
+    		mjonCandidateVO.setRegidentNo2(regidentNo2);
     		
-    		modelAndView.addObject("result", "fail");
-    		modelAndView.addObject("message", "후보자 등록 정보에 잘못된 문자열이 있습니다.");
-    		return modelAndView;
+    		if(dataType.equals("Upt")) {
+    			
+    			resultCnt = mjonCandidateService.updateCandidateDataInfo(mjonCandidateVO);
+    			
+    		}else {
+    			
+    			resultCnt = mjonCandidateService.insertCandidateDataInfo(mjonCandidateVO);
+    			
+    		}
     		
-    	}
-    	
-		int resultCnt = 0;
-		String dataType = mjonCandidateVO.getDataType();
-		
-		//주민번호 앞, 뒷 자리 암호화 처리하기
-		String regidentNo1 = egovCryptoUtil.encrypt(mjonCandidateVO.getRegidentNo1());
-		String regidentNo2 = egovCryptoUtil.encrypt(mjonCandidateVO.getRegidentNo2());
-		
-		mjonCandidateVO.setRegidentNo1(regidentNo1);
-		mjonCandidateVO.setRegidentNo2(regidentNo2);
-		
-		if(dataType.equals("Upt")) {
+    		/*
+    		 * 20231122 우영두 수정
+    		 * 후보자 등록/수정시 후보자 정보에 대한 세금계산서 정보가 등록되어야 함. 
+    		 * 선거문자를 이용하는 개인 회원은 세금계산서를 후보자에 대한 것을 신청하기 때문에 회원정보의 세금계산서 정보를 업데이트 하도록 함.
+    		 * 
+    		 * */
+    		if(resultCnt > 0) {
+    			
+    			//후보자 담당자 이메일 주소 합쳐주기
+    			mjonCandidateVO.setEmailFullStr(mjonCandidateVO.getEmail() + "@" + mjonCandidateVO.getEmailDomain());
+    			
+    			// 주민번호 복호화 하기
+    			regidentNo1 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1());
+    	    	regidentNo2 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2());
+    	    	
+    	    	mjonCandidateVO.setRegidentNoFullStr(regidentNo1+regidentNo2);
+    			
+    			mjonCandidateService.updateTaxBillMemberInfo(mjonCandidateVO);
+    			
+    		}
+    		
+    		if(resultCnt > 0 && dataType.equals("Upt")) {
+    			
+    			modelAndView.addObject("result", "success");
+    			modelAndView.addObject("message", "후보자 정보의 수정이 완료되었습니다.");
+    			
+    		}else if(resultCnt > 0 && dataType.equals("Reg")) {
+    			
+    			modelAndView.addObject("result", "success");
+    			modelAndView.addObject("message", "후보자 등록이 완료되었습니다.");
+    			
+    		}else {
+    			
+    			modelAndView.addObject("result", "fail");
+    			modelAndView.addObject("message", "후보자 등록에 오류가 발생하였습니다.");
+    			
+    		}
 			
-			resultCnt = mjonCandidateService.updateCandidateDataInfo(mjonCandidateVO);
-			
-		}else {
-			
-			resultCnt = mjonCandidateService.insertCandidateDataInfo(mjonCandidateVO);
-			
-		}
-		
-		
-		if(resultCnt > 0 && dataType.equals("Upt")) {
-			
-			modelAndView.addObject("result", "success");
-			modelAndView.addObject("message", "후보자 정보의 수정이 완료되었습니다.");
-			
-		}else if(resultCnt > 0 && dataType.equals("Reg")) {
-			
-			modelAndView.addObject("result", "success");
-			modelAndView.addObject("message", "후보자 등록이 완료되었습니다.");
-			
-		}else {
+		} catch (Exception e) {
+			System.out.println("insertCandidateDataInfoAjax Controller Error!!! " + e);
 			
 			modelAndView.addObject("result", "fail");
 			modelAndView.addObject("message", "후보자 등록에 오류가 발생하였습니다.");
+			
+			return modelAndView;
 			
 		}
 		
@@ -686,40 +719,47 @@
 		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
     	String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
     	
-    	if(userId.equals("")) {
+    	try {
+			
+    		if(userId.equals("")) {
+        		
+        		modelAndView.addObject("result", "loginFail");
+        		modelAndView.addObject("message", "로그인이 필요합니다.");
+        		return modelAndView;
+        		
+        	}else {
+        		
+        		mjonCandidateVO.setMberId(userId);
+        		
+        	}
     		
-    		modelAndView.addObject("result", "loginFail");
-    		modelAndView.addObject("message", "로그인이 필요합니다.");
-    		return modelAndView;
+        	MjonVOParamXssValues XssParam = new MjonVOParamXssValues();
+        	
+        	int XssCnt = XssParam.buildUri(mjonCandidateVO);
+        	
+    		int resultCnt = 0;
     		
-    	}else {
+    			resultCnt = mjonCandidateService.deleteCandidateDataInfo(mjonCandidateVO);
+    			
+    		if(resultCnt > 0 ) {
+    			
+    			modelAndView.addObject("result", "success");
+    			modelAndView.addObject("message", "후보자 정보의 삭제 완료되었습니다.");
+    			
+    			
+    		}else {
+    			
+    			modelAndView.addObject("result", "fail");
+    			modelAndView.addObject("message", "후보자 삭제에 오류가 발생하였습니다.");
+    			
+    		}
     		
-    		mjonCandidateVO.setMberId(userId);
-    		
-    	}
-		
-    	MjonVOParamXssValues XssParam = new MjonVOParamXssValues();
-    	
-    	int XssCnt = XssParam.buildUri(mjonCandidateVO);
-    	
-    	
-		int resultCnt = 0;
-		
-			
-			resultCnt = mjonCandidateService.deleteCandidateDataInfo(mjonCandidateVO);
-			
-		
-		
-		if(resultCnt > 0 ) {
-			
-			modelAndView.addObject("result", "success");
-			modelAndView.addObject("message", "후보자 정보의 삭제 완료되었습니다.");
-			
-			
-		}else {
+		} catch (Exception e) {
+			System.out.println("deleteCandidateDataInfoAjax Controller Error!!! " + e);
 			
 			modelAndView.addObject("result", "fail");
 			modelAndView.addObject("message", "후보자 삭제에 오류가 발생하였습니다.");
+			return modelAndView;
 			
 		}
 		
src/main/java/itn/let/mjo/pay/web/MjonPayController.java
--- src/main/java/itn/let/mjo/pay/web/MjonPayController.java
+++ src/main/java/itn/let/mjo/pay/web/MjonPayController.java
@@ -3425,10 +3425,77 @@
 		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
 		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getUniqId());
 		
-    	mberManageVO.setUniqId(userId);
-    	mberManageService.updateTaxbill(mberManageVO);
-    	
-    	redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update"));
+		if(userId.equals("")) {
+			
+			redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+			return "redirect:/web/member/pay/BillPub.do";
+			
+		}
+		
+		try {
+			
+			//세금계산서 정보 수정해주기
+			mberManageVO.setUniqId(userId);
+	    	mberManageService.updateTaxbill(mberManageVO);
+	    	
+	    	/*
+	    	 * 20231122 우영두 기능 추가
+	    	 * 개인회원인 경우 
+	    	 * 세금계산서 타입이 개인인 경우
+	    	 * 후보자 정보가 있는지 확인하여 후보자 정보가 있다면 세금계산서 정보와 일치하도록 변경된 정보를 후보자 정보도 수정해준다.
+	    	 * */
+			String mberId = loginVO.getId();
+			String taxCNm = mberManageVO.getTaxCNm();
+			
+	    	MberManageVO tmpMberManageVO = mjonMsgDataService.selectMberManageInfo(mberId);
+	    	String dept = tmpMberManageVO.getDept();
+	    	
+	    	if(dept.equals("p") && taxCNm != null && taxCNm.length() > 0) {
+	    		
+	    		MjonCandidateVO mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(mberId);
+	    		String candidateNm = mjonCandidateVO.getCandidateNm();
+	    		if(candidateNm != null && candidateNm.length() > 0) {
+	    			
+	    			MjonCandidateVO updtCandidateVO = new MjonCandidateVO();
+	    			
+	    			//이메일 정보 아이디/도메인 정보 분리
+	    			String email = mberManageVO.getTaxMngEmail().split("@")[0];
+	    			String emailDomain = mberManageVO.getTaxMngEmail().split("@")[1];
+	    			
+	    			/*
+	    			 * 주민번호 앞, 뒷 자리 암호화 처리하기
+	    			 * 세금계산서에서 주민번호는 별도로 암/복호화 처리를 안하고 저장함
+	    			 * 기본 가비아 암호화 솔루션 처리로 안한것 같음, 후보자 정보 쪽에서는 전자정부 프레임워크의 암/복호화 적용하여 저장함.
+	    			 * 
+	    			 * */
+	        		String regidentNo1 = egovCryptoUtil.encrypt(mberManageVO.getTaxCIhidNum().substring(0, 6));
+	        		String regidentNo2 = egovCryptoUtil.encrypt(mberManageVO.getTaxCIhidNum().substring(6, 13));
+	        		
+	        		updtCandidateVO.setMberId(mberId);
+	        		updtCandidateVO.setCandidateNm(taxCNm); 
+	        		updtCandidateVO.setRegidentNo1(regidentNo1);
+	        		updtCandidateVO.setRegidentNo2(regidentNo2);
+	        		updtCandidateVO.setCandidateAddr(mberManageVO.getTaxCAddr());
+	        		updtCandidateVO.setManagerNm(mberManageVO.getTaxMngNm());
+	        		updtCandidateVO.setPhoneNo(mberManageVO.getTaxMngPhoneNum());
+	        		updtCandidateVO.setEmail(email);
+	        		updtCandidateVO.setEmailDomain(emailDomain);
+	        		updtCandidateVO.setLastUpdusrId(mberId);
+	        		
+	        		int resultCnt = mjonCandidateService.updateCandidateDataInfo(updtCandidateVO);
+	    			
+	    		}
+	    		
+	    	}
+	    	
+	    	redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update"));
+			
+		} catch (Exception e) {
+			System.out.println("updateTaxbill Controller Error!!! " + e);
+			
+			redirectAttributes.addFlashAttribute("message", "세금계산서 정보 수정 중 오류가 발생하였습니다.");
+	    	return "redirect:/web/member/pay/BillPub.do";
+		}
     	
     	return "redirect:/web/member/pay/BillPub.do";
 	}
src/main/java/itn/let/mjo/reservmsg/service/impl/MjonReservMsgDAO.java
--- src/main/java/itn/let/mjo/reservmsg/service/impl/MjonReservMsgDAO.java
+++ src/main/java/itn/let/mjo/reservmsg/service/impl/MjonReservMsgDAO.java
@@ -356,4 +356,17 @@
 		
 		return update("MjonReservMsgDAO.updateReserveTimeBizMsgSeqListByMsgSeq", mjonResvMsgVO);
 	}
+	
+	/**
+	* @Method Name : selectMjonMsgGroupDataByGroupId
+	* @작성일 : 2023. 11. 23.
+	* @작성자 :  우영두
+	* @Method 설명 : 문자발송 그룹 데이터 테이블 데이터 조회 , 예약취소시 문자발송 정보 조회를 위해 사용
+	* 예약취소시 전송사별 발송테이블의 데이터 삭제는 완료되었으나, mj_msg_data 테이블의 Deadlock 상황으로 오류 발생시 처리를 위해서 사용
+	*/
+	public MjonResvMsgVO selectMjonMsgGroupDataChkByGroupId(MjonResvMsgVO mjonResvMsgVO) {
+		
+		return (MjonResvMsgVO) select("MjonReservMsgDAO.selectMjonMsgGroupDataChkByGroupId", mjonResvMsgVO);
+	}
+	
 }
src/main/java/itn/let/mjo/reservmsg/service/impl/MjonReservMsgServiceImpl.java
--- src/main/java/itn/let/mjo/reservmsg/service/impl/MjonReservMsgServiceImpl.java
+++ src/main/java/itn/let/mjo/reservmsg/service/impl/MjonReservMsgServiceImpl.java
@@ -85,6 +85,9 @@
 		int result = 0;
 		
 		try {
+			System.out.println("================= 예약 취소 처리 시작============================");
+			System.out.println("================= 메세지 그룹 아이디============================" + mjonResvMsgVO.getMsgGroupId());
+			
 			
 			String agentCode = mjonResvMsgVO.getAgentCode();	//전송사 코드번호
 			String msgType = mjonResvMsgVO.getMsgType();		//문자 종류 - 4:단문, 6:장문
@@ -102,72 +105,58 @@
 			
 			mjonResvMsgVO.setUserDataList(userDataList);
 			
-			int ihResult = 0;
-			int imoResult = 0;
+			//int ihResult = 0;
+			//int imoResult = 0;
 			int bizResult = 0;
 			int jjResult = 0;
 			int ivtResult = 0;
-			int FHSmsResult = 0;
-			int FHMmsResult = 0;
+			//int FHSmsResult = 0;
+			//int FHMmsResult = 0;
 			int jjB01Result = 0;
 			int jjB02Result = 0;
 			
 			//아이하트 예약취소 삭제
-			ihResult = mjonReservMsgDAO.deleteIHeartMsgSeqListByMsgSeq(mjonResvMsgVO);
+			//ihResult = mjonReservMsgDAO.deleteIHeartMsgSeqListByMsgSeq(mjonResvMsgVO);
 			
 			//현대퓨처넷 단문예약취소 삭제
-			FHSmsResult = mjonReservMsgDAO.deleteHFNSmsMsgSeqListByMsgSeq(mjonResvMsgVO);
+			//FHSmsResult = mjonReservMsgDAO.deleteHFNSmsMsgSeqListByMsgSeq(mjonResvMsgVO);
 
 			//현대퓨처넷 장문/그림 문예약취소 삭제
-			FHMmsResult = mjonReservMsgDAO.deleteHFNMmsMsgSeqListByMsgSeq(mjonResvMsgVO);
+			//FHMmsResult = mjonReservMsgDAO.deleteHFNMmsMsgSeqListByMsgSeq(mjonResvMsgVO);
 			
 			//아이엠오 예약취소 삭제
-			imoResult = mjonReservMsgDAO.deleteIMOMsgSeqListByMsgSeq(mjonResvMsgVO);
+			//imoResult = mjonReservMsgDAO.deleteIMOMsgSeqListByMsgSeq(mjonResvMsgVO);
 			
 			//비트뿌리오 예약취소 삭제
 			bizResult = mjonReservMsgDAO.deleteBizMsgSeqListByMsgSeq(mjonResvMsgVO);
+			System.out.println("============================== 다우기술 예약 취소 건수 ::: "+bizResult);
 			
 			//제이제이 예약취소 삭제
 			jjResult = mjonReservMsgDAO.deleteJJMsgSeqListByMsgSeq(mjonResvMsgVO);
+			System.out.println("============================== 제이제이 예약 취소 건수 ::: "+jjResult);
 			
 			//인비토 예약취소 삭제
 			ivtResult = mjonReservMsgDAO.deleteIVTMsgSeqListByMsgSeq(mjonResvMsgVO);
+			System.out.println("============================== 인비토 예약 취소 건수 ::: "+ivtResult);
 			
 			//제이제이 B01 예약취소 삭제
 			jjB01Result = mjonReservMsgDAO.deleteJJB01MsgSeqListByMsgSeq(mjonResvMsgVO);
+			System.out.println("============================== 제이제이 B01 예약 취소 건수 ::: "+jjB01Result);
 			
 			//제이제이 B02 예약취소 삭제
 			jjB02Result = mjonReservMsgDAO.deleteJJB02MsgSeqListByMsgSeq(mjonResvMsgVO);
+			System.out.println("============================== 제이제이 B02 예약 취소 건수 ::: "+jjB02Result);
 			
 			//삭제 결과 합산
-			result = ihResult + FHSmsResult + FHMmsResult + imoResult + bizResult +jjResult + ivtResult + jjB01Result + jjB02Result;
+			//result = ihResult + FHSmsResult + FHMmsResult + imoResult + bizResult +jjResult + ivtResult + jjB01Result + jjB02Result;
+			result = bizResult +jjResult + ivtResult + jjB01Result + jjB02Result;
+			System.out.println("============================== 총 예약 취소 건수 ::: "+result);
 			
-			//각 전송사별 문자 발송 테이블에서 데이터 삭제 처리
-			/*if(agentCode.equals("01")) { //아이하트 메세지 삭제
-				
-				result = mjonReservMsgDAO.deleteIHeartMsgSeqListByMsgSeq(mjonResvMsgVO);
-				
-			}else if(agentCode.equals("02")) { //현대퓨쳐넷 메세지 삭제
-				
-				if(msgType.equals("4")) { //단문 삭제
-					
-					result = mjonReservMsgDAO.deleteHFNSmsMsgSeqListByMsgSeq(mjonResvMsgVO);
-					
-				}else { //장문, 그림 삭제
-					
-					result = mjonReservMsgDAO.deleteHFNMmsMsgSeqListByMsgSeq(mjonResvMsgVO);
-					
-				}
-				
-			}else { //아이엠오 메세지 삭제
-				
-				result = mjonReservMsgDAO.deleteIMOMsgSeqListByMsgSeq(mjonResvMsgVO);
-				
-			}*/
 			
 			//예약 취소 환불 처리
 			if(result > 0) {
 				
+				System.out.println("========================예약취소 상태값 변경 및 환불 처리============================");
 				//mj_msg_data 테이블 예약 취소 값 수정
 				mjonReservMsgDAO.updateResvMsgCancelDataFlag(mjonResvMsgVO);
 				
@@ -252,6 +241,102 @@
 					
 				}
 				
+			}else if(result == 0){
+				
+				//문자 발송 그룹 테이블의 데이터에 예약 취소가 되었는지 조회
+				MjonResvMsgVO tmpMjonResvMsgVO = mjonReservMsgDAO.selectMjonMsgGroupDataChkByGroupId(mjonResvMsgVO);
+				String reserveCYn = tmpMjonResvMsgVO.getReserveCYn();
+				
+				if(reserveCYn.equals("N")) {
+					
+					result = Integer.parseInt(tmpMjonResvMsgVO.getMsgGroupCnt());
+					
+					System.out.println("========================예약취소 상태값 변경 및 환불 처리============================");
+					//mj_msg_data 테이블 예약 취소 값 수정
+					mjonReservMsgDAO.updateResvMsgCancelDataFlag(mjonResvMsgVO);
+					
+					//mj_msg_group_data 테이블 예약 취소 값 수정
+					mjonReservMsgDAO.updateResvMsgCancelGroupFlag(mjonResvMsgVO);
+					
+					MjonMsgVO mjonMsgVO = mjonReservMsgDAO.selectMjonMsgGroupData(mjonResvMsgVO);
+					
+					//문자 발송 캐시 차감 해주기
+					MjonPayVO mjonPayVO = new MjonPayVO(); 
+					
+					mjonPayVO.setCashId(idgenMjonCashId.getNextStringId());
+					mjonPayVO.setUserId(mjonMsgVO.getUserId());
+					mjonPayVO.setCash(Float.parseFloat(mjonMsgVO.getTotPrice()));
+					mjonPayVO.setFrstRegisterId(mjonMsgVO.getUserId());
+					mjonPayVO.setMemo("예약문자 취소 " + result + "건  환불");
+					mjonPayVO.setMsgGroupId(mjonMsgVO.getMsgGroupId());
+					
+					mjonPayDAO.insertCash(mjonPayVO); //캐시 환불 
+					mjonPayDAO.updateMemberCash(mjonPayVO); //회원정보 업데이트
+					
+					String eventYn = mjonMsgVO.getEventYn();
+					
+					if(eventYn.equals("Y")) {//이벤트 단가로 발송한 문자인 경우에만 이벤트 환불 처리해줌
+						
+						//이벤트 회원의 경우 이벤트 캐시도 환불 처리해줌.
+						MjonEventVO mjonEventVO = new MjonEventVO();
+						mjonEventVO.setMberId(mjonMsgVO.getUserId());
+						MjonEventVO eventMberInfo = mjonEventDAO.selectEventMsgMberDefaultInfo(mjonEventVO);
+						
+						float eventRemainCash = 0;
+						boolean compareEndDate = false;
+						
+						if(eventMberInfo != null) {
+							
+							String eventEndDate = eventMberInfo.getEventEndDate(); //이벤트 종료 일자
+							String eventStatus = eventMberInfo.getEventStatus();	//이벤트 진행 상태
+							
+							
+							/**
+							 * MJUtil.getCompareDate()
+							 * 현재 날짜와 파라미터 전달 날짜를 비교
+							 * 전달날짜를 지난경우 False를 리턴함.
+							 * 현재날짜 이전 혹은 같은 날짜면 True를 리턴함.
+							 * 
+							 * */
+							
+							if(eventStatus.equals("Y") || eventStatus.equals("E")) {//현재 이벤트를 진행 중이거나, 종료 된경우 환불 처리해줌
+								
+								if(eventEndDate != null) {//이벤트 종료일이 지나지 않은 회원만 환불 처리해줌.
+									compareEndDate = MJUtil.getCompareDate(eventEndDate);
+									eventRemainCash = (float) eventMberInfo.getEventRemainCash();
+									
+									
+									if(compareEndDate) {//현재 시간이 이벤트 종료일이 지나지 않았다면
+									
+										float totEventRemainCash = eventRemainCash + Float.parseFloat(mjonMsgVO.getTotPrice()); //남은 이벤트 캐시 금액에 환불해줄 캐시 금액을 더해준다.
+										
+										//이벤트 상태값을 종료로 변경한다.
+										mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId());
+										
+										if(eventStatus.equals("E")) {//이벤트가 종료 된 상태에서 예약 취소를 진행하는 경우 이벤트 종료에서 진행으로 변경 후 캐시 환불 처리
+										
+											mjonEventVO.setEventStatus("Y");
+											mjonEventVO.setEventMemo("예약문자 취소로 인한 환물 및 종료되었던 이벤트 진행으로 변경");
+											
+										}else {//진행중인 경우 기존 상태값 그대로 적용해준다.
+											
+											mjonEventVO.setEventStatus(eventStatus);
+											
+										}
+										
+										mjonEventVO.setEventRemainCash(totEventRemainCash);
+										mjonEventDAO.updateEventEndStatus(mjonEventVO);
+										
+									}
+								}
+								
+							}
+							
+						}
+						
+					}
+				}
+				
 				
 			}
 			
src/main/java/itn/let/mjo/reservmsg/web/MjonReservMsgController.java
--- src/main/java/itn/let/mjo/reservmsg/web/MjonReservMsgController.java
+++ src/main/java/itn/let/mjo/reservmsg/web/MjonReservMsgController.java
@@ -513,7 +513,7 @@
 			
 		}else {
 			
-			modelAndView.addObject("message", "예약 발송 처리가 실패 되었습니다.");
+			modelAndView.addObject("message", "예약 발송 취소 처리가 실패 되었습니다. 잠시 후 다시 시도해 주세요.");
 			modelAndView.addObject("result", "fail");
 			
 		}
src/main/resources/egovframework/sqlmap/let/msg/MjonMsgCampainData_SQL_mysql.xml
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgCampainData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgCampainData_SQL_mysql.xml
@@ -37,7 +37,6 @@
 		              REGIDENT_NO2,
 		              CANDIDATE_ADDR,
 		              MANAGER_NM,
-		              OFFICE,
 		              PHONE_NO,
 		              EMAIL,
 		              EMAIL_DOMAIN,
@@ -54,7 +53,6 @@
 		              #regidentNo2#,
 		              #candidateAddr#,
 		              #managerNm#,
-		              #office#,
 		              #phoneNo#,
 		              #email#,
 		              #emailDomain#,
@@ -75,7 +73,6 @@
 		       REGIDENT_NO2    = #regidentNo2#,
 		       CANDIDATE_ADDR  = #candidateAddr#,
 		       MANAGER_NM      = #managerNm#,
-		       OFFICE          = #office#,
 		       PHONE_NO        = #phoneNo#,
 		       EMAIL           = #email#,
 		       EMAIL_DOMAIN    = #emailDomain#,
@@ -90,6 +87,19 @@
 		WHERE MBER_ID = #mberId#
 	</delete>
 	
+	<update id="mjonCandidateDAO.updateTaxBillMemberInfo" parameterClass="mjonCandidateVO">
+		
+		UPDATE LETTNGNRLMBER SET 
+			TAX_MNG_EMAIL = #emailFullStr#,
+			TAX_MNG_NM = #managerNm#,
+			TAX_MNG_PHONENUM = #phoneNo#,
+			TAX_C_NM = #candidateNm#,
+			TAX_C_IHIDNUM = #regidentNoFullStr#,
+			TAX_C_ADDR = #candidateAddr#
+		WHERE MBER_ID = #mberId#
+	
+	</update>
+	
 </sqlMap>  
 
 
src/main/resources/egovframework/sqlmap/let/msg/MjonMsgResv_SQL_mysql.xml
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgResv_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgResv_SQL_mysql.xml
@@ -938,6 +938,27 @@
 	
 	</update>
 	
+	<select id="MjonReservMsgDAO.selectMjonMsgGroupDataChkByGroupId" parameterClass="mjonMsgResvVO" resultClass="mjonMsgResvVO">
+		
+		SELECT MSG_GROUP_ID AS msgGroupId,
+		       USER_ID AS userId,
+		       MSG_GROUP_CNT AS msgGroupCnt,
+		       EACH_PRICE AS eachPrice,
+		       TOT_PRICE AS totPrice,
+		       RESERVE_YN AS reserveYn,
+		       RESERVE_C_YN AS reserveCYn,
+		       BEF_CASH AS befCash,
+		       BEF_POINT AS befPoint,
+		       CANCELDATE AS canceldate,
+		       EVENT_YN AS eventYn
+		FROM   MJ_MSG_GROUP_DATA A
+		WHERE  A.USER_ID = #userId#
+		AND A.RESERVE_YN = 'Y'
+		AND A.DEL_FLAG = 'N'
+		AND A.MSG_GROUP_ID = #msgGroupId#
+	
+	</select>
+	
 </sqlMap>  
 
 
src/main/webapp/WEB-INF/jsp/web/msgcampain/MsgDataSMLView.jsp
--- src/main/webapp/WEB-INF/jsp/web/msgcampain/MsgDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgcampain/MsgDataSMLView.jsp
@@ -2839,6 +2839,13 @@
 	
 }
 
+function fn_mberDeptChk(){
+	
+	alert("선거문자는 개인 회원만 이용 가능합니다.");
+	return false;
+	
+}
+
 
 function goToCustom(){
 	var form = document.goToCustomForm;
@@ -3254,11 +3261,9 @@
 				<input type="hidden" id="dataType" name="dataType" value="Reg"/>
 			
 				<div class="layer_in">
-	                <p class="adr_pop_title">선거문자는 반드시 <span class="c_002c9a">후보자 등록</span>을 하셔야만 이용 가능합니다.</p>
+	                <p class="adr_pop_title">선거문자는 반드시 <span class="c_002c9a">후보자 등록</span>을 하셔야만 이용 가능합니다. <br/>입력하신 내용은 세금계산서 발행을 위한 정보로만 사용됩니다.</p>
 					<div class="candidate_table">
 	                    <p>후보자</p>
-	                    
-	                    
 	                    <table>
 	                        <caption>후보자 등록을 위한 성명, 주민등록번호, 주소를 입력하는 표</caption>
 	                        <colgroup>
@@ -3309,13 +3314,13 @@
 	                                    <input type="text" id="managerNm" name="managerNm" value="<c:out value='${mjonCandidateVO.managerNm}'/>" placeholder="담당자 성명 입력" onfocus="this.placeholder=''" onblur="this.placeholder='담당자 성명 입력'" class="inputLight">
 	                                </td>
 	                            </tr>
-	                            <tr>
+	                            <%-- <tr>
 	                                <th scope="row">직위</th>
 	                                <td>
 	                                    <label for="office" class="label"></label>
 	                                    <input type="text" id="office" name="office" value="<c:out value='${mjonCandidateVO.office}'/>" placeholder="직위 입력" onfocus="this.placeholder=''" onblur="this.placeholder='직위 입력'" class="inputLight">
 	                                </td>
-	                            </tr>
+	                            </tr> --%>
 	                            <tr>
 	                                <th scope="row">휴대폰</th>
 	                                <td>
@@ -3828,6 +3833,9 @@
 	        		<c:when test="${empty LoginVO}">
 						<button type="button" class="btnType" onclick="javascript:fn_candidateLoginChk(); return false;"><i class="election_btn1"></i>후보자 등록</button>	        		
 	        		</c:when>
+	        		<c:when test="${not empty mberManageVO && mberManageVO.dept eq 'c'}">
+	        			<button type="button" class="btnType" onclick="javascript:fn_mberDeptChk(); return false;"><i class="election_btn1"></i>후보자 등록</button>
+	        		</c:when>
 	        		<c:otherwise>
 	        			<button type="button" class="btnType" data-tooltip="candidate_popup01"><i class="election_btn1"></i>후보자 등록</button>	
 	        		</c:otherwise>
Add a comment
List